diff --git a/.abi-compliance-history b/.abi-compliance-history new file mode 100644 index 00000000000..e55144a4d4f --- /dev/null +++ b/.abi-compliance-history @@ -0,0 +1,46 @@ +# Reference point for ABI compliance checks +# +# This file lists commits on the current branch that break ABI compatibility in +# ways that have been deemed acceptable (e.g., removing an extern function with +# no third-party uses). The primary intent of this file is to control the ABI +# compliance checks on the buildfarm, but it also serves as a central location +# to document the justification for each. +# +# In general, entries should be added reactively after an abi-compliance-check +# buildfarm failure. It is important to verify the details of the breakage +# match expectations, as the first entry listed will become the updated ABI +# baseline point. +# +# Add new entries by adding the output of the following to the top of the file: +# +# $ git log --pretty=format:"%H%n#%n# %s%n# %cd%n#%n# " $ABIBREAKGITHASH -1 --date=iso +# +# Be sure to replace "" with details of your change and +# why it is deemed acceptable. + +8114224719401da8e30131310f1a227781cac6eb +# +# For inplace update, send nontransactional invalidations. +# 2025-12-16 16:13:56 -0800 +# +# This changed PrepareToInvalidateCacheTuple() parameters. PGXN contained no +# calls to that function. + +95cce56696867c7629d12c3ba1da8edd5bedaa8e +# +# Check for CREATE privilege on the schema in CREATE STATISTICS. +# 2025-11-10 09:00:00 -0600 +# +# This commit added a parameter to CreateStatistics(). We are unaware of any +# impacted third-party code. + +983b3636259b1502121cbae99d8a2f0d0515d87d +# +# Fix re-distributing previously distributed invalidation messages during logical decoding. +# 2025-06-16 17:35:50 -0700 +# +# This is the original ABI baseline point for REL_14_STABLE. The first entry +# would ordinarily point to something just before the .0 release, but this file +# was first added in October 2025, and we're unlikely to act upon ABI breaks in +# released minor versions, so we've chosen to truncate the ABI history to start +# with the most recent ABI break documented in the git commit history. diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 4525c29aa46..7063525bb93 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -14,6 +14,9 @@ # # $ git log --pretty=format:"%H # %cd%n# %s" $PGINDENTGITHASH -1 --date=iso +e95010a9c0bad33cca21d762dd1151167993fd37 # 2025-10-21 09:56:26 -0500 +# Re-pgindent brin.c. + e1c1c30f635390b6a3ae4993e8cac213a33e6e3f # 2021-06-28 11:05:54 -0400 # Pre branch pgindent / pgperltidy run diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000000..08ac0bbb2bb --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,38 @@ +name: build + +on: + push: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + pull_request: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + - name: dependancy - linux + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt-get update + sudo apt-get install -y build-essential git lcov bison flex \ + libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ + tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ + libreadline-dev libedit-dev uuid-dev libossp-uuid-dev \ + libipc-run-perl libtime-hires-perl libtest-simple-perl \ + libicu-dev + - name: configure - linux + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + ./configure \ + --enable-cassert --enable-debug --enable-rpath --with-tcl \ + --with-python --with-gssapi --with-pam --with-ldap \ + --with-openssl --with-libedit-preferred --with-uuid=e2fs \ + --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ + --with-icu + - name: compile + run: make diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml new file mode 100644 index 00000000000..2cf0f04c621 --- /dev/null +++ b/.github/workflows/build_and_test.yml @@ -0,0 +1,104 @@ +name: "Build and Test" + +on: + workflow_dispatch: + +jobs: + regression: + runs-on: ubuntu-18.04 + strategy: + matrix: + container-os: [centos-7, centos-8] + + steps: + - uses: actions/checkout@v2 + - name: Build ${{ matrix.container-os }} Docker + if: ${{ matrix.container-os == 'centos-7' }} + run: | + docker build -t ivorysql-${{ matrix.container-os }}:latest -< a.login === commenter)) { + console.log(`Issue #${issueNumber} is already assigned to @${commenter}. No action needed.`); + return; + } + if (issue.state === 'closed') { + console.log(`Issue #${issueNumber} is closed. No assignment will be made.`); + await github.rest.issues.createComment({ + owner: repoOwner, + repo: repoName, + issue_number: issueNumber, + body: `Hi @${commenter}, issue #${issueNumber} is closed and cannot be assigned.` + }); + return; + } + try { + await github.rest.issues.addAssignees({ + owner: repoOwner, + repo: repoName, + issue_number: issueNumber, + assignees: [commenter] + }); + console.log(`Successfully assigned issue #${issueNumber} to @${commenter}.`); + } catch (error) { + console.error(`Error assigning issue #${issueNumber} to @${commenter}:`, error); + await github.rest.issues.createComment({ + owner: repoOwner, + repo: repoName, + issue_number: issueNumber, + body: `Hi @${commenter}, I encountered an error trying to assign you to issue #${issueNumber}. Please check permissions or assign manually. \nError: ${error.message}` + }); + } + } else { + console.log(`Comment by @${commenter} on issue #${issueNumber} was not an "/assign" command. Body: "${context.payload.comment.body.trim()}"`); + } diff --git a/.github/workflows/oracle_pg_regression.yml b/.github/workflows/oracle_pg_regression.yml new file mode 100644 index 00000000000..b8dbc5b57ae --- /dev/null +++ b/.github/workflows/oracle_pg_regression.yml @@ -0,0 +1,59 @@ +name: oracle_pg_regression + +on: + push: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + pull_request: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + +jobs: + oracle_pg_regression: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + - name: dependancy + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt-get update + sudo apt-get install -y build-essential git lcov bison flex \ + libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ + tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ + libreadline-dev libedit-dev uuid-dev libossp-uuid-dev \ + libipc-run-perl libtime-hires-perl libtest-simple-perl \ + libicu-dev + - name: configure - linux + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ + ./cpanm --sudo IPC::Run && \ + ./configure \ + --prefix=$PWD/inst \ + --enable-cassert --enable-debug --enable-rpath --with-tcl \ + --with-python --with-gssapi --with-pam --with-ldap \ + --with-openssl --with-libedit-preferred --with-uuid=e2fs \ + --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ + --with-icu + - name: compile + run: make && make install + + - name: pg_regression + run: make check + + - name: oracle_pg_regression + run: make oracle-pg-check + + - name: collect files + if: failure() + run: | + find . \( -name "*.diffs" -or -name "oracle_pg_regression.out" -or -path \*/tmp_check/log -or -path \*src/test/regress/log \) -print0 | + xargs -0 tar -czf oracle_pg_regression.tar.gz + - name: upload oracle_pg_regression files + if: failure() + uses: actions/upload-artifact@v4 + with: + name: results + path: ${{ github.workspace }}/oracle_pg_regression.tar.gz diff --git a/.github/workflows/oracle_regression.yml b/.github/workflows/oracle_regression.yml new file mode 100644 index 00000000000..11dcb299ded --- /dev/null +++ b/.github/workflows/oracle_regression.yml @@ -0,0 +1,56 @@ +name: oracle_regression + +on: + push: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + pull_request: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + +jobs: + oracle_regression: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + - name: dependancy + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt-get update + sudo apt-get install -y build-essential git lcov bison flex \ + libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ + tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ + libreadline-dev libedit-dev uuid-dev libossp-uuid-dev \ + libipc-run-perl libtime-hires-perl libtest-simple-perl \ + libicu-dev + - name: configure - linux + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ + ./cpanm --sudo IPC::Run && \ + ./configure \ + --prefix=$PWD/inst \ + --enable-cassert --enable-debug --enable-rpath --with-tcl \ + --with-python --with-gssapi --with-pam --with-ldap \ + --with-openssl --with-libedit-preferred --with-uuid=e2fs \ + --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ + --with-icu + - name: compile + run: make && make install + + - name: oracle_regression + run: make oracle-check-world + + - name: collect files + if: failure() + run: | + find . \( -name "*.diffs" -or -name "oracle_regression.out" -or -path \*/tmp_check/log -or -path \*src/test/regress/log \) -print0 | + xargs -0 tar -czf oracle_regression.tar.gz + - name: upload oracle_regression files + if: failure() + uses: actions/upload-artifact@v4 + with: + name: results + path: ${{ github.workspace }}/oracle_regression.tar.gz diff --git a/.github/workflows/pg_regression.yml b/.github/workflows/pg_regression.yml new file mode 100644 index 00000000000..cc140c4df50 --- /dev/null +++ b/.github/workflows/pg_regression.yml @@ -0,0 +1,56 @@ +name: pg_regression + +on: + push: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + pull_request: + branches: [ master , IVORY_REL_4_STABLE , IVORYSQL_REL_1_STABLE] + +jobs: + pg_regression: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + - name: dependancy + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt-get update + sudo apt-get install -y build-essential git lcov bison flex \ + libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ + tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ + libreadline-dev libedit-dev uuid-dev libossp-uuid-dev \ + libipc-run-perl libtime-hires-perl libtest-simple-perl \ + libicu-dev + - name: configure - linux + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ + ./cpanm --sudo IPC::Run && \ + ./configure \ + --prefix=$PWD/inst \ + --enable-cassert --enable-debug --enable-rpath --with-tcl \ + --with-python --with-gssapi --with-pam --with-ldap \ + --with-openssl --with-libedit-preferred --with-uuid=e2fs \ + --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ + --with-icu + - name: compile + run: make && make install + + - name: pg_regression + run: make check-world + + - name: collect files + if: failure() + run: | + find . \( -name "*.diffs" -or -name "pg_regression.out" -or -path \*/tmp_check/log -or -path \*src/test/regress/log \) -print0 | + xargs -0 tar -czf pg_regression.tar.gz + - name: upload pg_regression files + if: failure() + uses: actions/upload-artifact@v4 + with: + name: results + path: ${{ github.workspace }}/pg_regression.tar.gz diff --git a/COPYRIGHT b/COPYRIGHT index be2d694b038..0a397648dcd 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,7 +1,7 @@ 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 +Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group Portions Copyright (c) 1994, The Regents of the University of California diff --git a/config/llvm.m4 b/config/llvm.m4 index 21d8cd4f90f..93fa9e070e8 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/configure b/configure index 0e456205661..9bd85dff86c 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 14.17. +# Generated by GNU Autoconf 2.69 for PostgreSQL 14.22. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='PostgreSQL' PACKAGE_TARNAME='postgresql' -PACKAGE_VERSION='14.17' -PACKAGE_STRING='PostgreSQL 14.17' +PACKAGE_VERSION='14.22' +PACKAGE_STRING='PostgreSQL 14.22' PACKAGE_BUGREPORT='pgsql-bugs@lists.postgresql.org' PACKAGE_URL='https://www.postgresql.org/' @@ -1446,7 +1446,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 14.17 to adapt to many kinds of systems. +\`configure' configures PostgreSQL 14.22 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1511,7 +1511,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of PostgreSQL 14.17:";; + short | recursive ) echo "Configuration of PostgreSQL 14.22:";; esac cat <<\_ACEOF @@ -1685,7 +1685,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -PostgreSQL configure 14.17 +PostgreSQL configure 14.22 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2438,7 +2438,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 14.17, which was +It was created by PostgreSQL $as_me 14.22, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2827,7 +2827,7 @@ _ACEOF # IvorySQL version -PACKAGE_IVORYSQL_VERSION='1.17' +PACKAGE_IVORYSQL_VERSION='1.22' PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\)'` PG_MINORVERSION=`expr "$PACKAGE_VERSION" : '.*\.\([0-9][0-9]*\)'` @@ -5289,7 +5289,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 @@ -9322,12 +9322,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 @@ -9552,12 +9552,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 @@ -16168,7 +16168,7 @@ fi LIBS_including_readline="$LIBS" LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` -for ac_func in backtrace_symbols clock_gettime copyfile fdatasync getifaddrs getpeerucred getrlimit kqueue mbstowcs_l memset_s poll posix_fallocate ppoll pstat pthread_is_threaded_np readlink readv setproctitle setproctitle_fast setsid shm_open strchrnul strsignal symlink syncfs sync_file_range uselocale wcstombs_l writev +for ac_func in backtrace_symbols clock_gettime copyfile fdatasync getifaddrs getpeerucred getrlimit kqueue mbstowcs_l poll posix_fallocate ppoll pstat pthread_is_threaded_np readlink readv setproctitle setproctitle_fast setsid shm_open strsignal symlink syncfs sync_file_range uselocale wcstombs_l writev 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" @@ -16732,6 +16732,31 @@ esac fi +ac_fn_c_check_decl "$LINENO" "strchrnul" "ac_cv_have_decl_strchrnul" "#include +" +if test "x$ac_cv_have_decl_strchrnul" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +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 @@ -17455,7 +17480,7 @@ _ACEOF 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" @@ -18680,7 +18705,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 : @@ -18713,9 +18738,9 @@ 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 __cpuid" >&5 +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 @@ -18727,7 +18752,7 @@ int main () { unsigned int exx[4] = {0, 0, 0, 0}; - __get_cpuid(exx[0], 1); + __cpuid(exx, 1); ; return 0; @@ -18743,10 +18768,11 @@ rm -f core conftest.err conftest.$ac_objext \ 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 + if test x"$pgac_cv__cpuid" = x"yes"; then $as_echo "#define HAVE__CPUID 1" >>confdefs.h + fi fi # Check for Intel SSE 4.2 intrinsics to do CRC calculations. @@ -19659,7 +19685,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 : @@ -19728,7 +19754,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 : @@ -20782,7 +20808,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 14.17, which was +This file was extended by PostgreSQL $as_me 14.22, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20853,7 +20879,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 14.17 +PostgreSQL config.status 14.22 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index c4f54d988f2..ba753ce97eb 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], [14.17], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) +AC_INIT([PostgreSQL], [14.22], [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 @@ -30,7 +30,7 @@ AC_PREFIX_DEFAULT(/usr/local/pgsql) AC_DEFINE_UNQUOTED(CONFIGURE_ARGS, ["$ac_configure_args"], [Saved arguments from configure]) # IvorySQL version -PACKAGE_IVORYSQL_VERSION='1.17' +PACKAGE_IVORYSQL_VERSION='1.22' [PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\)'`] [PG_MINORVERSION=`expr "$PACKAGE_VERSION" : '.*\.\([0-9][0-9]*\)'`] @@ -1043,12 +1043,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 @@ -1092,12 +1092,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 @@ -1799,7 +1799,6 @@ AC_CHECK_FUNCS(m4_normalize([ getrlimit kqueue mbstowcs_l - memset_s poll posix_fallocate ppoll @@ -1811,7 +1810,6 @@ AC_CHECK_FUNCS(m4_normalize([ setproctitle_fast setsid shm_open - strchrnul strsignal symlink syncfs @@ -1853,6 +1851,9 @@ AC_CHECK_DECLS([strlcat, strlcpy, strnlen]) # won't handle deployment target restrictions on macOS AC_CHECK_DECLS([preadv], [], [AC_LIBOBJ(preadv)], [#include ]) AC_CHECK_DECLS([pwritev], [], [AC_LIBOBJ(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 ]) @@ -2019,7 +2020,7 @@ AC_CHECK_DECLS([strtoll, strtoull]) 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, [], @@ -2145,7 +2146,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}; @@ -2155,17 +2156,18 @@ 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.]) -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.]) +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 Intel SSE 4.2 intrinsics to do CRC calculations. @@ -2363,7 +2365,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 @@ -2400,7 +2402,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/adminpack/expected/adminpack.out b/contrib/adminpack/expected/adminpack.out index edf3ebfcba3..2dd68e452ad 100644 --- a/contrib/adminpack/expected/adminpack.out +++ b/contrib/adminpack/expected/adminpack.out @@ -36,10 +36,10 @@ SELECT pg_read_file('test_file1'); -- disallowed file paths for non-superusers and users who are -- not members of pg_write_server_files -CREATE ROLE regress_user1; -GRANT pg_read_all_settings TO regress_user1; -GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_user1; -SET ROLE regress_user1; +CREATE ROLE regress_adminpack_user1; +GRANT pg_read_all_settings TO regress_adminpack_user1; +GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_adminpack_user1; +SET ROLE regress_adminpack_user1; SELECT pg_file_write('../test_file0', 'test0', false); ERROR: path must be in or below the current directory SELECT pg_file_write('/tmp/test_file0', 'test0', false); @@ -53,9 +53,9 @@ SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4' SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false); ERROR: reference to parent directory ("..") not allowed RESET ROLE; -REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_user1; -REVOKE pg_read_all_settings FROM regress_user1; -DROP ROLE regress_user1; +REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_adminpack_user1; +REVOKE pg_read_all_settings FROM regress_adminpack_user1; +DROP ROLE regress_adminpack_user1; -- sync SELECT pg_file_sync('test_file1'); -- sync file pg_file_sync @@ -153,8 +153,8 @@ SELECT pg_file_unlink('test_file4'); (1 row) -- superuser checks -CREATE USER regress_user1; -SET ROLE regress_user1; +CREATE USER regress_adminpack_user1; +SET ROLE regress_adminpack_user1; SELECT pg_file_write('test_file0', 'test0', false); ERROR: permission denied for function pg_file_write SELECT pg_file_sync('test_file0'); @@ -167,6 +167,6 @@ ERROR: permission denied for function pg_file_unlink SELECT pg_logdir_ls(); ERROR: permission denied for function pg_logdir_ls RESET ROLE; -DROP USER regress_user1; +DROP USER regress_adminpack_user1; -- no further tests for pg_logdir_ls() because it depends on the -- server's logging setup diff --git a/contrib/adminpack/sql/adminpack.sql b/contrib/adminpack/sql/adminpack.sql index 918d0bdc65e..5776c9af0d1 100644 --- a/contrib/adminpack/sql/adminpack.sql +++ b/contrib/adminpack/sql/adminpack.sql @@ -14,20 +14,20 @@ SELECT pg_read_file('test_file1'); -- disallowed file paths for non-superusers and users who are -- not members of pg_write_server_files -CREATE ROLE regress_user1; +CREATE ROLE regress_adminpack_user1; -GRANT pg_read_all_settings TO regress_user1; -GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_user1; +GRANT pg_read_all_settings TO regress_adminpack_user1; +GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_adminpack_user1; -SET ROLE regress_user1; +SET ROLE regress_adminpack_user1; SELECT pg_file_write('../test_file0', 'test0', false); SELECT pg_file_write('/tmp/test_file0', 'test0', false); SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false); SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false); RESET ROLE; -REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_user1; -REVOKE pg_read_all_settings FROM regress_user1; -DROP ROLE regress_user1; +REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_adminpack_user1; +REVOKE pg_read_all_settings FROM regress_adminpack_user1; +DROP ROLE regress_adminpack_user1; -- sync SELECT pg_file_sync('test_file1'); -- sync file @@ -59,8 +59,8 @@ SELECT pg_file_unlink('test_file4'); -- superuser checks -CREATE USER regress_user1; -SET ROLE regress_user1; +CREATE USER regress_adminpack_user1; +SET ROLE regress_adminpack_user1; SELECT pg_file_write('test_file0', 'test0', false); SELECT pg_file_sync('test_file0'); @@ -69,7 +69,7 @@ SELECT pg_file_unlink('test_file0'); SELECT pg_logdir_ls(); RESET ROLE; -DROP USER regress_user1; +DROP USER regress_adminpack_user1; -- no further tests for pg_logdir_ls() because it depends on the diff --git a/contrib/amcheck/t/002_cic.pl b/contrib/amcheck/t/002_cic.pl index 3587807b957..b23e761abe1 100644 --- a/contrib/amcheck/t/002_cic.pl +++ b/contrib/amcheck/t/002_cic.pl @@ -9,7 +9,7 @@ use PostgresNode; use TestLib; -use Test::More tests => 3; +use Test::More; my ($node, $result); @@ -61,5 +61,29 @@ ) }); +# Test bt_index_parent_check() with indexes created with +# CREATE INDEX CONCURRENTLY. +$node->safe_psql('postgres', q(CREATE TABLE quebec(i int primary key))); +# Insert two rows into index +$node->safe_psql('postgres', + q(INSERT INTO quebec SELECT i FROM generate_series(1, 2) s(i);)); + +# start background transaction +my $in_progress_h = $node->background_psql('postgres'); +$in_progress_h->query_safe(q(BEGIN; SELECT pg_current_xact_id();)); + +# delete one row from table, while background transaction is in progress +$node->safe_psql('postgres', q(DELETE FROM quebec WHERE i = 1;)); +# create index concurrently, which will skip the deleted row +$node->safe_psql('postgres', + q(CREATE INDEX CONCURRENTLY oscar ON quebec(i);)); + +# check index using bt_index_parent_check +$result = $node->psql('postgres', + q(SELECT bt_index_parent_check('oscar', heapallindexed => true))); +is($result, '0', 'bt_index_parent_check for CIC after removed row'); + +$in_progress_h->quit; + $node->stop; done_testing(); diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index 7c81b095b3b..db0a2cea025 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -462,11 +462,11 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, bool readonly, bool heapallindexed, bool rootdescend) { BtreeCheckState *state; + Snapshot snapshot = InvalidSnapshot; Page metapage; BTMetaPageData *metad; uint32 previouslevel; BtreeLevel current; - Snapshot snapshot = SnapshotAny; if (!readonly) elog(DEBUG1, "verifying consistency of tree structure for index \"%s\"", @@ -515,37 +515,33 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, state->heaptuplespresent = 0; /* - * Register our own snapshot in !readonly case, rather than asking + * Register our own snapshot for heapallindexed, rather than asking * table_index_build_scan() to do this for us later. This needs to * happen before index fingerprinting begins, so we can later be * certain that index fingerprinting should have reached all tuples * returned by table_index_build_scan(). */ - if (!state->readonly) - { - snapshot = RegisterSnapshot(GetTransactionSnapshot()); + snapshot = RegisterSnapshot(GetTransactionSnapshot()); - /* - * GetTransactionSnapshot() always acquires a new MVCC snapshot in - * READ COMMITTED mode. A new snapshot is guaranteed to have all - * the entries it requires in the index. - * - * We must defend against the possibility that an old xact - * snapshot was returned at higher isolation levels when that - * snapshot is not safe for index scans of the target index. This - * is possible when the snapshot sees tuples that are before the - * index's indcheckxmin horizon. Throwing an error here should be - * very rare. It doesn't seem worth using a secondary snapshot to - * avoid this. - */ - if (IsolationUsesXactSnapshot() && rel->rd_index->indcheckxmin && - !TransactionIdPrecedes(HeapTupleHeaderGetXmin(rel->rd_indextuple->t_data), - snapshot->xmin)) - ereport(ERROR, - (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), - errmsg("index \"%s\" cannot be verified using transaction snapshot", - RelationGetRelationName(rel)))); - } + /* + * GetTransactionSnapshot() always acquires a new MVCC snapshot in + * READ COMMITTED mode. A new snapshot is guaranteed to have all the + * entries it requires in the index. + * + * We must defend against the possibility that an old xact snapshot + * was returned at higher isolation levels when that snapshot is not + * safe for index scans of the target index. This is possible when + * the snapshot sees tuples that are before the index's indcheckxmin + * horizon. Throwing an error here should be very rare. It doesn't + * seem worth using a secondary snapshot to avoid this. + */ + if (IsolationUsesXactSnapshot() && rel->rd_index->indcheckxmin && + !TransactionIdPrecedes(HeapTupleHeaderGetXmin(rel->rd_indextuple->t_data), + snapshot->xmin)) + ereport(ERROR, + errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), + errmsg("index \"%s\" cannot be verified using transaction snapshot", + RelationGetRelationName(rel))); } Assert(!state->rootdescend || state->readonly); @@ -620,8 +616,7 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, /* * Create our own scan for table_index_build_scan(), rather than * getting it to do so for us. This is required so that we can - * actually use the MVCC snapshot registered earlier in !readonly - * case. + * actually use the MVCC snapshot registered earlier. * * Note that table_index_build_scan() calls heap_endscan() for us. */ @@ -634,16 +629,15 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, /* * Scan will behave as the first scan of a CREATE INDEX CONCURRENTLY - * behaves in !readonly case. + * behaves. * * It's okay that we don't actually use the same lock strength for the - * heap relation as any other ii_Concurrent caller would in !readonly - * case. We have no reason to care about a concurrent VACUUM - * operation, since there isn't going to be a second scan of the heap - * that needs to be sure that there was no concurrent recycling of - * TIDs. + * heap relation as any other ii_Concurrent caller would. We have no + * reason to care about a concurrent VACUUM operation, since there + * isn't going to be a second scan of the heap that needs to be sure + * that there was no concurrent recycling of TIDs. */ - indexinfo->ii_Concurrent = !state->readonly; + indexinfo->ii_Concurrent = true; /* * Don't wait for uncommitted tuple xact commit/abort when index is a @@ -667,13 +661,12 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, state->heaptuplespresent, RelationGetRelationName(heaprel), 100.0 * bloom_prop_bits_set(state->filter)))); - if (snapshot != SnapshotAny) - UnregisterSnapshot(snapshot); - bloom_free(state->filter); } /* Be tidy: */ + if (snapshot != InvalidSnapshot) + UnregisterSnapshot(snapshot); MemoryContextDelete(state->targetcontext); } @@ -784,7 +777,7 @@ bt_check_level_from_leftmost(BtreeCheckState *state, BtreeLevel level) errmsg("block %u is not leftmost in index \"%s\"", current, RelationGetRelationName(state->rel)))); - if (level.istruerootlevel && !P_ISROOT(opaque)) + if (level.istruerootlevel && (!P_ISROOT(opaque) && !P_INCOMPLETE_SPLIT(opaque))) ereport(ERROR, (errcode(ERRCODE_INDEX_CORRUPTED), errmsg("block %u is not true root in index \"%s\"", @@ -2047,7 +2040,7 @@ bt_child_highkey_check(BtreeCheckState *state, * If we visit page with high key, check that it is equal to the * target key next to corresponding downlink. */ - if (!rightsplit && !P_RIGHTMOST(opaque)) + if (!rightsplit && !P_RIGHTMOST(opaque) && !P_ISHALFDEAD(opaque)) { BTPageOpaque topaque; IndexTuple highkey; diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c index 2886c08b85e..9d93b3c775e 100644 --- a/contrib/btree_gist/btree_utils_var.c +++ b/contrib/btree_gist/btree_utils_var.c @@ -116,36 +116,47 @@ gbt_var_leaf2node(GBT_VARKEY *leaf, const gbtree_vinfo *tinfo, FmgrInfo *flinfo) /* * returns the common prefix length of a node key + * + * If the underlying type is character data, the prefix length may point in + * the middle of a multibyte character. */ static int32 gbt_var_node_cp_len(const GBT_VARKEY *node, const gbtree_vinfo *tinfo) { GBT_VARKEY_R r = gbt_var_key_readable(node); int32 i = 0; - int32 l = 0; + int32 l_left_to_match = 0; + int32 l_total = 0; int32 t1len = VARSIZE(r.lower) - VARHDRSZ; int32 t2len = VARSIZE(r.upper) - VARHDRSZ; int32 ml = Min(t1len, t2len); char *p1 = VARDATA(r.lower); char *p2 = VARDATA(r.upper); + const char *end1 = p1 + t1len; + const char *end2 = p2 + t2len; if (ml == 0) return 0; while (i < ml) { - if (tinfo->eml > 1 && l == 0) + if (tinfo->eml > 1 && l_left_to_match == 0) { - if ((l = pg_mblen(p1)) != pg_mblen(p2)) + l_total = pg_mblen_range(p1, end1); + if (l_total != pg_mblen_range(p2, end2)) { return i; } + l_left_to_match = l_total; } if (*p1 != *p2) { if (tinfo->eml > 1) { - return (i - l + 1); + int32 l_matched_subset = l_total - l_left_to_match; + + /* end common prefix at final byte of last matching char */ + return i - l_matched_subset; } else { @@ -155,7 +166,7 @@ gbt_var_node_cp_len(const GBT_VARKEY *node, const gbtree_vinfo *tinfo) p1++; p2++; - l--; + l_left_to_match--; i++; } return ml; /* lower == upper */ diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 05dec1dfc7d..2f68643dbd7 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -48,6 +48,7 @@ #include "funcapi.h" #include "lib/stringinfo.h" #include "libpq-fe.h" +#include "libpq/libpq-be-fe-helpers.h" #include "mb/pg_wchar.h" #include "miscadmin.h" #include "parser/scansup.h" @@ -59,6 +60,7 @@ #include "utils/memutils.h" #include "utils/rel.h" #include "utils/varlena.h" +#include "utils/wait_event.h" PG_MODULE_MAGIC; @@ -97,7 +99,7 @@ static PGresult *storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const static void storeRow(volatile 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); @@ -110,7 +112,7 @@ static HeapTuple get_tuple_of_interest(Relation rel, int *pkattnums, int pknumat static Relation get_rel_from_relname(text *relname_text, LOCKMODE lockmode, AclMode aclmode); static char *generate_relation_name(Relation rel); static void dblink_connstr_check(const char *connstr); -static void dblink_security_check(PGconn *conn, remoteConn *rconn); +static void dblink_security_check(PGconn *conn, const char *connname); 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); @@ -128,16 +130,22 @@ static remoteConn *pconn = NULL; static HTAB *remoteConnHash = NULL; /* - * 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 */ @@ -236,7 +244,7 @@ dblink_get_conn(char *conname_or_str, errmsg("could not establish connection"), errdetail_internal("%s", msg))); } - dblink_security_check(conn, rconn); + dblink_security_check(conn, NULL); if (PQclientEncoding(conn) != GetDatabaseEncoding()) PQsetClientEncoding(conn, GetDatabaseEncodingName()); freeconn = true; @@ -296,15 +304,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) @@ -335,6 +334,13 @@ dblink_connect(PG_FUNCTION_ARGS) #endif } + /* 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 = PQconnectdb(connstr); @@ -343,8 +349,8 @@ dblink_connect(PG_FUNCTION_ARGS) msg = pchomp(PQerrorMessage(conn)); PQfinish(conn); ReleaseExternalFD(); - if (rconn) - pfree(rconn); + if (connname) + deleteConnection(connname); ereport(ERROR, (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), @@ -353,16 +359,16 @@ dblink_connect(PG_FUNCTION_ARGS) } /* check password actually used if not superuser */ - dblink_security_check(conn, rconn); + dblink_security_check(conn, connname); /* 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 { @@ -406,10 +412,7 @@ dblink_disconnect(PG_FUNCTION_ARGS) PQfinish(conn); ReleaseExternalFD(); if (rconn) - { deleteConnection(conname); - pfree(rconn); - } else pconn->conn = NULL; @@ -478,7 +481,7 @@ dblink_open(PG_FUNCTION_ARGS) /* If we are not in a transaction, start one */ if (PQtransactionStatus(conn) == PQTRANS_IDLE) { - res = PQexec(conn, "BEGIN"); + res = libpqsrv_exec(conn, "BEGIN", PG_WAIT_EXTENSION); if (PQresultStatus(res) != PGRES_COMMAND_OK) dblink_res_internalerror(conn, res, "begin error"); PQclear(res); @@ -497,7 +500,7 @@ dblink_open(PG_FUNCTION_ARGS) (rconn->openCursorCount)++; appendStringInfo(&buf, "DECLARE %s CURSOR FOR %s", curname, sql); - res = PQexec(conn, buf.data); + res = libpqsrv_exec(conn, buf.data, PG_WAIT_EXTENSION); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { dblink_res_error(conn, conname, res, fail, @@ -566,7 +569,7 @@ dblink_close(PG_FUNCTION_ARGS) appendStringInfo(&buf, "CLOSE %s", curname); /* close the cursor */ - res = PQexec(conn, buf.data); + res = libpqsrv_exec(conn, buf.data, PG_WAIT_EXTENSION); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { dblink_res_error(conn, conname, res, fail, @@ -586,7 +589,7 @@ dblink_close(PG_FUNCTION_ARGS) { rconn->newXactForCursor = false; - res = PQexec(conn, "COMMIT"); + res = libpqsrv_exec(conn, "COMMIT", PG_WAIT_EXTENSION); if (PQresultStatus(res) != PGRES_COMMAND_OK) dblink_res_internalerror(conn, res, "commit error"); PQclear(res); @@ -668,7 +671,7 @@ dblink_fetch(PG_FUNCTION_ARGS) * PGresult will be long-lived even though we are still in a short-lived * memory context. */ - res = PQexec(conn, buf.data); + res = libpqsrv_exec(conn, buf.data, PG_WAIT_EXTENSION); if (!res || (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK)) @@ -816,7 +819,7 @@ dblink_record_internal(FunctionCallInfo fcinfo, bool is_async) else { /* async result retrieval, do it the old way */ - PGresult *res = PQgetResult(conn); + PGresult *res = libpqsrv_get_result(conn, PG_WAIT_EXTENSION); /* NULL means we're all done with the async results */ if (res) @@ -1130,7 +1133,8 @@ materializeQueryResult(FunctionCallInfo fcinfo, PQclear(sinfo.last_res); PQclear(sinfo.cur_res); /* and clear out any pending data in libpq */ - while ((res = PQgetResult(conn)) != NULL) + while ((res = libpqsrv_get_result(conn, PG_WAIT_EXTENSION)) != + NULL) PQclear(res); PG_RE_THROW(); } @@ -1157,7 +1161,7 @@ storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const char *sql) { CHECK_FOR_INTERRUPTS(); - sinfo->cur_res = PQgetResult(conn); + sinfo->cur_res = libpqsrv_get_result(conn, PG_WAIT_EXTENSION); if (!sinfo->cur_res) break; @@ -1332,6 +1336,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), @@ -1485,7 +1492,7 @@ dblink_exec(PG_FUNCTION_ARGS) if (!conn) dblink_conn_not_avail(conname); - res = PQexec(conn, sql); + res = libpqsrv_exec(conn, sql, PG_WAIT_EXTENSION); if (!res || (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK)) @@ -2593,8 +2600,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; } @@ -2611,8 +2618,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; @@ -2626,19 +2633,15 @@ createNewConnection(const char *name, remoteConn *rconn) hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key, HASH_ENTER, &found); - if (found) - { - PQfinish(rconn->conn); - ReleaseExternalFD(); - pfree(rconn); - + if (found && hentry->rconn.conn != NULL) ereport(ERROR, (errcode(ERRCODE_DUPLICATE_OBJECT), errmsg("duplicate connection name"))); - } - hentry->rconn = rconn; - strlcpy(hentry->name, name, sizeof(hentry->name)); + /* New, or reusable, so initialize the rconn struct to zeroes */ + memset(&hentry->rconn, 0, sizeof(remoteConn)); + + return &hentry->rconn; } static void @@ -2664,7 +2667,7 @@ deleteConnection(const char *name) } static void -dblink_security_check(PGconn *conn, remoteConn *rconn) +dblink_security_check(PGconn *conn, const char *connname) { if (!superuser()) { @@ -2672,8 +2675,8 @@ dblink_security_check(PGconn *conn, remoteConn *rconn) { PQfinish(conn); ReleaseExternalFD(); - if (rconn) - pfree(rconn); + if (connname) + deleteConnection(connname); ereport(ERROR, (errcode(ERRCODE_S_R_E_PROHIBITED_SQL_STATEMENT_ATTEMPTED), @@ -2771,8 +2774,8 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res, /* * If we don't get a message from the PGresult, try the PGconn. This is - * needed because for connection-level failures, PQexec may just return - * NULL, not a PGresult at all. + * 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)); diff --git a/contrib/dict_xsyn/dict_xsyn.c b/contrib/dict_xsyn/dict_xsyn.c index 79c4f18f409..5c5e4e7a3c9 100644 --- a/contrib/dict_xsyn/dict_xsyn.c +++ b/contrib/dict_xsyn/dict_xsyn.c @@ -48,15 +48,15 @@ find_word(char *in, char **end) char *start; *end = NULL; - while (*in && t_isspace(in)) - in += pg_mblen(in); + while (*in && t_isspace_cstr(in)) + in += pg_mblen_cstr(in); if (!*in || *in == '#') return NULL; start = in; - while (*in && !t_isspace(in)) - in += pg_mblen(in); + while (*in && !t_isspace_cstr(in)) + in += pg_mblen_cstr(in); *end = in; diff --git a/contrib/file_fdw/input/file_fdw.source b/contrib/file_fdw/input/file_fdw.source index 45b728eeb3d..7b977cfbe97 100644 --- a/contrib/file_fdw/input/file_fdw.source +++ b/contrib/file_fdw/input/file_fdw.source @@ -36,6 +36,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', header 'true'); -- ERROR CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', quote ':'); -- ERROR @@ -187,6 +189,20 @@ UPDATE pt set a = 1 where a = 2; -- ERROR SELECT tableoid::regclass, * FROM pt; SELECT tableoid::regclass, * FROM p1; SELECT tableoid::regclass, * FROM p2; + +-- Test DELETE/UPDATE on a partitioned table when all partitions +-- are excluded and only the dummy root result relation remains. The +-- operation is a no-op but should not fail regardless of whether the +-- foreign child was processed (pruning off) or not (pruning on). +DROP TABLE p2; +SET enable_partition_pruning TO off; +DELETE FROM pt WHERE false; +UPDATE pt SET b = 'x' WHERE false; + +SET enable_partition_pruning TO on; +DELETE FROM pt WHERE false; +UPDATE pt SET b = 'x' WHERE false; + DROP TABLE pt; -- generated column tests diff --git a/contrib/file_fdw/output/file_fdw.source b/contrib/file_fdw/output/file_fdw.source index 52b4d5f1df7..45f0e0322ca 100644 --- a/contrib/file_fdw/output/file_fdw.source +++ b/contrib/file_fdw/output/file_fdw.source @@ -31,6 +31,11 @@ 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" +HINT: Valid options in this context are: filename, program, format, header, delimiter, quote, escape, null, encoding +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', header 'true'); -- ERROR @@ -374,6 +379,17 @@ SELECT tableoid::regclass, * FROM p2; p2 | 2 | xyzzy (3 rows) +-- Test DELETE/UPDATE on a partitioned table when all partitions +-- are excluded and only the dummy root result relation remains. The +-- operation is a no-op but should not fail regardless of whether the +-- foreign child was processed (pruning off) or not (pruning on). +DROP TABLE p2; +SET enable_partition_pruning TO off; +DELETE FROM pt WHERE false; +UPDATE pt SET b = 'x' WHERE false; +SET enable_partition_pruning TO on; +DELETE FROM pt WHERE false; +UPDATE pt SET b = 'x' WHERE false; DROP TABLE pt; -- generated column tests CREATE FOREIGN TABLE gft1 (a int, b text, c text GENERATED ALWAYS AS ('foo') STORED) SERVER file_server diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c index 03057f085d1..da4d9d7fb95 100644 --- a/contrib/hstore/hstore_io.c +++ b/contrib/hstore/hstore_io.c @@ -82,7 +82,7 @@ get_val(HSParser *state, bool ignoreeq, bool *escaped) else if (*(state->ptr) == '=' && !ignoreeq) { elog(ERROR, "Syntax error near \"%.*s\" at position %d", - pg_mblen(state->ptr), state->ptr, + pg_mblen_cstr(state->ptr), state->ptr, (int32) (state->ptr - state->begin)); } else if (*(state->ptr) == '\\') @@ -223,7 +223,7 @@ parse_hstore(HSParser *state) else if (!scanner_isspace((unsigned char) *(state->ptr))) { elog(ERROR, "Syntax error near \"%.*s\" at position %d", - pg_mblen(state->ptr), state->ptr, + pg_mblen_cstr(state->ptr), state->ptr, (int32) (state->ptr - state->begin)); } } @@ -240,7 +240,7 @@ parse_hstore(HSParser *state) else { elog(ERROR, "Syntax error near \"%.*s\" at position %d", - pg_mblen(state->ptr), state->ptr, + pg_mblen_cstr(state->ptr), state->ptr, (int32) (state->ptr - state->begin)); } } @@ -275,7 +275,7 @@ parse_hstore(HSParser *state) else if (!scanner_isspace((unsigned char) *(state->ptr))) { elog(ERROR, "Syntax error near \"%.*s\" at position %d", - pg_mblen(state->ptr), state->ptr, + pg_mblen_cstr(state->ptr), state->ptr, (int32) (state->ptr - state->begin)); } } @@ -346,7 +346,8 @@ hstoreUniquePairs(Pairs *a, int32 l, int32 *buflen) if (ptr->needfree) { pfree(ptr->key); - pfree(ptr->val); + if (ptr->val != NULL) + pfree(ptr->val); } } else diff --git a/contrib/intarray/_int_selfuncs.c b/contrib/intarray/_int_selfuncs.c index 38d68c12d23..37b277e7f14 100644 --- a/contrib/intarray/_int_selfuncs.c +++ b/contrib/intarray/_int_selfuncs.c @@ -19,6 +19,7 @@ #include "catalog/pg_operator.h" #include "catalog/pg_statistic.h" #include "catalog/pg_type.h" +#include "commands/extension.h" #include "miscadmin.h" #include "utils/builtins.h" #include "utils/lsyscache.h" @@ -171,14 +172,25 @@ _int_matchsel(PG_FUNCTION_ARGS) PG_RETURN_FLOAT8(0.0); } - /* The caller made sure the const is a query, so get it now */ + /* + * Verify that the Const is a query_int, else return a default estimate. + * (This could only fail if someone attached this estimator to the wrong + * operator.) + */ + if (((Const *) other)->consttype != + get_function_sibling_type(fcinfo->flinfo->fn_oid, "query_int")) + { + ReleaseVariableStats(vardata); + PG_RETURN_FLOAT8(DEFAULT_EQ_SEL); + } + query = DatumGetQueryTypeP(((Const *) other)->constvalue); /* Empty query matches nothing */ if (query->size == 0) { ReleaseVariableStats(vardata); - return (Selectivity) 0.0; + PG_RETURN_FLOAT8(0.0); } /* @@ -327,7 +339,12 @@ static int compare_val_int4(const void *a, const void *b) { int32 key = *(int32 *) a; - const Datum *t = (const Datum *) b; + int32 value = DatumGetInt32(*(const Datum *) b); - return key - DatumGetInt32(*t); + if (key < value) + return -1; + else if (key > value) + return 1; + else + return 0; } diff --git a/contrib/intarray/expected/_int.out b/contrib/intarray/expected/_int.out index 09ab23483f7..64d88787632 100644 --- a/contrib/intarray/expected/_int.out +++ b/contrib/intarray/expected/_int.out @@ -473,6 +473,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}'; @@ -547,6 +553,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; @@ -629,6 +641,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" @@ -709,6 +727,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}'; @@ -783,6 +807,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}'; @@ -857,6 +887,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 @@ -949,4 +985,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 95eec96c14e..ba4c298151a 100644 --- a/contrib/intarray/sql/_int.sql +++ b/contrib/intarray/sql/_int.sql @@ -92,6 +92,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 @@ -109,6 +110,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 @@ -129,6 +131,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)); @@ -147,6 +150,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 ); @@ -163,6 +167,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 ); @@ -179,6 +184,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; @@ -214,6 +220,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/ltree/lquery_op.c b/contrib/ltree/lquery_op.c index ef86046fc4b..46019a0e83a 100644 --- a/contrib/ltree/lquery_op.c +++ b/contrib/ltree/lquery_op.c @@ -26,14 +26,14 @@ getlexeme(char *start, char *end, int *len) char *ptr; int charlen; - while (start < end && (charlen = pg_mblen(start)) == 1 && t_iseq(start, '_')) + while (start < end && (charlen = pg_mblen_range(start, end)) == 1 && t_iseq(start, '_')) start += charlen; ptr = start; if (ptr >= end) return NULL; - while (ptr < end && !((charlen = pg_mblen(ptr)) == 1 && t_iseq(ptr, '_'))) + while (ptr < end && !((charlen = pg_mblen_range(ptr, end)) == 1 && t_iseq(ptr, '_'))) ptr += charlen; *len = ptr - start; @@ -41,7 +41,8 @@ getlexeme(char *start, char *end, int *len) } bool -compare_subnode(ltree_level *t, char *qn, int len, int (*cmpptr) (const char *, const char *, size_t), bool anyend) +compare_subnode(ltree_level *t, char *qn, int len, + ltree_prefix_eq_func prefix_eq, bool anyend) { char *endt = t->name + t->len; char *endq = qn + len; @@ -57,7 +58,7 @@ compare_subnode(ltree_level *t, char *qn, int len, int (*cmpptr) (const char *, while ((tn = getlexeme(tn, endt, &lent)) != NULL) { if ((lent == lenq || (lent > lenq && anyend)) && - (*cmpptr) (qn, tn, lenq) == 0) + (*prefix_eq) (qn, lenq, tn, lent)) { isok = true; @@ -74,14 +75,29 @@ compare_subnode(ltree_level *t, char *qn, int len, int (*cmpptr) (const char *, return true; } -int -ltree_strncasecmp(const char *a, const char *b, size_t s) +/* + * Check if 'a' is a prefix of 'b'. + */ +bool +ltree_prefix_eq(const char *a, size_t a_sz, const char *b, size_t b_sz) +{ + if (a_sz > b_sz) + return false; + else + return (strncmp(a, b, a_sz) == 0); +} + +/* + * Case-insensitive check if 'a' is a prefix of 'b'. + */ +bool +ltree_prefix_eq_ci(const char *a, size_t a_sz, const char *b, size_t b_sz) { - char *al = str_tolower(a, s, DEFAULT_COLLATION_OID); - char *bl = str_tolower(b, s, DEFAULT_COLLATION_OID); - int res; + char *al = str_tolower(a, a_sz, DEFAULT_COLLATION_OID); + char *bl = str_tolower(b, b_sz, DEFAULT_COLLATION_OID); + bool res; - res = strncmp(al, bl, s); + res = (strncmp(al, bl, a_sz) == 0); pfree(al); pfree(bl); @@ -109,19 +125,19 @@ checkLevel(lquery_level *curq, ltree_level *curt) for (int i = 0; i < curq->numvar; i++) { - int (*cmpptr) (const char *, const char *, size_t); + ltree_prefix_eq_func prefix_eq; - cmpptr = (curvar->flag & LVAR_INCASE) ? ltree_strncasecmp : strncmp; + prefix_eq = (curvar->flag & LVAR_INCASE) ? ltree_prefix_eq_ci : ltree_prefix_eq; if (curvar->flag & LVAR_SUBLEXEME) { - if (compare_subnode(curt, curvar->name, curvar->len, cmpptr, + if (compare_subnode(curt, curvar->name, curvar->len, prefix_eq, (curvar->flag & LVAR_ANYEND))) return success; } else if ((curvar->len == curt->len || (curt->len > curvar->len && (curvar->flag & LVAR_ANYEND))) && - (*cmpptr) (curvar->name, curt->name, curvar->len) == 0) + (*prefix_eq) (curvar->name, curvar->len, curt->name, curt->len)) return success; curvar = LVAR_NEXT(curvar); diff --git a/contrib/ltree/ltree.h b/contrib/ltree/ltree.h index 83fc705ef86..c7f00a99b06 100644 --- a/contrib/ltree/ltree.h +++ b/contrib/ltree/ltree.h @@ -113,7 +113,8 @@ typedef struct #define LQUERY_HASNOT 0x01 -#define ISALNUM(x) ( t_isalpha(x) || t_isdigit(x) || ( pg_mblen(x) == 1 && t_iseq((x), '_') ) ) +/* Caller has already called mblen, so we can use _unbounded variants safely. */ +#define ISALNUM(x) ( t_isalpha_unbounded(x) || t_isdigit_unbounded(x) || ( pg_mblen_unbounded(x) == 1 && t_iseq((x), '_') ) ) /* full text query */ @@ -143,6 +144,8 @@ typedef struct char data[FLEXIBLE_ARRAY_MEMBER]; } ltxtquery; +typedef bool (*ltree_prefix_eq_func) (const char *, size_t, const char *, size_t); + #define HDRSIZEQT MAXALIGN(VARHDRSZ + sizeof(int32)) #define COMPUTESIZE(size,lenofoperand) ( HDRSIZEQT + (size) * sizeof(ITEM) + (lenofoperand) ) #define LTXTQUERY_TOO_BIG(size,lenofoperand) \ @@ -193,10 +196,11 @@ bool ltree_execute(ITEM *curitem, void *checkval, int ltree_compare(const ltree *a, const ltree *b); bool inner_isparent(const ltree *c, const ltree *p); -bool compare_subnode(ltree_level *t, char *q, int len, - int (*cmpptr) (const char *, const char *, size_t), bool anyend); +bool compare_subnode(ltree_level *t, char *qn, int len, + ltree_prefix_eq_func prefix_eq, bool anyend); ltree *lca_inner(ltree **a, int len); -int ltree_strncasecmp(const char *a, const char *b, size_t s); +bool ltree_prefix_eq(const char *a, size_t a_sz, const char *b, size_t b_sz); +bool ltree_prefix_eq_ci(const char *a, size_t a_sz, const char *b, size_t b_sz); /* fmgr macros for ltree objects */ #define DatumGetLtreeP(X) ((ltree *) PG_DETOAST_DATUM(X)) diff --git a/contrib/ltree/ltree_io.c b/contrib/ltree/ltree_io.c index 15115cb29f3..0a44a8c4691 100644 --- a/contrib/ltree/ltree_io.c +++ b/contrib/ltree/ltree_io.c @@ -54,7 +54,7 @@ parse_ltree(const char *buf) ptr = buf; while (*ptr) { - charlen = pg_mblen(ptr); + charlen = pg_mblen_cstr(ptr); if (t_iseq(ptr, '.')) num++; ptr += charlen; @@ -69,7 +69,7 @@ parse_ltree(const char *buf) ptr = buf; while (*ptr) { - charlen = pg_mblen(ptr); + charlen = pg_mblen_cstr(ptr); switch (state) { @@ -285,7 +285,7 @@ parse_lquery(const char *buf) ptr = buf; while (*ptr) { - charlen = pg_mblen(ptr); + charlen = pg_mblen_cstr(ptr); if (t_iseq(ptr, '.')) num++; @@ -305,7 +305,7 @@ parse_lquery(const char *buf) ptr = buf; while (*ptr) { - charlen = pg_mblen(ptr); + charlen = pg_mblen_cstr(ptr); switch (state) { @@ -402,7 +402,7 @@ parse_lquery(const char *buf) case LQPRS_WAITFNUM: if (t_iseq(ptr, ',')) state = LQPRS_WAITSNUM; - else if (t_isdigit(ptr)) + else if (t_isdigit_cstr(ptr)) { int low = atoi(ptr); @@ -420,7 +420,7 @@ parse_lquery(const char *buf) UNCHAR; break; case LQPRS_WAITSNUM: - if (t_isdigit(ptr)) + if (t_isdigit_cstr(ptr)) { int high = atoi(ptr); @@ -451,7 +451,7 @@ parse_lquery(const char *buf) case LQPRS_WAITCLOSE: if (t_iseq(ptr, '}')) state = LQPRS_WAITEND; - else if (!t_isdigit(ptr)) + else if (!t_isdigit_cstr(ptr)) UNCHAR; break; case LQPRS_WAITND: @@ -462,7 +462,7 @@ parse_lquery(const char *buf) } else if (t_iseq(ptr, ',')) state = LQPRS_WAITSNUM; - else if (!t_isdigit(ptr)) + else if (!t_isdigit_cstr(ptr)) UNCHAR; break; case LQPRS_WAITEND: diff --git a/contrib/ltree/ltxtquery_io.c b/contrib/ltree/ltxtquery_io.c index d967f92110f..7f98bdedecb 100644 --- a/contrib/ltree/ltxtquery_io.c +++ b/contrib/ltree/ltxtquery_io.c @@ -59,7 +59,7 @@ gettoken_query(QPRS_STATE *state, int32 *val, int32 *lenval, char **strval, uint for (;;) { - charlen = pg_mblen(state->buf); + charlen = pg_mblen_cstr(state->buf); switch (state->state) { @@ -83,7 +83,7 @@ gettoken_query(QPRS_STATE *state, int32 *val, int32 *lenval, char **strval, uint *lenval = charlen; *flag = 0; } - else if (!t_isspace(state->buf)) + else if (!t_isspace_unbounded(state->buf)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("operand syntax error"))); diff --git a/contrib/ltree/ltxtquery_op.c b/contrib/ltree/ltxtquery_op.c index 002102c9c75..3dcbab2c484 100644 --- a/contrib/ltree/ltxtquery_op.c +++ b/contrib/ltree/ltxtquery_op.c @@ -58,19 +58,19 @@ checkcondition_str(void *checkval, ITEM *val) ltree_level *level = LTREE_FIRST(((CHKVAL *) checkval)->node); int tlen = ((CHKVAL *) checkval)->node->numlevel; char *op = ((CHKVAL *) checkval)->operand + val->distance; - int (*cmpptr) (const char *, const char *, size_t); + ltree_prefix_eq_func prefix_eq; - cmpptr = (val->flag & LVAR_INCASE) ? ltree_strncasecmp : strncmp; + prefix_eq = (val->flag & LVAR_INCASE) ? ltree_prefix_eq_ci : ltree_prefix_eq; while (tlen > 0) { if (val->flag & LVAR_SUBLEXEME) { - if (compare_subnode(level, op, val->length, cmpptr, (val->flag & LVAR_ANYEND))) + if (compare_subnode(level, op, val->length, prefix_eq, (val->flag & LVAR_ANYEND))) return true; } else if ((val->length == level->len || (level->len > val->length && (val->flag & LVAR_ANYEND))) && - (*cmpptr) (op, level->name, val->length) == 0) + (*prefix_eq) (op, val->length, level->name, level->len)) return true; tlen--; diff --git a/contrib/pageinspect/btreefuncs.c b/contrib/pageinspect/btreefuncs.c index 2044b88d484..6f78d009443 100644 --- a/contrib/pageinspect/btreefuncs.c +++ b/contrib/pageinspect/btreefuncs.c @@ -51,6 +51,7 @@ PG_FUNCTION_INFO_V1(bt_page_stats); #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID) #define DatumGetItemPointer(X) ((ItemPointer) DatumGetPointer(X)) #define ItemPointerGetDatum(X) PointerGetDatum(X) +#define IS_GLOBAL_INDEX(r) ((r)->rd_rel->relkind == RELKIND_GLOBAL_INDEX) /* note: BlockNumber is unsigned, hence can't be negative */ #define CHECK_RELATION_BLOCK_RANGE(rel, blkno) { \ @@ -205,7 +206,7 @@ bt_page_stats_internal(PG_FUNCTION_ARGS, enum pageinspect_version ext_version) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - if (!IS_INDEX(rel) || !IS_BTREE(rel)) + if ((!IS_INDEX(rel) && !IS_GLOBAL_INDEX(rel)) || !IS_BTREE(rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("\"%s\" is not a %s index", @@ -477,7 +478,7 @@ bt_page_items_internal(PG_FUNCTION_ARGS, enum pageinspect_version ext_version) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - if (!IS_INDEX(rel) || !IS_BTREE(rel)) + if ((!IS_INDEX(rel) && !IS_GLOBAL_INDEX(rel)) || !IS_BTREE(rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("\"%s\" is not a %s index", @@ -713,7 +714,7 @@ bt_metap(PG_FUNCTION_ARGS) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - if (!IS_INDEX(rel) || !IS_BTREE(rel)) + if ((!IS_INDEX(rel) && !IS_GLOBAL_INDEX(rel)) || !IS_BTREE(rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("\"%s\" is not a %s index", diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c index 07c3cee5288..ebf030d484c 100644 --- a/contrib/pageinspect/heapfuncs.c +++ b/contrib/pageinspect/heapfuncs.c @@ -101,7 +101,7 @@ text_to_bits(char *str, int len) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg("invalid character \"%.*s\" in t_bits string", - pg_mblen(str + off), str + off))); + pg_mblen_cstr(str + off), str + off))); if (off % 8 == 7) bits[off / 8] = byte; @@ -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,31 +225,32 @@ 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; @@ -261,11 +259,22 @@ heap_page_items(PG_FUNCTION_ARGS) values[12] = 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/passwordcheck/expected/passwordcheck.out b/contrib/passwordcheck/expected/passwordcheck.out index e04cda6bd95..2027681daf6 100644 --- a/contrib/passwordcheck/expected/passwordcheck.out +++ b/contrib/passwordcheck/expected/passwordcheck.out @@ -1,19 +1,19 @@ LOAD 'passwordcheck'; -CREATE USER regress_user1; +CREATE USER regress_passwordcheck_user1; -- ok -ALTER USER regress_user1 PASSWORD 'a_nice_long_password'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'a_nice_long_password'; -- error: too short -ALTER USER regress_user1 PASSWORD 'tooshrt'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'tooshrt'; ERROR: password is too short -- error: contains user name -ALTER USER regress_user1 PASSWORD 'xyzregress_user1'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'xyzregress_passwordcheck_user1'; ERROR: password must not contain user name -- error: contains only letters -ALTER USER regress_user1 PASSWORD 'alessnicelongpassword'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'alessnicelongpassword'; ERROR: password must contain both letters and nonletters -- encrypted ok (password is "secret") -ALTER USER regress_user1 PASSWORD 'md51a44d829a20a23eac686d9f0d258af13'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'md592350e12ac34e52dd598f90893bb3ae7'; -- error: password is user name -ALTER USER regress_user1 PASSWORD 'md5e589150ae7d28f93333afae92b36ef48'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'md507a112732ed9f2087fa90b192d44e358'; ERROR: password must not equal user name -DROP USER regress_user1; +DROP USER regress_passwordcheck_user1; diff --git a/contrib/passwordcheck/sql/passwordcheck.sql b/contrib/passwordcheck/sql/passwordcheck.sql index d98796ac494..1fbd6b0e96e 100644 --- a/contrib/passwordcheck/sql/passwordcheck.sql +++ b/contrib/passwordcheck/sql/passwordcheck.sql @@ -1,23 +1,23 @@ LOAD 'passwordcheck'; -CREATE USER regress_user1; +CREATE USER regress_passwordcheck_user1; -- ok -ALTER USER regress_user1 PASSWORD 'a_nice_long_password'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'a_nice_long_password'; -- error: too short -ALTER USER regress_user1 PASSWORD 'tooshrt'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'tooshrt'; -- error: contains user name -ALTER USER regress_user1 PASSWORD 'xyzregress_user1'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'xyzregress_passwordcheck_user1'; -- error: contains only letters -ALTER USER regress_user1 PASSWORD 'alessnicelongpassword'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'alessnicelongpassword'; -- encrypted ok (password is "secret") -ALTER USER regress_user1 PASSWORD 'md51a44d829a20a23eac686d9f0d258af13'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'md592350e12ac34e52dd598f90893bb3ae7'; -- error: password is user name -ALTER USER regress_user1 PASSWORD 'md5e589150ae7d28f93333afae92b36ef48'; +ALTER USER regress_passwordcheck_user1 PASSWORD 'md507a112732ed9f2087fa90b192d44e358'; -DROP USER regress_user1; +DROP USER regress_passwordcheck_user1; diff --git a/contrib/pg_buffercache/pg_buffercache_pages.c b/contrib/pg_buffercache/pg_buffercache_pages.c index 1bd579fcbb0..206b809d04d 100644 --- a/contrib/pg_buffercache/pg_buffercache_pages.c +++ b/contrib/pg_buffercache/pg_buffercache_pages.c @@ -11,6 +11,7 @@ #include "access/htup_details.h" #include "catalog/pg_type.h" #include "funcapi.h" +#include "miscadmin.h" #include "storage/buf_internals.h" #include "storage/bufmgr.h" @@ -148,6 +149,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); diff --git a/contrib/pg_freespacemap/pg_freespacemap.c b/contrib/pg_freespacemap/pg_freespacemap.c index b82cab2d97e..c9b794806ba 100644 --- a/contrib/pg_freespacemap/pg_freespacemap.c +++ b/contrib/pg_freespacemap/pg_freespacemap.c @@ -11,6 +11,7 @@ #include "access/relation.h" #include "funcapi.h" #include "storage/freespace.h" +#include "utils/rel.h" PG_MODULE_MAGIC; @@ -30,6 +31,12 @@ pg_freespace(PG_FUNCTION_ARGS) rel = relation_open(relid, AccessShareLock); + if (!RELKIND_HAS_STORAGE(rel->rd_rel->relkind)) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("relation \"%s\" does not have storage", + RelationGetRelationName(rel)))); + if (blkno < 0 || blkno > MaxBlockNumber) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), diff --git a/contrib/pg_prewarm/autoprewarm.c b/contrib/pg_prewarm/autoprewarm.c index 0289ea657cb..ad0323546f7 100644 --- a/contrib/pg_prewarm/autoprewarm.c +++ b/contrib/pg_prewarm/autoprewarm.c @@ -593,8 +593,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/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c index 00438239749..419d30a290f 100644 --- a/contrib/pg_prewarm/pg_prewarm.c +++ b/contrib/pg_prewarm/pg_prewarm.c @@ -16,9 +16,11 @@ #include #include "access/relation.h" +#include "catalog/index.h" #include "fmgr.h" #include "miscadmin.h" #include "storage/bufmgr.h" +#include "storage/lmgr.h" #include "storage/smgr.h" #include "utils/acl.h" #include "utils/builtins.h" @@ -67,6 +69,8 @@ pg_prewarm(PG_FUNCTION_ARGS) char *ttype; PrewarmType ptype; AclResult aclresult; + char relkind; + Oid privOid; /* Basic sanity checking. */ if (PG_ARGISNULL(0)) @@ -102,9 +106,43 @@ pg_prewarm(PG_FUNCTION_ARGS) forkString = text_to_cstring(forkName); forkNumber = forkname_to_number(forkString); - /* Open relation and check privileges. */ + /* + * Open relation and check privileges. If the relation is an index, we + * must check the privileges on its parent table instead. + */ + relkind = get_rel_relkind(relOid); + if (relkind == RELKIND_INDEX || + relkind == RELKIND_PARTITIONED_INDEX) + { + privOid = IndexGetRelation(relOid, true); + + /* Lock table before index to avoid deadlock. */ + if (OidIsValid(privOid)) + LockRelationOid(privOid, AccessShareLock); + } + else + privOid = relOid; + rel = relation_open(relOid, AccessShareLock); - aclresult = pg_class_aclcheck(relOid, GetUserId(), ACL_SELECT); + + /* + * It's possible that the relation with OID "privOid" was dropped and the + * OID was reused before we locked it. If that happens, we could be left + * with the wrong parent table OID, in which case we must ERROR. It's + * possible that such a race would change the outcome of + * get_rel_relkind(), too, but the worst case scenario there is that we'll + * check privileges on the index instead of its parent table, which isn't + * too terrible. + */ + if (!OidIsValid(privOid) || + (privOid != relOid && + privOid != IndexGetRelation(relOid, true))) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_TABLE), + errmsg("could not find parent table of index \"%s\"", + RelationGetRelationName(rel)))); + + aclresult = pg_class_aclcheck(privOid, GetUserId(), ACL_SELECT); if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, get_relkind_objtype(rel->rd_rel->relkind), get_rel_name(relOid)); @@ -197,8 +235,11 @@ pg_prewarm(PG_FUNCTION_ARGS) } } - /* Close relation, release lock. */ + /* Close relation, release locks. */ relation_close(rel, AccessShareLock); + if (privOid != relOid) + UnlockRelationOid(privOid, AccessShareLock); + PG_RETURN_INT64(blocks_done); } diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index b52d1877223..0c03565f2e6 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -398,6 +398,35 @@ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 0 | 0 (6 rows) +-- 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) + -- -- queries with locking clauses -- diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index cf7a3f2c5a6..5d2cc175dfd 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -2651,6 +2651,7 @@ generate_normalized_query(JumbleState *jstate, const char *query, 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 */ + int num_constants_replaced = 0; /* * Get constants' lengths (core system only gives us locations). Note @@ -2694,7 +2695,8 @@ generate_normalized_query(JumbleState *jstate, const char *query, /* And insert a param symbol in place of the constant token */ n_quer_loc += sprintf(norm_query + n_quer_loc, "$%d", - i + 1 + jstate->highest_extern_param_id); + num_constants_replaced + 1 + jstate->highest_extern_param_id); + num_constants_replaced++; quer_loc = off + tok_len; last_off = off; diff --git a/contrib/pg_stat_statements/sql/pg_stat_statements.sql b/contrib/pg_stat_statements/sql/pg_stat_statements.sql index dffd2c8c187..45f9cd29b77 100644 --- a/contrib/pg_stat_statements/sql/pg_stat_statements.sql +++ b/contrib/pg_stat_statements/sql/pg_stat_statements.sql @@ -201,6 +201,14 @@ SELECT PLUS_ONE(1); SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C"; +-- 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"; + -- -- queries with locking clauses -- diff --git a/contrib/pg_trgm/Makefile b/contrib/pg_trgm/Makefile index 1fbdc9ec1ef..c1756993ec7 100644 --- a/contrib/pg_trgm/Makefile +++ b/contrib/pg_trgm/Makefile @@ -14,7 +14,7 @@ DATA = pg_trgm--1.5--1.6.sql pg_trgm--1.4--1.5.sql pg_trgm--1.3--1.4.sql \ pg_trgm--1.0--1.1.sql PGFILEDESC = "pg_trgm - trigram matching" -REGRESS = pg_trgm pg_word_trgm pg_strict_word_trgm +REGRESS = pg_trgm pg_utf8_trgm pg_word_trgm pg_strict_word_trgm ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/contrib/pg_trgm/data/trgm_utf8.data b/contrib/pg_trgm/data/trgm_utf8.data new file mode 100644 index 00000000000..713856e76a6 --- /dev/null +++ b/contrib/pg_trgm/data/trgm_utf8.data @@ -0,0 +1,50 @@ +Mathematics +数学 +गणित +Matemáticas +رياضيات +Mathématiques +গণিত +Matemática +Математика +ریاضی +Matematika +Mathematik +数学 +Mathematics +गणित +గణితం +Matematik +கணிதம் +數學 +Toán học +Matematika +数学 +수학 +ریاضی +Lissafi +Hisabati +Matematika +Matematica +ریاضی +ಗಣಿತ +ગણિત +คณิตศาสตร์ +ሂሳብ +गणित +ਗਣਿਤ +數學 +数学 +Iṣiro +數學 +သင်္ချာ +Herrega +رياضي +गणित +Математика +Matematyka +ഗണിതം +Matematika +رياضي +Matematika +Matematică diff --git a/contrib/pg_trgm/expected/pg_trgm.out b/contrib/pg_trgm/expected/pg_trgm.out index 8b5dcf90d18..250f12c346d 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/expected/pg_utf8_trgm.out b/contrib/pg_trgm/expected/pg_utf8_trgm.out new file mode 100644 index 00000000000..0768e7d6a83 --- /dev/null +++ b/contrib/pg_trgm/expected/pg_utf8_trgm.out @@ -0,0 +1,8 @@ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit +\endif +-- Index 50 translations of the word "Mathematics" +CREATE TEMP TABLE mb (s text); +\copy mb from 'data/trgm_utf8.data' +CREATE INDEX ON mb USING gist(s gist_trgm_ops); diff --git a/contrib/pg_trgm/expected/pg_utf8_trgm_1.out b/contrib/pg_trgm/expected/pg_utf8_trgm_1.out new file mode 100644 index 00000000000..8505c4fa552 --- /dev/null +++ b/contrib/pg_trgm/expected/pg_utf8_trgm_1.out @@ -0,0 +1,3 @@ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit diff --git a/contrib/pg_trgm/sql/pg_trgm.sql b/contrib/pg_trgm/sql/pg_trgm.sql index 340c9891899..44debced6d5 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_trgm/sql/pg_utf8_trgm.sql b/contrib/pg_trgm/sql/pg_utf8_trgm.sql new file mode 100644 index 00000000000..0dd962ced83 --- /dev/null +++ b/contrib/pg_trgm/sql/pg_utf8_trgm.sql @@ -0,0 +1,9 @@ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit +\endif + +-- Index 50 translations of the word "Mathematics" +CREATE TEMP TABLE mb (s text); +\copy mb from 'data/trgm_utf8.data' +CREATE INDEX ON mb USING gist(s gist_trgm_ops); diff --git a/contrib/pg_trgm/trgm.h b/contrib/pg_trgm/trgm.h index 405a1d95528..06d3994e692 100644 --- a/contrib/pg_trgm/trgm.h +++ b/contrib/pg_trgm/trgm.h @@ -52,10 +52,10 @@ typedef char trgm[3]; } while(0) #ifdef KEEPONLYALNUM -#define ISWORDCHR(c) (t_isalpha(c) || t_isdigit(c)) +#define ISWORDCHR(c, len) (t_isalpha_with_len(c, len) || t_isdigit_with_len(c, len)) #define ISPRINTABLECHAR(a) ( isascii( *(unsigned char*)(a) ) && (isalnum( *(unsigned char*)(a) ) || *(unsigned char*)(a)==' ') ) #else -#define ISWORDCHR(c) (!t_isspace(c)) +#define ISWORDCHR(c, len) (!t_isspace_with_len(c, len)) #define ISPRINTABLECHAR(a) ( isascii( *(unsigned char*)(a) ) && isprint( *(unsigned char*)(a) ) ) #endif #define ISPRINTABLETRGM(t) ( ISPRINTABLECHAR( ((char*)(t)) ) && ISPRINTABLECHAR( ((char*)(t))+1 ) && ISPRINTABLECHAR( ((char*)(t))+2 ) ) diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c index 6f28db7d1ed..711413df491 100644 --- a/contrib/pg_trgm/trgm_gist.c +++ b/contrib/pg_trgm/trgm_gist.c @@ -692,10 +692,13 @@ gtrgm_penalty(PG_FUNCTION_ARGS) if (ISARRKEY(newval)) { char *cache = (char *) fcinfo->flinfo->fn_extra; - TRGM *cachedVal = (TRGM *) (cache + MAXALIGN(siglen)); + TRGM *cachedVal = NULL; Size newvalsize = VARSIZE(newval); BITVECP sign; + if (cache != NULL) + cachedVal = (TRGM *) (cache + MAXALIGN(siglen)); + /* * Cache the sign data across multiple calls with the same newval. */ diff --git a/contrib/pg_trgm/trgm_op.c b/contrib/pg_trgm/trgm_op.c index fb38135f7a3..63895c3017d 100644 --- a/contrib/pg_trgm/trgm_op.c +++ b/contrib/pg_trgm/trgm_op.c @@ -171,18 +171,29 @@ static char * find_word(char *str, int lenstr, char **endword, int *charlen) { char *beginword = str; + const char *endstr = str + lenstr; - while (beginword - str < lenstr && !ISWORDCHR(beginword)) - beginword += pg_mblen(beginword); + while (beginword < endstr) + { + int clen = pg_mblen_range(beginword, endstr); - if (beginword - str >= lenstr) + if (ISWORDCHR(beginword, clen)) + break; + beginword += clen; + } + + if (beginword >= endstr) return NULL; *endword = beginword; *charlen = 0; - while (*endword - str < lenstr && ISWORDCHR(*endword)) + while (*endword < endstr) { - *endword += pg_mblen(*endword); + int clen = pg_mblen_range(*endword, endstr); + + if (!ISWORDCHR(*endword, clen)) + break; + *endword += clen; (*charlen)++; } @@ -230,9 +241,9 @@ make_trigrams(trgm *tptr, char *str, int bytelen, int charlen) if (bytelen > charlen) { /* Find multibyte character boundaries and apply compact_trigram */ - int lenfirst = pg_mblen(str), - lenmiddle = pg_mblen(str + lenfirst), - lenlast = pg_mblen(str + lenfirst + lenmiddle); + int lenfirst = pg_mblen_unbounded(str), + lenmiddle = pg_mblen_unbounded(str + lenfirst), + lenlast = pg_mblen_unbounded(str + lenfirst + lenmiddle); while ((ptr - str) + lenfirst + lenmiddle + lenlast <= bytelen) { @@ -243,7 +254,7 @@ make_trigrams(trgm *tptr, char *str, int bytelen, int charlen) lenfirst = lenmiddle; lenmiddle = lenlast; - lenlast = pg_mblen(ptr + lenfirst + lenmiddle); + lenlast = pg_mblen_unbounded(ptr + lenfirst + lenmiddle); } } else @@ -723,6 +734,7 @@ get_wildcard_part(const char *str, int lenstr, { const char *beginword = str; const char *endword; + const char *endstr = str + lenstr; char *s = buf; bool in_leading_wildcard_meta = false; bool in_trailing_wildcard_meta = false; @@ -735,11 +747,13 @@ get_wildcard_part(const char *str, int lenstr, * from this loop to the next one, since we may exit at a word character * that is in_escape. */ - while (beginword - str < lenstr) + while (beginword < endstr) { + clen = pg_mblen_range(beginword, endstr); + if (in_escape) { - if (ISWORDCHR(beginword)) + if (ISWORDCHR(beginword, clen)) break; in_escape = false; in_leading_wildcard_meta = false; @@ -750,12 +764,12 @@ get_wildcard_part(const char *str, int lenstr, in_escape = true; else if (ISWILDCARDCHAR(beginword)) in_leading_wildcard_meta = true; - else if (ISWORDCHR(beginword)) + else if (ISWORDCHR(beginword, clen)) break; else in_leading_wildcard_meta = false; } - beginword += pg_mblen(beginword); + beginword += clen; } /* @@ -788,12 +802,12 @@ get_wildcard_part(const char *str, int lenstr, * string boundary. Strip escapes during copy. */ endword = beginword; - while (endword - str < lenstr) + while (endword < endstr) { - clen = pg_mblen(endword); + clen = pg_mblen_range(endword, endstr); if (in_escape) { - if (ISWORDCHR(endword)) + if (ISWORDCHR(endword, clen)) { memcpy(s, endword, clen); (*charlen)++; @@ -821,7 +835,7 @@ get_wildcard_part(const char *str, int lenstr, in_trailing_wildcard_meta = true; break; } - else if (ISWORDCHR(endword)) + else if (ISWORDCHR(endword, clen)) { memcpy(s, endword, clen); (*charlen)++; diff --git a/contrib/pg_trgm/trgm_regexp.c b/contrib/pg_trgm/trgm_regexp.c index 2abccdb191f..651b0ef8f22 100644 --- a/contrib/pg_trgm/trgm_regexp.c +++ b/contrib/pg_trgm/trgm_regexp.c @@ -480,7 +480,7 @@ static TRGM *createTrgmNFAInternal(regex_t *regex, TrgmPackedGraph **graph, static void RE_compile(regex_t *regex, text *text_re, int cflags, Oid collation); static void getColorInfo(regex_t *regex, TrgmNFA *trgmNFA); -static bool convertPgWchar(pg_wchar c, trgm_mb_char *result); +static int convertPgWchar(pg_wchar c, trgm_mb_char *result); static void transformGraph(TrgmNFA *trgmNFA); static void processState(TrgmNFA *trgmNFA, TrgmState *state); static void addKey(TrgmNFA *trgmNFA, TrgmState *state, TrgmStateKey *key); @@ -816,10 +816,11 @@ getColorInfo(regex_t *regex, TrgmNFA *trgmNFA) for (j = 0; j < charsCount; j++) { trgm_mb_char c; + int clen = convertPgWchar(chars[j], &c); - if (!convertPgWchar(chars[j], &c)) + if (!clen) continue; /* ok to ignore it altogether */ - if (ISWORDCHR(c.bytes)) + if (ISWORDCHR(c.bytes, clen)) colorInfo->wordChars[colorInfo->wordCharsCount++] = c; else colorInfo->containsNonWord = true; @@ -831,13 +832,15 @@ getColorInfo(regex_t *regex, TrgmNFA *trgmNFA) /* * Convert pg_wchar to multibyte format. - * Returns false if the character should be ignored completely. + * Returns 0 if the character should be ignored completely, else returns its + * byte length. */ -static bool +static int convertPgWchar(pg_wchar c, trgm_mb_char *result) { /* "s" has enough space for a multibyte character and a trailing NUL */ char s[MAX_MULTIBYTE_CHAR_LEN + 1]; + int clen; /* * We can ignore the NUL character, since it can never appear in a PG text @@ -845,11 +848,11 @@ convertPgWchar(pg_wchar c, trgm_mb_char *result) * reconstructing trigrams. */ if (c == 0) - return false; + return 0; /* Do the conversion, making sure the result is NUL-terminated */ memset(s, 0, sizeof(s)); - pg_wchar2mb_with_len(&c, s, 1); + clen = pg_wchar2mb_with_len(&c, s, 1); /* * In IGNORECASE mode, we can ignore uppercase characters. We assume that @@ -871,7 +874,7 @@ convertPgWchar(pg_wchar c, trgm_mb_char *result) if (strcmp(lowerCased, s) != 0) { pfree(lowerCased); - return false; + return 0; } pfree(lowerCased); } @@ -879,7 +882,7 @@ convertPgWchar(pg_wchar c, trgm_mb_char *result) /* Fill result with exactly MAX_MULTIBYTE_CHAR_LEN bytes */ memcpy(result->bytes, s, MAX_MULTIBYTE_CHAR_LEN); - return true; + return clen; } diff --git a/contrib/pgcrypto/Makefile b/contrib/pgcrypto/Makefile index c0b4f1fcf68..120780088e5 100644 --- a/contrib/pgcrypto/Makefile +++ b/contrib/pgcrypto/Makefile @@ -53,7 +53,8 @@ REGRESS = init md5 sha1 hmac-md5 hmac-sha1 blowfish rijndael \ $(CF_TESTS) \ crypt-des crypt-md5 crypt-blowfish crypt-xdes \ pgp-armor pgp-decrypt pgp-encrypt $(CF_PGP_TESTS) \ - pgp-pubkey-decrypt pgp-pubkey-encrypt pgp-info + pgp-pubkey-decrypt pgp-pubkey-encrypt pgp-pubkey-session \ + pgp-info EXTRA_CLEAN = gen-rtab diff --git a/contrib/pgcrypto/expected/pgp-decrypt.out b/contrib/pgcrypto/expected/pgp-decrypt.out index e8250b090ab..a1dd7586f7b 100644 --- a/contrib/pgcrypto/expected/pgp-decrypt.out +++ b/contrib/pgcrypto/expected/pgp-decrypt.out @@ -317,7 +317,7 @@ SaV9L04ky1qECNDx3XjnoKLC+H7IOQ== (1 row) -- expected: da39a3ee5e6b4b0d3255bfef95601890afd80709 -select encode(digest(pgp_sym_decrypt(dearmor(' +select encode(digest(pgp_sym_decrypt_bytea(dearmor(' -----BEGIN PGP MESSAGE----- Comment: dat3.aes.sha1.mdc.s2k3.z0 @@ -393,6 +393,28 @@ ERROR: Wrong key or corrupt data select pgp_sym_decrypt(pgp_sym_encrypt_bytea('P', 'key'), 'key', 'debug=1'); NOTICE: dbg: parse_literal_data: data type=b ERROR: Not text data +-- NUL byte in text decrypt. Ciphertext source: +-- printf 'a\x00\xc' | gpg --homedir /nonexistent \ +-- --personal-compress-preferences uncompressed --textmode \ +-- --personal-cipher-preferences aes --no-emit-version --batch \ +-- --symmetric --passphrase key --armor +do $$ +begin + perform pgp_sym_decrypt(dearmor(' +-----BEGIN PGP MESSAGE----- + +jA0EBwMCXLc8pozB10Fg0jQBVUID59TLvWutJp0j6eh9ZgjqIRzdYaIymFB8y4XH +vu0YlJP5D5BX7yqZ+Pry7TlDmiFO +=rV7z +-----END PGP MESSAGE----- +'), 'key', 'debug=1'); +exception when others then + raise '%', + regexp_replace(sqlerrm, 'encoding "[^"]*"', 'encoding [REDACTED]'); +end +$$; +ERROR: invalid byte sequence for encoding [REDACTED]: 0x00 +CONTEXT: PL/pgSQL function inline_code_block line 12 at RAISE -- Decryption with a certain incorrect key yields an apparent BZip2-compressed -- plaintext. Ciphertext source: iterative pgp_sym_encrypt('secret', 'key') -- until the random prefix gave rise to that property. diff --git a/contrib/pgcrypto/expected/pgp-decrypt_1.out b/contrib/pgcrypto/expected/pgp-decrypt_1.out index 63d5ab98654..7bcf32ec541 100644 --- a/contrib/pgcrypto/expected/pgp-decrypt_1.out +++ b/contrib/pgcrypto/expected/pgp-decrypt_1.out @@ -313,7 +313,7 @@ SaV9L04ky1qECNDx3XjnoKLC+H7IOQ== (1 row) -- expected: da39a3ee5e6b4b0d3255bfef95601890afd80709 -select encode(digest(pgp_sym_decrypt(dearmor(' +select encode(digest(pgp_sym_decrypt_bytea(dearmor(' -----BEGIN PGP MESSAGE----- Comment: dat3.aes.sha1.mdc.s2k3.z0 @@ -389,6 +389,28 @@ ERROR: Wrong key or corrupt data select pgp_sym_decrypt(pgp_sym_encrypt_bytea('P', 'key'), 'key', 'debug=1'); NOTICE: dbg: parse_literal_data: data type=b ERROR: Not text data +-- NUL byte in text decrypt. Ciphertext source: +-- printf 'a\x00\xc' | gpg --homedir /nonexistent \ +-- --personal-compress-preferences uncompressed --textmode \ +-- --personal-cipher-preferences aes --no-emit-version --batch \ +-- --symmetric --passphrase key --armor +do $$ +begin + perform pgp_sym_decrypt(dearmor(' +-----BEGIN PGP MESSAGE----- + +jA0EBwMCXLc8pozB10Fg0jQBVUID59TLvWutJp0j6eh9ZgjqIRzdYaIymFB8y4XH +vu0YlJP5D5BX7yqZ+Pry7TlDmiFO +=rV7z +-----END PGP MESSAGE----- +'), 'key', 'debug=1'); +exception when others then + raise '%', + regexp_replace(sqlerrm, 'encoding "[^"]*"', 'encoding [REDACTED]'); +end +$$; +ERROR: invalid byte sequence for encoding [REDACTED]: 0x00 +CONTEXT: PL/pgSQL function inline_code_block line 12 at RAISE -- Decryption with a certain incorrect key yields an apparent BZip2-compressed -- plaintext. Ciphertext source: iterative pgp_sym_encrypt('secret', 'key') -- until the random prefix gave rise to that property. diff --git a/contrib/pgcrypto/expected/pgp-pubkey-session.out b/contrib/pgcrypto/expected/pgp-pubkey-session.out new file mode 100644 index 00000000000..e57cb8fab99 --- /dev/null +++ b/contrib/pgcrypto/expected/pgp-pubkey-session.out @@ -0,0 +1,47 @@ +-- Test for overflow with session key at decrypt. +-- Data automatically generated by scripts/pgp_session_data.py. +-- See this file for details explaining how this data is generated. +SELECT pgp_pub_decrypt_bytea( +'\xc1c04c030000000000000000020800a46f5b9b1905b49457a6485474f71ed9b46c2527e1 +da08e1f7871e12c3d38828f2076b984a595bf60f616599ca5729d547de06a258bfbbcd30 +94a321e4668cd43010f0ca8ecf931e5d39bda1152c50c367b11c723f270729245d3ebdbd +0694d320c5a5aa6a405fb45182acb3d7973cbce398e0c5060af7603cfd9ed186ebadd616 +3b50ae42bea5f6d14dda24e6d4687b434c175084515d562e896742b0ba9a1c87d5642e10 +a5550379c71cc490a052ada483b5d96526c0a600fc51755052aa77fdf72f7b4989b920e7 +b90f4b30787a46482670d5caecc7a515a926055ad5509d135702ce51a0e4c1033f2d939d +8f0075ec3428e17310da37d3d2d7ad1ce99adcc91cd446c366c402ae1ee38250343a7fcc +0f8bc28020e603d7a4795ef0dcc1c04c030000000000000000020800a46f5b9b1905b494 +57a6485474f71ed9b46c2527e1da08e1f7871e12c3d38828f2076b984a595bf60f616599 +ca5729d547de06a258bfbbcd3094a321e4668cd43010f0ca8ecf931e5d39bda1152c50c3 +67b11c723f270729245d3ebdbd0694d320c5a5aa6a405fb45182acb3d7973cbce398e0c5 +060af7603cfd9ed186ebadd6163b50ae42bea5f6d14dda24e6d4687b434c175084515d56 +2e896742b0ba9a1c87d5642e10a5550379c71cc490a052ada483b5d96526c0a600fc5175 +5052aa77fdf72f7b4989b920e7b90f4b30787a46482670d5caecc7a515a926055ad5509d +135702ce51a0e4c1033f2d939d8f0075ec3428e17310da37d3d2d7ad1ce99adc'::bytea, +'\xc7c2d8046965d657020800eef8bf1515adb1a3ee7825f75c668ea8dd3e3f9d13e958f6ad +9c55adc0c931a4bb00abe1d52cf7bb0c95d537949d277a5292ede375c6b2a67a3bf7d19f +f975bb7e7be35c2d8300dacba360a0163567372f7dc24000cc7cb6170bedc8f3b1f98c12 +07a6cb4de870a4bc61319b139dcc0e20c368fd68f8fd346d2c0b69c5aed560504e2ec6f1 +23086fe3c5540dc4dd155c0c67257c4ada862f90fe172ace344089da8135e92aca5c2709 +f1c1bc521798bb8c0365841496e709bd184132d387e0c9d5f26dc00fd06c3a76ef66a75c +138285038684707a847b7bd33cfbefbf1d336be954a8048946af97a66352adef8e8b5ae4 +c4748c6f2510265b7a8267bc370dbb00110100010007ff7e72d4f95d2d39901ac12ca5c5 +18e767e719e72340c3fab51c8c5ab1c40f31db8eaffe43533fa61e2dbca2c3f4396c0847 +e5434756acbb1f68128f4136bb135710c89137d74538908dac77967de9e821c559700dd9 +de5a2727eec1f5d12d5d74869dd1de45ed369d94a8814d23861dd163f8c27744b26b98f0 +239c2e6dd1e3493b8cc976fdc8f9a5e250f715aa4c3d7d5f237f8ee15d242e8fa941d1a0 +ed9550ab632d992a97518d142802cb0a97b251319bf5742db8d9d8cbaa06cdfba2d75bc9 +9d77a51ff20bd5ba7f15d7af6e85b904de2855d19af08d45f39deb85403033c69c767a8e +74a343b1d6c8911d34ea441ac3850e57808ed3d885835cbe6c79d10400ef16256f3d5c4c +3341516a2d2aa888df81b603f48a27f3666b40f992a857c1d11ff639cd764a9b42d5a1f8 +58b4aeee36b85508bb5e8b91ef88a7737770b330224479d9b44eae8c631bc43628b69549 +507c0a1af0be0dd7696015abea722b571eb35eefc4ab95595378ec12814727443f625fcd +183bb9b3bccf53b54dd0e5e7a50400ffe08537b2d4e6074e4a1727b658cfccdec8962302 +25e300c05690de45f7065c3d40d86f544a64d51a3e94424f9851a16d1322ebdb41fa8a45 +3131f3e2dc94e858e6396722643df382680f815e53bcdcde5da622f50530a83b217f1103 +cdd6e5e9babe1e415bbff28d44bd18c95f43bbd04afeb2a2a99af38a571c7540de21df03 +ff62c0a33d9143dd3f639893f47732c11c5a12c6052d1935f4d507b7ae1f76ab0e9a69b8 +7305a7f7c19bd509daf4903bff614bc26d118f03e461469c72c12d3a2bb4f78e4d342ce8 +487723649a01ed2b9eb11c662134502c098d55dfcd361939d8370873422c3da75a515a75 +9ffedfe7df44fb3c20f81650801a30d43b5c90b98b3eee'::bytea); +ERROR: Session key too big diff --git a/contrib/pgcrypto/pgp-pgsql.c b/contrib/pgcrypto/pgp-pgsql.c index 0536bfb8921..cf315b126b7 100644 --- a/contrib/pgcrypto/pgp-pgsql.c +++ b/contrib/pgcrypto/pgp-pgsql.c @@ -631,6 +631,7 @@ pgp_sym_decrypt_text(PG_FUNCTION_ARGS) arg = PG_GETARG_BYTEA_PP(2); res = decrypt_internal(0, 1, data, key, NULL, arg); + pg_verifymbstr(VARDATA_ANY(res), VARSIZE_ANY_EXHDR(res), false); PG_FREE_IF_COPY(data, 0); PG_FREE_IF_COPY(key, 1); @@ -732,6 +733,7 @@ pgp_pub_decrypt_text(PG_FUNCTION_ARGS) arg = PG_GETARG_BYTEA_PP(3); res = decrypt_internal(1, 1, data, key, psw, arg); + pg_verifymbstr(VARDATA_ANY(res), VARSIZE_ANY_EXHDR(res), false); PG_FREE_IF_COPY(data, 0); PG_FREE_IF_COPY(key, 1); diff --git a/contrib/pgcrypto/pgp-pubdec.c b/contrib/pgcrypto/pgp-pubdec.c index a0a5738a40e..2a13aa3e6ad 100644 --- a/contrib/pgcrypto/pgp-pubdec.c +++ b/contrib/pgcrypto/pgp-pubdec.c @@ -157,6 +157,7 @@ pgp_parse_pubenc_sesskey(PGP_Context *ctx, PullFilter *pkt) uint8 *msg; int msglen; PGP_MPI *m; + unsigned sess_key_len; pk = ctx->pub_key; if (pk == NULL) @@ -220,11 +221,19 @@ pgp_parse_pubenc_sesskey(PGP_Context *ctx, PullFilter *pkt) if (res < 0) goto out; + sess_key_len = msglen - 3; + if (sess_key_len > PGP_MAX_KEY) + { + px_debug("incorrect session key length=%u", sess_key_len); + res = PXE_PGP_KEY_TOO_BIG; + goto out; + } + /* * got sesskey */ ctx->cipher_algo = *msg; - ctx->sess_key_len = msglen - 3; + ctx->sess_key_len = sess_key_len; memcpy(ctx->sess_key, msg + 1, ctx->sess_key_len); out: diff --git a/contrib/pgcrypto/px.c b/contrib/pgcrypto/px.c index 2099ce2a7a5..8ec2905ec42 100644 --- a/contrib/pgcrypto/px.c +++ b/contrib/pgcrypto/px.c @@ -69,6 +69,7 @@ static const struct error_desc px_err_list[] = { {PXE_PGP_UNEXPECTED_PKT, "Unexpected packet in key data"}, {PXE_PGP_MATH_FAILED, "Math operation failed"}, {PXE_PGP_SHORT_ELGAMAL_KEY, "Elgamal keys must be at least 1024 bits long"}, + {PXE_PGP_KEY_TOO_BIG, "Session key too big"}, {PXE_PGP_UNKNOWN_PUBALGO, "Unknown public-key encryption algorithm"}, {PXE_PGP_WRONG_KEY, "Wrong key"}, {PXE_PGP_MULTIPLE_KEYS, diff --git a/contrib/pgcrypto/px.h b/contrib/pgcrypto/px.h index a16c0a76f10..71ea9753081 100644 --- a/contrib/pgcrypto/px.h +++ b/contrib/pgcrypto/px.h @@ -74,7 +74,7 @@ /* -108 is unused */ #define PXE_PGP_MATH_FAILED -109 #define PXE_PGP_SHORT_ELGAMAL_KEY -110 -/* -111 is unused */ +#define PXE_PGP_KEY_TOO_BIG -111 #define PXE_PGP_UNKNOWN_PUBALGO -112 #define PXE_PGP_WRONG_KEY -113 #define PXE_PGP_MULTIPLE_KEYS -114 diff --git a/contrib/pgcrypto/scripts/pgp_session_data.py b/contrib/pgcrypto/scripts/pgp_session_data.py new file mode 100644 index 00000000000..999350bb2bc --- /dev/null +++ b/contrib/pgcrypto/scripts/pgp_session_data.py @@ -0,0 +1,491 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Generate PGP data to check the session key length of the input data provided +# to pgp_pub_decrypt_bytea(). +# +# First, the crafted data is generated from valid RSA data, freshly generated +# by this script each time it is run, see generate_rsa_keypair(). +# Second, the crafted PGP data is built, see build_message_data() and +# build_key_data(). Finally, the resulting SQL script is generated. +# +# This script generates in stdout the SQL file that is used in the regression +# tests of pgcrypto. The following command can be used to regenerate the file +# which should never be manually manipulated: +# python3 scripts/pgp_session_data.py > sql/pgp-pubkey-session.sql + +import os +import re +import struct +import secrets +import sys +import time + +# pwn for binary manipulation (p32, p64) +from pwn import * + +# Cryptographic libraries, to craft the PGP data. +from Crypto.Cipher import AES +from Crypto.PublicKey import RSA +from Crypto.Util.number import inverse + +# AES key used for session key encryption (16 bytes for AES-128) +AES_KEY = b'\x01' * 16 + +def generate_rsa_keypair(key_size: int = 2048) -> dict: + """ + Generate a fresh RSA key pair. + + The generated key includes all components needed for PGP operations: + - n: public modulus (p * q) + - e: public exponent (typically 65537) + - d: private exponent (e^-1 mod phi(n)) + - p, q: prime factors of n + - u: coefficient (p^-1 mod q) for CRT optimization + + The caller can pass the wanted key size in input, for a default of 2048 + bytes. This function returns the RSA key components, after performing + some validation on them. + """ + + start_time = time.time() + + # Generate RSA key + key = RSA.generate(key_size) + + # Extract all key components + rsa_components = { + 'n': key.n, # Public modulus (p * q) + 'e': key.e, # Public exponent (typically 65537) + 'd': key.d, # Private exponent (e^-1 mod phi(n)) + 'p': key.p, # First prime factor + 'q': key.q, # Second prime factor + 'u': inverse(key.p, key.q) # Coefficient for CRT: p^-1 mod q + } + + # Validate key components for correctness + validate_rsa_key(rsa_components) + + return rsa_components + +def validate_rsa_key(rsa: dict) -> None: + """ + Validate a generated RSA key. + + This function performs basic validation to ensure the RSA key is properly + constructed and all components are consistent, at least mathematically. + + Validations performed: + 1. n = p * q (modulus is product of primes) + 2. gcd(e, phi(n)) = 1 (public exponent is coprime to phi(n)) + 3. (d * e) mod(phi(n)) = 1 (private exponent is multiplicative inverse) + 4. (u * p) (mod q) = 1 (coefficient is correct for CRT) + """ + + n, e, d, p, q, u = rsa['n'], rsa['e'], rsa['d'], rsa['p'], rsa['q'], rsa['u'] + + # Check that n = p * q + if n != p * q: + raise ValueError("RSA validation failed: n <> p * q") + + # Check that p and q are different + if p == q: + raise ValueError("RSA validation failed: p = q (not allowed)") + + # Calculate phi(n) = (p-1)(q-1) + phi_n = (p - 1) * (q - 1) + + # Check that gcd(e, phi(n)) = 1 + def gcd(a, b): + while b: + a, b = b, a % b + return a + + if gcd(e, phi_n) != 1: + raise ValueError("RSA validation failed: gcd(e, phi(n)) <> 1") + + # Check that (d * e) mod(phi(n)) = 1 + if (d * e) % phi_n != 1: + raise ValueError("RSA validation failed: d * e <> 1 (mod phi(n))") + + # Check that (u * p) (mod q) = 1 + if (u * p) % q != 1: + raise ValueError("RSA validation failed: u * p <> 1 (mod q)") + +def mpi_encode(x: int) -> bytes: + """ + Encode an integer as an OpenPGP Multi-Precision Integer (MPI). + + Format (RFC 4880, Section 3.2): + - 2 bytes: bit length of the integer (big-endian) + - N bytes: the integer in big-endian format + + This is used to encode RSA key components (n, e, d, p, q, u) in PGP + packets. + + The integer to encode is given in input, returning an MPI-encoded + integer. + + For example: + mpi_encode(65537) -> b'\x00\x11\x01\x00\x01' + (17 bits, value 0x010001) + """ + if x < 0: + raise ValueError("MPI cannot encode negative integers") + + if x == 0: + # Special case: zero has 0 bits and empty magnitude + bits = 0 + mag = b"" + else: + # Calculate bit length and convert to bytes + bits = x.bit_length() + mag = x.to_bytes((bits + 7) // 8, 'big') + + # Pack: 2-byte bit length + magnitude bytes + return struct.pack('>H', bits) + mag + +def new_packet(tag: int, payload: bytes) -> bytes: + """ + Create a new OpenPGP packet with a proper header. + + OpenPGP packet format (RFC 4880, Section 4.2): + - New packet format: 0xC0 | tag + - Length encoding depends on payload size: + * 0-191: single byte + * 192-8383: two bytes (192 + ((length - 192) >> 8), (length - 192) & 0xFF) + * 8384+: five bytes (0xFF + 4-byte big-endian length) + + The packet is built from a "tag" (1-63) and some "payload" data. The + result generated is a complete OpenPGP packet. + + For example: + new_packet(1, b'data') -> b'\xC1\x04data' + (Tag 1, length 4, payload 'data') + """ + # New packet format: set bit 7 and 6, clear bit 5, tag in bits 0-5 + first = 0xC0 | (tag & 0x3F) + ln = len(payload) + + # Encode length according to OpenPGP specification + if ln <= 191: + # Single byte length for small packets + llen = bytes([ln]) + elif ln <= 8383: + # Two-byte length for medium packets + ln2 = ln - 192 + llen = bytes([192 + (ln2 >> 8), ln2 & 0xFF]) + else: + # Five-byte length for large packets + llen = bytes([255]) + struct.pack('>I', ln) + + return bytes([first]) + llen + payload + +def build_key_data(rsa: dict) -> bytes: + """ + Build the key data, containing an RSA private key. + + The RSA contents should have been generated previously. + + Format (see RFC 4880, Section 5.5.3): + - 1 byte: version (4) + - 4 bytes: creation time (current Unix timestamp) + - 1 byte: public key algorithm (2 = RSA encrypt) + - MPI: RSA public modulus n + - MPI: RSA public exponent e + - 1 byte: string-to-key usage (0 = no encryption) + - MPI: RSA private exponent d + - MPI: RSA prime p + - MPI: RSA prime q + - MPI: RSA coefficient u = p^-1 mod q + - 2 bytes: checksum of private key material + + This function takes a set of RSA key components in input (n, e, d, p, q, u) + and returns a secret key packet. + """ + + # Public key portion + ver = bytes([4]) # Version 4 key + ctime = struct.pack('>I', int(time.time())) # Current Unix timestamp + algo = bytes([2]) # RSA encrypt algorithm + n_mpi = mpi_encode(rsa['n']) # Public modulus + e_mpi = mpi_encode(rsa['e']) # Public exponent + pub = ver + ctime + algo + n_mpi + e_mpi + + # Private key portion + hide_type = bytes([0]) # No string-to-key encryption + d_mpi = mpi_encode(rsa['d']) # Private exponent + p_mpi = mpi_encode(rsa['p']) # Prime p + q_mpi = mpi_encode(rsa['q']) # Prime q + u_mpi = mpi_encode(rsa['u']) # Coefficient u = p^-1 mod q + + # Calculate checksum of private key material (simple sum mod 65536) + private_data = d_mpi + p_mpi + q_mpi + u_mpi + cksum = sum(private_data) & 0xFFFF + + secret = hide_type + private_data + struct.pack('>H', cksum) + payload = pub + secret + + return new_packet(7, payload) + +def pgp_cfb_encrypt_resync(key, plaintext): + """ + Implement OpenPGP CFB mode with resync. + + OpenPGP CFB mode is a variant of standard CFB with a resync operation + after the first two blocks. + + Algorithm (RFC 4880, Section 13.9): + 1. Block 1: FR=zeros, encrypt full block_size bytes + 2. Block 2: FR=block1, encrypt only 2 bytes + 3. Resync: FR = block1[2:] + block2 + 4. Remaining blocks: standard CFB mode + + This function uses the following arguments: + - key: AES encryption key (16 bytes for AES-128) + - plaintext: Data to encrypt + """ + block_size = 16 # AES block size + cipher = AES.new(key[:16], AES.MODE_ECB) # Use ECB for manual CFB + ciphertext = b'' + + # Block 1: FR=zeros, encrypt full 16 bytes + FR = b'\x00' * block_size + FRE = cipher.encrypt(FR) # Encrypt the feedback register + block1 = bytes(a ^ b for a, b in zip(FRE, plaintext[0:16])) + ciphertext += block1 + + # Block 2: FR=block1, encrypt only 2 bytes + FR = block1 + FRE = cipher.encrypt(FR) + block2 = bytes(a ^ b for a, b in zip(FRE[0:2], plaintext[16:18])) + ciphertext += block2 + + # Resync: FR = block1[2:16] + block2[0:2] + # This is the key difference from standard CFB mode + FR = block1[2:] + block2 + + # Block 3+: Continue with standard CFB mode + pos = 18 + while pos < len(plaintext): + FRE = cipher.encrypt(FR) + chunk_len = min(block_size, len(plaintext) - pos) + chunk = plaintext[pos:pos+chunk_len] + enc_chunk = bytes(a ^ b for a, b in zip(FRE[:chunk_len], chunk)) + ciphertext += enc_chunk + + # Update feedback register for next iteration + if chunk_len == block_size: + FR = enc_chunk + else: + # Partial block: pad with old FR bytes + FR = enc_chunk + FR[chunk_len:] + pos += chunk_len + + return ciphertext + +def build_literal_data_packet(data: bytes) -> bytes: + """ + Build a literal data packet containing a message. + + Format (RFC 4880, Section 5.9): + - 1 byte: data format ('b' = binary, 't' = text, 'u' = UTF-8 text) + - 1 byte: filename length (0 = no filename) + - N bytes: filename (empty in this case) + - 4 bytes: date (current Unix timestamp) + - M bytes: literal data + + The data used to build the packet is given in input, with the generated + result returned. + """ + body = bytes([ + ord('b'), # Binary data format + 0, # Filename length (0 = no filename) + ]) + struct.pack('>I', int(time.time())) + data # Current timestamp + data + + return new_packet(11, body) + +def build_symenc_data_packet(sess_key: bytes, cipher_algo: int, payload: bytes) -> bytes: + """ + Build a symmetrically-encrypted data packet using AES-128-CFB. + + This packet contains encrypted data using the session key. The format + includes a random prefix, for security (see RFC 4880, Section 5.7). + + Packet structure: + - Random prefix (block_size bytes) + - Prefix repeat (last 2 bytes of prefix repeated) + - Encrypted literal data packet + + This function uses the following set of arguments: + - sess_key: Session key for encryption + - cipher_algo: Cipher algorithm identifier (7 = AES-128) + - payload: Data to encrypt (wrapped in literal data packet) + """ + block_size = 16 # AES-128 block size + key = sess_key[:16] # Use first 16 bytes for AES-128 + + # Create random prefix + repeat last 2 bytes (total 18 bytes) + # This is required by OpenPGP for integrity checking + prefix_random = secrets.token_bytes(block_size) + prefix = prefix_random + prefix_random[-2:] # 18 bytes total + + # Wrap payload in literal data packet + literal_pkt = build_literal_data_packet(payload) + + # Plaintext = prefix + literal data packet + plaintext = prefix + literal_pkt + + # Encrypt using OpenPGP CFB mode with resync + ciphertext = pgp_cfb_encrypt_resync(key, plaintext) + + return new_packet(9, ciphertext) + +def build_tag1_packet(rsa: dict, sess_key: bytes) -> bytes: + """ + Build a public-key encrypted key. + + This is a very important function, as it is able to create the packet + triggering the overflow check. This function can also be used to create + "legit" packet data. + + Format (RFC 4880, Section 5.1): + - 1 byte: version (3) + - 8 bytes: key ID (0 = any key accepted) + - 1 byte: public key algorithm (2 = RSA encrypt) + - MPI: RSA-encrypted session key + + This uses in arguments the generated RSA key pair, and the session key + to encrypt. The latter is manipulated to trigger the overflow. + + This function returns a complete packet encrypted by a session key. + """ + + # Calculate RSA modulus size in bytes + n_bytes = (rsa['n'].bit_length() + 7) // 8 + + # Session key message format: + # - 1 byte: symmetric cipher algorithm (7 = AES-128) + # - N bytes: session key + # - 2 bytes: checksum (simple sum of session key bytes) + algo_byte = bytes([7]) # AES-128 algorithm identifier + cksum = sum(sess_key) & 0xFFFF # 16-bit checksum + M = algo_byte + sess_key + struct.pack('>H', cksum) + + # PKCS#1 v1.5 padding construction + # Format: 0x02 || PS || 0x00 || M + # Total padded message must be exactly n_bytes long. + total_len = n_bytes # Total length must equal modulus size in bytes + ps_len = total_len - len(M) - 2 # Subtract 2 for 0x02 and 0x00 bytes + + if ps_len < 8: + raise ValueError(f"Padding string too short ({ps_len} bytes); need at least 8 bytes. " + f"Message length: {len(M)}, Modulus size: {n_bytes} bytes") + + # Create padding string with *ALL* bytes being 0xFF (no zero separator!) + PS = bytes([0xFF]) * ps_len + + # Construct the complete padded message + # Normal PKCS#1 v1.5 padding: 0x02 || PS || 0x00 || M + padded = bytes([0x02]) + PS + bytes([0x00]) + M + + # Verify padding construction + if len(padded) != n_bytes: + raise ValueError(f"Padded message length ({len(padded)}) doesn't match RSA modulus size ({n_bytes})") + + # Convert padded message to integer and encrypt with RSA + m_int = int.from_bytes(padded, 'big') + + # Ensure message is smaller than modulus (required for RSA) + if m_int >= rsa['n']: + raise ValueError("Padded message is larger than RSA modulus") + + # RSA encryption: c = m^e mod n + c_int = pow(m_int, rsa['e'], rsa['n']) + + # Encode encrypted result as MPI + c_mpi = mpi_encode(c_int) + + # Build complete packet + ver = bytes([3]) # Version 3 packet + key_id = b"\x00" * 8 # Key ID (0 = any key accepted) + algo = bytes([2]) # RSA encrypt algorithm + payload = ver + key_id + algo + c_mpi + + return new_packet(1, payload) + +def build_message_data(rsa: dict) -> bytes: + """ + This function creates a crafted message, with a long session key + length. + + This takes in input the RSA key components generated previously, + returning a concatenated set of PGP packets crafted for the purpose + of this test. + """ + + # Base prefix for session key (AES key + padding + size). + # Note that the crafted size is the important part for this test. + prefix = AES_KEY + b"\x00" * 16 + p32(0x10) + + # Build encrypted data packet, legit. + sedata = build_symenc_data_packet(AES_KEY, cipher_algo=7, payload=b"\x0a\x00") + + # Build multiple packets + packets = [ + # First packet, legit. + build_tag1_packet(rsa, prefix), + + # Encrypted data packet, legit. + sedata, + + # Second packet: information payload. + # + # This packet contains a longer-crafted session key, able to trigger + # the overflow check in pgcrypto. This is the critical part, and + # and you are right to pay a lot of attention here if you are + # reading this code. + build_tag1_packet(rsa, prefix) + ] + + return b"".join(packets) + +def main(): + # Default key size. + # This number can be set to a higher number if wanted, like 4096. We + # just do not need to do that here. + key_size = 2048 + + # Generate fresh RSA key pair + rsa = generate_rsa_keypair(key_size) + + # Generate the message data. + print("### Building message data", file=sys.stderr) + message_data = build_message_data(rsa) + + # Build the key containing the RSA private key + print("### Building key data", file=sys.stderr) + key_data = build_key_data(rsa) + + # Convert to hexadecimal, for the bytea used in the SQL file. + message_data = message_data.hex() + key_data = key_data.hex() + + # Split each value into lines of 72 characters, for readability. + message_data = re.sub("(.{72})", "\\1\n", message_data, 0, re.DOTALL) + key_data = re.sub("(.{72})", "\\1\n", key_data, 0, re.DOTALL) + + # Get the script filename for documentation + file_basename = os.path.basename(__file__) + + # Output the SQL test case + print(f'''-- Test for overflow with session key at decrypt. +-- Data automatically generated by scripts/{file_basename}. +-- See this file for details explaining how this data is generated. +SELECT pgp_pub_decrypt_bytea( +'\\x{message_data}'::bytea, +'\\x{key_data}'::bytea);''', + file=sys.stdout) + +if __name__ == "__main__": + main() diff --git a/contrib/pgcrypto/sql/pgp-decrypt.sql b/contrib/pgcrypto/sql/pgp-decrypt.sql index 557948d7c75..4901ab66539 100644 --- a/contrib/pgcrypto/sql/pgp-decrypt.sql +++ b/contrib/pgcrypto/sql/pgp-decrypt.sql @@ -230,7 +230,7 @@ SaV9L04ky1qECNDx3XjnoKLC+H7IOQ== '), '0123456789abcdefghij'), 'sha1'), 'hex'); -- expected: da39a3ee5e6b4b0d3255bfef95601890afd80709 -select encode(digest(pgp_sym_decrypt(dearmor(' +select encode(digest(pgp_sym_decrypt_bytea(dearmor(' -----BEGIN PGP MESSAGE----- Comment: dat3.aes.sha1.mdc.s2k3.z0 @@ -288,6 +288,27 @@ VsxxqLSPzNLAeIspJk5G -- Routine text/binary mismatch. select pgp_sym_decrypt(pgp_sym_encrypt_bytea('P', 'key'), 'key', 'debug=1'); +-- NUL byte in text decrypt. Ciphertext source: +-- printf 'a\x00\xc' | gpg --homedir /nonexistent \ +-- --personal-compress-preferences uncompressed --textmode \ +-- --personal-cipher-preferences aes --no-emit-version --batch \ +-- --symmetric --passphrase key --armor +do $$ +begin + perform pgp_sym_decrypt(dearmor(' +-----BEGIN PGP MESSAGE----- + +jA0EBwMCXLc8pozB10Fg0jQBVUID59TLvWutJp0j6eh9ZgjqIRzdYaIymFB8y4XH +vu0YlJP5D5BX7yqZ+Pry7TlDmiFO +=rV7z +-----END PGP MESSAGE----- +'), 'key', 'debug=1'); +exception when others then + raise '%', + regexp_replace(sqlerrm, 'encoding "[^"]*"', 'encoding [REDACTED]'); +end +$$; + -- Decryption with a certain incorrect key yields an apparent BZip2-compressed -- plaintext. Ciphertext source: iterative pgp_sym_encrypt('secret', 'key') -- until the random prefix gave rise to that property. diff --git a/contrib/pgcrypto/sql/pgp-pubkey-session.sql b/contrib/pgcrypto/sql/pgp-pubkey-session.sql new file mode 100644 index 00000000000..51792f1f4d8 --- /dev/null +++ b/contrib/pgcrypto/sql/pgp-pubkey-session.sql @@ -0,0 +1,46 @@ +-- Test for overflow with session key at decrypt. +-- Data automatically generated by scripts/pgp_session_data.py. +-- See this file for details explaining how this data is generated. +SELECT pgp_pub_decrypt_bytea( +'\xc1c04c030000000000000000020800a46f5b9b1905b49457a6485474f71ed9b46c2527e1 +da08e1f7871e12c3d38828f2076b984a595bf60f616599ca5729d547de06a258bfbbcd30 +94a321e4668cd43010f0ca8ecf931e5d39bda1152c50c367b11c723f270729245d3ebdbd +0694d320c5a5aa6a405fb45182acb3d7973cbce398e0c5060af7603cfd9ed186ebadd616 +3b50ae42bea5f6d14dda24e6d4687b434c175084515d562e896742b0ba9a1c87d5642e10 +a5550379c71cc490a052ada483b5d96526c0a600fc51755052aa77fdf72f7b4989b920e7 +b90f4b30787a46482670d5caecc7a515a926055ad5509d135702ce51a0e4c1033f2d939d +8f0075ec3428e17310da37d3d2d7ad1ce99adcc91cd446c366c402ae1ee38250343a7fcc +0f8bc28020e603d7a4795ef0dcc1c04c030000000000000000020800a46f5b9b1905b494 +57a6485474f71ed9b46c2527e1da08e1f7871e12c3d38828f2076b984a595bf60f616599 +ca5729d547de06a258bfbbcd3094a321e4668cd43010f0ca8ecf931e5d39bda1152c50c3 +67b11c723f270729245d3ebdbd0694d320c5a5aa6a405fb45182acb3d7973cbce398e0c5 +060af7603cfd9ed186ebadd6163b50ae42bea5f6d14dda24e6d4687b434c175084515d56 +2e896742b0ba9a1c87d5642e10a5550379c71cc490a052ada483b5d96526c0a600fc5175 +5052aa77fdf72f7b4989b920e7b90f4b30787a46482670d5caecc7a515a926055ad5509d +135702ce51a0e4c1033f2d939d8f0075ec3428e17310da37d3d2d7ad1ce99adc'::bytea, +'\xc7c2d8046965d657020800eef8bf1515adb1a3ee7825f75c668ea8dd3e3f9d13e958f6ad +9c55adc0c931a4bb00abe1d52cf7bb0c95d537949d277a5292ede375c6b2a67a3bf7d19f +f975bb7e7be35c2d8300dacba360a0163567372f7dc24000cc7cb6170bedc8f3b1f98c12 +07a6cb4de870a4bc61319b139dcc0e20c368fd68f8fd346d2c0b69c5aed560504e2ec6f1 +23086fe3c5540dc4dd155c0c67257c4ada862f90fe172ace344089da8135e92aca5c2709 +f1c1bc521798bb8c0365841496e709bd184132d387e0c9d5f26dc00fd06c3a76ef66a75c +138285038684707a847b7bd33cfbefbf1d336be954a8048946af97a66352adef8e8b5ae4 +c4748c6f2510265b7a8267bc370dbb00110100010007ff7e72d4f95d2d39901ac12ca5c5 +18e767e719e72340c3fab51c8c5ab1c40f31db8eaffe43533fa61e2dbca2c3f4396c0847 +e5434756acbb1f68128f4136bb135710c89137d74538908dac77967de9e821c559700dd9 +de5a2727eec1f5d12d5d74869dd1de45ed369d94a8814d23861dd163f8c27744b26b98f0 +239c2e6dd1e3493b8cc976fdc8f9a5e250f715aa4c3d7d5f237f8ee15d242e8fa941d1a0 +ed9550ab632d992a97518d142802cb0a97b251319bf5742db8d9d8cbaa06cdfba2d75bc9 +9d77a51ff20bd5ba7f15d7af6e85b904de2855d19af08d45f39deb85403033c69c767a8e +74a343b1d6c8911d34ea441ac3850e57808ed3d885835cbe6c79d10400ef16256f3d5c4c +3341516a2d2aa888df81b603f48a27f3666b40f992a857c1d11ff639cd764a9b42d5a1f8 +58b4aeee36b85508bb5e8b91ef88a7737770b330224479d9b44eae8c631bc43628b69549 +507c0a1af0be0dd7696015abea722b571eb35eefc4ab95595378ec12814727443f625fcd +183bb9b3bccf53b54dd0e5e7a50400ffe08537b2d4e6074e4a1727b658cfccdec8962302 +25e300c05690de45f7065c3d40d86f544a64d51a3e94424f9851a16d1322ebdb41fa8a45 +3131f3e2dc94e858e6396722643df382680f815e53bcdcde5da622f50530a83b217f1103 +cdd6e5e9babe1e415bbff28d44bd18c95f43bbd04afeb2a2a99af38a571c7540de21df03 +ff62c0a33d9143dd3f639893f47732c11c5a12c6052d1935f4d507b7ae1f76ab0e9a69b8 +7305a7f7c19bd509daf4903bff614bc26d118f03e461469c72c12d3a2bb4f78e4d342ce8 +487723649a01ed2b9eb11c662134502c098d55dfcd361939d8370873422c3da75a515a75 +9ffedfe7df44fb3c20f81650801a30d43b5c90b98b3eee'::bytea); diff --git a/contrib/pgstattuple/pgstattuple.c b/contrib/pgstattuple/pgstattuple.c index a1498a93ae5..a53ae773982 100644 --- a/contrib/pgstattuple/pgstattuple.c +++ b/contrib/pgstattuple/pgstattuple.c @@ -434,7 +434,7 @@ pgstat_btree_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno, /* fully empty page */ stat->free_space += BLCKSZ; } - else + else if (PageGetSpecialSize(page) == MAXALIGN(sizeof(BTPageOpaqueData))) { BTPageOpaque opaque; @@ -468,10 +468,16 @@ pgstat_hash_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno, Buffer buf; Page page; - buf = _hash_getbuf_with_strategy(rel, blkno, HASH_READ, 0, bstrategy); + buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy); + LockBuffer(buf, HASH_READ); page = BufferGetPage(buf); - if (PageGetSpecialSize(page) == MAXALIGN(sizeof(HashPageOpaqueData))) + if (PageIsNew(page)) + { + /* fully empty page */ + stat->free_space += BLCKSZ; + } + else if (PageGetSpecialSize(page) == MAXALIGN(sizeof(HashPageOpaqueData))) { HashPageOpaque opaque; @@ -512,17 +518,23 @@ pgstat_gist_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno, buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy); LockBuffer(buf, GIST_SHARE); - gistcheckpage(rel, buf); page = BufferGetPage(buf); - - if (GistPageIsLeaf(page)) + if (PageIsNew(page)) { - pgstat_index_page(stat, page, FirstOffsetNumber, - PageGetMaxOffsetNumber(page)); + /* fully empty page */ + stat->free_space += BLCKSZ; } - else + else if (PageGetSpecialSize(page) == MAXALIGN(sizeof(GISTPageOpaqueData))) { - /* root or node */ + if (GistPageIsLeaf(page)) + { + pgstat_index_page(stat, page, FirstOffsetNumber, + PageGetMaxOffsetNumber(page)); + } + else + { + /* root or node */ + } } UnlockReleaseBuffer(buf); diff --git a/contrib/postgres_fdw/.gitignore b/contrib/postgres_fdw/.gitignore index 5dcb3ff9723..b4903eba657 100644 --- a/contrib/postgres_fdw/.gitignore +++ b/contrib/postgres_fdw/.gitignore @@ -1,4 +1,6 @@ # Generated subdirectories /log/ /results/ +/output_iso/ /tmp_check/ +/tmp_check_iso/ diff --git a/contrib/postgres_fdw/Makefile b/contrib/postgres_fdw/Makefile index c1b0cad453f..c797f3e04d5 100644 --- a/contrib/postgres_fdw/Makefile +++ b/contrib/postgres_fdw/Makefile @@ -17,6 +17,8 @@ EXTENSION = postgres_fdw DATA = postgres_fdw--1.0.sql postgres_fdw--1.0--1.1.sql REGRESS = postgres_fdw +ISOLATION = eval_plan_qual +ISOLATION_OPTS = --load-extension=postgres_fdw ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/contrib/postgres_fdw/expected/eval_plan_qual.out b/contrib/postgres_fdw/expected/eval_plan_qual.out new file mode 100644 index 00000000000..ec7236559b2 --- /dev/null +++ b/contrib/postgres_fdw/expected/eval_plan_qual.out @@ -0,0 +1,131 @@ +Parsed test spec with 2 sessions + +starting permutation: s0_update_l s1_tuplock_l_0 s0_commit s1_commit +step s0_update_l: UPDATE l SET i = i + 1; +step s1_tuplock_l_0: + EXPLAIN (VERBOSE, COSTS OFF) + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.i = 123 FOR UPDATE OF l; + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.i = 123 FOR UPDATE OF l; + +step s0_commit: COMMIT; +step s1_tuplock_l_0: <... completed> +QUERY PLAN +--------------------------------------------------------------------- +LockRows + Output: l.i, l.v, l.ctid, ft.* + -> Nested Loop + Output: l.i, l.v, l.ctid, ft.* + -> Seq Scan on public.l + Output: l.i, l.v, l.ctid + Filter: (l.i = 123) + -> Foreign Scan on public.ft + Output: ft.*, ft.i + Remote SQL: SELECT i, v FROM public.t WHERE ((i = 123)) +(10 rows) + +i|v +-+- +(0 rows) + +step s1_commit: COMMIT; + +starting permutation: s0_update_l s1_tuplock_l_1 s0_commit s1_commit +step s0_update_l: UPDATE l SET i = i + 1; +step s1_tuplock_l_1: + EXPLAIN (VERBOSE, COSTS OFF) + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.v = 'foo' FOR UPDATE OF l; + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.v = 'foo' FOR UPDATE OF l; + +step s0_commit: COMMIT; +step s1_tuplock_l_1: <... completed> +QUERY PLAN +----------------------------------------------------------------------------- +LockRows + Output: l.i, l.v, l.ctid, ft.* + -> Nested Loop + Output: l.i, l.v, l.ctid, ft.* + -> Seq Scan on public.l + Output: l.i, l.v, l.ctid + Filter: (l.v = 'foo'::text) + -> Foreign Scan on public.ft + Output: ft.*, ft.i + Remote SQL: SELECT i, v FROM public.t WHERE (($1::integer = i)) +(10 rows) + +i|v +-+- +(0 rows) + +step s1_commit: COMMIT; + +starting permutation: s0_update_a s1_tuplock_a_0 s0_commit s1_commit +step s0_update_a: UPDATE a SET i = i + 1; +step s1_tuplock_a_0: + EXPLAIN (VERBOSE, COSTS OFF) + SELECT a.i FROM a, fb, fc WHERE a.i = fb.i AND fb.i = fc.i FOR UPDATE OF a; + SELECT a.i FROM a, fb, fc WHERE a.i = fb.i AND fb.i = fc.i FOR UPDATE OF a; + +step s0_commit: COMMIT; +step s1_tuplock_a_0: <... completed> +QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +LockRows + Output: a.i, a.ctid, fb.*, fc.* + -> Nested Loop + Output: a.i, a.ctid, fb.*, fc.* + Join Filter: (fb.i = a.i) + -> Foreign Scan + Output: fb.*, fb.i, fc.*, fc.i + Relations: (public.fb) INNER JOIN (public.fc) + Remote SQL: SELECT CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2.i) END, r2.i, CASE WHEN (r3.*)::text IS NOT NULL THEN ROW(r3.i) END, r3.i FROM (public.b r2 INNER JOIN public.c r3 ON (((r2.i = r3.i)))) + -> Nested Loop + Output: fb.*, fb.i, fc.*, fc.i + Join Filter: (fb.i = fc.i) + -> Foreign Scan on public.fb + Output: fb.*, fb.i + Remote SQL: SELECT i FROM public.b ORDER BY i ASC NULLS LAST + -> Foreign Scan on public.fc + Output: fc.*, fc.i + Remote SQL: SELECT i FROM public.c + -> Seq Scan on public.a + Output: a.i, a.ctid +(20 rows) + +i +- +(0 rows) + +step s1_commit: COMMIT; + +starting permutation: s0_update_a s1_tuplock_a_1 s0_commit s1_commit +step s0_update_a: UPDATE a SET i = i + 1; +step s1_tuplock_a_1: + EXPLAIN (VERBOSE, COSTS OFF) + SELECT a.i, + (SELECT 1 FROM fb, fc WHERE a.i = fb.i AND fb.i = fc.i) + FROM a FOR UPDATE; + SELECT a.i, + (SELECT 1 FROM fb, fc WHERE a.i = fb.i AND fb.i = fc.i) + FROM a FOR UPDATE; + +step s0_commit: COMMIT; +step s1_tuplock_a_1: <... completed> +QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------- +LockRows + Output: a.i, ((SubPlan 1)), a.ctid + -> Seq Scan on public.a + Output: a.i, (SubPlan 1), a.ctid + SubPlan 1 + -> Foreign Scan + Output: 1 + Relations: (public.fb) INNER JOIN (public.fc) + Remote SQL: SELECT NULL FROM (public.b r1 INNER JOIN public.c r2 ON (((r2.i = $1::integer)) AND ((r1.i = $1::integer)))) +(9 rows) + +i|?column? +-+-------- +2| +(1 row) + +step s1_commit: COMMIT; diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 75c1a0c54f7..aa00ad44a52 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -5791,20 +5791,31 @@ UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END ALTER SERVER loopback OPTIONS (DROP extensions); INSERT INTO ft2 (c1,c2,c3) SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id; +-- this will do a remote seqscan, causing unstable result order, so sort EXPLAIN (verbose, costs off) -UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; -- can't be pushed down - QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Update on public.ft2 - Output: c1, c2, c3, c4, c5, c6, c7, c8 - Remote SQL: UPDATE "S 1"."T 1" SET c3 = $2 WHERE ctid = $1 RETURNING "C 1", c2, c3, c4, c5, c6, c7, c8 - -> Foreign Scan on public.ft2 - Output: 'bar'::text, ctid, ft2.* - Filter: (postgres_fdw_abs(ft2.c1) > 2000) - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" FOR UPDATE -(7 rows) +WITH cte AS ( + UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING * +) SELECT * FROM cte ORDER BY c1; -- can't be pushed down + QUERY PLAN +------------------------------------------------------------------------------------------------------------------ + Sort + Output: cte.c1, cte.c2, cte.c3, cte.c4, cte.c5, cte.c6, cte.c7, cte.c8 + Sort Key: cte.c1 + CTE cte + -> Update on public.ft2 + Output: ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8 + Remote SQL: UPDATE "S 1"."T 1" SET c3 = $2 WHERE ctid = $1 RETURNING "C 1", c2, c3, c4, c5, c6, c7, c8 + -> Foreign Scan on public.ft2 + Output: 'bar'::text, ft2.ctid, ft2.* + Filter: (postgres_fdw_abs(ft2.c1) > 2000) + Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" FOR UPDATE + -> CTE Scan on cte + Output: cte.c1, cte.c2, cte.c3, cte.c4, cte.c5, cte.c6, cte.c7, cte.c8 +(13 rows) -UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; +WITH cte AS ( + UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING * +) SELECT * FROM cte ORDER BY c1; c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+----+-----+----+----+----+------------+---- 2001 | 1 | bar | | | | ft2 | @@ -7427,6 +7438,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 -- =================================================================== diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index f5a4c1d5835..60723eb520e 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -239,6 +239,7 @@ typedef struct PgFdwDirectModifyState PGresult *result; /* result for query */ int num_tuples; /* # of result tuples */ int next_tuple; /* index of next one to return */ + MemoryContextCallback result_cb; /* ensures result will get freed */ Relation resultRel; /* relcache entry for the target relation */ AttrNumber *attnoMap; /* array of attnums of input user columns */ AttrNumber ctidAttno; /* attnum of input ctid column */ @@ -2646,6 +2647,17 @@ postgresBeginDirectModify(ForeignScanState *node, int eflags) dmstate = (PgFdwDirectModifyState *) palloc0(sizeof(PgFdwDirectModifyState)); node->fdw_state = (void *) dmstate; + /* + * We use a memory context callback to ensure that the dmstate's PGresult + * (if any) will be released, even if the query fails somewhere that's + * outside our control. The callback is always armed for the duration of + * the query; this relies on PQclear(NULL) being a no-op. + */ + dmstate->result_cb.func = (MemoryContextCallbackFunction) PQclear; + dmstate->result_cb.arg = NULL; + MemoryContextRegisterResetCallback(CurrentMemoryContext, + &dmstate->result_cb); + /* * Identify which user to do the remote access as. This should match what * ExecCheckRTEPerms() does. @@ -2795,7 +2807,12 @@ postgresEndDirectModify(ForeignScanState *node) /* Release PGresult */ if (dmstate->result) + { PQclear(dmstate->result); + dmstate->result = NULL; + /* ... and don't forget to disable the callback */ + dmstate->result_cb.arg = NULL; + } /* Release remote connection */ ReleaseConnection(dmstate->conn); @@ -4570,13 +4587,17 @@ execute_dml_stmt(ForeignScanState *node) /* * 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. + * We use a memory context callback to ensure that the PGresult will be + * released, even if the query fails somewhere that's outside our control. + * The callback is already registered, just need to fill in its arg. */ + Assert(dmstate->result == NULL); dmstate->result = pgfdw_get_result(dmstate->conn, dmstate->query); + dmstate->result_cb.arg = dmstate->result; + 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(ERROR, dmstate->result, dmstate->conn, false, dmstate->query); /* Get the number of rows affected. */ @@ -4620,31 +4641,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(); - { - if (dmstate->result) - 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; diff --git a/contrib/postgres_fdw/specs/eval_plan_qual.spec b/contrib/postgres_fdw/specs/eval_plan_qual.spec new file mode 100644 index 00000000000..9f52270db69 --- /dev/null +++ b/contrib/postgres_fdw/specs/eval_plan_qual.spec @@ -0,0 +1,102 @@ +# Tests for the EvalPlanQual mechanism involving foreign tables + +setup +{ + DO $d$ + BEGIN + EXECUTE $$CREATE SERVER loopback FOREIGN DATA WRAPPER postgres_fdw + OPTIONS (dbname '$$||current_database()||$$', + port '$$||current_setting('port')||$$', + use_remote_estimate 'true' + )$$; + END; + $d$; + CREATE USER MAPPING FOR PUBLIC SERVER loopback; + + CREATE TABLE l (i int, v text); + CREATE TABLE t (i int, v text); + CREATE FOREIGN TABLE ft (i int, v text) SERVER loopback OPTIONS (table_name 't'); + + INSERT INTO l VALUES (123, 'foo'), (456, 'bar'), (789, 'baz'); + INSERT INTO t SELECT i, to_char(i, 'FM0000') FROM generate_series(1, 1000) i; + CREATE INDEX t_idx ON t (i); + ANALYZE l, t; + + CREATE TABLE a (i int); + CREATE TABLE b (i int); + CREATE TABLE c (i int); + CREATE FOREIGN TABLE fb (i int) SERVER loopback OPTIONS (table_name 'b'); + CREATE FOREIGN TABLE fc (i int) SERVER loopback OPTIONS (table_name 'c'); + + INSERT INTO a VALUES (1); + INSERT INTO b VALUES (1); + INSERT INTO c VALUES (1); + ANALYZE a, b, c; +} + +teardown +{ + DROP TABLE l; + DROP TABLE t; + DROP TABLE a; + DROP TABLE b; + DROP TABLE c; + DROP SERVER loopback CASCADE; +} + +session s0 +setup { BEGIN ISOLATION LEVEL READ COMMITTED; } +step s0_update_l { UPDATE l SET i = i + 1; } +step s0_update_a { UPDATE a SET i = i + 1; } +step s0_commit { COMMIT; } + +session s1 +setup { BEGIN ISOLATION LEVEL READ COMMITTED; } + +# Test for EPQ with a foreign scan pushing down a qual +step s1_tuplock_l_0 { + EXPLAIN (VERBOSE, COSTS OFF) + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.i = 123 FOR UPDATE OF l; + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.i = 123 FOR UPDATE OF l; +} + +# Same test, except that the qual is parameterized +step s1_tuplock_l_1 { + EXPLAIN (VERBOSE, COSTS OFF) + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.v = 'foo' FOR UPDATE OF l; + SELECT l.* FROM l, ft WHERE l.i = ft.i AND l.v = 'foo' FOR UPDATE OF l; +} + +# Test for EPQ with a foreign scan pushing down a join +step s1_tuplock_a_0 { + EXPLAIN (VERBOSE, COSTS OFF) + SELECT a.i FROM a, fb, fc WHERE a.i = fb.i AND fb.i = fc.i FOR UPDATE OF a; + SELECT a.i FROM a, fb, fc WHERE a.i = fb.i AND fb.i = fc.i FOR UPDATE OF a; +} + +# Same test, except that the join is contained in a SubLink sub-select, not +# in the main query +step s1_tuplock_a_1 { + EXPLAIN (VERBOSE, COSTS OFF) + SELECT a.i, + (SELECT 1 FROM fb, fc WHERE a.i = fb.i AND fb.i = fc.i) + FROM a FOR UPDATE; + SELECT a.i, + (SELECT 1 FROM fb, fc WHERE a.i = fb.i AND fb.i = fc.i) + FROM a FOR UPDATE; +} + +step s1_commit { COMMIT; } + +# This test checks the case of rechecking a pushed-down qual. +permutation s0_update_l s1_tuplock_l_0 s0_commit s1_commit + +# This test checks the same case, except that the qual is parameterized. +permutation s0_update_l s1_tuplock_l_1 s0_commit s1_commit + +# This test checks the case of rechecking a pushed-down join. +permutation s0_update_a s1_tuplock_a_0 s0_commit s1_commit + +# This test exercises EvalPlanQual with a SubLink sub-select (which should +# be unaffected by any EPQ recheck behavior in the outer query). +permutation s0_update_a s1_tuplock_a_1 s0_commit s1_commit diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 1c983e26a09..6d4edd6f93f 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1337,9 +1337,16 @@ UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END ALTER SERVER loopback OPTIONS (DROP extensions); INSERT INTO ft2 (c1,c2,c3) SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id; + +-- this will do a remote seqscan, causing unstable result order, so sort EXPLAIN (verbose, costs off) -UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; -- can't be pushed down -UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; +WITH cte AS ( + UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING * +) SELECT * FROM cte ORDER BY c1; -- can't be pushed down +WITH cte AS ( + UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING * +) SELECT * FROM cte ORDER BY c1; + EXPLAIN (verbose, costs off) UPDATE ft2 SET c3 = 'baz' FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1) @@ -1949,6 +1956,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 -- =================================================================== diff --git a/contrib/test_decoding/Makefile b/contrib/test_decoding/Makefile index bca513e61e9..0c7cec6c404 100644 --- a/contrib/test_decoding/Makefile +++ b/contrib/test_decoding/Makefile @@ -8,7 +8,8 @@ REGRESS = ddl xact rewrite toast permissions decoding_in_xact \ spill slot truncate stream stats twophase twophase_stream ISOLATION = mxact delayed_startup ondisk_startup concurrent_ddl_dml \ oldest_xmin snapshot_transfer subxact_without_top concurrent_stream \ - twophase_snapshot catalog_change_snapshot skip_snapshot_restore + twophase_snapshot catalog_change_snapshot skip_snapshot_restore \ + invalidation_distribution REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf #BEGIN - SQL PARSER diff --git a/contrib/test_decoding/expected/invalidation_distribution.out b/contrib/test_decoding/expected/invalidation_distribution.out new file mode 100644 index 00000000000..f2bce5ce75c --- /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', '2', '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', '2', '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 dd6053f9c1f..57268b38d33 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/specs/invalidation_distribution.spec b/contrib/test_decoding/specs/invalidation_distribution.spec new file mode 100644 index 00000000000..d9b5cd75aad --- /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', '2', '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 88bd30f5ff7..7f2fe3d7ed7 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/unaccent/unaccent.c b/contrib/unaccent/unaccent.c index 2b3819fb2e8..b3cf893417d 100644 --- a/contrib/unaccent/unaccent.c +++ b/contrib/unaccent/unaccent.c @@ -149,9 +149,9 @@ initTrie(const char *filename) state = 0; for (ptr = line; *ptr; ptr += ptrlen) { - ptrlen = pg_mblen(ptr); + ptrlen = pg_mblen_cstr(ptr); /* ignore whitespace, but end src or trg */ - if (t_isspace(ptr)) + if (t_isspace_cstr(ptr)) { if (state == 1) state = 2; @@ -315,6 +315,7 @@ unaccent_lexize(PG_FUNCTION_ARGS) char *srcchar = (char *) PG_GETARG_POINTER(1); int32 len = PG_GETARG_INT32(2); char *srcstart = srcchar; + const char *srcend = srcstart + len; TSLexeme *res; StringInfoData buf; @@ -342,7 +343,7 @@ unaccent_lexize(PG_FUNCTION_ARGS) } else { - matchlen = pg_mblen(srcchar); + matchlen = pg_mblen_range(srcchar, srcend); if (buf.data != NULL) appendBinaryStringInfo(&buf, srcchar, matchlen); } diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c index 9f93e419a9e..48cd7032178 100644 --- a/contrib/xml2/xpath.c +++ b/contrib/xml2/xpath.c @@ -220,7 +220,7 @@ pgxmlNodeSetToText(xmlNodeSetPtr nodeset, xmlBufferWriteCHAR(buf, toptagname); xmlBufferWriteChar(buf, ">"); } - result = xmlStrdup(buf->content); + result = xmlStrdup(xmlBufferContent(buf)); xmlBufferFree(buf); return result; } diff --git a/doc/src/sgml/amcheck.sgml b/doc/src/sgml/amcheck.sgml index c570690b59c..bff328351ed 100644 --- a/doc/src/sgml/amcheck.sgml +++ b/doc/src/sgml/amcheck.sgml @@ -353,7 +353,7 @@ SET client_min_messages = DEBUG1; verification functions is true, an additional phase of verification is performed against the table associated with the target index relation. This consists of a dummy - CREATE INDEX operation, which checks for the + CREATE INDEX CONCURRENTLY operation, which checks for the presence of all hypothetical new index tuples against a temporary, in-memory summarizing structure (this is built when needed during the basic first phase of verification). The summarizing structure diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index dba6479cf5c..8256b6f3e64 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1580,7 +1580,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. @@ -1616,11 +1616,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. - @@ -11600,8 +11595,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx The last two states are seen only when is - non-negative. If restart_lsn is NULL, this - field is null. + non-negative. @@ -12560,7 +12554,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. diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 9e22a5b403e..fd257bfa853 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -864,8 +864,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 diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 34966d21467..d4bd981dfab 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1578,7 +1578,7 @@ include_dir 'conf.d' This parameter determines whether the passphrase command set by ssl_passphrase_command will also be called during a configuration reload if a key file needs a passphrase. If this - parameter is off (the default), then + parameter is off (the default), then ssl_passphrase_command will be ignored during a reload and the SSL configuration will not be reloaded if a passphrase is needed. That setting is appropriate for a command that requires a @@ -1586,6 +1586,12 @@ include_dir 'conf.d' running. Setting this parameter to on might be appropriate if the passphrase is obtained from a file, for example. + + This parameter must be set to on when running on + Windows since all connections + will perform a configuration reload due to the different process model + of that platform. + This parameter can only be set in the postgresql.conf file or on the server command line. @@ -1658,7 +1664,8 @@ include_dir 'conf.d' Controls whether huge pages are requested for the main shared memory area. Valid values are try (the default), - on, and off. With + on, and off. + This parameter can only be set at server start. With huge_pages set to try, the server will try to request huge pages, but fall back to the default if that fails. With on, failure to request huge pages @@ -2012,6 +2019,7 @@ include_dir 'conf.d' platform, is generally discouraged because it typically requires non-default kernel settings to allow for large allocations (see ). + This parameter can only be set at server start. @@ -2039,6 +2047,7 @@ include_dir 'conf.d' however, it may be useful for debugging, when the pg_dynshmem directory is stored on a RAM disk, or when other shared memory facilities are not available. + This parameter can only be set at server start. @@ -3157,8 +3166,9 @@ include_dir 'conf.d' When this parameter is on, 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 default value is off. Only superusers can change this setting. @@ -4220,9 +4230,9 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows - Record commit time of transactions. This parameter - can only be set in postgresql.conf file or on the server - command line. The default value is off. + Record commit time of transactions. + This parameter can only be set at server start. + The default value is off. @@ -5304,24 +5314,24 @@ ANY num_sync ( width_bucket(5.35, 0.024, 10.06, 5) 3 + + + width_bucket(9, 10, 0, 10) + 2 @@ -1757,8 +1767,8 @@ repeat('Pg', 4) PgPgPgPg 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 + 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 @@ -10267,10 +10277,10 @@ now() 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. + 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 command. + 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, @@ -13413,7 +13423,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple UUID Functions - + UUID generating @@ -23237,6 +23247,21 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); + + + + pg_get_partition_constraintdef + + pg_get_partition_constraintdef ( table oid ) + text + + + Reconstructs the definition of a partition constraint. + (This is a decompiled reconstruction, not the original text + of the command.) + + + @@ -24104,6 +24129,34 @@ SELECT collation for ('foo' COLLATE "de_DE"); + + + + 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. + + + @@ -24232,6 +24285,31 @@ SELECT collation for ('foo' COLLATE "de_DE"); a subtransaction ID. + + + + + 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. + + @@ -24239,7 +24317,9 @@ SELECT collation for ('foo' COLLATE "de_DE"); The internal transaction ID type xid is 32 bits wide and wraps around every 4 billion transactions. However, - the functions shown in use a + 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. The data type pg_snapshot stores information about @@ -25893,8 +25973,7 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); Drops the physical or logical replication slot named slot_name. Same as replication protocol - command DROP_REPLICATION_SLOT. For logical slots, this must - be called while connected to the same database the slot was created on. + command DROP_REPLICATION_SLOT. @@ -26570,7 +26649,8 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); 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. + is associated with the given values, or if dealing with a temporary + relation. diff --git a/doc/src/sgml/history.sgml b/doc/src/sgml/history.sgml index ff094eb4014..fe62a8bc8b7 100644 --- a/doc/src/sgml/history.sgml +++ b/doc/src/sgml/history.sgml @@ -165,7 +165,7 @@ A short tutorial introducing regular SQL features as well as those of Postgres95 was distributed with the - source code + source code. @@ -197,11 +197,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/legal.sgml b/doc/src/sgml/legal.sgml index af13bf2e055..742c0146f7f 100644 --- a/doc/src/sgml/legal.sgml +++ b/doc/src/sgml/legal.sgml @@ -1,9 +1,9 @@ -2025 +2026 - 1996–2025 + 1996–2026 The PostgreSQL Global Development Group @@ -11,13 +11,15 @@ Legal Notice - PostgreSQL is Copyright © 1996–2025 - by the PostgreSQL Global Development Group. + PostgreSQL Database Management System + (also known as Postgres, formerly known as Postgres95) - Postgres95 is Copyright © 1994–5 - by the Regents of the University of California. + Portions Copyright © 1996-2026, PostgreSQL Global Development Group + + + Portions Copyright © 1994, The Regents of the University of California diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 7805dd44a18..847d7de723a 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -335,8 +335,7 @@ 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 + Applications that do not require snapshot export may suppress it with the NOEXPORT_SNAPSHOT option. diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 4cd243f361e..3aae2a53a1f 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -741,7 +741,10 @@ HINT: Stop the postmaster and vacuum that database in single-user mode. 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. @@ -772,10 +775,11 @@ HINT: Stop the postmaster and vacuum that database in single-user mode. As a safety device, an aggressive vacuum scan will occur for any table whose multixact-age is greater than . Also, if the - storage occupied by multixacts members exceeds 2GB, aggressive vacuum + storage occupied by multixacts members exceeds about 10GB, aggressive vacuum scans will occur more often for all tables, starting with those that have the oldest multixact-age. Both of these kinds of aggressive - scans will occur even if autovacuum is nominally disabled. + scans will occur even if autovacuum is nominally disabled. The members storage + area can grow up to about 20GB before reaching wraparound. diff --git a/doc/src/sgml/pgfreespacemap.sgml b/doc/src/sgml/pgfreespacemap.sgml index 5025498249d..0dbbbdd8a6f 100644 --- a/doc/src/sgml/pgfreespacemap.sgml +++ b/doc/src/sgml/pgfreespacemap.sgml @@ -66,7 +66,7 @@ For indexes, what is tracked is entirely-unused pages, rather than free space within pages. Therefore, the values are not meaningful, just - whether a page is full or empty. + whether a page is in-use or empty. diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index eacbd696cdb..5e8ed769c47 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -818,6 +818,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. + @@ -2554,8 +2564,6 @@ The commands accepted in replication mode are: Drops a replication slot, freeing any reserved server-side resources. - If the slot is a logical slot that was created in a database other than - the database the walsender is connected to, this command fails. diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml index cf9c0890af3..a2fd0ac1750 100644 --- a/doc/src/sgml/queries.sgml +++ b/doc/src/sgml/queries.sgml @@ -1455,10 +1455,10 @@ GROUP BY GROUPING SETS ( When multiple window functions are used, all the window functions having - syntactically equivalent PARTITION BY and ORDER BY - clauses in their window definitions are guaranteed to be evaluated in a - single pass over the data. Therefore they will see the same sort ordering, - even if the ORDER BY does not uniquely determine an ordering. + equivalent PARTITION BY and ORDER BY + clauses in their window definitions are guaranteed to see the same + ordering of the input rows, even if the ORDER BY does + not uniquely determine the ordering. However, no guarantees are made about the evaluation of functions having different PARTITION BY or ORDER BY specifications. (In such cases a sort step is typically required between the passes of diff --git a/doc/src/sgml/query.sgml b/doc/src/sgml/query.sgml index a864d146f02..7024c26fad7 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 + . diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index b224cab0c70..2953639a0a8 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -226,9 +226,10 @@ 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; + 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. @@ -328,24 +329,22 @@ WITH ( MODULUS numeric_literal, REM n_distinct_inherited, which override the number-of-distinct-values estimates made by subsequent ANALYZE - operations. n_distinct affects the statistics for the table - itself, while n_distinct_inherited affects the statistics - gathered for the table plus its inheritance children. When set to a - positive value, ANALYZE will assume that the column contains - exactly the specified number of distinct nonnull values. When set to a - negative value, which must be greater - than or equal to -1, ANALYZE will assume that the number of - distinct nonnull values in the column is linear in the size of the - table; the exact count is to be computed by multiplying the estimated - table size by the absolute value of the given number. For example, - a value of -1 implies that all values in the column are distinct, while - a value of -0.5 implies that each value appears twice on the average. - This can be useful when the size of the table changes over time, since - the multiplication by the number of rows in the table is not performed - until query planning time. Specify a value of 0 to revert to estimating - the number of distinct values normally. For more information on the use - of statistics by the PostgreSQL query - planner, refer to . + operations. n_distinct affects the statistics for the + table itself, while n_distinct_inherited affects the + statistics gathered for the table plus its inheritance children, and for + the statistics gathered for partitioned tables. When the value + specified is a positive value, the query planner will assume that the + column contains exactly the specified number of distinct nonnull values. + Fractional values may also be specified by using values below 0 and + above or equal to -1. This instructs the query planner to estimate the + number of distinct values by multiplying the absolute value of the + specified number by the estimated number of rows in the table. For + example, a value of -1 implies that all values in the column are + distinct, while a value of -0.5 implies that each value appears twice on + average. This can be useful when the size of the table changes over + time. For more information on the use of statistics by the + PostgreSQL query planner, refer to + . Changing per-attribute options acquires a diff --git a/doc/src/sgml/ref/clusterdb.sgml b/doc/src/sgml/ref/clusterdb.sgml index c838b22c440..b81bc2dc48e 100644 --- a/doc/src/sgml/ref/clusterdb.sgml +++ b/doc/src/sgml/ref/clusterdb.sgml @@ -249,9 +249,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/create_index.sgml b/doc/src/sgml/ref/create_index.sgml index 7f4da975d6c..ccd9e5baa48 100644 --- a/doc/src/sgml/ref/create_index.sgml +++ b/doc/src/sgml/ref/create_index.sgml @@ -27,6 +27,7 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] storage_parameter [= value] [, ... ] ) ] [ TABLESPACE tablespace_name ] [ WHERE predicate ] + [ GLOBAL ] @@ -364,6 +365,18 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] + + GLOBAL + + + Used with UNIQUE to enable cross-partition + uniqueness check on a partitioned table. Attempts to insert or + update data which would result in duplicate entries in other + partitions as a whole will generate an error. + + + + diff --git a/doc/src/sgml/ref/create_policy.sgml b/doc/src/sgml/ref/create_policy.sgml index c8ecc06347f..a971937a30d 100644 --- a/doc/src/sgml/ref/create_policy.sgml +++ b/doc/src/sgml/ref/create_policy.sgml @@ -49,6 +49,8 @@ CREATE POLICY name ON WITH CHECK. When a USING expression returns true for a given row then that row is visible to the user, while if false or null is returned then the row is not visible. + Typically, no error occurs when a row is not visible, but see + for exceptions. When a WITH CHECK expression returns true for a row then that row is inserted or updated, while if false or null is returned then an error occurs. @@ -194,8 +196,9 @@ CREATE POLICY name ON SELECT), and will not be available for modification (in an UPDATE - or DELETE). Such rows are silently suppressed; no error - is reported. + or DELETE). Typically, such rows are silently + suppressed; no error is reported (but see + for exceptions). @@ -251,8 +254,10 @@ CREATE POLICY name ON INSERT or UPDATE command attempts to add rows to the table that do not pass the ALL - policy's WITH CHECK expression, the entire - command will be aborted. + policy's WITH CHECK expression (or its + USING expression, if it does not have a + WITH CHECK expression), the entire command will + be aborted. @@ -268,11 +273,41 @@ CREATE POLICY name ON SELECT policy will be returned during a SELECT query, and that queries that require SELECT permissions, such as - UPDATE, will also only see those records + UPDATE and DELETE, + will also only see those records that are allowed by the SELECT policy. A SELECT policy cannot have a WITH CHECK expression, as it only applies in cases where - records are being retrieved from the relation. + records are being retrieved from the relation, except as described + below. + + + If a data-modifying query has a RETURNING clause, + SELECT permissions are required on the relation, + and any newly inserted or updated rows from the relation must satisfy + the relation's SELECT policies in order to be + available to the RETURNING clause. If a newly + inserted or updated row does not satisfy the relation's + SELECT policies, an error will be thrown (inserted + or updated rows to be returned are never + silently ignored). + + + If an INSERT has an ON CONFLICT DO + UPDATE clause, or an ON CONFLICT DO + NOTHING clause with an arbiter index or constraint + specification, then SELECT + permissions are required on the relation, and the rows proposed for + insertion are checked using the relation's SELECT + policies. If a row proposed for insertion does not satisfy the + relation's SELECT policies, an error is thrown + (the INSERT is never silently + avoided). In addition, if the UPDATE path is + taken, the row to be updated and the new updated row are checked + against the relation's SELECT policies, and an + error is thrown if they are not satisfied (an auxiliary + UPDATE is never silently + avoided). @@ -292,10 +327,11 @@ CREATE POLICY name ON - Note that INSERT with ON CONFLICT DO - UPDATE checks INSERT policies' - WITH CHECK expressions only for rows appended - to the relation by the INSERT path. + Note that an INSERT with an ON CONFLICT + DO NOTHING/UPDATE clause will check the + INSERT policies' WITH CHECK + expressions for all rows proposed for insertion, regardless of + whether or not they end up being inserted. @@ -368,10 +404,10 @@ CREATE POLICY name ON DELETE for a policy means that it will apply to DELETE commands. Only rows that pass this policy will be seen by a DELETE command. There can - be rows that are visible through a SELECT that are - not available for deletion, if they do not pass the - USING expression for - the DELETE policy. + be rows that are visible through a SELECT policy + that are not available for deletion, if they do not pass the + USING expression for the DELETE + policy. @@ -400,6 +436,15 @@ CREATE POLICY name ON + + summarizes how the different + types of policy apply to specific commands. In the table, + check means that the policy expression is checked and an + error is thrown if it returns false or null, whereas filter + means that the row is silently ignored if the policy expression returns + false or null. + + Policies Applied by Command Type @@ -424,8 +469,8 @@ CREATE POLICY name ON - SELECT - Existing row + SELECT / COPY ... TO + Filter existing row @@ -433,32 +478,24 @@ CREATE POLICY name ON SELECT FOR UPDATE/SHARE - Existing row + Filter existing row - Existing row + Filter existing row INSERT / MERGE ... THEN INSERT - - New row - - - - - - INSERT ... RETURNING - New row + Check new row  - If read access is required to the existing or new row (for example, - a WHERE or RETURNING clause - that refers to columns from the relation). + If read access is required to either the existing or new row (for + example, a WHERE or RETURNING + clause that refers to columns from the relation). - New row + Check new row @@ -466,29 +503,61 @@ CREATE POLICY name ON UPDATE / MERGE ... THEN UPDATE - Existing & new rows + Filter existing row  & + check new row  - Existing row - New row + Filter existing row + Check new row DELETE - Existing row + Filter existing row  + + + + + Filter existing row + + + INSERT ... ON CONFLICT + + Check new row  + + If an arbiter index or constraint is specified. + + + + Row proposed for insertion is checked regardless of whether or not a + conflict occurs. + + + + + Check new row  - Existing row ON CONFLICT DO UPDATE - Existing & new rows + + Check existing & new rows  + + New row of the auxiliary UPDATE command, which + might be different from the new row of the original + INSERT command. + + + - Existing row - New row + Check existing row + + Check new row  + diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml index 7ed48f50b0b..45ca9ce7776 100644 --- a/doc/src/sgml/ref/create_publication.sgml +++ b/doc/src/sgml/ref/create_publication.sgml @@ -127,13 +127,15 @@ CREATE PUBLICATION namepublish_via_partition_root (boolean) - This parameter determines whether changes in a partitioned table (or - on its partitions) contained in the publication will be published - using the identity and schema of the partitioned table rather than - that of the individual partitions that are actually changed; the - latter is the default. Enabling this allows the changes to be - replicated into a non-partitioned table or a partitioned table - consisting of a different set of partitions. + This parameter controls how changes to a partitioned table (or any of + its partitions) are published. When set to true, + changes are published using the identity and schema of the + root partitioned table. When set to false (the + default), changes are published using the identity and schema of the + individual partitions where the changes actually occurred. Enabling + this option allows the changes to be replicated into a + non-partitioned table or into a partitioned table whose partition + structure differs from that of the publisher. diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index a119cb1e26a..9900663bd90 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1224,8 +1224,8 @@ WITH ( MODULUS numeric_literal, REM REFERENCES (foreign key) constraints accept this clause. NOT NULL and CHECK constraints are not deferrable. Note that deferrable constraints cannot be used as - conflict arbitrators in an INSERT statement that - includes an ON CONFLICT DO UPDATE clause. + conflict arbiters in an INSERT statement that + includes an ON CONFLICT clause. diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml index e4afa1c01d3..8df52d2ad89 100644 --- a/doc/src/sgml/ref/create_trigger.sgml +++ b/doc/src/sgml/ref/create_trigger.sgml @@ -199,9 +199,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 diff --git a/doc/src/sgml/ref/createuser.sgml b/doc/src/sgml/ref/createuser.sgml index 0e1a39a3fe6..f64b477564d 100644 --- a/doc/src/sgml/ref/createuser.sgml +++ b/doc/src/sgml/ref/createuser.sgml @@ -485,7 +485,7 @@ PostgreSQL documentation $ createuser -P -s -e joe Enter password for new role: xyzzy Enter it again: xyzzy -CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; +CREATE ROLE joe PASSWORD 'SCRAM-SHA-256$4096:44560wPMLfjqiAzyPDZ/eQ==$4CA054rZlSFEq8Z3FEhToBTa2X6KnWFxFkPwIbKoDe0=:L/nbSZRCjp6RhOhKK56GoR1zibCCSePKshCJ9lnl3yw=' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; In the above example, the new password isn't actually echoed when typed, but we show what was typed for clarity. As you see, the password is diff --git a/doc/src/sgml/ref/insert.sgml b/doc/src/sgml/ref/insert.sgml index 6f0adee1a12..d73ff3d51f7 100644 --- a/doc/src/sgml/ref/insert.sgml +++ b/doc/src/sgml/ref/insert.sgml @@ -113,10 +113,13 @@ INSERT INTO table_name [ AS INSERT privilege on the listed columns. Similarly, when ON CONFLICT DO UPDATE is specified, you only need UPDATE privilege on the column(s) that are - listed to be updated. However, ON CONFLICT DO UPDATE - also requires SELECT privilege on any column whose - values are read in the ON CONFLICT DO UPDATE - expressions or condition. + listed to be updated. However, all forms of ON CONFLICT + also require SELECT privilege on any column whose values + are read. This includes any column mentioned in + conflict_target (including columns referred to + by the arbiter constraint), and any column mentioned in an + ON CONFLICT DO UPDATE expression, + or a WHERE clause condition. @@ -556,6 +559,15 @@ INSERT INTO table_name [ AS + + + While CREATE INDEX CONCURRENTLY or REINDEX + CONCURRENTLY is running on a unique index, INSERT + ... ON CONFLICT statements on the same table may unexpectedly + fail with a unique violation. + + + diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 5e5c141e178..2a3bc852be6 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -92,6 +92,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. + + + @@ -1025,6 +1037,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. + + + + diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml index 0d77a4836ae..2646c64ff3a 100644 --- a/doc/src/sgml/ref/pg_dumpall.sgml +++ b/doc/src/sgml/ref/pg_dumpall.sgml @@ -65,6 +65,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. + + + @@ -512,6 +522,26 @@ PostgreSQL documentation + + + + + 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. + + + + diff --git a/doc/src/sgml/ref/pg_recvlogical.sgml b/doc/src/sgml/ref/pg_recvlogical.sgml index 6b1d98d06ef..e4b3955edca 100644 --- a/doc/src/sgml/ref/pg_recvlogical.sgml +++ b/doc/src/sgml/ref/pg_recvlogical.sgml @@ -46,6 +46,16 @@ PostgreSQL documentation a slot without consuming it, use pg_logical_slot_peek_changes. + + + 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. + diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index d3065210c7f..71ea95a9c7b 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. + + @@ -664,6 +676,28 @@ PostgreSQL documentation + + + + + 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. + + + 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. + + + + diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml index 8add90e8ed3..9d599549071 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.0.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. + + diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 494340e1285..388efae56ef 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -3190,6 +3190,24 @@ lo_import 152801 + + \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 ] @@ -3364,6 +3382,24 @@ testdb=> \setenv LESS -imx4F + + \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 diff --git a/doc/src/sgml/ref/reindex.sgml b/doc/src/sgml/ref/reindex.sgml index 22dbb520d52..ad4d535acff 100644 --- a/doc/src/sgml/ref/reindex.sgml +++ b/doc/src/sgml/ref/reindex.sgml @@ -446,14 +446,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 8cb8bf4fa39..5ce1c581650 100644 --- a/doc/src/sgml/ref/reindexdb.sgml +++ b/doc/src/sgml/ref/reindexdb.sgml @@ -361,9 +361,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 e5e5fb483e9..aa45c0af248 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/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml index 223b986b920..2d2330c05cb 100644 --- a/doc/src/sgml/ref/vacuumdb.sgml +++ b/doc/src/sgml/ref/vacuumdb.sgml @@ -504,9 +504,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/release-14.sgml b/doc/src/sgml/release-14.sgml index b6606a00199..ca754b87e93 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -1,6 +1,4658 @@ + + Release 14.22 + + + Release date: + 2026-02-26 + + + + This release contains a small number of fixes from 14.21. + For information about new features in major release 14, see + . + + + + The PostgreSQL community will stop + releasing updates for the 14.X release series in November 2026. + Users are encouraged to update to a newer release branch soon. + + + + Migration to Version 14.22 + + + A dump/restore is not required for those running 14.X. + + + + However, if you are upgrading from a version earlier than 14.19, + see . + + + + + Changes + + + + + + + Fix failure after replaying a multixid truncation record from WAL + that was generated by an older minor version (Heikki Linnakangas) + § + + + + Erroneous logic for coping with the way that previous versions + handled multixid wraparound led to replay failure, with messages + like could not access status of transaction. + A typical scenario in which this could occur is a standby server of + the latest minor version consuming WAL from a primary server of an + older version. + + + + + + + Avoid incorrect complaint of invalid encoding + when substring() is applied + to toasted data (Noah Misch) + § + § + § + + + + The fix for CVE-2026-2006 was too aggressive and could raise an + error about an incomplete character in cases that are actually + valid. + + + + + + + Fix pg_stat_get_backend_wait_event() + and pg_stat_get_backend_wait_event_type() + to report values for auxiliary processes (Heikki Linnakangas) + § + + + + Previously these functions returned NULL for auxiliary processes, + but that's inconsistent with + the pg_stat_activity view. + + + + + + + Fix casting a composite-type variable to a domain type when + returning its value from a PL/pgSQL function (Tom Lane) + § + + + + If the variable's value is NULL, a cache lookup failed for + type 0 error resulted. + + + + + + + Fix potential null pointer dereference + in contrib/hstore's binary input function + (Michael Paquier) + § + + + + hstore's receive function crashed on input containing + duplicate keys. hstore values generated by Postgres + would never contain duplicate keys, so this mistake has gone + unnoticed. The crash could be provoked by malicious or corrupted + data. + + + + + + + + + + Release 14.21 + + + Release date: + 2026-02-12 + + + + This release contains a variety of fixes from 14.20. + For information about new features in major release 14, see + . + + + + The PostgreSQL community will stop + releasing updates for the 14.X release series in November 2026. + Users are encouraged to update to a newer release branch soon. + + + + Migration to Version 14.21 + + + A dump/restore is not required for those running 14.X. + + + + However, if you are upgrading from a version earlier than 14.19, + see . + + + + + Changes + + + + + + + Guard against unexpected dimensions + of oidvector/int2vector (Tom Lane) + § + + + + These data types are expected to be 1-dimensional arrays containing + no nulls, but there are cast pathways that permit violating those + expectations. Add checks to some functions that were depending on + those expectations without verifying them, and could misbehave in + consequence. + + + + The PostgreSQL Project thanks + Altan Birler for reporting this problem. + (CVE-2026-2003) + + + + + + + Harden selectivity estimators against being attached to operators + that accept unexpected data types (Tom Lane) + § + § + § + + + + contrib/intarray contained a selectivity + estimation function that could be abused for arbitrary code + execution, because it did not check that its input was of the + expected data type. Third-party extensions should check for similar + hazards and add defenses using the technique intarray now uses. + Since such extension fixes will take time, we now require superuser + privilege to attach a non-built-in selectivity estimator to an + operator. + + + + The PostgreSQL Project thanks + Daniel Firer, as part of zeroday.cloud, for reporting this problem. + (CVE-2026-2004) + + + + + + + Fix buffer overrun in contrib/pgcrypto's + PGP decryption functions (Michael Paquier) + § + + + + Decrypting a crafted message with an overlength session key caused a + buffer overrun, with consequences as bad as arbitrary code + execution. + + + + The PostgreSQL Project thanks + Team Xint Code, as part of zeroday.cloud, for reporting this problem. + (CVE-2026-2005) + + + + + + + Fix inadequate validation of multibyte character lengths + (Thomas Munro, Noah Misch) + § + § + § + § + § + § + + + + Assorted bugs allowed an attacker able to issue crafted SQL to + overrun string buffers, with consequences as bad as arbitrary code + execution. After these fixes, applications may + observe invalid byte sequence for encoding errors + when string functions process invalid text that has been stored in + the database. + + + + The PostgreSQL Project thanks Paul Gerste + and Moritz Sanft, as part of zeroday.cloud, for reporting this + problem. + (CVE-2026-2006) + + + + + + + Don't allow CTE references in sub-selects to determine semantic + levels of aggregate functions (Tom Lane) + § + + + + This change undoes a change made two minor releases ago, instead + throwing an error if a sub-select references a CTE that's below the + semantic level that standard SQL rules would assign to the aggregate + based on contained column references and aggregates. The attempted + fix turned out to cause problems of its own, and it's unclear what + to do instead. Since sub-selects within aggregates are disallowed + altogether by the SQL standard, treating such cases as errors seems + sufficient. + + + + + + + Fix failure when all children of a partitioned target table + of an update or delete have been pruned (Amit Langote) + § + + + + In such cases, the executor could report could not find junk + ctid column errors, even though nothing needs to be done. + + + + + + + Allow indexscans on partial hash indexes even when the index's + predicate implies the truth of the WHERE clause (Tom Lane) + § + + + + Normally we drop a WHERE clause that is implied by the predicate, + since it's pointless to test it; it must hold for every index + entry. However that can prevent creation of an indexscan plan if + the index is one that requires a WHERE clause on the leading index + key, as hash indexes do. Don't drop implied clauses when + considering such an index. + + + + + + + Do not emit WAL for unlogged BRIN indexes (Kirill Reshke) + § + + + + One seldom-taken code path incorrectly emitted a WAL record + relating to a BRIN index even if the index was marked unlogged. + Crash recovery would then fail to replay that record, complaining + that the file already exists. + + + + + + + Prevent truncation of CLOG that is still needed by + unread NOTIFY messages (Joel Jacobson, Heikki + Linnakangas) + § + § + § + + + + This fix prevents could not access status of + transaction errors when a backend is slow to + absorb NOTIFY messages. + + + + + + + Escalate errors occurring during NOTIFY message + processing to FATAL, i.e. close the connection (Heikki Linnakangas) + § + + + + Formerly, if a backend got an error while absorbing + a NOTIFY message, it would advance past that + message, report the error to the client, and move on. That behavior + was fraught with problems though. One big concern is that the + client has no good way to know that a notification was lost, and + certainly no way to know what was in it. Depending on the + application logic, missing a notification could cause the + application to get stuck waiting, for example. Also, any remaining + messages would not get processed until someone sent a + new NOTIFY. + + + + Also, if the connection is idle at the time of receiving + a NOTIFY signal, any ERROR would be escalated to + FATAL anyway, due to unrelated concerns. Therefore, we've chosen to + make that happen in all cases, for consistency and to provide a + clear signal to the application that it might have missed some + notifications. + + + + + + + Fix bug in following update chain when locking a tuple (Jasper + Smit) + § + + + + This code path neglected to check the xmin of the first new tuple in + the update chain, making it possible to lock an unrelated tuple if + the original updater aborted and the space was immediately reclaimed + by VACUUM and then re-used. + That could cause unexpected transaction delays or deadlocks. + Errors associated with having identified the wrong tuple have also + been observed. + + + + + + + Fix issues around in-place catalog updates (Noah Misch) + § + § + § + + + + Send a nontransactional invalidation message for an in-place update, + since such an update will survive transaction rollback. Also ensure + that the update is WAL-logged before other sessions can see it. + These fixes primarily prevent scenarios in which relations' + frozen-XID attributes become inconsistent, possibly allowing + premature CLOG truncation and subsequent could not access + status of transaction errors. + + + + + + + Fix potential backend process crash at process exit due to trying to + release a lock in an already-unmapped shared memory segment + (Rahila Syed) + § + + + + + + + Guard against incorrect truncation of the multixact log after a + crash (Heikki Linnakangas) + § + + + + + + + Fix possibly mis-encoded result + of pg_stat_get_backend_activity() (Chao Li) + § + + + + The shared-memory buffer holding a session's activity string can + end with an incomplete multibyte character. Readers are supposed + to truncate off any such incomplete character, but this function + failed to do so. + + + + + + + Guard against recursive memory context logging (Fujii Masao) + § + + + + A constant flow of signals requesting memory context logging could + cause recursive execution of the logging code, which in theory could + lead to stack overflow. + + + + + + + Fix memory context usage when reinitializing a parallel execution + context (Jakub Wartak, Jeevan Chalke) + § + + + + This error could result in a crash due to a subsidiary data + structure having a shorter lifespan than the parallel context. + The problem is not known to be reachable using only + core PostgreSQL, but we have reports of + trouble in extensions. + + + + + + + Set next multixid's offset when creating a new multixid, to remove + the wait loop that was needed in corner cases (Andrey Borodin) + § + § + + + + The previous logic could get stuck waiting for an update that would + never occur. + + + + + + + Avoid rewriting data-modifying CTEs more than once (Bernice Southey, + Dean Rasheed) + § + + + + Formerly, when updating an auto-updatable view or a relation with + rules, if the original query had any data-modifying CTEs, the rewriter + would rewrite those CTEs multiple times due to recursion. This was + inefficient and could produce false errors if a CTE included an + update of an always-generated column. + + + + + + + Fail recovery if WAL does not exist back to the redo point indicated + by the checkpoint record (Nitin Jadhav) + § + + + + Add an explicit check for this before starting recovery, so that no + harm is done and a useful error message is provided. Previously, + recovery might crash or corrupt the database in this situation. + + + + + + + Avoid scribbling on the source query tree during ALTER + PUBLICATION (Sunil S) + § + + + + This error had the visible effect that an event trigger fired for + the query would see only the first publish + option, even if several had been specified. If such a query were + set up as a prepared statement, re-executions would misbehave too. + + + + + + + Prevent invalidation of newly created or newly synced replication + slots (Zhijie Hou) + § + + + + A race condition with a concurrent checkpoint could allow WAL to be + removed that is needed by the replication slot, causing the slot to + immediately get marked invalid. + + + + + + + Fix race condition in computing a replication slot's required xmin + (Zhijie Hou) + § + + + + This could lead to the error cannot build an initial slot + snapshot as oldest safe xid follows snapshot's xmin. + + + + + + + During initial synchronization of a logical replication + subscription, commit the addition of + a pg_replication_origin entry before + starting to copy data (Zhijie Hou) + § + + + + Previously, if the copy step failed, the + new pg_replication_origin entry would be + lost due to transaction rollback. This led to inconsistent state in + shared memory. + + + + + + + Fix possible failure with unexpected data beyond EOF + during restart of a streaming replica server (Anthonin Bonnefoy) + § + + + + + + + Fix erroneous tracking of column position when parsing partition + range bounds (myzhen) + § + + + + This could, for example, lead to the wrong column name being cited + in error messages about casting partition bound values to the + column's data type. + + + + + + + Fix assorted minor errors in error messages (Man Zeng, Tianchen Zhang) + § + § + § + + + + For example, an error report about mismatched timeline number in a + backup manifest showed the starting timeline number where it meant + to show the ending timeline number. + + + + + + + Fix failure to perform function inlining when doing JIT compilation + with LLVM version 17 or later (Anthonin Bonnefoy) + § + + + + + + + Adjust our JIT code to work with LLVM 21 (Holger Hoffstätte) + § + + + + The previous coding failed to compile on aarch64 machines. + + + + + + + Support process title changes on GNU/Hurd (Michael Banck) + § + + + + + + + Make pg_resetwal print the updated value + when changing OldestXID (Heikki Linnakangas) + § + + + + It already did that for every other variable it can change. + + + + + + + In contrib/amcheck, use the correct snapshot + for btree index parent checks (Mihail Nikalayeu) + § + + + + The previous coding caused spurious errors when examining indexes + created with CREATE INDEX CONCURRENTLY. + + + + + + + Fix contrib/amcheck to + handle half-dead btree index pages correctly + (Heikki Linnakangas) + § + + + + amcheck expected such a page to have a parent + downlink, but it does not, leading to a false error report + about mismatch between parent key and child high key. + + + + + + + Fix contrib/amcheck to + handle incomplete btree root page splits correctly + (Heikki Linnakangas) + § + + + + amcheck could report a false error + about block is not true root. + + + + + + + Fix edge-case integer overflow + in contrib/intarray's selectivity estimator + for @@ (Chao Li) + § + + + + This could cause poor selectivity estimates to be produced for cases + involving the maximum integer value. + + + + + + + Fix multibyte-encoding issue in contrib/ltree + (Jeff Davis) + § + + + + The previous coding could pass an incomplete multibyte character + to lower(), probably resulting in incorrect + behavior. + + + + + + + Update time zone data files to tzdata + release 2025c (Tom Lane) + § + + + + The only change is in historical data for pre-1976 timestamps in + Baja California. + + + + + + + + + + Release 14.20 + + + Release date: + 2025-11-13 + + + + This release contains a variety of fixes from 14.19. + For information about new features in major release 14, see + . + + + + Migration to Version 14.20 + + + A dump/restore is not required for those running 14.X. + + + + However, if you are upgrading from a version earlier than 14.19, + see . + + + + + Changes + + + + + + + Check for CREATE privileges on the schema + in CREATE STATISTICS (Jelte Fennema-Nio) + § + + + + This omission allowed table owners to create statistics in any + schema, potentially leading to unexpected naming conflicts. + + + + The PostgreSQL Project thanks + Jelte Fennema-Nio for reporting this problem. + (CVE-2025-12817) + + + + + + + Avoid integer overflow in allocation-size calculations + within libpq (Jacob Champion) + § + + + + Several places in libpq were not + sufficiently careful about computing the required size of a memory + allocation. Sufficiently large inputs could cause integer overflow, + resulting in an undersized buffer, which would then lead to writing + past the end of the buffer. + + + + The PostgreSQL Project thanks Aleksey + Solovev of Positive Technologies for reporting this problem. + (CVE-2025-12818) + + + + + + + Further fix processing of character classes within SIMILAR + TO regular expressions (Laurenz Albe) + § + + + + The previous fix for translating SIMILAR TO + pattern matching expressions to POSIX-style regular expressions + broke a corner case that formerly worked: if there is an escape + character right after the opening bracket and then a closing bracket + right after the escape sequence (for + example [\w]), the closing bracket was no longer + seen as terminating the character class. + + + + + + + Fix parsing of aggregate functions whose arguments contain a + sub-select with a FROM reference to a CTE outside + the aggregate function (Tom Lane) + § + + + + Such a CTE reference must act like a outer-level column reference + when determining the aggregate's semantic level; but it was not + being accounted for, leading to obscure planner or executor errors. + + + + + + + Fix no relation entry for relid errors in corner + cases while estimating SubPlan costs (Richard Guo) + § + + + + + + + Remove faulty assertion in btree index cleanup (Peter Geoghegan) + § + + + + + + + Fix possible infinite loop in GIN index scans with multiple scan + conditions (Tom Lane) + § + + + + GIN can handle scan conditions that can reject non-matching entries + but are not useful for searching for relevant entries, for example + a tsquery clause like !term. But + such a condition must not be first in the array of scan conditions. + The code failed to ensure that in all cases, with the result that a + query having a mix of such conditions with normal conditions might + work or not depending on the order in which the conditions were + given in the query. + + + + + + + Ensure that GIN index scans can be canceled (Tom Lane) + § + + + + Some code paths were capable of running for a long time without + checking for interrupts. + + + + + + + Ensure that BRIN autosummarization provides a snapshot for index + expressions that need one (Álvaro Herrera) + § + § + + + + Previously, autosummarization would fail for such indexes, and then + leave placeholder index tuples behind, causing the index to bloat + over time. + + + + + + + Fix integer-overflow hazard in BRIN index scans when the table + contains close to 232 pages (Sunil S) + § + + + + This oversight could result in an infinite loop or scanning of + unneeded table pages. + + + + + + + Fix incorrect zero-extension of stored values in JIT-generated tuple + deforming code (David Rowley) + § + + + + When not using JIT, the equivalent code does sign-extension not + zero-extension, leading to a different Datum representation of small + integer data types. This inconsistency was masked in most cases, + but it is known to lead to could not find memoization table + entry errors when using Memoize plan nodes, and there might + be other symptoms. + + + + + + + Add missing EvalPlanQual rechecks for TID Scan and TID Range Scan + plan nodes (Sophie Alpert, David Rowley) + § + § + + + + This omission led to possibly not rechecking a condition + on ctid during concurrent-update + situations, causing the update's behavior to vary depending on which + plan type had been selected. + + + + + + + Fix EvalPlanQual handling of foreign or custom joins that do not + have an alternative local-join plan prepared for EPQ (Masahiko + Sawada, Etsuro Fujita) + § + + + + In such cases the foreign or custom access method should be invoked + normally, but that did not happen, typically leading to a crash. + + + + + + + Avoid duplicating hash partition constraints during DETACH + CONCURRENTLY (Haiyang Li) + § + + + + ALTER TABLE DETACH PARTITION CONCURRENTLY was + written to add a copy of the partitioning constraint to the + now-detached partition. This was misguided, partially because + non-concurrent DETACH doesn't do that, but mostly + because in the case of hash partitioning the constraint expression + contains references to the parent table's OID. That causes problems + during dump/restore, or if the parent table is dropped + after DETACH. In v19 and later, we'll no longer + create any such copied constraints at all. In released branches, to + minimize the risk of unforeseen consequences, only skip adding a + copied constraint if it is for hash partitioning. + + + + + + + Disallow generated columns in partition keys + (Jian He, Ashutosh Bapat) + § + + + + This was already not allowed, but the check missed some cases, such + as where the column reference is implicit in a whole-row reference. + + + + + + + Disallow generated columns in COPY ... FROM + ... WHERE clauses (Peter Eisentraut, Jian He) + § + + + + Previously, incorrect behavior or an obscure error message resulted + from attempting to reference such a column, since generated columns + have not yet been computed at the point + where WHERE filtering is done. + + + + + + + Fix visibility checking for statistics objects + in pg_temp (Noah Misch) + § + + + + A statistics object located in a temporary schema cannot be named + without schema qualification, + but pg_statistics_obj_is_visible() missed that + memo and could return true regardless. In turn, + functions such as pg_describe_object() could + fail to schema-qualify the object's name as expected. + + + + + + + Fix memory leakage in hashed subplans (Haiyang Li) + § + + + + Any memory consumed by the hash functions used for hashing tuples + constituted a query-lifespan memory leak. One way that could happen + is if the values being hashed require de-toasting. + + + + + + + Add missing replica identity checks in MERGE and + INSERT ... ON CONFLICT DO UPDATE + (Zhijie Hou) + § + § + + + + If MERGE may require update or delete actions, + and the target table publishes updates or deletes, insist that it + have a REPLICA IDENTITY defined. Failing to + require this can silently break replication. + Likewise, INSERT with + an UPDATE option must require REPLICA + IDENTITY if the target table publishes either inserts or + updates. + + + + + + + Avoid deadlock during DROP SUBSCRIPTION when + publisher is on the same server as subscriber (Dilip Kumar) + § + + + + + + + Fix incorrect reporting of replication lag + in pg_stat_replication view (Fujii Masao) + § + + + + If any standby server's replay LSN stopped advancing, + the write_lag + and flush_lag columns would eventually + stop updating. + + + + + + + Avoid duplicative log messages about + invalid primary_slot_name settings (Fujii Masao) + § + + + + + + + Remove the unfinished slot state file after failing to write a + replication slot's state to disk (Michael Paquier) + § + + + + Previously, a failure such as out-of-disk-space resulted in leaving + a temporary state.tmp file behind. That's + problematic because it would block all subsequent attempts to + write the state, requiring manual intervention to clean up. + + + + + + + Avoid unwanted WAL receiver shutdown when switching from streaming + to archive WAL source (Xuneng Zhou) + § + + + + During a timeline change, a standby server's WAL receiver should + remain alive, waiting for a new WAL streaming start point. Instead + it was repeatedly shutting down and immediately getting restarted, + which could confuse status monitoring code. + + + + + + + Avoid failures in logical replication due to chance collisions of + file numbers between regular and temporary tables (Vignesh C) + § + + + + This low-probability problem manifested as transient errors + like unexpected duplicate for + tablespace X, + relfilenode Y. + contrib/autoprewarm was also affected. + A side-effect of the fix is that the SQL + function pg_filenode_relation() will now ignore + temporary tables. + + + + + + + Avoid assertion failure when trying to release a replication slot in + single-user mode (Hayato Kuroda) + § + + + + + + + Fix incorrect printing of messages about failures in checking + whether the user has Windows administrator privilege (Bryan Green) + § + + + + This code would have crashed or at least printed garbage. + No such cases have been reported though, indicating that failure of + these system calls is extremely rare. + + + + + + + Avoid startup failure on macOS and BSD platforms when there is a + collision with a pre-existing semaphore set (Tom Lane) + § + + + + If the pre-existing set has fewer semaphores than we asked for, + these platforms return EINVAL + not EEXIST as our code expected, resulting + in failure to start the database. + + + + + + + Fix false memory-context-checking warnings in debug builds + on 64-bit Windows (David Rowley) + § + + + + + + + Correctly handle GROUP BY DISTINCT in PL/pgSQL + assignment statements (Tom Lane) + § + + + + The parser failed to record the DISTINCT option + in this context, so that the command would act as if it were + plain GROUP BY. + + + + + + + Avoid leaking memory when handling a SQL error within PL/Python + (Tom Lane) + § + + + + This fixes a session-lifespan memory leak introduced in our previous + minor releases. + + + + + + + Fix libpq's trace output of characters + with the high bit set (Ran Benita) + § + + + + On platforms where char is considered signed, the + output included unsightly \xffffff decoration. + + + + + + + Fix libpq's handling of socket-related + errors on Windows within its GSSAPI logic (Ning Wu, Tom Lane) + § + + + + The code for encrypting/decrypting transmitted data using GSSAPI did + not correctly recognize error conditions on the connection socket, + since Windows reports those differently than other platforms. This + led to failure to make such connections on Windows. + + + + + + + In pg_dump, dump security labels on + subscriptions and event triggers (Jian He, Fujii Masao) + § + + + + Labels on these types of objects were previously missed. + + + + + + + Fix pg_dump's sorting of default ACLs and + foreign key constraints (Kirill Reshke, Álvaro Herrera) + § + § + § + + + + Ensure consistent ordering of these database object types, as was + already done for other object types. + + + + + + + In pg_dump, label comments for + separately-dumped domain constraints with the proper dependency + (Noah Misch) + § + + + + This error could lead to + parallel pg_restore attempting to create + the comment before the constraint itself has been restored. + + + + + + + In pg_restore, skip comments and security + labels for publications and subscriptions that are not being + restored (Jian He, Fujii Masao) + § + § + + + + Do not emit COMMENT or SECURITY + LABEL commands for these objects + when + or is specified. + + + + + + + Fix assorted errors in the data compression logic + in pg_dump + and pg_restore + (Daniel Gustafsson, Tom Lane) + § + + + + Error checking was missing or incorrect in several places, and there + were also portability issues that would manifest on big-endian + hardware. These problems had been missed because this code is only + used to read compressed TOC files within directory-format + dumps. pg_dump never produces such a + dump; the case can be reached only by manually compressing the TOC + file after the fact, which is a supported thing to do but very + uncommon. + + + + + + + Fix pgbench to error out cleanly if + a COPY operation is started (Anthonin Bonnefoy) + § + + + + pgbench doesn't intend to support this + case, but previously it went into an infinite loop. + + + + + + + Fix pgbench's reporting of multiple + errors (Yugo Nagata) + § + + + + In cases where two successive PQgetResult calls + both fail, pgbench might report the wrong + error message. + + + + + + + Ensure that contrib/pg_buffercache functions + can be canceled (Satyanarayana Narlapuram, Yuhang Qiu) + § + + + + Some code paths were capable of running for a long time without + checking for interrupts. + + + + + + + Fix contrib/pg_prewarm's privilege checks for + indexes (Ayush Vatsa, Nathan Bossart) + § + + + + pg_prewarm() requires SELECT + privilege on relations to be prewarmed. However, since indexes have + no SQL privileges of their own, this resulted in non-superusers + being unable to prewarm indexes. Instead, check + for SELECT privilege on the index's table. + + + + + + + Make contrib/pgstattuple more robust about + empty or invalid index pages (Nitin Motiani) + § + + + + Count all-zero pages as free space, and ignore pages that are + invalid according to a check of the page's special-space size. + The code for btree indexes already counted all-zero pages as free, + but the hash and gist code would error out, which has been found to + be much less user-friendly. Similarly, make all three cases agree + on ignoring corrupted pages rather than throwing errors. + + + + + + + Harden our read and write barrier macros to satisfy Clang + (Thomas Munro) + § + + + + We supposed that __atomic_thread_fence() is a + sufficient barrier to prevent the C compiler from re-ordering memory + accesses around it, but it appears that that's not true for Clang, + allowing it to generate incorrect code for at least RISC-V, MIPS, + and LoongArch machines. Add explicit compiler barriers to fix that. + + + + + + + Fix building with LLVM version 21 and later (Holger Hoffstätte) + § + + + + + + + Fix PGXS build infrastructure to support building + NLS po files for extensions (Ryo Matsumura) + § + + + + + + + + + + Release 14.19 + + + Release date: + 2025-08-14 + + + + This release contains a variety of fixes from 14.18. + For information about new features in major release 14, see + . + + + + Migration to Version 14.19 + + + A dump/restore is not required for those running 14.X. + + + + However, if you have any + BRIN numeric_minmax_multi_ops indexes, it is + advisable to reindex them after updating. See the fourth changelog + entry below. + + + + Also, if you are upgrading from a version earlier than 14.18, + see . + + + + + Changes + + + + + + + Tighten security checks in planner estimation functions + (Dean Rasheed) + § + + + + The fix for CVE-2017-7484, plus followup fixes, intended to prevent + leaky functions from being applied to statistics data for columns + that the calling user does not have permission to read. Two gaps in + that protection have been found. One gap applies to partitioning + and inheritance hierarchies where RLS policies on the tables should + restrict access to statistics data, but did not. + + + + The other gap applies to cases where the query accesses a table via + a view, and the view owner has permissions to read the underlying + table but the calling user does not have permissions on the view. + The view owner's permissions satisfied the security checks, and the + leaky function would get applied to the underlying table's + statistics before we check the calling user's permissions on the + view. This has been fixed by making security checks on views occur + at the start of planning. That might cause permissions failures to + occur earlier than before. + + + + The PostgreSQL Project thanks + Dean Rasheed for reporting this problem. + (CVE-2025-8713) + + + + + + + Prevent pg_dump scripts from being used + to attack the user running the restore (Nathan Bossart) + § + § + + + + Since dump/restore operations typically involve running SQL commands + as superuser, the target database installation must trust the source + server. However, it does not follow that the operating system user + who executes psql to perform the restore + should have to trust the source server. The risk here is that an + attacker who has gained superuser-level control over the source + server might be able to cause it to emit text that would be + interpreted as psql meta-commands. + That would provide shell-level access to the restoring user's own + account, independently of access to the target database. + + + + To provide a positive guarantee that this can't happen, + extend psql with + a \restrict command that prevents execution of + further meta-commands, and teach pg_dump + to issue that before any data coming from the source server. + + + + The PostgreSQL Project thanks Martin Rakhmanov, Matthieu Denais, and + RyotaK for reporting this problem. + (CVE-2025-8714) + + + + + + + Convert newlines to spaces in names included in comments + in pg_dump output + (Noah Misch) + § + + + + Object names containing newlines offered the ability to inject + arbitrary SQL commands into the output script. (Without the + preceding fix, injection of psql + meta-commands would also be possible this way.) + CVE-2012-0868 fixed this class of problem at the time, but later + work reintroduced several cases. + + + + The PostgreSQL Project thanks + Noah Misch for reporting this problem. + (CVE-2025-8715) + + + + + + + Fix incorrect distance calculation in + BRIN numeric_minmax_multi_ops support function + (Peter Eisentraut, Tom Lane) + § + + + + The results were sometimes wrong on 64-bit platforms, and wildly + wrong on 32-bit platforms. This did not produce obvious failures + because the logic is only used to choose how to merge values into + ranges; at worst the index would become inefficient and bloated. + Nonetheless it's recommended to reindex any BRIN indexes that use + the numeric_minmax_multi_ops operator class. + + + + + + + Avoid regression in the size of XML input that we will accept + (Michael Paquier, Erik Wienhold) + § + § + + + + Our workaround for a bug in early 2.13.x releases + of libxml2 made use of a code path that + rejects text chunks exceeding 10MB, whereas the previous coding did + not. Those early releases are presumably extinct in the wild by + now, so revert to the previous coding. + + + + + + + Allow tables with statement-level triggers to become partitions or + inheritance children (Etsuro Fujita) + § + + + + We do not allow partitions or inheritance child tables to have + row-level triggers with transition tables, because an operation on + the whole inheritance tree would need to maintain a separate + transition table for each such child table. But that problem does + not apply for statement-level triggers, because only the parent's + statement-level triggers will be fired. The code that checks + whether an existing table can become a partition or inheritance + child nonetheless rejected both kinds of trigger. + + + + + + + Disallow collecting transition tuples from child foreign tables + (Etsuro Fujita) + § + + + + We do not support triggers with transition tables on foreign tables. + However, the case of a partition or inheritance child that is a + foreign table was overlooked. If the parent has such a trigger, + incorrect transition tuples were collected from the foreign child. + Instead throw an error, reporting that the case is not supported. + + + + + + + Fix a potential deadlock during ALTER SUBSCRIPTION ... DROP + PUBLICATION (Ajin Cherian) + § + + + + Ensure that server processes acquire catalog locks in a consistent + order during replication origin drops. + + + + + + + Shorten the race condition window for creating indexes with + conflicting names (Tom Lane) + § + + + + When choosing an auto-generated name for an index, avoid conflicting + with not-yet-committed pg_class rows as + well as fully-valid ones. This avoids possibly choosing the same + name as some concurrent CREATE INDEX did, + when that command is still in process of filling its index, or is + done but is part of a not-yet-committed transaction. There's still + a window for trouble, but it's only as long as the time needed to + validate a new index's parameters and insert + its pg_class row. + + + + + + + Prevent usage of incorrect VACUUM options in some + cases where multiple tables are vacuumed in a single command (Nathan + Bossart, Michael Paquier) + § + + + + The TRUNCATE and INDEX_CLEANUP + options of one table could be applied to others. + + + + + + + Fix processing of character classes within SIMILAR + TO regular expressions (Laurenz Albe) + § + § + + + + The code that translates SIMILAR TO pattern + matching expressions to POSIX-style regular expressions did not + consider that square brackets can be nested. For example, in a + pattern like [[:alpha:]%_], the code treated + the % and _ characters as + metacharacters when they should be literals. + + + + + + + When deparsing queries, always add parentheses around the expression + in FETCH FIRST expression ROWS + WITH TIES clauses (Heikki Linnakangas) + § + + + + This avoids some cases where the deparsed result wasn't + syntactically valid. + + + + + + + Limit the checkpointer process's fsync request queue size (Alexander + Korotkov, Xuneng Zhou) + § + § + + + + With very large shared_buffers settings, it was + possible for the checkpointer to attempt to allocate more than 1GB + for fsync requests, leading to failure and an infinite loop. Clamp + the queue size to prevent this scenario. + + + + + + + Avoid infinite wait in logical decoding when reading a + partially-written WAL record (Vignesh C) + § + + + + If the server crashes after writing the first part of a WAL record + that would span multiple pages, subsequent logical decoding of the + WAL stream would wait for data to arrive on the next WAL page. + That might never happen if the server is now idle. + + + + + + + Fix inconsistent quoting of role names in ACL strings (Tom Lane) + § + + + + The previous quoting rule was locale-sensitive, which could lead to + portability problems when transferring aclitem values + across installations. (pg_dump does not + do that, but other tools might.) To ensure consistency, always quote + non-ASCII characters in aclitem output; but to preserve + backward compatibility, never require that they be quoted + during aclitem input. + + + + + + + Reject equal signs (=) in the names of relation + options and foreign-data options (Tom Lane) + § + + + + There's no evident use-case for option names like this, and allowing + them creates ambiguity in the stored representation. + + + + + + + Avoid a rare scenario where a btree index scan could mark the wrong + index entries as dead (Peter Geoghegan) + § + + + + + + + Avoid re-distributing cache invalidation messages from other + transactions during logical replication (vignesh C) + § + + + + Our previous round of minor releases included a bug fix to ensure + that replication receiver processes would respond to cross-process + cache invalidation messages, preventing them from using stale + catalog data while performing replication updates. However, the fix + unintentionally made them also redistribute those messages again, + leading to an exponential increase in the number of invalidation + messages, which would often end in a memory allocation failure. + Fix by not redistributing received messages. + + + + + + + Avoid premature removal of old WAL during checkpoints (Vitaly Davydov) + § + + + + If a replication slot's restart point is advanced while a checkpoint + is in progress, no-longer-needed WAL segments could get removed too + soon, leading to recovery failure if the database crashes + immediately afterwards. Fix by keeping them for one additional + checkpoint cycle. + + + + + + + Never move a replication slot's confirmed-flush position backwards + (Shveta Malik) + § + + + + In some cases a replication client could acknowledge an LSN that's + past what it has stored persistently, and then perhaps send an older + LSN after a restart. We consider this not-a-bug so long as the + client did not have anything it needed to do for the WAL between the + two points. However, we should not re-send that WAL for fear of + data duplication, so make sure we always believe the latest + confirmed LSN for a given slot. + + + + + + + Allow waiting for a transaction on a standby server to be + interrupted (Kevin K Biju) + § + + + + Creation of a replication slot on a standby server may require waiting + for some active transaction(s) to finish on the primary and then be + replayed on the standby. Since that could be an indefinite wait, + it's desirable to allow the operation to be cancelled, but there was + no check for query cancel in the loop. + + + + + + + Fix some places that might try to fetch toasted fields of system + catalogs without any snapshot (Nathan Bossart) + § + + + + This could result in an assertion failure or cannot fetch + toast data without an active snapshot error. + + + + + + + Avoid assertion failure during cross-table constraint updates + (Tom Lane, Jian He) + § + § + + + + + + + Remove faulty assertion that a command tag must have been determined + by the end of PortalRunMulti() (Álvaro Herrera) + § + + + + This failed in edge cases such as an empty prepared statement. + + + + + + + Restore the ability to run PL/pgSQL expressions in parallel + (Dipesh Dhameliya) + § + + + + PL/pgSQL's notion of an expression is very broad, + encompassing any SQL SELECT query that returns a + single column and no more than one row. So there are cases, for + example evaluation of an aggregate function, where the query + involves significant work and it'd be useful to run it with parallel + workers. This used to be possible, but a previous bug fix + unintentionally disabled it. + + + + + + + Fix edge-case resource leaks in PL/Python error reporting (Tom Lane) + § + § + + + + An out-of-memory failure while reporting an error from Python could + result in failure to drop reference counts on Python objects, + leading to session-lifespan memory leakage. + + + + + + + Fix libpq's PQport() + function to never return NULL unless the passed connection is NULL + (Daniele Varrazzo) + § + + + + This is the documented behavior, but + recent libpq versions would return NULL + in some cases where the user had not provided a port specification. + Revert to our historical behavior of returning an empty string in + such cases. (v18 and later will return the compiled-in default port + number, typically "5432", instead.) + + + + + + + Avoid failure when GSSAPI authentication requires packets larger + than 16kB (Jacob Champion, Tom Lane) + § + + + + Larger authentication packets are needed for Active Directory users + who belong to many AD groups. This limitation manifested in + connection failures with unintelligible error messages, + typically GSSAPI context establishment error: The routine + must be called again to complete its function: Unknown + error. + + + + + + + Fix timing-dependent failures in SSL and GSSAPI data transmission + (Tom Lane) + § + + + + When using SSL or GSSAPI encryption in non-blocking + mode, libpq sometimes failed + with SSL error: bad length or GSSAPI caller + failed to retransmit all data needing to be retried. + + + + + + + Avoid null-pointer dereference during connection lookup + in ecpg applications (Aleksander + Alekseev) + § + + + + The case could occur only if the application has some connections + that are named and some that are not. + + + + + + + Improve psql's tab completion + for COPY and \copy options + (Atsushi Torikoshi) + § + + + + The same completions were offered for both COPY + FROM and COPY TO, although some options + are only valid for one case or the other. Distinguish these cases + to provide more accurate suggestions. + + + + + + + Ensure that pg_dump dumps comments on + domain constraints in a valid order (Jian He) + § + + + + In some cases the comment command could appear before creation of + the constraint. + + + + + + + Ensure stable sort ordering in pg_dump + for all types of database objects (Noah Misch, Andreas Karlsson) + § + § + § + + + + pg_dump sorts objects by their logical + names before performing dependency-driven reordering. This sort did + not account for the full unique key identifying certain object types + such as rules and constraints, and thus it could produce dissimilar + sort orders for logically-identical databases. That made it + difficult to compare databases by + diff'ing pg_dump output, so improve the + logic to ensure stable sort ordering in all cases. + + + + + + + In pg_upgrade, check for inconsistent + inherited not-null constraints (Ali Akbar) + § + § + § + § + § + § + + + + PostgreSQL versions before 18 allow an + inherited column not-null constraint to be dropped. However, this + results in a schema that cannot be restored, leading to failure + in pg_upgrade. Detect such cases + during pg_upgrade's preflight checks to + allow users to fix them before initiating the upgrade. + + + + + + + Avoid assertion failure if track_commit_timestamp + is enabled during initdb (Hayato Kuroda, + Andy Fan) + § + + + + + + + Avoid possible leak of the open connection + during contrib/dblink connection establishment + (Tom Lane) + § + + + + In the rare scenario where we hit out-of-memory while inserting the + new connection object into dblink's hashtable, the open connection + would be leaked until end of session, leaving an idle session + sitting on the remote server. + + + + + + + Make contrib/pg_prewarm cope with very + large shared_buffers settings (Daria Shanina) + § + + + + Autoprewarm failed with a memory allocation error + if shared_buffers was larger than about 50 + million buffers (400GB). + + + + + + + In contrib/pg_stat_statements, avoid leaving + gaps in the set of parameter numbers used in a normalized query + (Sami Imseih) + § + + + + + + + Fix memory leakage in contrib/postgres_fdw's + DirectModify methods (Tom Lane) + § + + + + The PGresult holding the results of the + remote modify command would be leaked for the rest of the session if + the query fails between invocations of the DirectModify methods, + which could happen when there's RETURNING data to + process. + + + + + + + Ensure that directories listed + in configure's + + and options are searched before + system-supplied directories (Tom Lane) + § + + + + A common reason for using these options is to allow a user-built + version of some library to override the system-supplied version. + However, that failed to work in some environments because of + careless ordering of switches in the commands issued by the makefiles. + + + + + + + Fix configure's checks + for __cpuid() + and __cpuidex() (Lukas Fittl, Michael Paquier) + § + + + + configure failed to detect these + Windows-specific functions, so that they would not be used, + leading to slower-than-necessary CRC computations since the + availability of hardware instructions could not be verified. + The practical impact of this error was limited, because production + builds for Windows typically do not use the Autoconf toolchain. + + + + + + + Fix build failure with option on + Solaris-based platforms (Tom Lane) + § + + + + Solaris is inconsistent with other Unix platforms about the API for + PAM authentication. This manifested as an inconsistent + pointer compiler warning, which we never did anything about. + But as of GCC 14 it's an error not warning by default, so fix it. + + + + + + + Make our code portable to GNU Hurd (Michael Banck, Christoph Berg, + Samuel Thibault) + § + + + + Fix assumptions about IOV_MAX + and O_RDONLY that don't hold on Hurd. + + + + + + + Make our usage of memset_s() conform strictly + to the C11 standard (Tom Lane) + § + + + + This avoids compile failures on some platforms. + + + + + + + Prevent uninitialized-value compiler warnings in JSONB comparison + code (Tom Lane) + § + + + + + + + Avoid deprecation warnings when building + with libxml2 2.14 and later + (Michael Paquier) + § + + + + + + + Avoid problems when compiling pg_locale.h under + C++ (John Naylor) + § + + + + PostgreSQL header files generally need to + be wrapped in extern "C" { ... } in order to be + included in extensions written in C++. This failed + for pg_locale.h because of its use + of libicu headers, but we can work around + that by suppressing C++-only declarations in those headers. C++ + extensions that want to use libicu's C++ + APIs can do so by including the libicu + headers ahead of pg_locale.h. + + + + + + + + + + Release 14.18 + + + Release date: + 2025-05-08 + + + + This release contains a variety of fixes from 14.17. + For information about new features in major release 14, see + . + + + + Migration to Version 14.18 + + + A dump/restore is not required for those running 14.X. + + + + However, if you have any self-referential foreign key constraints on + partitioned tables, it may be necessary to recreate those constraints + to ensure that they are being enforced correctly. See the second + changelog entry below. + + + + Also, if you have any BRIN bloom indexes, it may be advisable to + reindex them after updating. See the third changelog entry below. + + + + Also, if you are upgrading from a version earlier than 14.14, + see . + + + + + Changes + + + + + + + Avoid one-byte buffer overread when examining invalidly-encoded + strings that are claimed to be in GB18030 encoding + (Noah Misch, Andres Freund) + § + § + + + + While unlikely, a SIGSEGV crash could occur if an incomplete + multibyte character appeared at the end of memory. This was + possible both in the server and + in libpq-using applications. + (CVE-2025-4207) + + + + + + + Handle self-referential foreign keys on partitioned tables correctly + (Álvaro Herrera) + § + + + + Creating or attaching partitions failed to make the required catalog + entries for a foreign-key constraint, if the table referenced by the + constraint was the same partitioned table. This resulted in failure + to enforce the constraint fully. + + + + To fix this, you should drop and recreate any self-referential + foreign keys on partitioned tables, if partitions have been created + or attached since the constraint was created. Bear in mind that + violating rows might already be present, in which case recreating + the constraint will fail, and you'll need to fix up those rows + before trying again. + + + + + + + Avoid data loss when merging compressed BRIN summaries + in brin_bloom_union() (Tomas Vondra) + § + + + + The code failed to account for decompression results not being + identical to the input objects, which would result in failure to add + some of the data to the merged summary, leading to missed rows in + index searches. + + + + This mistake was present back to v14 where BRIN bloom indexes were + introduced, but this code path was only rarely reached then. It's + substantially more likely to be hit in v17 because parallel index + builds now use the code. + + + + + + + Fix unexpected attribute has wrong type errors + in UPDATE, DELETE, + and MERGE queries that use whole-row table + references to views or functions in FROM + (Tom Lane) + § + § + § + + + + + + + Prevent failure in INSERT commands when the table + has a GENERATED column of a domain data type and + the domain's constraints disallow null values (Jian He) + § + + + + Constraint failure was reported even if the generation expression + produced a perfectly okay result. + + + + + + + Correctly process references to outer CTE names that appear within + a WITH clause attached to + an INSERT/UPDATE/DELETE/MERGE + command that's inside WITH (Tom Lane) + § + + + + The parser failed to detect disallowed recursion cases, nor did it + account for such references when sorting CTEs into a usable order. + + + + + + + Fix ARRAY(subquery) + and ARRAY[expression, ...] + constructs to produce sane results when the input is of + type int2vector or oidvector (Tom Lane) + § + + + + This patch restores the behavior that existed + before PostgreSQL 9.5: the result is of + type int2vector[] or oidvector[]. + + + + + + + Fix possible erroneous reports of invalid affixes while parsing + Ispell dictionaries (Jacob Brazeal) + § + + + + + + + Fix ALTER TABLE ADD COLUMN to correctly handle + the case of a domain type that has a default + (Jian He, Tom Lane, Tender Wang) + § + § + + + + If a domain type has a default, adding a column of that type (without + any explicit DEFAULT + clause) failed to install the domain's default + value in existing rows, instead leaving the new column null. + + + + + + + Improve the error message for disallowed attempts to alter the + properties of a foreign key constraint (Álvaro Herrera) + § + + + + + + + Avoid error when resetting + the relhassubclass flag of a temporary + table that's marked ON COMMIT DELETE ROWS + (Noah Misch) + § + + + + + + + Fix planner's failure to identify more than one hashable + ScalarArrayOpExpr subexpression within a top-level expression + (David Geier) + § + + + + This resulted in unnecessarily-inefficient execution of any + additional subexpressions that could have been processed with a hash + table (that is, IN, NOT IN, + or = ANY clauses with all-constant right-hand + sides). + + + + + + + Disable skip fetch optimization in bitmap heap scan + (Matthias van de Meent) + § + + + + It turns out that this optimization can result in returning dead + tuples when a concurrent vacuum marks a page all-visible. + + + + + + + Fix performance issues in GIN index search startup when there are + many search keys (Tom Lane, Vinod Sridharan) + § + § + + + + An indexable clause with many keys (for example, jsonbcol + ?| array[...] with tens of thousands of array elements) + took O(N2) time to start up, and was + uncancelable for that interval too. + + + + + + + Detect missing support procedures in a BRIN index operator class, + and report an error instead of crashing (Álvaro Herrera) + § + + + + + + + Respond to interrupts (such as query cancel) while waiting for + asynchronous subplans of an Append plan node (Heikki Linnakangas) + § + + + + Previously, nothing would happen until one of the subplans becomes + ready. + + + + + + + Fix race condition in handling + of synchronous_standby_names immediately after + startup (Melnikov Maksim, Michael Paquier) + § + + + + For a short period after system startup, backends might fail to wait + for synchronous commit even + though synchronous_standby_names is enabled. + + + + + + + Fix pg_strtof() to not crash with null endptr + (Alexander Lakhin, Tom Lane) + § + + + + + + + Avoid crash when a Snowball stemmer encounters an out-of-memory + condition (Maksim Korotkov) + § + + + + + + + Skip WAL recycling and preallocation during archive recovery, to + avoid corruption of WAL files that were restored from the archive + (Noah Misch, Arun Thirupathi) + § + § + § + § + § + § + § + + + + This change back-patches v15-era fixes that were considered largely + cosmetic at the time, but turn out to prevent data corruption in the + wake of subsequent fixes. + + + + + + + Prevent over-advancement of catalog xmin in fast + forward mode of logical decoding (Zhijie Hou) + § + + + + This mistake could allow deleted catalog entries to be vacuumed away + even though they were still potentially needed by the WAL-reading + process. + + + + + + + Avoid data loss when DDL operations that don't take a strong lock + affect tables that are being logically replicated (Shlok Kyal, + Hayato Kuroda) + § + § + + + + The catalog changes caused by the DDL command were not reflected + into WAL-decoding processes, allowing them to decode subsequent + changes using stale catalog data, probably resulting in data + corruption. + + + + + + + Avoid duplicate snapshot creation in logical replication index + lookups (Heikki Linnakangas) + § + § + + + + + + + Fix assertion failure in snapshot building (Masahiko Sawada) + § + + + + + + + Fix overly-strict assertion + in gistFindCorrectParent() (Heikki Linnakangas) + § + + + + + + + Fix rare assertion failure in standby servers when the primary is + restarted (Heikki Linnakangas) + § + + + + + + + In PL/pgSQL, avoid unexpected plan node type error + when a scrollable cursor is defined on a + simple SELECT expression + query (Andrei Lepikhov) + § + + + + + + + Don't try to drop individual index partitions + in pg_dump's + mode (Jian He) + § + + + + The server rejects such DROP commands. That has + no real consequences, since the partitions will go away anyway in + the subsequent DROPs of either their parent + tables or their partitioned index. However, the error reported for + the attempted drop causes problems when restoring + in mode. + + + + + + + In pg_dumpall, avoid emitting invalid + role GRANT commands + if pg_auth_members contains invalid role + OIDs (Tom Lane) + § + + + + Instead, print a warning and skip the entry. This copes better with + catalog corruption that has been seen to occur in back branches as a + result of race conditions between GRANT + and DROP ROLE. + + + + + + + In pg_amcheck + and pg_upgrade, use the correct function + to free allocations made by libpq + (Michael Paquier, Ranier Vilela) + § + + + + These oversights could result in crashes in certain Windows build + configurations, such as a debug build + of libpq used by a non-debug build of the + calling application. + + + + + + + Allow contrib/dblink queries to be interrupted + by query cancel (Noah Misch) + § + § + + + + This change back-patches a v17-era fix. It prevents possible hangs + in CREATE DATABASE and DROP + DATABASE due to failure to detect deadlocks. + + + + + + + Avoid crashing with corrupt input data + in contrib/pageinspect's + heap_page_items() (Dmitry Kovalenko) + § + + + + + + + Prevent assertion failure + in contrib/pg_freespacemap's + pg_freespacemap() (Tender Wang) + § + + + + Applying pg_freespacemap() to a relation + lacking storage (such as a view) caused an assertion failure, + although there was no ill effect in non-assert builds. + Add an error check to reject that case. + + + + + + + Fix build failure on macOS 15.4 (Tom Lane, Peter Eisentraut) + § + + + + This macOS update broke our configuration probe + for strchrnul(). + + + + + + + Update time zone data files to tzdata + release 2025b for DST law changes in Chile, plus historical + corrections for Iran (Tom Lane) + § + + + + There is a new time zone America/Coyhaique for Chile's Aysén Region, + to account for it changing to UTC-03 year-round and thus diverging + from America/Santiago. + + + + + + + + Release 14.17 @@ -1789,10 +6441,14 @@ FROM pg_catalog.pg_constraint c WHERE contype = 'f' AND conparentid = 0 AND (SELECT count(*) FROM pg_catalog.pg_constraint c2 WHERE c2.conparentid = c.oid) <> - (SELECT count(*) FROM pg_catalog.pg_inherits i + ((SELECT count(*) FROM pg_catalog.pg_inherits i WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table - WHERE partrelid = i.inhparent)); + WHERE partrelid = i.inhparent)) + + CASE WHEN pg_catalog.pg_partition_root(conrelid) = confrelid THEN + (SELECT count(*) FROM pg_catalog.pg_partition_tree(confrelid) + WHERE level = 1) + ELSE 0 END); Since it is possible that one or more of the ADD CONSTRAINT steps will fail, you should save the query's diff --git a/doc/src/sgml/sourcerepo.sgml b/doc/src/sgml/sourcerepo.sgml index 0ed7f8a3fea..88cce552fd6 100644 --- a/doc/src/sgml/sourcerepo.sgml +++ b/doc/src/sgml/sourcerepo.sgml @@ -49,7 +49,7 @@ - To begin using the Git repository, make a clone of the official mirror: + To begin using the Git repository, make a clone of the official mirror: git clone https://git.postgresql.org/git/postgresql.git @@ -60,16 +60,6 @@ git clone https://git.postgresql.org/git/postgresql.git The files will be placed in a new subdirectory postgresql of your current directory. - - - The Git mirror can also be reached via the Git protocol. Just change the URL - prefix to git, as in: - - -git clone git://git.postgresql.org/git/postgresql.git - - - diff --git a/doc/src/sgml/textsearch.sgml b/doc/src/sgml/textsearch.sgml index febcda96634..c0025827e78 100644 --- a/doc/src/sgml/textsearch.sgml +++ b/doc/src/sgml/textsearch.sgml @@ -1339,7 +1339,7 @@ ts_headline( config <b> and </b>, which can be suitable - for HTML output. + for HTML output (but see the warning below). @@ -1351,6 +1351,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. @@ -2222,6 +2237,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/wal.sgml b/doc/src/sgml/wal.sgml index 5a2c693849b..1ecca196ed9 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -245,7 +245,7 @@ - Checksums are normally enabled when the cluster is initialized using initdb. They can also be enabled or disabled at a later time as an offline operation. Data checksums are enabled or disabled at the full cluster diff --git a/src/Makefile.global.in b/src/Makefile.global.in index c6858c0fb04..b5ba1401ece 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -245,7 +245,7 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ PG_SYSROOT = @PG_SYSROOT@ -override CPPFLAGS := $(ICU_CFLAGS) $(CPPFLAGS) +override CPPFLAGS += $(ICU_CFLAGS) ifdef PGXS override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS) diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index 179b7dfa456..623dfdf9b50 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -360,7 +360,6 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) Relation heapRel; BrinOpaque *opaque; BlockNumber nblocks; - BlockNumber heapBlk; int64 totalpages = 0; FmgrInfo *consistentFn; MemoryContext oldcxt; @@ -521,9 +520,10 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) /* * Now scan the revmap. We start by querying for heap page 0, * incrementing by the number of pages per range; this gives us a full - * view of the table. + * view of the table. We make use of uint64 for heapBlk as a BlockNumber + * could wrap for tables with close to 2^32 pages. */ - for (heapBlk = 0; heapBlk < nblocks; heapBlk += opaque->bo_pagesPerRange) + for (uint64 heapBlk = 0; heapBlk < nblocks; heapBlk += opaque->bo_pagesPerRange) { bool addrange; bool gottuple = false; @@ -535,7 +535,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) MemoryContextResetAndDeleteChildren(perRangeCxt); - tup = brinGetTupleForHeapBlock(opaque->bo_rmAccess, heapBlk, &buf, + tup = brinGetTupleForHeapBlock(opaque->bo_rmAccess, (BlockNumber) heapBlk, &buf, &off, &size, BUFFER_LOCK_SHARE, scan->xs_snapshot); if (tup) @@ -711,7 +711,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm) /* add the pages in the range to the output bitmap, if needed */ if (addrange) { - BlockNumber pageno; + uint64 pageno; for (pageno = heapBlk; pageno <= Min(nblocks, heapBlk + opaque->bo_pagesPerRange) - 1; diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index cc274256b31..b93f3952638 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -412,7 +412,6 @@ typedef struct BloomOpaque * consistency. We may need additional procs in the future. */ FmgrInfo extra_procinfos[BLOOM_MAX_PROCNUMS]; - bool extra_proc_missing[BLOOM_MAX_PROCNUMS]; } BloomOpaque; static FmgrInfo *bloom_get_procinfo(BrinDesc *bdesc, uint16 attno, @@ -664,6 +663,17 @@ brin_bloom_union(PG_FUNCTION_ARGS) /* update the number of bits set in the filter */ filter_a->nbits_set = pg_popcount((const char *) filter_a->data, nbytes); + /* if we decompressed filter_a, update the summary */ + if (PointerGetDatum(filter_a) != col_a->bv_values[0]) + { + pfree(DatumGetPointer(col_a->bv_values[0])); + col_a->bv_values[0] = PointerGetDatum(filter_a); + } + + /* also free filter_b, if it was decompressed */ + if (PointerGetDatum(filter_b) != col_b->bv_values[0]) + pfree(filter_b); + PG_RETURN_VOID(); } @@ -685,27 +695,19 @@ bloom_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum) */ opaque = (BloomOpaque *) bdesc->bd_info[attno - 1]->oi_opaque; - /* - * If we already searched for this proc and didn't find it, don't bother - * searching again. - */ - if (opaque->extra_proc_missing[basenum]) - return NULL; - if (opaque->extra_procinfos[basenum].fn_oid == InvalidOid) { if (RegProcedureIsValid(index_getprocid(bdesc->bd_index, attno, procnum))) - { fmgr_info_copy(&opaque->extra_procinfos[basenum], index_getprocinfo(bdesc->bd_index, attno, procnum), bdesc->bd_context); - } else - { - opaque->extra_proc_missing[basenum] = true; - return NULL; - } + ereport(ERROR, + errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg_internal("invalid opclass definition"), + errdetail_internal("The operator class is missing support function %d for column %d.", + procnum, attno)); } return &opaque->extra_procinfos[basenum]; diff --git a/src/backend/access/brin/brin_inclusion.c b/src/backend/access/brin/brin_inclusion.c index 0b384c0bd1e..39f11e949be 100644 --- a/src/backend/access/brin/brin_inclusion.c +++ b/src/backend/access/brin/brin_inclusion.c @@ -82,7 +82,7 @@ typedef struct InclusionOpaque } InclusionOpaque; static FmgrInfo *inclusion_get_procinfo(BrinDesc *bdesc, uint16 attno, - uint16 procnum); + uint16 procnum, bool missing_ok); static FmgrInfo *inclusion_get_strategy_procinfo(BrinDesc *bdesc, uint16 attno, Oid subtype, uint16 strategynum); @@ -179,7 +179,7 @@ brin_inclusion_add_value(PG_FUNCTION_ARGS) * new value for emptiness; if it returns true, we need to set the * "contains empty" flag in the element (unless already set). */ - finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_EMPTY); + finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_EMPTY, true); if (finfo != NULL && DatumGetBool(FunctionCall1Coll(finfo, colloid, newval))) { if (!DatumGetBool(column->bv_values[INCLUSION_CONTAINS_EMPTY])) @@ -195,7 +195,7 @@ brin_inclusion_add_value(PG_FUNCTION_ARGS) PG_RETURN_BOOL(true); /* Check if the new value is already contained. */ - finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_CONTAINS); + finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_CONTAINS, true); if (finfo != NULL && DatumGetBool(FunctionCall2Coll(finfo, colloid, column->bv_values[INCLUSION_UNION], @@ -210,7 +210,7 @@ brin_inclusion_add_value(PG_FUNCTION_ARGS) * it's not going to be used any longer. However, the BRIN framework * doesn't allow for the value not being present. Improve someday. */ - finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGEABLE); + finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGEABLE, true); if (finfo != NULL && !DatumGetBool(FunctionCall2Coll(finfo, colloid, column->bv_values[INCLUSION_UNION], @@ -221,8 +221,7 @@ brin_inclusion_add_value(PG_FUNCTION_ARGS) } /* Finally, merge the new value to the existing union. */ - finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGE); - Assert(finfo != NULL); + finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGE, false); result = FunctionCall2Coll(finfo, colloid, column->bv_values[INCLUSION_UNION], newval); if (!attr->attbyval && @@ -506,7 +505,7 @@ brin_inclusion_union(PG_FUNCTION_ARGS) } /* Check if A and B are mergeable; if not, mark A unmergeable. */ - finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGEABLE); + finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGEABLE, true); if (finfo != NULL && !DatumGetBool(FunctionCall2Coll(finfo, colloid, col_a->bv_values[INCLUSION_UNION], @@ -517,8 +516,7 @@ brin_inclusion_union(PG_FUNCTION_ARGS) } /* Finally, merge B to A. */ - finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGE); - Assert(finfo != NULL); + finfo = inclusion_get_procinfo(bdesc, attno, PROCNUM_MERGE, false); result = FunctionCall2Coll(finfo, colloid, col_a->bv_values[INCLUSION_UNION], col_b->bv_values[INCLUSION_UNION]); @@ -539,10 +537,12 @@ brin_inclusion_union(PG_FUNCTION_ARGS) * Cache and return inclusion opclass support procedure * * Return the procedure corresponding to the given function support number - * or null if it is not exists. + * or null if it is not exists. If missing_ok is true and the procedure + * isn't set up for this opclass, return NULL instead of raising an error. */ static FmgrInfo * -inclusion_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum) +inclusion_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum, + bool missing_ok) { InclusionOpaque *opaque; uint16 basenum = procnum - PROCNUM_BASE; @@ -564,13 +564,18 @@ inclusion_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum) { if (RegProcedureIsValid(index_getprocid(bdesc->bd_index, attno, procnum))) - { fmgr_info_copy(&opaque->extra_procinfos[basenum], index_getprocinfo(bdesc->bd_index, attno, procnum), bdesc->bd_context); - } else { + if (!missing_ok) + ereport(ERROR, + errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg_internal("invalid opclass definition"), + errdetail_internal("The operator class is missing support function %d for column %d.", + procnum, attno)); + opaque->extra_proc_missing[basenum] = true; return NULL; } diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 16c7c41a327..8fb8ba313ae 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -112,7 +112,6 @@ typedef struct MinmaxMultiOpaque { FmgrInfo extra_procinfos[MINMAX_MAX_PROCNUMS]; - bool extra_proc_missing[MINMAX_MAX_PROCNUMS]; Oid cached_subtype; FmgrInfo strategy_procinfos[BTMaxStrategyNumber]; } MinmaxMultiOpaque; @@ -2028,7 +2027,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)); } /* @@ -2864,27 +2863,19 @@ minmax_multi_get_procinfo(BrinDesc *bdesc, uint16 attno, uint16 procnum) */ opaque = (MinmaxMultiOpaque *) bdesc->bd_info[attno - 1]->oi_opaque; - /* - * If we already searched for this proc and didn't find it, don't bother - * searching again. - */ - if (opaque->extra_proc_missing[basenum]) - return NULL; - if (opaque->extra_procinfos[basenum].fn_oid == InvalidOid) { if (RegProcedureIsValid(index_getprocid(bdesc->bd_index, attno, procnum))) - { fmgr_info_copy(&opaque->extra_procinfos[basenum], index_getprocinfo(bdesc->bd_index, attno, procnum), bdesc->bd_context); - } else - { - opaque->extra_proc_missing[basenum] = true; - return NULL; - } + ereport(ERROR, + errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg_internal("invalid opclass definition"), + errdetail_internal("The operator class is missing support function %d for column %d.", + procnum, attno)); } return &opaque->extra_procinfos[basenum]; diff --git a/src/backend/access/brin/brin_pageops.c b/src/backend/access/brin/brin_pageops.c index 992b33a8964..4ee09e04bd3 100644 --- a/src/backend/access/brin/brin_pageops.c +++ b/src/backend/access/brin/brin_pageops.c @@ -890,7 +890,11 @@ brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer) page = BufferGetPage(buffer); brin_page_init(page, BRIN_PAGETYPE_REGULAR); MarkBufferDirty(buffer); - log_newpage_buffer(buffer, true); + + /* XLOG stuff */ + if (RelationNeedsWAL(idxrel)) + log_newpage_buffer(buffer, true); + END_CRIT_SECTION(); /* diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index 39e0cd1fca6..e85b91008db 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -1226,8 +1226,9 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace, } else { - text *t; + const char *name; const char *value; + text *t; Size len; /* @@ -1274,11 +1275,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 = @@ -1286,7 +1295,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, @@ -1296,11 +1305,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, @@ -1403,6 +1412,7 @@ extractRelOptions(HeapTuple tuple, TupleDesc tupdesc, options = view_reloptions(datum, false); break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: options = index_reloptions(amoptions, datum, false); break; diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 02decb0adb9..24458c564c6 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -557,16 +557,18 @@ startScanKey(GinState *ginstate, GinScanOpaque so, GinScanKey key) qsort_arg(entryIndexes, key->nentries, sizeof(int), entryIndexByFrequencyCmp, key); + for (i = 1; i < key->nentries; i++) + key->entryRes[entryIndexes[i]] = GIN_MAYBE; for (i = 0; i < key->nentries - 1; i++) { /* Pass all entries <= i as FALSE, and the rest as MAYBE */ - for (j = 0; j <= i; j++) - key->entryRes[entryIndexes[j]] = GIN_FALSE; - for (j = i + 1; j < key->nentries; j++) - key->entryRes[entryIndexes[j]] = GIN_MAYBE; + key->entryRes[entryIndexes[i]] = GIN_FALSE; if (key->triConsistentFn(key) == GIN_FALSE) break; + + /* Make this loop interruptible in case there are many keys */ + CHECK_FOR_INTERRUPTS(); } /* i is now the last required entry. */ @@ -1313,6 +1315,8 @@ scanGetItem(IndexScanDesc scan, ItemPointerData advancePast, */ do { + CHECK_FOR_INTERRUPTS(); + ItemPointerSetMin(item); match = true; for (i = 0; i < so->nkeys && match; i++) @@ -1956,8 +1960,6 @@ gingetbitmap(IndexScanDesc scan, TIDBitmap *tbm) for (;;) { - CHECK_FOR_INTERRUPTS(); - if (!scanGetItem(scan, iptr, &iptr, &recheck)) break; diff --git a/src/backend/access/gin/ginlogic.c b/src/backend/access/gin/ginlogic.c index 6bf3288f5b9..390000c242f 100644 --- a/src/backend/access/gin/ginlogic.c +++ b/src/backend/access/gin/ginlogic.c @@ -146,7 +146,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) @@ -155,7 +157,7 @@ shimTriConsistentFn(GinScanKey key) int maybeEntries[MAX_MAYBE_ENTRIES]; int i; bool boolResult; - bool recheck = false; + bool recheck; GinTernaryValue curResult; /* @@ -175,8 +177,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); @@ -185,6 +187,7 @@ shimTriConsistentFn(GinScanKey key) for (i = 0; i < nmaybe; i++) key->entryRes[maybeEntries[i]] = GIN_FALSE; curResult = directBoolConsistentFn(key); + recheck = key->recheckCurItem; for (;;) { @@ -206,13 +209,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 55e2d49fd72..36110967d80 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -68,8 +68,13 @@ ginFillScanEntry(GinScanOpaque so, OffsetNumber attnum, * * Entries with non-null extra_data are never considered identical, since * we can't know exactly what the opclass might be doing with that. + * + * Also, give up de-duplication once we have 100 entries. That avoids + * spending O(N^2) time on probably-fruitless de-duplication of large + * search-key sets. The threshold of 100 is arbitrary but matches + * predtest.c's threshold for what's a large array. */ - if (extra_data == NULL) + if (extra_data == NULL && so->totalentries < 100) { for (i = 0; i < so->totalentries; i++) { @@ -265,6 +270,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; @@ -387,6 +393,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]; @@ -400,6 +407,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 3c519f743fd..0b418fd6f2a 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -1041,12 +1041,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/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c index 2c00de50418..342f86537d1 100644 --- a/src/backend/access/hash/hashfunc.c +++ b/src/backend/access/hash/hashfunc.c @@ -234,6 +234,7 @@ hashoidvector(PG_FUNCTION_ARGS) { oidvector *key = (oidvector *) PG_GETARG_POINTER(0); + check_valid_oidvector(key); return hash_any((unsigned char *) key->values, key->dim1 * sizeof(Oid)); } @@ -242,6 +243,7 @@ hashoidvectorextended(PG_FUNCTION_ARGS) { oidvector *key = (oidvector *) PG_GETARG_POINTER(0); + check_valid_oidvector(key); return hash_any_extended((unsigned char *) key->values, key->dim1 * sizeof(Oid), PG_GETARG_INT64(1)); diff --git a/src/backend/access/heap/README.tuplock b/src/backend/access/heap/README.tuplock index 750684d3398..16f7d78b7d2 100644 --- a/src/backend/access/heap/README.tuplock +++ b/src/backend/access/heap/README.tuplock @@ -198,6 +198,36 @@ Inplace updates create an exception to the rule that tuple data won't change under a reader holding a pin. A reader of a heap_fetch() result tuple may witness a torn read. Current inplace-updated fields are aligned and are no wider than four bytes, and current readers don't need consistency across -fields. Hence, they get by with just fetching each field once. XXX such a -caller may also read a value that has not reached WAL; see -systable_inplace_update_finish(). +fields. Hence, they get by with just fetching each field once. + +During logical decoding, caches reflect an inplace update no later than the +next XLOG_XACT_INVALIDATIONS. That record witnesses the end of a command. +Tuples of its cmin are then visible to decoding, as are inplace updates of any +lower LSN. Inplace updates of a higher LSN may also be visible, even if those +updates would have been invisible to a non-historic snapshot matching +decoding's historic snapshot. (In other words, decoding may see inplace +updates that were not visible to a similar snapshot taken during original +transaction processing.) That's a consequence of inplace update violating +MVCC: there are no snapshot-specific versions of inplace-updated values. This +all makes it hard to reason about inplace-updated column reads during logical +decoding, but the behavior does suffice for relhasindex. A relhasindex=t in +CREATE INDEX becomes visible no later than the new pg_index row. While it may +be visible earlier, that's harmless. Finding zero indexes despite +relhasindex=t is normal in more cases than this, e.g. after DROP INDEX. +Example of a case that meaningfully reacts to the inplace inval: + +CREATE TABLE cat (c int) WITH (user_catalog_table = true); +CREATE TABLE normal (d int); +... +CREATE INDEX ON cat (c)\; INSERT INTO normal VALUES (1); + +If the output plugin reads "cat" during decoding of the INSERT, it's fair to +want that read to see relhasindex=t and use the new index. + +An alternative would be to have decoding of XLOG_HEAP_INPLACE immediately +execute its invals. That would behave more like invals during original +transaction processing. It would remove the decoding-specific delay in e.g. a +decoding plugin witnessing a relfrozenxid change. However, a good use case +for that is unlikely, since the plugin would still witness relfrozenxid +changes prematurely. Hence, inplace update takes the trivial approach of +delegating to XLOG_XACT_INVALIDATIONS. diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 6045b17966f..6ad520aa52d 100755 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -58,6 +58,7 @@ #include "pgstat.h" #include "port/atomics.h" #include "port/pg_bitutils.h" +#include "replication/logicalrelation.h" #include "storage/bufmgr.h" #include "storage/freespace.h" #include "storage/lmgr.h" @@ -93,8 +94,11 @@ static Bitmapset *HeapDetermineColumnsInfo(Relation relation, Bitmapset *external_cols, HeapTuple oldtup, HeapTuple newtup, bool *has_external); -static TM_Result heap_lock_updated_tuple(Relation rel, HeapTuple tuple, - ItemPointer ctid, TransactionId xid, +static TM_Result heap_lock_updated_tuple(Relation rel, + uint16 prior_infomask, + TransactionId prior_rawxmax, + const ItemPointerData *prior_ctid, + TransactionId xid, LockTupleMode mode); static void GetMultiXactIdHintBits(MultiXactId multi, uint16 *new_infomask, uint16 *new_infomask2); @@ -2971,7 +2975,7 @@ heap_delete(Relation relation, ItemPointer tid, if (old_key_tuple != NULL) { - if (relation->rd_rel->relreplident == REPLICA_IDENTITY_FULL) + if (logicalrep_identity_is_full(relation)) xlrec.flags |= XLH_DELETE_CONTAINS_OLD_TUPLE; else xlrec.flags |= XLH_DELETE_CONTAINS_OLD_KEY; @@ -4636,11 +4640,13 @@ heap_lock_tuple(Relation relation, HeapTuple tuple, * If there are updates, follow the update chain; bail out if * that cannot be done. */ - if (follow_updates && updated) + if (follow_updates && updated && + !ItemPointerEquals(&tuple->t_self, &t_ctid)) { TM_Result res; - res = heap_lock_updated_tuple(relation, tuple, &t_ctid, + res = heap_lock_updated_tuple(relation, + infomask, xwait, &t_ctid, GetCurrentTransactionId(), mode); if (res != TM_Ok) @@ -4883,11 +4889,13 @@ heap_lock_tuple(Relation relation, HeapTuple tuple, } /* if there are updates, follow the update chain */ - if (follow_updates && !HEAP_XMAX_IS_LOCKED_ONLY(infomask)) + if (follow_updates && !HEAP_XMAX_IS_LOCKED_ONLY(infomask) && + !ItemPointerEquals(&tuple->t_self, &t_ctid)) { TM_Result res; - res = heap_lock_updated_tuple(relation, tuple, &t_ctid, + res = heap_lock_updated_tuple(relation, + infomask, xwait, &t_ctid, GetCurrentTransactionId(), mode); if (res != TM_Ok) @@ -5541,7 +5549,8 @@ test_lockmode_for_conflict(MultiXactStatus status, TransactionId xid, * version as well. */ static TM_Result -heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid, +heap_lock_updated_tuple_rec(Relation rel, TransactionId priorXmax, + const ItemPointerData *tid, TransactionId xid, LockTupleMode mode) { TM_Result result; @@ -5554,7 +5563,6 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid, old_infomask2; TransactionId xmax, new_xmax; - TransactionId priorXmax = InvalidTransactionId; bool cleared_all_frozen = false; bool pinned_desired_page; Buffer vmbuffer = InvalidBuffer; @@ -5868,7 +5876,10 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid, * Follow update chain when locking an updated tuple, acquiring locks (row * marks) on the updated versions. * - * The initial tuple is assumed to be already locked. + * 'prior_infomask', 'prior_raw_xmax' and 'prior_ctid' are the corresponding + * fields from the initial tuple. We will lock the tuples starting from the + * one that 'prior_ctid' points to. Note: This function does not lock the + * initial tuple itself. * * This function doesn't check visibility, it just unconditionally marks the * tuple(s) as locked. If any tuple in the updated chain is being deleted @@ -5886,16 +5897,20 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid, * levels, because that would lead to a serializability failure. */ static TM_Result -heap_lock_updated_tuple(Relation rel, HeapTuple tuple, ItemPointer ctid, +heap_lock_updated_tuple(Relation rel, + uint16 prior_infomask, + TransactionId prior_raw_xmax, + const ItemPointerData *prior_ctid, TransactionId xid, LockTupleMode mode) { /* - * If the tuple has not been updated, or has moved into another partition - * (effectively a delete) stop here. + * If the tuple has moved into another partition (effectively a delete) + * stop here. */ - if (!HeapTupleHeaderIndicatesMovedPartitions(tuple->t_data) && - !ItemPointerEquals(&tuple->t_self, ctid)) + if (!ItemPointerIndicatesMovedPartitions(prior_ctid)) { + TransactionId prior_xmax; + /* * If this is the first possibly-multixact-able operation in the * current transaction, set my per-backend OldestMemberMXactId @@ -5907,7 +5922,9 @@ heap_lock_updated_tuple(Relation rel, HeapTuple tuple, ItemPointer ctid, */ MultiXactIdSetOldestMember(); - return heap_lock_updated_tuple_rec(rel, ctid, xid, mode); + prior_xmax = (prior_infomask & HEAP_XMAX_IS_MULTI) ? + MultiXactIdGetUpdateXid(prior_raw_xmax, prior_infomask) : prior_raw_xmax; + return heap_lock_updated_tuple_rec(rel, prior_xmax, prior_ctid, xid, mode); } /* nothing to lock */ @@ -6212,6 +6229,19 @@ heap_inplace_lock(Relation relation, Assert(BufferIsValid(buffer)); + /* + * Register shared cache invals if necessary. Other sessions may finish + * inplace updates of this tuple between this step and LockTuple(). Since + * inplace updates don't change cache keys, that's harmless. + * + * While it's tempting to register invals only after confirming we can + * return true, the following obstacle precludes reordering steps that + * way. Registering invals might reach a CatalogCacheInitializeCache() + * that locks "buffer". That would hang indefinitely if running after our + * own LockBuffer(). Hence, we must register invals before LockBuffer(). + */ + CacheInvalidateHeapTupleInplace(relation, oldtup_ptr); + LockTuple(relation, &oldtup.t_self, InplaceUpdateTupleLock); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); @@ -6307,6 +6337,7 @@ heap_inplace_lock(Relation relation, if (!ret) { UnlockTuple(relation, &oldtup.t_self, InplaceUpdateTupleLock); + ForgetInplace_Inval(); InvalidateCatalogSnapshot(); } return ret; @@ -6328,6 +6359,8 @@ heap_inplace_update_and_unlock(Relation relation, HeapTupleHeader htup = oldtup->t_data; uint32 oldlen; uint32 newlen; + char *dst; + char *src; Assert(ItemPointerEquals(&oldtup->t_self, &tuple->t_self)); oldlen = oldtup->t_len - htup->t_hoff; @@ -6335,15 +6368,28 @@ heap_inplace_update_and_unlock(Relation relation, if (oldlen != newlen || htup->t_hoff != tuple->t_data->t_hoff) elog(ERROR, "wrong tuple length"); - /* NO EREPORT(ERROR) from here till changes are logged */ - START_CRIT_SECTION(); + dst = (char *) htup + htup->t_hoff; + src = (char *) tuple->t_data + tuple->t_data->t_hoff; - memcpy((char *) htup + htup->t_hoff, - (char *) tuple->t_data + tuple->t_data->t_hoff, - newlen); + /* + * Unlink relcache init files as needed. If unlinking, acquire + * RelCacheInitLock until after associated invalidations. By doing this + * in advance, if we checkpoint and then crash between inplace + * XLogInsert() and inval, we don't rely on StartupXLOG() -> + * RelationCacheInitFileRemove(). That uses elevel==LOG, so replay would + * neglect to PANIC on EIO. + */ + PreInplace_Inval(); /*---------- - * XXX A crash here can allow datfrozenxid() to get ahead of relfrozenxid: + * NO EREPORT(ERROR) from here till changes are complete + * + * Our buffer lock won't stop a reader having already pinned and checked + * visibility for this tuple. Hence, we write WAL first, then mutate the + * buffer. Like in MarkBufferDirtyHint() or RecordTransactionCommit(), + * checkpoint delay makes that acceptable. With the usual order of + * changes, a crash after memcpy() and before XLogInsert() could allow + * datfrozenxid to overtake relfrozenxid: * * ["D" is a VACUUM (ONLY_DATABASE_STATS)] * ["R" is a VACUUM tbl] @@ -6353,14 +6399,36 @@ heap_inplace_update_and_unlock(Relation relation, * D: raise pg_database.datfrozenxid, XLogInsert(), finish * [crash] * [recovery restores datfrozenxid w/o relfrozenxid] - */ - - MarkBufferDirty(buffer); + * + * 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->delayChkpt); + START_CRIT_SECTION(); + MyProc->delayChkpt = true; /* XLOG stuff */ if (RelationNeedsWAL(relation)) { xl_heap_inplace xlrec; + PGAlignedBlock copied_buffer; + char *origdata = (char *) BufferGetBlock(buffer); + Page page = BufferGetPage(buffer); + uint16 lower = ((PageHeader) page)->pd_lower; + uint16 upper = ((PageHeader) page)->pd_upper; + uintptr_t dst_offset_in_block; + RelFileNode rnode; + ForkNumber forkno; + BlockNumber blkno; XLogRecPtr recptr; xlrec.offnum = ItemPointerGetOffsetNumber(&tuple->t_self); @@ -6368,27 +6436,47 @@ heap_inplace_update_and_unlock(Relation relation, XLogBeginInsert(); XLogRegisterData((char *) &xlrec, SizeOfHeapInplace); - XLogRegisterBuffer(0, buffer, REGBUF_STANDARD); - XLogRegisterBufData(0, (char *) htup + htup->t_hoff, newlen); + /* register block matching what buffer will look like after changes */ + memcpy(copied_buffer.data, origdata, lower); + memcpy(copied_buffer.data + upper, origdata + upper, BLCKSZ - upper); + dst_offset_in_block = dst - origdata; + memcpy(copied_buffer.data + dst_offset_in_block, src, newlen); + BufferGetTag(buffer, &rnode, &forkno, &blkno); + Assert(forkno == MAIN_FORKNUM); + XLogRegisterBlock(0, &rnode, forkno, blkno, copied_buffer.data, + REGBUF_STANDARD); + XLogRegisterBufData(0, src, newlen); /* inplace updates aren't decoded atm, don't log the origin */ recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_INPLACE); - PageSetLSN(BufferGetPage(buffer), recptr); + PageSetLSN(page, recptr); } + memcpy(dst, src, newlen); + + MarkBufferDirty(buffer); + + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + + /* + * Send invalidations to shared queue. SearchSysCacheLocked1() assumes we + * do this before UnlockTuple(). + */ + AtInplace_Inval(); + + MyProc->delayChkpt = false; END_CRIT_SECTION(); + UnlockTuple(relation, &tuple->t_self, InplaceUpdateTupleLock); - heap_inplace_unlock(relation, oldtup, buffer); + AcceptInvalidationMessages(); /* local processing of just-sent inval */ /* - * Send out shared cache inval if necessary. Note that because we only - * pass the new version of the tuple, this mustn't be used for any - * operations that could change catcache lookup keys. But we aren't - * bothering with index updates either, so that's true a fortiori. - * - * XXX ROLLBACK discards the invalidation. See test inplace-inval.spec. + * Queue a transactional inval, for logical decoding and for third-party + * code that might have been relying on it since long before inplace + * update adopted immediate invalidation. See README.tuplock section + * "Reading inplace-updated columns" for logical decoding details. */ if (!IsBootstrapProcessingMode()) CacheInvalidateHeapTuple(relation, tuple, NULL); @@ -6403,6 +6491,7 @@ heap_inplace_unlock(Relation relation, { LockBuffer(buffer, BUFFER_LOCK_UNLOCK); UnlockTuple(relation, &oldtup->t_self, InplaceUpdateTupleLock); + ForgetInplace_Inval(); } /* @@ -8519,7 +8608,7 @@ log_heap_update(Relation reln, Buffer oldbuf, xlrec.flags |= XLH_UPDATE_CONTAINS_NEW_TUPLE; if (old_key_tuple) { - if (reln->rd_rel->relreplident == REPLICA_IDENTITY_FULL) + if (logicalrep_identity_is_full(reln)) xlrec.flags |= XLH_UPDATE_CONTAINS_OLD_TUPLE; else xlrec.flags |= XLH_UPDATE_CONTAINS_OLD_KEY; @@ -8746,7 +8835,7 @@ ExtractReplicaIdentity(Relation relation, HeapTuple tp, bool key_changed, if (replident == REPLICA_IDENTITY_NOTHING) return NULL; - if (replident == REPLICA_IDENTITY_FULL) + if (logicalrep_identity_is_full(relation)) { /* * When logging the entire old tuple, it very well could contain @@ -9301,6 +9390,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. @@ -9371,10 +9463,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/heaptoast.c b/src/backend/access/heap/heaptoast.c index 55bbe1d5847..5f9ac79c148 100644 --- a/src/backend/access/heap/heaptoast.c +++ b/src/backend/access/heap/heaptoast.c @@ -770,7 +770,7 @@ heap_fetch_toast_slice(Relation toastrel, Oid valueid, int32 attrsize, chcpyend = (sliceoffset + slicelength - 1) % TOAST_MAX_CHUNK_SIZE; memcpy(VARDATA(result) + - (curchunk * TOAST_MAX_CHUNK_SIZE - sliceoffset) + chcpystrt, + curchunk * TOAST_MAX_CHUNK_SIZE - sliceoffset + chcpystrt, chunkdata + chcpystrt, (chcpyend - chcpystrt) + 1); diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index e5ec0ca9181..c074ef8eaa0 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -202,6 +202,7 @@ static inline void validate_relation_kind(Relation r) { if (r->rd_rel->relkind != RELKIND_INDEX && + r->rd_rel->relkind != RELKIND_GLOBAL_INDEX && r->rd_rel->relkind != RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c index 7ac73cb8c2d..14ddb7161b0 100644 --- a/src/backend/access/nbtree/nbtcompare.c +++ b/src/backend/access/nbtree/nbtcompare.c @@ -307,6 +307,9 @@ btoidvectorcmp(PG_FUNCTION_ARGS) oidvector *b = (oidvector *) PG_GETARG_POINTER(1); int i; + check_valid_oidvector(a); + check_valid_oidvector(b); + /* We arbitrarily choose to sort first by vector length */ if (a->dim1 != b->dim1) PG_RETURN_INT32(a->dim1 - b->dim1); diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 1241c562397..6e7c62bce0e 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -33,7 +33,7 @@ static BTStack _bt_search_insert(Relation rel, BTInsertState insertstate); static TransactionId _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, IndexUniqueCheck checkUnique, bool *is_unique, - uint32 *speculativeToken); + uint32 *speculativeToken, Relation origHeapRel); static OffsetNumber _bt_findinsertloc(Relation rel, BTInsertState insertstate, bool checkingunique, @@ -72,6 +72,11 @@ static BlockNumber *_bt_deadblocks(Page page, OffsetNumber *deletable, int *nblocks); static inline int _bt_blk_cmp(const void *arg1, const void *arg2); +TransactionId _bt_check_unique_gi(Relation rel, BTInsertState insertstate, + Relation heapRel, + IndexUniqueCheck checkUnique, bool *is_unique, + uint32 *speculativeToken, Relation origHeapRel); + /* * _bt_doinsert() -- Handle insertion of a single index tuple in the tree. * @@ -205,7 +210,7 @@ _bt_doinsert(Relation rel, IndexTuple itup, uint32 speculativeToken; xwait = _bt_check_unique(rel, &insertstate, heapRel, checkUnique, - &is_unique, &speculativeToken); + &is_unique, &speculativeToken, NULL); if (unlikely(TransactionIdIsValid(xwait))) { @@ -378,6 +383,15 @@ _bt_search_insert(Relation rel, BTInsertState insertstate) NULL); } +TransactionId +_bt_check_unique_gi(Relation rel, BTInsertState insertstate, Relation heapRel, + IndexUniqueCheck checkUnique, bool *is_unique, + uint32 *speculativeToken, Relation origHeapRel) +{ + return _bt_check_unique(rel, insertstate, heapRel, checkUnique, + is_unique, speculativeToken, origHeapRel); +} + /* * _bt_check_unique() -- Check for violation of unique index constraint * @@ -404,7 +418,7 @@ _bt_search_insert(Relation rel, BTInsertState insertstate) static TransactionId _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, IndexUniqueCheck checkUnique, bool *is_unique, - uint32 *speculativeToken) + uint32 *speculativeToken, Relation origHeapRel) { IndexTuple itup = insertstate->itup; IndexTuple curitup = NULL; @@ -559,6 +573,7 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, &all_dead)) { TransactionId xwait; + bool idx_fetch_result; /* * It is a duplicate. If we are only doing a partial @@ -612,8 +627,13 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, * entry. */ htid = itup->t_tid; - if (table_index_fetch_tuple_check(heapRel, &htid, - SnapshotSelf, NULL)) + if (origHeapRel) + idx_fetch_result = table_index_fetch_tuple_check(origHeapRel, &htid, + SnapshotSelf, NULL); + else + idx_fetch_result = table_index_fetch_tuple_check(heapRel, &htid, + SnapshotSelf, NULL); + if (idx_fetch_result) { /* Normal case --- it's still live */ } diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 64ebf58fed2..cc575cfb5a0 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -22,6 +22,9 @@ #include "access/nbtxlog.h" #include "access/relscan.h" #include "access/xlog.h" +#include "access/xloginsert.h" +#include "access/table.h" +#include "catalog/partition.h" #include "commands/progress.h" #include "commands/vacuum.h" #include "miscadmin.h" @@ -33,9 +36,11 @@ #include "storage/ipc.h" #include "storage/lmgr.h" #include "storage/smgr.h" +#include "storage/predicate.h" #include "utils/builtins.h" #include "utils/index_selfuncs.h" #include "utils/memutils.h" +#include "partitioning/partdesc.h" /* @@ -85,7 +90,9 @@ static BTVacuumPosting btreevacuumposting(BTVacState *vstate, IndexTuple posting, OffsetNumber updatedoffset, int *nremaining); - +static void + btinsert_check_unique_gi(IndexTuple itup, Relation idxRel, + Relation heapRel, IndexUniqueCheck checkUnique); /* * Btree handler function: return IndexAmRoutine with access method parameters @@ -176,6 +183,125 @@ btbuildempty(Relation index) smgrimmedsync(RelationGetSmgr(index), INIT_FORKNUM); } +/* + * btinsert_check_unique_gi() -- cross partitions uniqueness check. + * + * loop all partitions with global index for uniqueness check. + */ +static void +btinsert_check_unique_gi(IndexTuple itup, Relation idxRel, + Relation heapRel, IndexUniqueCheck checkUnique) +{ + bool is_unique = false; + BTScanInsert itup_key = _bt_mkscankey(idxRel, itup); + + if (!itup_key->anynullkeys && + idxRel->rd_rel->relkind == RELKIND_GLOBAL_INDEX) + { + Oid parentId; + Relation parentTbl; + PartitionDesc partDesc; + int i; + int nparts; + Oid *partOids; + + itup_key->scantid = NULL; + parentId = heapRel->rd_rel->relispartition ? + get_partition_parent(idxRel->rd_index->indrelid, false) : InvalidOid; + parentTbl = table_open(parentId, AccessShareLock); + partDesc = RelationGetPartitionDesc(parentTbl, true); + nparts = partDesc->nparts; + partOids = palloc(sizeof(Oid) * nparts); + memcpy(partOids, partDesc->oids, sizeof(Oid) * nparts); + for (i = 0; i < nparts; i++) + { + Oid childRelid = partOids[i]; + List *childidxs; + ListCell *cell; + + if (childRelid != heapRel->rd_rel->oid) + { + Relation hRel = table_open(childRelid, AccessShareLock); + + childidxs = RelationGetIndexList(hRel); + foreach(cell, childidxs) + { + Oid cldidxid = lfirst_oid(cell); + Relation iRel = index_open(cldidxid, AccessShareLock); + + if (iRel->rd_rel->relkind == RELKIND_GLOBAL_INDEX + && iRel->rd_rel->oid != idxRel->rd_rel->oid) + { + BTStack stack; + uint32 speculativeToken; + BTInsertStateData insertstate; + TransactionId xwait = InvalidBuffer; + + insertstate.itup = itup; + insertstate.itemsz = MAXALIGN(IndexTupleSize(itup)); + insertstate.itup_key = itup_key; + insertstate.bounds_valid = false; + insertstate.buf = InvalidBuffer; + insertstate.postingoff = 0; + + search_global: + stack = _bt_search(iRel, insertstate.itup_key, + &insertstate.buf, BT_READ, NULL); + /* + * If the index is empty, _bt_search returns + * InvalidBuffer. No duplicates are possible. + */ + if (BufferIsValid(insertstate.buf)) + { + xwait = _bt_check_unique_gi(iRel, &insertstate, + hRel, checkUnique, &is_unique, + &speculativeToken, heapRel); + if (unlikely(TransactionIdIsValid(xwait))) + { + /* Have to wait for the other guy ... */ + if (insertstate.buf) + { + _bt_relbuf(iRel, insertstate.buf); + insertstate.buf = InvalidBuffer; + } + + /* + * If it's a speculative insertion, wait for it to + * finish (ie. to go ahead with the insertion, or + * kill the tuple). Otherwise wait for the + * transaction to finish as usual. + */ + if (speculativeToken) + SpeculativeInsertionWait(xwait, speculativeToken); + else + XactLockTableWait(xwait, iRel, &itup->t_tid, XLTW_InsertIndex); + + /* start over... */ + if (stack) + _bt_freestack(stack); + goto search_global; + } + if (insertstate.buf) + _bt_relbuf(iRel, insertstate.buf); + } + if (stack) + _bt_freestack(stack); + } + index_close(iRel, AccessShareLock); + } + if (childidxs) + list_free(childidxs); + table_close(hRel, AccessShareLock); + } + } + if (partOids) + pfree(partOids); + table_close(parentTbl, AccessShareLock); + } + if (itup_key) + pfree(itup_key); +} + /* * btinsert() -- insert an index tuple into a btree. * @@ -198,6 +324,9 @@ btinsert(Relation rel, Datum *values, bool *isnull, result = _bt_doinsert(rel, itup, checkUnique, indexUnchanged, heapRel); + if (checkUnique != UNIQUE_CHECK_NO) + btinsert_check_unique_gi(itup, rel, heapRel, checkUnique); + pfree(itup); return result; diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index e6ba3b80f86..ad25955d1e3 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -71,6 +71,7 @@ #define PARALLEL_KEY_QUERY_TEXT UINT64CONST(0xA000000000000004) #define PARALLEL_KEY_WAL_USAGE UINT64CONST(0xA000000000000005) #define PARALLEL_KEY_BUFFER_USAGE UINT64CONST(0xA000000000000006) +#define PARALLEL_KEY_TUPLESORT_GLOBAL UINT64CONST(0xA000000000000007) /* * DISABLE_LEADER_PARTICIPATION disables the leader's participation in @@ -108,6 +109,7 @@ typedef struct BTShared bool isunique; bool isconcurrent; int scantuplesortstates; + bool isglobal; /* * workersdonecv is used to monitor the progress of workers. All parallel @@ -195,6 +197,7 @@ typedef struct BTLeader Snapshot snapshot; WalUsage *walusage; BufferUsage *bufferusage; + Sharedsort *sharedsortglobal; } BTLeader; /* @@ -223,6 +226,16 @@ typedef struct BTBuildState * BTBuildState. Workers have their own spool and spool2, though.) */ BTLeader *btleader; + + /* + * global unique index related parameters + */ + BTSpool *spoolglobal; /* spoolglobal is used on global unique index + * build in parallel */ + bool global_index; /* true if index is global */ + int globalIndexPart; /* partition number indication */ + int nparts; /* number of partitions involved in global + * unique index build in parallel */ } BTBuildState; /* @@ -288,8 +301,28 @@ static void _bt_leader_participate_as_worker(BTBuildState *buildstate); static void _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, BTShared *btshared, Sharedsort *sharedsort, Sharedsort *sharedsort2, int sortmem, - bool progress); + bool progress, Sharedsort *sharedsortglobal, + bool isworker); +static BTSpool *global_btspool; +Sharedsort *global_sharedsort; + +static void +btinit_global_spool(Relation heap, Relation index, BTBuildState *buildstate) +{ + elog(DEBUG2, "%s: init global index spool", __FUNCTION__); + global_btspool = (BTSpool *) palloc0(sizeof(BTSpool)); + global_btspool->heap = heap; + global_btspool->index = index; + global_btspool->isunique = buildstate->isunique; + + global_btspool->sortstate = + tuplesort_begin_index_btree(heap, index, buildstate->isunique, + maintenance_work_mem, NULL, + false); + + tuplesort_mark_global_sort(global_btspool->sortstate); +} /* * btbuild() -- build a new btree index. @@ -314,22 +347,149 @@ btbuild(Relation heap, Relation index, IndexInfo *indexInfo) buildstate.indtuples = 0; buildstate.btleader = NULL; + if (indexInfo->ii_Global_index && indexInfo->ii_Unique) + { + /* copy global unique index related parameters to buildstate */ + buildstate.global_index = indexInfo->ii_Global_index; + buildstate.globalIndexPart = indexInfo->ii_GlobalIndexPart; + buildstate.nparts = indexInfo->ii_Nparts; + } + else + { + /* disable global unique check */ + buildstate.global_index = false; + buildstate.globalIndexPart = 0; + buildstate.nparts = 0; + } + /* * We expect to be called exactly once for any index relation. If that's - * not the case, big trouble's what we have. + * not the case, big trouble's what we have unless you set + * buildGlobalSpool to true, which only builds the global spool for global + * uniqueness check and not physical index tuples */ - if (RelationGetNumberOfBlocks(index) != 0) + if (indexInfo->ii_BuildGlobalSpool == false && RelationGetNumberOfBlocks(index) != 0) elog(ERROR, "index \"%s\" already contains data", RelationGetRelationName(index)); reltuples = _bt_spools_heapscan(heap, index, &buildstate, indexInfo); + if (indexInfo->ii_ParallelWorkers > 0) + { + /* + * global uniqueness check in parallel build case + */ + if (indexInfo->ii_Global_index && indexInfo->ii_Unique && global_btspool) + { + /* + * indexInfo->ii_GlobalIndexPart <= 0 indicates the first and + * intermediate partition to build index on. For parallel global + * unique index build, we need to clean up global_btspool + * structure to prevent resource leak + */ + if (indexInfo->ii_GlobalIndexPart <= 0) + { + _bt_spooldestroy(global_btspool); + global_btspool = NULL; + } + + /* + * indexInfo->ii_GlobalIndexPart > 0 indicates the last partition + * to build index on. For parallel global unique index build, we + * need to call tuplesort_performsort to merge all the tapes + * created from previous partition build runs and do a final + * sorting to determine global uniqueness + */ + if (indexInfo->ii_GlobalIndexPart > 0) + { + IndexTuple itup; + + elog(DEBUG2, "last partitioned to build global index in parallel. Perform merge run and " + "uniqueness check now..."); + tuplesort_performsort(buildstate.spoolglobal->sortstate); + + /* + * this loop checks for uniqueness after all tapes have been + * merged. If a duplicate is found, we will error out. + */ + while ((itup = tuplesort_getindextuple(buildstate.spoolglobal->sortstate, + true)) != NULL) + { + /* + * simply checking for global uniqueness, nothing to do + * here + */ + } + + /* + * no global uniqueness violation is found at this point, + * remove all the tapes (temp files) and destroy resources and + * continue to build the actual index. + */ + _bt_spooldestroy(buildstate.spoolglobal); + _bt_spooldestroy(global_btspool); + global_btspool = NULL; + if (global_sharedsort) + { + pfree(global_sharedsort); + global_sharedsort = NULL; + } + } + } + } + else + { + /* + * global uniqueness check in serial build case + */ + if (indexInfo->ii_GlobalIndexPart > 0 && indexInfo->ii_Global_index && + indexInfo->ii_Unique && global_btspool) + { + /* + * indexInfo->ii_GlobalIndexPart > 0 indicates the last partition + * to build index on. For serial global unique index build, we + * call tuplesort_performsort on global_btspool->sortstate which + * should contain index tuples from all partitions. If a duplicate + * is found, we will error out. + */ + elog(DEBUG2, "last partitioned to build global index serially. Sorting global_btspool for " + "uniqueness check now..."); + tuplesort_performsort(global_btspool->sortstate); + + /* + * no global uniqueness violation is found at this point, destroy + * global_btspool structure and continue to build the actual + * index. + */ + _bt_spooldestroy(global_btspool); + global_btspool = NULL; + } + } + /* - * Finish the build by (1) completing the sort of the spool file, (2) - * inserting the sorted tuples into btree pages and (3) building the upper - * levels. Finally, it may also be necessary to end use of parallelism. + * if indexInfo->ii_BuildGlobalSpool is set, we will not continue to build + * the actual index. This is used during a new partition attach, where we + * just want to populate the global_btspool from current partitions + * without building the actual indexes (because they exist already). Then, + * we take that global_btspool and sort it with the tuples in newly + * attached partition to determine if attach would violate global + * uniquenes check */ - _bt_leafbuild(buildstate.spool, buildstate.spool2); + if (indexInfo->ii_BuildGlobalSpool) + { + elog(DEBUG2, "ii_BuildGlobalSpool is set. Skip building actual index content"); + } + else + { + /* + * Finish the build by (1) completing the sort of the spool file, (2) + * inserting the sorted tuples into btree pages and (3) building the + * upper levels. Finally, it may also be necessary to end use of + * parallelism. + */ + _bt_leafbuild(buildstate.spool, buildstate.spool2); + } + _bt_spooldestroy(buildstate.spool); if (buildstate.spool2) _bt_spooldestroy(buildstate.spool2); @@ -370,6 +530,7 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, BTSpool *btspool = (BTSpool *) palloc0(sizeof(BTSpool)); SortCoordinate coordinate = NULL; double reltuples = 0; + SortCoordinate coordinateglobal = NULL; /* * We size the sort area as maintenance_work_mem rather than work_mem to @@ -390,8 +551,40 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, /* Attempt to launch parallel worker scan when required */ if (indexInfo->ii_ParallelWorkers > 0) + { + /* + * while building the last partition table in parallel global unique + * index build, we need to allocate a primary spoolglobal, which will + * be used in the leader process later to "take over" all tapes + * created by previous partition runs + */ + if (buildstate->isunique && buildstate->global_index && + buildstate->globalIndexPart > 0) + { + elog(DEBUG2, "init primary spoolglobal in last partition for parallel index build"); + buildstate->spoolglobal = (BTSpool *) palloc0(sizeof(BTSpool)); + buildstate->spoolglobal->heap = heap; + buildstate->spoolglobal->index = index; + buildstate->spoolglobal->isunique = indexInfo->ii_Unique; + } _bt_begin_parallel(buildstate, indexInfo->ii_Concurrent, indexInfo->ii_ParallelWorkers); + } + else + { + /* + * in serial global unique index build, we just need to allocate a + * single global_btspool structure at the first partition build. The + * rest of the partitions will add their index tuples to this single + * global spool structure + */ + if (buildstate->isunique && buildstate->global_index && + buildstate->globalIndexPart < 0) + { + elog(DEBUG2, "init new global_btspool for serial index build"); + btinit_global_spool(heap, index, buildstate); + } + } /* * If parallel build requested and at least one worker process was @@ -404,6 +597,22 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, coordinate->nParticipants = buildstate->btleader->nparticipanttuplesorts; coordinate->sharedsort = buildstate->btleader->sharedsort; + + /* + * set up a coordinator state for primary spoolglobal if we are doing + * global unique index build in parallel. We do this at the last + * partition create in parallel mode + */ + if (buildstate->isunique && buildstate->global_index && buildstate->globalIndexPart > 0) + { + elog(DEBUG2, "set up coordinate state for primary spoolglobal for " + "parallel index build case"); + coordinateglobal = (SortCoordinate) palloc0(sizeof(SortCoordinateData)); + coordinateglobal->isWorker = false; + coordinateglobal->nParticipants = + tuplesort_get_curr_workers(buildstate->btleader->sharedsortglobal); + coordinateglobal->sharedsort = buildstate->btleader->sharedsortglobal; + } } /* @@ -432,6 +641,22 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, maintenance_work_mem, coordinate, false); + /* + * initialize primary spoolglobal if we are doing global unique index + * build in parallel. We do this at the last partition create in parallel + * mode + */ + if (buildstate->btleader && buildstate->isunique && + buildstate->global_index && buildstate->globalIndexPart > 0) + { + elog(DEBUG2, "tuplesort_begin_index_btree for primary spoolglobal for " + "parallel index build case"); + buildstate->spoolglobal->sortstate = + tuplesort_begin_index_btree(heap, index, buildstate->isunique, + maintenance_work_mem, coordinateglobal, + false); + } + /* * If building a unique index, put dead tuples in a second spool to keep * them out of the uniqueness check. We expect that the second spool (for @@ -481,6 +706,19 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, reltuples = _bt_parallel_heapscan(buildstate, &indexInfo->ii_BrokenHotChain); + /* + * all parallel workers should finish at this point, make backup of + * sharedsortglobal, which is needed to persist the logical tape and temp + * file information for next partition build when building global unique + * index in parallel + */ + if (buildstate->btleader && buildstate->global_index && + buildstate->isunique) + { + elog(DEBUG2, "all workers finished, backup sharedsortglobal"); + tuplesort_copy_sharedsort2(global_sharedsort, global_btspool->sortstate); + } + /* * Set the progress target for the next phase. Reset the block number * values set by table_index_build_scan @@ -593,7 +831,11 @@ _bt_build_callback(Relation index, * processing */ if (tupleIsAlive || buildstate->spool2 == NULL) + { _bt_spool(buildstate->spool, tid, values, isnull); + if (buildstate->global_index && buildstate->isunique && global_btspool) + _bt_spool(global_btspool, tid, values, isnull); + } else { /* dead tuples are put into spool2 */ @@ -1452,9 +1694,11 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request) Snapshot snapshot; Size estbtshared; Size estsort; + Size estsortglobal = 0; BTShared *btshared; Sharedsort *sharedsort; Sharedsort *sharedsort2; + Sharedsort *sharedsortglobal; BTSpool *btspool = buildstate->spool; BTLeader *btleader = (BTLeader *) palloc0(sizeof(BTLeader)); WalUsage *walusage; @@ -1498,6 +1742,13 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request) estsort = tuplesort_estimate_shared(scantuplesortstates); shm_toc_estimate_chunk(&pcxt->estimator, estsort); + if (buildstate->isunique && buildstate->global_index) + { + /* global unique index case will estimate 1 more sharesort struct */ + estsortglobal = tuplesort_estimate_shared(scantuplesortstates * buildstate->nparts); + shm_toc_estimate_chunk(&pcxt->estimator, estsortglobal); + } + /* * Unique case requires a second spool, and so we may have to account for * another shared workspace for that -- PARALLEL_KEY_TUPLESORT_SPOOL2 @@ -1564,6 +1815,7 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request) btshared->havedead = false; btshared->indtuples = 0.0; btshared->brokenhotchain = false; + btshared->isglobal = buildstate->global_index; table_parallelscan_initialize(btspool->heap, ParallelTableScanFromBTShared(btshared), snapshot); @@ -1596,6 +1848,43 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request) shm_toc_insert(pcxt->toc, PARALLEL_KEY_TUPLESORT_SPOOL2, sharedsort2); } + if (buildstate->isunique && buildstate->global_index) + { + /* global unique index case will allocate 1 more sharesort struct */ + sharedsortglobal = (Sharedsort *) shm_toc_allocate(pcxt->toc, estsortglobal); + if (!sharedsortglobal) + elog(ERROR, "failed to allocate shared memory space"); + + if (buildstate->globalIndexPart == -1) + { + elog(DEBUG2, "initialize and make a copy of sharedsortglobal for first time"); + tuplesort_initialize_shared(sharedsortglobal, scantuplesortstates * buildstate->nparts, NULL); + + /* save a copy of sharedsortglobal */ + global_sharedsort = (Sharedsort *) palloc(estsortglobal); + tuplesort_copy_sharedsort(global_sharedsort, sharedsortglobal); + } + else if (buildstate->globalIndexPart == 0 || buildstate->globalIndexPart == 1) + { + elog(DEBUG2, "restore the copy of sharedsortglobal for subsequent processing"); + tuplesort_copy_sharedsort(sharedsortglobal, global_sharedsort); + + /* register for cleanup at the last partition index build */ + if (buildstate->globalIndexPart == 1) + { + tuplesort_register_cleanup_callback(sharedsortglobal, pcxt->seg); + } + } + else + { + elog(ERROR, "invalid global inedx partition value %d", buildstate->globalIndexPart); + } + + shm_toc_insert(pcxt->toc, PARALLEL_KEY_TUPLESORT_GLOBAL, sharedsortglobal); + } + else + sharedsortglobal = NULL; + /* Store query string for workers */ if (debug_query_string) { @@ -1629,6 +1918,7 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request) btleader->snapshot = snapshot; btleader->walusage = walusage; btleader->bufferusage = bufferusage; + btleader->sharedsortglobal = sharedsortglobal; /* If no workers were successfully launched, back out (do serial build) */ if (pcxt->nworkers_launched == 0) @@ -1772,7 +2062,8 @@ _bt_leader_participate_as_worker(BTBuildState *buildstate) /* Perform work common to all participants */ _bt_parallel_scan_and_sort(leaderworker, leaderworker2, btleader->btshared, btleader->sharedsort, btleader->sharedsort2, - sortmem, true); + sortmem, true, btleader->sharedsortglobal, + false); #ifdef BTREE_BUILD_STATS if (log_btree_build_stats) @@ -1795,6 +2086,7 @@ _bt_parallel_build_main(dsm_segment *seg, shm_toc *toc) BTShared *btshared; Sharedsort *sharedsort; Sharedsort *sharedsort2; + Sharedsort *sharedsortglobal; Relation heapRel; Relation indexRel; LOCKMODE heapLockmode; @@ -1869,13 +2161,26 @@ _bt_parallel_build_main(dsm_segment *seg, shm_toc *toc) tuplesort_attach_shared(sharedsort2, seg); } + if (btshared->isunique && btshared->isglobal) + { + sharedsortglobal = shm_toc_lookup(toc, PARALLEL_KEY_TUPLESORT_GLOBAL, false); + tuplesort_attach_shared(sharedsortglobal, seg); + elog(DEBUG2, "worker %d processing global unique index", MyProcPid); + } + else + { + sharedsortglobal = NULL; + elog(DEBUG2, "worker %d processing regular index", MyProcPid); + } + /* Prepare to track buffer usage during parallel execution */ InstrStartParallelQuery(); /* Perform sorting of spool, and possibly a spool2 */ sortmem = maintenance_work_mem / btshared->scantuplesortstates; _bt_parallel_scan_and_sort(btspool, btspool2, btshared, sharedsort, - sharedsort2, sortmem, false); + sharedsort2, sortmem, false, + sharedsortglobal, true); /* Report WAL/buffer usage during parallel execution */ bufferusage = shm_toc_lookup(toc, PARALLEL_KEY_BUFFER_USAGE, false); @@ -1910,7 +2215,8 @@ _bt_parallel_build_main(dsm_segment *seg, shm_toc *toc) static void _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, BTShared *btshared, Sharedsort *sharedsort, - Sharedsort *sharedsort2, int sortmem, bool progress) + Sharedsort *sharedsort2, int sortmem, bool progress, + Sharedsort *sharedsortglobal, bool isworker) { SortCoordinate coordinate; BTBuildState buildstate; @@ -1955,6 +2261,28 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, false); } + + /* global index */ + if (sharedsortglobal) + { + SortCoordinate coordinate3; + + global_btspool = (BTSpool *) palloc0(sizeof(BTSpool)); + global_btspool->heap = btspool->heap; + global_btspool->index = btspool->index; + global_btspool->isunique = btspool->isunique; + + coordinate3 = palloc0(sizeof(SortCoordinateData)); + coordinate3->isWorker = true; + coordinate3->nParticipants = -1; + coordinate3->sharedsort = sharedsortglobal; + global_btspool->sortstate = + tuplesort_begin_index_btree(global_btspool->heap, global_btspool->index, global_btspool->isunique, + sortmem, coordinate3, + false); + } + + /* Fill in buildstate for _bt_build_callback() */ buildstate.isunique = btshared->isunique; buildstate.havedead = false; @@ -1964,6 +2292,12 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, buildstate.indtuples = 0; buildstate.btleader = NULL; + if (btshared->isglobal && btshared->isunique) + { + /* fill global unique index related parameters in buildstate */ + buildstate.global_index = btshared->isglobal; + } + /* Join parallel scan */ indexInfo = BuildIndexInfo(btspool->index); indexInfo->ii_Concurrent = btshared->isconcurrent; @@ -1986,6 +2320,11 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, tuplesort_performsort(btspool2->sortstate); } + if (global_btspool) + { + tuplesort_performsort(global_btspool->sortstate); + } + /* * Done. Record ambuild statistics, and whether we encountered a broken * HOT chain. @@ -2007,4 +2346,7 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, tuplesort_end(btspool->sortstate); if (btspool2) tuplesort_end(btspool2->sortstate); + + if (global_btspool && isworker) + tuplesort_end(global_btspool->sortstate); } diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index 73705df4fb1..c40fe47c8a4 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -1706,9 +1706,9 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts, * 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). + * Caller should not have a lock on the so->currPos page, but may hold a + * buffer pin. 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 * delete. We cope with cases where items have moved right due to insertions. @@ -1740,7 +1740,8 @@ _bt_killitems(IndexScanDesc scan) int i; int numKilled = so->numKilled; bool killedsomething = false; - bool droppedpin PG_USED_FOR_ASSERTS_ONLY; + bool droppedpin; + Buffer buf; Assert(BTScanPosIsValid(so->currPos)); @@ -1759,29 +1760,30 @@ _bt_killitems(IndexScanDesc scan) * LSN. */ droppedpin = false; - _bt_lockbuf(scan->indexRelation, so->currPos.buf, BT_READ); - - page = BufferGetPage(so->currPos.buf); + buf = so->currPos.buf; + _bt_lockbuf(scan->indexRelation, 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); - page = BufferGetPage(buf); - if (BufferGetLSNAtomic(buf) == so->currPos.lsn) - so->currPos.buf = buf; - else + latestlsn = BufferGetLSNAtomic(buf); + Assert(so->currPos.lsn <= latestlsn); + if (so->currPos.lsn != latestlsn) { /* Modified while not pinned means hinting is not safe. */ _bt_relbuf(scan->indexRelation, buf); return; } + + /* Unmodified, hinting is safe */ } + page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); minoff = P_FIRSTDATAKEY(opaque); maxoff = PageGetMaxOffsetNumber(page); @@ -1898,10 +1900,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 (!droppedpin) + _bt_unlockbuf(scan->indexRelation, buf); + else + _bt_relbuf(scan->indexRelation, buf); } diff --git a/src/backend/access/table/table.c b/src/backend/access/table/table.c index 545007e6ed4..8eb92432c5e 100644 --- a/src/backend/access/table/table.c +++ b/src/backend/access/table/table.c @@ -43,6 +43,7 @@ table_open(Oid relationId, LOCKMODE lockmode) r = relation_open(relationId, lockmode); if (r->rd_rel->relkind == RELKIND_INDEX || + r->rd_rel->relkind == RELKIND_GLOBAL_INDEX || r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -77,6 +78,7 @@ try_table_open(Oid relationId, LOCKMODE lockmode) return NULL; if (r->rd_rel->relkind == RELKIND_INDEX || + r->rd_rel->relkind == RELKIND_GLOBAL_INDEX || r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -106,6 +108,7 @@ table_openrv(const RangeVar *relation, LOCKMODE lockmode) r = relation_openrv(relation, lockmode); if (r->rd_rel->relkind == RELKIND_INDEX || + r->rd_rel->relkind == RELKIND_GLOBAL_INDEX || r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -139,6 +142,7 @@ table_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, if (r) { if (r->rd_rel->relkind == RELKIND_INDEX || + r->rd_rel->relkind == RELKIND_GLOBAL_INDEX || r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index edbe3cf6b55..030bb7cf586 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -682,6 +682,13 @@ ActivateCommitTs(void) TransactionId xid; int 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) diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index d56269d941c..cd8eb1898af 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -337,6 +337,9 @@ static MemoryContext MXactContext = NULL; #define debug_elog6(a,b,c,d,e,f) #endif +/* hack to deal with WAL generated with older minor versions */ +static int pre_initialized_offsets_page = -1; + /* internal MultiXactId management */ static void MultiXactIdSetOldestVisible(void); static void RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, @@ -868,13 +871,62 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, int entryno; int slotno; MultiXactOffset *offptr; - int i; + MultiXactId next; + int next_pageno; + int next_entryno; + MultiXactOffset *next_offptr; + MultiXactOffset next_offset; LWLockAcquire(MultiXactOffsetSLRULock, LW_EXCLUSIVE); + /* position of this multixid in the offsets SLRU area */ pageno = MultiXactIdToOffsetPage(multi); entryno = MultiXactIdToOffsetEntry(multi); + /* position of the next multixid */ + next = multi + 1; + if (next < FirstMultiXactId) + next = FirstMultiXactId; + next_pageno = MultiXactIdToOffsetPage(next); + next_entryno = MultiXactIdToOffsetEntry(next); + + /* + * Older minor versions didn't set the next multixid's offset in this + * function, and therefore didn't initialize the next page until the next + * multixid was assigned. If we're replaying WAL that was generated by + * such a version, the next page might not be initialized yet. Initialize + * it now. + */ + if (InRecovery && + next_pageno != pageno && + MultiXactOffsetCtl->shared->latest_page_number == pageno) + { + elog(DEBUG1, "next offsets page is not initialized, initializing it now"); + + /* Create and zero the page */ + slotno = SimpleLruZeroPage(MultiXactOffsetCtl, next_pageno); + + /* Make sure it's written out */ + SimpleLruWritePage(MultiXactOffsetCtl, slotno); + Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); + + /* + * Remember that we initialized the page, so that we don't zero it + * again at the XLOG_MULTIXACT_ZERO_OFF_PAGE record. + */ + pre_initialized_offsets_page = next_pageno; + } + + /* + * Set the starting offset of this multixid's members. + * + * In the common case, it was already be set by the previous + * RecordNewMultiXact call, as this was the next multixid of the previous + * multixid. But if multiple backends are generating multixids + * concurrently, we might race ahead and get called before the previous + * multixid. + */ + /* * Note: we pass the MultiXactId to SimpleLruReadPage as the "transaction" * to complain about if there's any I/O error. This is kinda bogus, but @@ -886,9 +938,41 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, offptr = (MultiXactOffset *) MultiXactOffsetCtl->shared->page_buffer[slotno]; offptr += entryno; - *offptr = offset; + if (*offptr != offset) + { + /* should already be set to the correct value, or not at all */ + Assert(*offptr == 0); + *offptr = offset; + MultiXactOffsetCtl->shared->page_dirty[slotno] = true; + } + + /* + * Set the next multixid's offset to the end of this multixid's members. + */ + if (next_pageno == pageno) + { + next_offptr = offptr + 1; + } + else + { + /* must be the first entry on the page */ + Assert(next_entryno == 0 || next == FirstMultiXactId); + slotno = SimpleLruReadPage(MultiXactOffsetCtl, next_pageno, true, next); + next_offptr = (MultiXactOffset *) MultiXactOffsetCtl->shared->page_buffer[slotno]; + next_offptr += next_entryno; + } - MultiXactOffsetCtl->shared->page_dirty[slotno] = true; + /* Like in GetNewMultiXactId(), skip over offset 0 */ + next_offset = offset + nmembers; + if (next_offset == 0) + next_offset = 1; + if (*next_offptr != next_offset) + { + /* should already be set to the correct value, or not at all */ + Assert(*next_offptr == 0); + *next_offptr = next_offset; + MultiXactOffsetCtl->shared->page_dirty[slotno] = true; + } /* Exchange our lock */ LWLockRelease(MultiXactOffsetSLRULock); @@ -897,7 +981,7 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, prev_pageno = -1; - for (i = 0; i < nmembers; i++, offset++) + for (int i = 0; i < nmembers; i++, offset++) { TransactionId *memberptr; uint32 *flagsptr; @@ -1072,8 +1156,11 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset) result = FirstMultiXactId; } - /* Make sure there is room for the MXID in the file. */ - ExtendMultiXactOffset(result); + /* + * Make sure there is room for the next MXID in the file. Assigning this + * MXID sets the next MXID's offset already. + */ + ExtendMultiXactOffset(result + 1); /* * Reserve the members space, similarly to above. Also, be careful not to @@ -1314,21 +1401,14 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, * one's. However, there are some corner cases to worry about: * * 1. This multixact may be the latest one created, in which case there is - * no next one to look at. In this case the nextOffset value we just - * saved is the correct endpoint. - * - * 2. The next multixact may still be in process of being filled in: that - * is, another process may have done GetNewMultiXactId but not yet written - * the offset entry for that ID. In that scenario, it is guaranteed that - * the offset entry for that multixact exists (because GetNewMultiXactId - * won't release MultiXactGenLock until it does) but contains zero - * (because we are careful to pre-zero offset pages). Because - * GetNewMultiXactId will never return zero as the starting offset for a - * multixact, when we read zero as the next multixact's offset, we know we - * have this case. We sleep for a bit and try again. + * no next one to look at. The next multixact's offset should be set + * already, as we set it in RecordNewMultiXact(), but we used to not do + * that in older minor versions. To cope with that case, if this + * multixact is the latest one created, use the nextOffset value we read + * above as the endpoint. * - * 3. Because GetNewMultiXactId increments offset zero to offset one to - * handle case #2, there is an ambiguity near the point of offset + * 2. Because GetNewMultiXactId skips over offset zero, to reserve zero + * for to mean "unset", there is an ambiguity near the point of offset * wraparound. If we see next multixact's offset is one, is that our * multixact's actual endpoint, or did it end at zero with a subsequent * increment? We handle this using the knowledge that if the zero'th @@ -1340,7 +1420,6 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, * cases, so it seems better than holding the MultiXactGenLock for a long * time on every multixact creation. */ -retry: LWLockAcquire(MultiXactOffsetSLRULock, LW_EXCLUSIVE); pageno = MultiXactIdToOffsetPage(multi); @@ -1385,13 +1464,10 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, nextMXOffset = *offptr; if (nextMXOffset == 0) - { - /* Corner case 2: next multixact is still being filled in */ - LWLockRelease(MultiXactOffsetSLRULock); - CHECK_FOR_INTERRUPTS(); - pg_usleep(1000L); - goto retry; - } + ereport(ERROR, + (errcode(ERRCODE_DATA_CORRUPTED), + errmsg("MultiXact %u has invalid next offset", + multi))); length = nextMXOffset - offset; } @@ -1427,7 +1503,10 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, if (!TransactionIdIsValid(*xactptr)) { - /* Corner case 3: we must be looking at unused slot zero */ + /* + * Corner case 2: offset must have wrapped around to unused slot + * zero. + */ Assert(offset == 0); continue; } @@ -2056,24 +2135,32 @@ TrimMultiXact(void) MultiXactOffsetCtl->shared->latest_page_number = pageno; /* - * Zero out the remainder of the current offsets page. See notes in - * TrimCLOG() for background. Unlike CLOG, some WAL record covers every - * pg_multixact SLRU mutation. Since, also unlike CLOG, we ignore the WAL - * rule "write xlog before data," nextMXact successors may carry obsolete, - * nonzero offset values. Zero those so case 2 of GetMultiXactIdMembers() - * operates normally. + * Set the offset of nextMXact on the offsets page. This is normally done + * in RecordNewMultiXact() of the previous multixact, but we used to not + * do that in older minor versions. To ensure that the next offset is set + * if the binary was just upgraded from an older minor version, do it now. + * + * Zero out the remainder of the page. See notes in TrimCLOG() for + * background. Unlike CLOG, some WAL record covers every pg_multixact + * SLRU mutation. Since, also unlike CLOG, we ignore the WAL rule "write + * xlog before data," nextMXact successors may carry obsolete, nonzero + * offset values. */ entryno = MultiXactIdToOffsetEntry(nextMXact); - if (entryno != 0) { int slotno; MultiXactOffset *offptr; - slotno = SimpleLruReadPage(MultiXactOffsetCtl, pageno, true, nextMXact); + if (entryno == 0) + slotno = SimpleLruZeroPage(MultiXactOffsetCtl, pageno); + else + slotno = SimpleLruReadPage(MultiXactOffsetCtl, pageno, true, nextMXact); offptr = (MultiXactOffset *) MultiXactOffsetCtl->shared->page_buffer[slotno]; offptr += entryno; - MemSet(offptr, 0, BLCKSZ - (entryno * sizeof(MultiXactOffset))); + *offptr = offset; + if (entryno != 0 && (entryno + 1) * sizeof(MultiXactOffset) != BLCKSZ) + MemSet(offptr + 1, 0, BLCKSZ - (entryno + 1) * sizeof(MultiXactOffset)); MultiXactOffsetCtl->shared->page_dirty[slotno] = true; } @@ -3059,6 +3146,23 @@ TruncateMultiXact(MultiXactId newOldestMulti, Oid newOldestMultiDB) return; } + /* + * On crash, MultiXactIdCreateFromMembers() can leave behind multixids + * that were not yet written out and hence have zero offset on disk. If + * such a multixid becomes oldestMulti, we won't be able to look up its + * offset. That should be rare, so we don't try to do anything smart about + * it. Just skip the truncation, and hope that by the next truncation + * attempt, oldestMulti has advanced to a valid multixid. + */ + if (newOldestOffset == 0) + { + ereport(LOG, + (errmsg("cannot truncate up to MultiXact %u because it has invalid offset, skipping truncation", + newOldestMulti))); + LWLockRelease(MultiXactTruncationLock); + return; + } + elog(DEBUG1, "performing multixact truncation: " "offsets [%u, %u), offsets segments [%x, %x), " "members [%u, %u), members segments [%x, %x)", @@ -3255,13 +3359,21 @@ multixact_redo(XLogReaderState *record) memcpy(&pageno, XLogRecGetData(record), sizeof(int)); - LWLockAcquire(MultiXactOffsetSLRULock, LW_EXCLUSIVE); - - slotno = ZeroMultiXactOffsetPage(pageno, false); - SimpleLruWritePage(MultiXactOffsetCtl, slotno); - Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); - - LWLockRelease(MultiXactOffsetSLRULock); + /* + * Skip the record if we already initialized the page at the previous + * XLOG_MULTIXACT_CREATE_ID record. See RecordNewMultiXact(). + */ + if (pre_initialized_offsets_page != pageno) + { + LWLockAcquire(MultiXactOffsetSLRULock, LW_EXCLUSIVE); + slotno = ZeroMultiXactOffsetPage(pageno, false); + SimpleLruWritePage(MultiXactOffsetCtl, slotno); + Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); + LWLockRelease(MultiXactOffsetSLRULock); + } + else + elog(DEBUG1, "skipping initialization of offsets page %d because it was already initialized on multixid creation", pageno); + pre_initialized_offsets_page = -1; } else if (info == XLOG_MULTIXACT_ZERO_MEM_PAGE) { @@ -3285,6 +3397,22 @@ multixact_redo(XLogReaderState *record) TransactionId max_xid; int i; + if (pre_initialized_offsets_page != -1) + { + /* + * If we implicitly initialized the next offsets page while + * replaying an XLOG_MULTIXACT_CREATE_ID record that was generated + * with an older minor version, we still expect to see an + * XLOG_MULTIXACT_ZERO_OFF_PAGE record for it before any other + * XLOG_MULTIXACT_CREATE_ID records. Therefore this case should + * not happen. If it does, we'll continue with the replay, but + * log a message to note that something's funny. + */ + elog(LOG, "expected to see an XLOG_MULTIXACT_ZERO_OFF_PAGE record for page %d that was implicitly initialized earlier", + pre_initialized_offsets_page); + pre_initialized_offsets_page = -1; + } + /* Store the data back into the SLRU files */ RecordNewMultiXact(xlrec->mid, xlrec->moff, xlrec->nmembers, xlrec->members); @@ -3310,7 +3438,6 @@ multixact_redo(XLogReaderState *record) else if (info == XLOG_MULTIXACT_TRUNCATE_ID) { xl_multixact_truncate xlrec; - int pageno; memcpy(&xlrec, XLogRecGetData(record), SizeOfMultiXactTruncate); @@ -3335,14 +3462,6 @@ multixact_redo(XLogReaderState *record) SetMultiXactIdLimit(xlrec.endTruncOff, xlrec.oldestMultiDB, false); PerformMembersTruncation(xlrec.startTruncMemb, xlrec.endTruncMemb); - - /* - * During XLOG replay, latest_page_number isn't necessarily set up - * yet; insert a suitable value to bypass the sanity test in - * SimpleLruTruncate. - */ - pageno = MultiXactIdToOffsetPage(xlrec.endTruncOff); - MultiXactOffsetCtl->shared->latest_page_number = pageno; PerformOffsetsTruncation(xlrec.startTruncOff, xlrec.endTruncOff); LWLockRelease(MultiXactTruncationLock); diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 4fdeb5c6f3a..796560423b1 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -492,8 +492,12 @@ InitializeParallelDSM(ParallelContext *pcxt) void ReinitializeParallelDSM(ParallelContext *pcxt) { + MemoryContext oldcontext; FixedParallelState *fps; + /* We might be running in a very short-lived memory context. */ + oldcontext = MemoryContextSwitchTo(TopTransactionContext); + /* Wait for any old workers to exit. */ if (pcxt->nworkers_launched > 0) { @@ -531,6 +535,9 @@ ReinitializeParallelDSM(ParallelContext *pcxt) pcxt->worker[i].error_mqh = shm_mq_attach(mq, pcxt->seg, NULL); } } + + /* Restore previous memory context. */ + MemoryContextSwitchTo(oldcontext); } /* diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 3f0f711307d..395650d6406 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -1276,14 +1276,24 @@ RecordTransactionCommit(void) /* * Transactions without an assigned xid can contain invalidation - * messages (e.g. explicit relcache invalidations or catcache - * invalidations for inplace updates); standbys need to process those. - * We can't emit a commit record without an xid, and we don't want to - * force assigning an xid, because that'd be problematic for e.g. - * vacuum. Hence we emit a bespoke record for the invalidations. We - * don't want to use that in case a commit record is emitted, so they - * happen synchronously with commits (besides not wanting to emit more - * WAL records). + * messages. While inplace updates do this, this is not known to be + * necessary; see comment at inplace CacheInvalidateHeapTuple(). + * Extensions might still rely on this capability, and standbys may + * need to process those invals. We can't emit a commit record + * without an xid, and we don't want to force assigning an xid, + * because that'd be problematic for e.g. vacuum. Hence we emit a + * bespoke record for the invalidations. We don't want to use that in + * case a commit record is emitted, so they happen synchronously with + * commits (besides not wanting to emit more WAL records). + * + * XXX Every known use of this capability is a defect. Since an XID + * isn't controlling visibility of the change that prompted invals, + * other sessions need the inval even if this transactions aborts. + * + * ON COMMIT DELETE ROWS does a nontransactional index_build(), which + * queues a relcache inval, including in transactions without an xid + * that had read the (empty) table. Standbys don't need any ON COMMIT + * DELETE ROWS invals, but we've not done the work to withhold them. */ if (nmsgs != 0) { diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 278f270eb41..88a20c58972 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -679,6 +679,16 @@ typedef struct XLogCtlData */ bool SharedHotStandbyActive; + /* + * InstallXLogFileSegmentActive indicates whether the checkpointer should + * arrange for future segments by recycling and/or PreallocXlogFiles(). + * Protected by ControlFileLock. Only the startup process changes it. If + * true, anyone can use InstallXLogFileSegment(). If false, the startup + * process owns the exclusive right to install segments, by reading from + * the archive and possibly replacing existing files. + */ + bool InstallXLogFileSegmentActive; + /* * SharedPromoteIsTriggered indicates if a standby promotion has been * triggered. Protected by info_lck. @@ -926,15 +936,15 @@ static void LocalSetXLogInsertAllowed(void); static void CreateEndOfRecoveryRecord(void); static XLogRecPtr CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn); static void CheckPointGuts(XLogRecPtr checkPointRedo, int flags); -static void KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo); +static void KeepLogSeg(XLogRecPtr recptr, XLogRecPtr slotsMinLSN, + XLogSegNo *logSegNo); static XLogRecPtr XLogGetReplicationSlotMinimumLSN(void); static void AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic); static bool XLogCheckpointNeeded(XLogSegNo new_segno); static void XLogWrite(XLogwrtRqst WriteRqst, bool flexible); static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, - bool find_free, XLogSegNo max_segno, - bool use_lock); + bool find_free, XLogSegNo max_segno); static int XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, XLogSource source, bool notfoundOk); static int XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source); @@ -942,6 +952,8 @@ static int XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, XLogRecPtr targetRecPtr, char *readBuf); static bool WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, bool fetching_ckpt, XLogRecPtr tliRecPtr); +static void ResetInstallXLogFileSegmentActive(void); +static void XLogShutdownWalRcv(void); static int emode_for_corrupt_record(int emode, XLogRecPtr RecPtr); static void XLogFileClose(void); static void PreallocXlogFiles(XLogRecPtr endptr); @@ -2459,7 +2471,6 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) bool ispartialpage; bool last_iteration; bool finishing_seg; - bool use_existent; int curridx; int npages; int startidx; @@ -2525,8 +2536,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible) wal_segment_size); /* create/use new log file */ - use_existent = true; - openLogFile = XLogFileInit(openLogSegNo, &use_existent, true); + openLogFile = XLogFileInit(openLogSegNo); ReserveExternalFD(); } @@ -3291,29 +3301,21 @@ XLogNeedsFlush(XLogRecPtr record) } /* - * Create a new XLOG file segment, or open a pre-existing one. + * Try to make a given XLOG file segment exist. * - * logsegno: identify segment to be created/opened. - * - * *use_existent: if true, OK to use a pre-existing file (else, any - * pre-existing file will be deleted). On return, true if a pre-existing - * file was used. + * logsegno: identify segment. * - * use_lock: if true, acquire ControlFileLock while moving file into - * place. This should be true except during bootstrap log creation. The - * caller must *not* hold the lock at call. + * *added: on return, true if this call raised the number of extant segments. * - * Returns FD of opened file. + * path: on return, this char[MAXPGPATH] has the path to the logsegno file. * - * Note: errors here are ERROR not PANIC because we might or might not be - * inside a critical section (eg, during checkpoint there is no reason to - * take down the system on failure). They will promote to PANIC if we are - * in a critical section. + * Returns -1 or FD of opened file. A -1 here is not an error; a caller + * wanting an open segment should attempt to open "path", which usually will + * succeed. (This is weird, but it's efficient for the callers.) */ -int -XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) +static int +XLogFileInitInternal(XLogSegNo logsegno, bool *added, char *path) { - char path[MAXPGPATH]; char tmppath[MAXPGPATH]; PGAlignedXLogBlock zbuffer; XLogSegNo installed_segno; @@ -3326,19 +3328,17 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) /* * Try to use existent file (checkpoint maker may have created it already) */ - if (*use_existent) + *added = false; + fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); + if (fd < 0) { - fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); - if (fd < 0) - { - if (errno != ENOENT) - ereport(ERROR, - (errcode_for_file_access(), - errmsg("could not open file \"%s\": %m", path))); - } - else - return fd; + if (errno != ENOENT) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not open file \"%s\": %m", path))); } + else + return fd; /* * Initialize an empty (all zeroes) segment. NOTE: it is possible that @@ -3451,12 +3451,9 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) errmsg("could not close file \"%s\": %m", tmppath))); /* - * Now move the segment into place with its final name. - * - * If caller didn't want to use a pre-existing file, get rid of any - * pre-existing file. Otherwise, cope with possibility that someone else - * has created the file while we were filling ours: if so, use ours to - * pre-create a future log segment. + * Now move the segment into place with its final name. Cope with + * possibility that someone else has created the file while we were + * filling ours: if so, use ours to pre-create a future log segment. */ installed_segno = logsegno; @@ -3470,33 +3467,54 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock) * CheckPointSegments. */ max_segno = logsegno + CheckPointSegments; - if (!InstallXLogFileSegment(&installed_segno, tmppath, - *use_existent, max_segno, - use_lock)) + if (InstallXLogFileSegment(&installed_segno, tmppath, true, max_segno)) + { + *added = true; + elog(DEBUG2, "done creating and filling new WAL file"); + } + else { /* * No need for any more future segments, or InstallXLogFileSegment() - * failed to rename the file into place. If the rename failed, opening - * the file below will fail. + * failed to rename the file into place. If the rename failed, a + * caller opening the file may fail. */ unlink(tmppath); + elog(DEBUG2, "abandoned new WAL file"); } - /* Set flag to tell caller there was no existent file */ - *use_existent = false; + return -1; +} + +/* + * Create a new XLOG file segment, or open a pre-existing one. + * + * logsegno: identify segment to be created/opened. + * + * Returns FD of opened file. + * + * Note: errors here are ERROR not PANIC because we might or might not be + * inside a critical section (eg, during checkpoint there is no reason to + * take down the system on failure). They will promote to PANIC if we are + * in a critical section. + */ +int +XLogFileInit(XLogSegNo logsegno) +{ + bool ignore_added; + char path[MAXPGPATH]; + int fd; + + fd = XLogFileInitInternal(logsegno, &ignore_added, path); + if (fd >= 0) + return fd; /* Now open original target segment (might not be file I just made) */ fd = BasicOpenFile(path, O_RDWR | PG_BINARY | get_sync_bit(sync_method)); if (fd < 0) ereport(ERROR, (errcode_for_file_access(), - errmsg("could not open file \"%s\": %m", path), - (AmCheckpointerProcess() ? - errhint("This is known to fail occasionally during archive recovery, where it is harmless.") : - 0))); - - elog(DEBUG2, "done creating and filling new WAL file"); - + errmsg("could not open file \"%s\": %m", path))); return fd; } @@ -3629,7 +3647,7 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno, /* * Now move the segment into place with its final name. */ - if (!InstallXLogFileSegment(&destsegno, tmppath, false, 0, false)) + if (!InstallXLogFileSegment(&destsegno, tmppath, false, 0)) elog(ERROR, "InstallXLogFileSegment should not have failed"); } @@ -3653,29 +3671,25 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno, * free slot is found between *segno and max_segno. (Ignored when find_free * is false.) * - * use_lock: if true, acquire ControlFileLock while moving file into - * place. This should be true except during bootstrap log creation. The - * caller must *not* hold the lock at call. - * * Returns true if the file was installed successfully. false indicates that - * max_segno limit was exceeded, or an error occurred while renaming the - * file into place. + * max_segno limit was exceeded, the startup process has disabled this + * function for now, or an error occurred while renaming the file into place. */ static bool InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, - bool find_free, XLogSegNo max_segno, - bool use_lock) + bool find_free, XLogSegNo max_segno) { char path[MAXPGPATH]; struct stat stat_buf; XLogFilePath(path, ThisTimeLineID, *segno, wal_segment_size); - /* - * We want to be sure that only one process does this at a time. - */ - if (use_lock) - LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + if (!XLogCtl->InstallXLogFileSegmentActive) + { + LWLockRelease(ControlFileLock); + return false; + } if (!find_free) { @@ -3690,8 +3704,7 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, if ((*segno) >= max_segno) { /* Failed to find a free slot within specified range */ - if (use_lock) - LWLockRelease(ControlFileLock); + LWLockRelease(ControlFileLock); return false; } (*segno)++; @@ -3702,14 +3715,12 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath, Assert(access(path, F_OK) != 0 && errno == ENOENT); if (durable_rename(tmppath, path, LOG) != 0) { - if (use_lock) - LWLockRelease(ControlFileLock); + LWLockRelease(ControlFileLock); /* durable_rename already emitted log message */ return false; } - if (use_lock) - LWLockRelease(ControlFileLock); + LWLockRelease(ControlFileLock); return true; } @@ -3783,6 +3794,7 @@ XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, */ if (source == XLOG_FROM_ARCHIVE) { + Assert(!XLogCtl->InstallXLogFileSegmentActive); KeepFileRestoredFromArchive(path, xlogfname); /* @@ -3965,24 +3977,37 @@ XLogFileClose(void) * High-volume systems will be OK once they've built up a sufficient set of * recycled log segments, but the startup transient is likely to include * a lot of segment creations by foreground processes, which is not so good. + * + * XLogFileInitInternal() can ereport(ERROR). All known causes indicate big + * trouble; for example, a full filesystem is one cause. The checkpoint WAL + * and/or ControlFile updates already completed. If a RequestCheckpoint() + * initiated the present checkpoint and an ERROR ends this function, the + * command that called RequestCheckpoint() fails. That's not ideal, but it's + * not worth contorting more functions to use caller-specified elevel values. + * (With or without RequestCheckpoint(), an ERROR forestalls some inessential + * reporting and resource reclamation.) */ static void PreallocXlogFiles(XLogRecPtr endptr) { XLogSegNo _logSegNo; int lf; - bool use_existent; + bool added; + char path[MAXPGPATH]; uint64 offset; + if (!XLogCtl->InstallXLogFileSegmentActive) + return; /* unlocked check says no */ + XLByteToPrevSeg(endptr, _logSegNo, wal_segment_size); offset = XLogSegmentOffset(endptr - 1, wal_segment_size); if (offset >= (uint32) (0.75 * wal_segment_size)) { _logSegNo++; - use_existent = true; - lf = XLogFileInit(_logSegNo, &use_existent, true); - close(lf); - if (!use_existent) + lf = XLogFileInitInternal(_logSegNo, &added, path); + if (lf >= 0) + close(lf); + if (added) CheckpointStats.ckpt_segs_added++; } } @@ -4255,9 +4280,10 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, */ if (wal_recycle && *endlogSegNo <= recycleSegNo && + XLogCtl->InstallXLogFileSegmentActive && /* callee rechecks this */ lstat(path, &statbuf) == 0 && S_ISREG(statbuf.st_mode) && InstallXLogFileSegment(endlogSegNo, path, - true, recycleSegNo, true)) + true, recycleSegNo)) { ereport(DEBUG2, (errmsg_internal("recycled write-ahead log file \"%s\"", @@ -4268,7 +4294,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo, } else { - /* No need for any more future segments... */ + /* No need for any more future segments, or recycling failed ... */ int rc; ereport(DEBUG2, @@ -5280,6 +5306,7 @@ XLOGShmemInit(void) XLogCtl->XLogCacheBlck = XLOGbuffers - 1; XLogCtl->SharedRecoveryState = RECOVERY_STATE_CRASH; XLogCtl->SharedHotStandbyActive = false; + XLogCtl->InstallXLogFileSegmentActive = false; XLogCtl->SharedPromoteIsTriggered = false; XLogCtl->WalWriterSleeping = false; @@ -5303,11 +5330,15 @@ BootStrapXLOG(void) XLogLongPageHeader longpage; XLogRecord *record; char *recptr; - bool use_existent; uint64 sysidentifier; struct timeval tv; pg_crc32c crc; + /* allow ordinary WAL segment creation, like StartupXLOG() would */ + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = true; + LWLockRelease(ControlFileLock); + /* * Select a hopefully-unique system identifier code for this installation. * We use the result of gettimeofday(), including the fractional seconds @@ -5400,8 +5431,7 @@ BootStrapXLOG(void) record->xl_crc = crc; /* Create first XLOG segment file */ - use_existent = false; - openLogFile = XLogFileInit(1, &use_existent, false); + openLogFile = XLogFileInit(1); /* * We needn't bother with Reserve/ReleaseExternalFD here, since we'll @@ -5714,10 +5744,9 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) * The switch happened at a segment boundary, so just create the next * segment on the new timeline. */ - bool use_existent = true; int fd; - fd = XLogFileInit(startLogSegNo, &use_existent, true); + fd = XLogFileInit(startLogSegNo); if (close(fd) != 0) { @@ -7020,6 +7049,16 @@ StartupXLOG(void) } memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint)); wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN); + + /* Make sure that REDO location exists. */ + if (checkPoint.redo < checkPointLoc) + { + XLogBeginRead(xlogreader, checkPoint.redo); + if (!ReadRecord(xlogreader, LOG, false)) + ereport(PANIC, + errmsg("could not find redo location %X/%08X referenced by checkpoint record at %X/%08X", + LSN_FORMAT_ARGS(checkPoint.redo), LSN_FORMAT_ARGS(checkPointLoc))); + } } /* @@ -7829,7 +7868,7 @@ StartupXLOG(void) * over these records and subsequent ones if it's still alive when we * start writing WAL. */ - ShutdownWalRcv(); + XLogShutdownWalRcv(); /* * Reset unlogged relations to the contents of their INIT fork. This is @@ -7854,7 +7893,7 @@ StartupXLOG(void) * recovery, e.g., timeline history file) from archive or pg_wal. * * Note that standby mode must be turned off after killing WAL receiver, - * i.e., calling ShutdownWalRcv(). + * i.e., calling XLogShutdownWalRcv(). */ Assert(!WalRcvStreaming()); StandbyMode = false; @@ -7923,6 +7962,14 @@ StartupXLOG(void) */ oldestActiveXID = PrescanPreparedTransactions(NULL, NULL); + /* + * Allow ordinary WAL segment creation before any exitArchiveRecovery(), + * which sometimes creates a segment, and after the last ReadRecord(). + */ + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = true; + LWLockRelease(ControlFileLock); + /* * Consider whether we need to assign a new timeline ID. * @@ -9231,6 +9278,7 @@ CreateCheckPoint(int flags) XLogRecPtr last_important_lsn; VirtualTransactionId *vxids; int nvxids; + XLogRecPtr slotsMinReqLSN; /* * An end-of-recovery checkpoint is really a shutdown checkpoint, just @@ -9444,6 +9492,25 @@ CreateCheckPoint(int flags) */ END_CRIT_SECTION(); + /* + * Get the current minimum LSN to be used later in the WAL segment + * cleanup. We may clean up only WAL segments, which are not needed + * according to synchronized LSNs of replication slots. The slot's LSN + * might be advanced concurrently, so we call this before + * CheckPointReplicationSlots() synchronizes replication slots. + * + * We acquire the Allocation lock to serialize the minimum LSN calculation + * with concurrent slot WAL reservation. This ensures that the WAL + * position being reserved is either included in the miminum LSN or is + * beyond or equal to the redo pointer of the current checkpoint (See + * ReplicationSlotReserveWal for details), thus preventing its removal by + * checkpoints. Note that this lock is required only during checkpoints + * where WAL removal is dictated by the slot's minimum LSN. + */ + LWLockAcquire(ReplicationSlotAllocationLock, LW_SHARED); + slotsMinReqLSN = XLogGetReplicationSlotMinimumLSN(); + LWLockRelease(ReplicationSlotAllocationLock); + /* * In some cases there are groups of actions that must all occur on one * side or the other of a checkpoint record. Before flushing the @@ -9608,15 +9675,26 @@ CreateCheckPoint(int flags) * prevent the disk holding the xlog from growing full. */ XLByteToSeg(RedoRecPtr, _logSegNo, wal_segment_size); - KeepLogSeg(recptr, &_logSegNo); + KeepLogSeg(recptr, slotsMinReqLSN, &_logSegNo); if (InvalidateObsoleteReplicationSlots(_logSegNo)) { + /* + * Recalculate the current minimum LSN to be used in the WAL segment + * cleanup. Then, we must synchronize the replication slots again in + * order to make this LSN safe to use. Here, we don't need to acquire + * the ReplicationSlotAllocationLock to serialize the minimum LSN + * computation with slot reservation as the RedoRecPtr is not updated + * after the previous computation of minimum LSN. + */ + slotsMinReqLSN = XLogGetReplicationSlotMinimumLSN(); + CheckPointReplicationSlots(); + /* * Some slots have been invalidated; recalculate the old-segment * horizon, starting again from RedoRecPtr. */ XLByteToSeg(RedoRecPtr, _logSegNo, wal_segment_size); - KeepLogSeg(recptr, &_logSegNo); + KeepLogSeg(recptr, slotsMinReqLSN, &_logSegNo); } _logSegNo--; RemoveOldXlogFiles(_logSegNo, RedoRecPtr, recptr); @@ -9849,6 +9927,7 @@ CreateRestartPoint(int flags) XLogRecPtr endptr; XLogSegNo _logSegNo; TimestampTz xtime; + XLogRecPtr slotsMinReqLSN; /* Get a local copy of the last safe checkpoint record. */ SpinLockAcquire(&XLogCtl->info_lck); @@ -9929,6 +10008,23 @@ CreateRestartPoint(int flags) MemSet(&CheckpointStats, 0, sizeof(CheckpointStats)); CheckpointStats.ckpt_start_t = GetCurrentTimestamp(); + /* + * Get the current minimum LSN to be used later in the WAL segment + * cleanup. We may clean up only WAL segments, which are not needed + * according to synchronized LSNs of replication slots. The slot's LSN + * might be advanced concurrently, so we call this before + * CheckPointReplicationSlots() synchronizes replication slots. + * + * We acquire the Allocation lock to serialize the minimum LSN calculation + * with concurrent slot WAL reservation. This ensures that the WAL + * position being reserved is either included in the miminum LSN or is + * beyond or equal to the redo pointer of the current checkpoint (See + * ReplicationSlotReserveWal for details). + */ + LWLockAcquire(ReplicationSlotAllocationLock, LW_SHARED); + slotsMinReqLSN = XLogGetReplicationSlotMinimumLSN(); + LWLockRelease(ReplicationSlotAllocationLock); + if (log_checkpoints) LogCheckpointStart(flags, true); @@ -10017,15 +10113,26 @@ CreateRestartPoint(int flags) receivePtr = GetWalRcvFlushRecPtr(NULL, NULL); replayPtr = GetXLogReplayRecPtr(&replayTLI); endptr = (receivePtr < replayPtr) ? replayPtr : receivePtr; - KeepLogSeg(endptr, &_logSegNo); + KeepLogSeg(endptr, slotsMinReqLSN, &_logSegNo); if (InvalidateObsoleteReplicationSlots(_logSegNo)) { + /* + * Recalculate the current minimum LSN to be used in the WAL segment + * cleanup. Then, we must synchronize the replication slots again in + * order to make this LSN safe to use. Here, we don't need to acquire + * the ReplicationSlotAllocationLock to serialize the minimum LSN + * computation with slot reservation as the RedoRecPtr is not updated + * after the previous computation of minimum LSN. + */ + slotsMinReqLSN = XLogGetReplicationSlotMinimumLSN(); + CheckPointReplicationSlots(); + /* * Some slots have been invalidated; recalculate the old-segment * horizon, starting again from RedoRecPtr. */ XLByteToSeg(RedoRecPtr, _logSegNo, wal_segment_size); - KeepLogSeg(endptr, &_logSegNo); + KeepLogSeg(endptr, slotsMinReqLSN, &_logSegNo); } _logSegNo--; @@ -10128,6 +10235,7 @@ GetWALAvailability(XLogRecPtr targetLSN) XLogSegNo oldestSegMaxWalSize; /* oldest segid kept by max_wal_size */ XLogSegNo oldestSlotSeg; /* oldest segid kept by slot */ uint64 keepSegs; + XLogRecPtr slotsMinReqLSN; /* * slot does not reserve WAL. Either deactivated, or has never been active @@ -10141,8 +10249,9 @@ GetWALAvailability(XLogRecPtr targetLSN) * oldestSlotSeg to the current segment. */ currpos = GetXLogWriteRecPtr(); + slotsMinReqLSN = XLogGetReplicationSlotMinimumLSN(); XLByteToSeg(currpos, oldestSlotSeg, wal_segment_size); - KeepLogSeg(currpos, &oldestSlotSeg); + KeepLogSeg(currpos, slotsMinReqLSN, &oldestSlotSeg); /* * Find the oldest extant segment file. We get 1 until checkpoint removes @@ -10203,7 +10312,7 @@ GetWALAvailability(XLogRecPtr targetLSN) * invalidation is optionally done here, instead. */ static void -KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo) +KeepLogSeg(XLogRecPtr recptr, XLogRecPtr slotsMinReqLSN, XLogSegNo *logSegNo) { XLogSegNo currSegNo; XLogSegNo segno; @@ -10216,7 +10325,7 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo) * Calculate how many segments are kept by slots first, adjusting for * max_slot_wal_keep_size. */ - keep = XLogGetReplicationSlotMinimumLSN(); + keep = slotsMinReqLSN; if (keep != InvalidXLogRecPtr && keep < recptr) { XLByteToSeg(keep, segno, wal_segment_size); @@ -12861,7 +12970,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, */ if (StandbyMode && CheckForStandbyTrigger()) { - ShutdownWalRcv(); + XLogShutdownWalRcv(); return false; } @@ -12907,9 +13016,18 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * Before we leave XLOG_FROM_STREAM state, make sure that * walreceiver is not active, so that it won't overwrite * WAL that we restore from archive. + * If walreceiver is actively streaming (or attempting to + * connect), we must shut it down. However, if it's + * already in WAITING state (e.g., due to timeline + * divergence), we only need to reset the install flag to + * allow archive restoration. */ if (WalRcvStreaming()) - ShutdownWalRcv(); + XLogShutdownWalRcv(); + else + { + ResetInstallXLogFileSegmentActive(); + } /* * Before we sleep, re-scan for possible new timelines if @@ -13039,7 +13157,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, */ if (pendingWalRcvRestart && !startWalReceiver) { - ShutdownWalRcv(); + XLogShutdownWalRcv(); /* * Re-scan for possible new timelines if we were @@ -13089,6 +13207,9 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, tli, curFileTLI); } curFileTLI = tli; + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = true; + LWLockRelease(ControlFileLock); RequestXLogStreaming(tli, ptr, PrimaryConnInfo, PrimarySlotName, wal_receiver_create_temp_slot); @@ -13259,6 +13380,23 @@ StartupRequestWalReceiverRestart(void) } } +/* Disable WAL file recycling and preallocation. */ +static void +ResetInstallXLogFileSegmentActive(void) +{ + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + XLogCtl->InstallXLogFileSegmentActive = false; + LWLockRelease(ControlFileLock); +} + +/* Thin wrapper around ShutdownWalRcv(). */ +static void +XLogShutdownWalRcv(void) +{ + ShutdownWalRcv(); + ResetInstallXLogFileSegmentActive(); +} + /* * Determine what log level should be used to report a corrupt WAL record * in the current WAL page, previously read by XLogPageRead(). diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 134c78f12b5..da4c28f7597 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -275,8 +275,6 @@ XLogRegisterBlock(uint8 block_id, RelFileNode *rnode, ForkNumber forknum, { registered_buffer *regbuf; - /* This is currently only used to WAL-log a full-page image of a page */ - Assert(flags & REGBUF_FORCE_IMAGE); Assert(begininsert_called); if (block_id >= max_registered_block_id) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index d26e1276233..2c8d1fcecec 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -407,11 +407,12 @@ XLogReadRecord(XLogReaderState *state, char **errormsg) /* 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 < 0) goto err; @@ -459,6 +460,13 @@ XLogReadRecord(XLogReaderState *state, char **errormsg) goto err; } + /* Wait for the next page to become available */ + readOff = ReadPageInternal(state, targetPagePtr, + Min(total_len - gotlen + SizeOfXLogShortPHD, + XLOG_BLCKSZ)); + if (readOff < 0) + goto err; + /* Append the continuation from this page to the buffer */ pageHeaderSize = XLogPageHeaderSize(pageHeader); diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 47202d7c2d9..7c4f0aa8111 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -1787,6 +1787,7 @@ ExecGrant_Relation(InternalGrant *istmt) /* Not sensible to grant on an index */ if (pg_class_tuple->relkind == RELKIND_INDEX || + pg_class_tuple->relkind == RELKIND_GLOBAL_INDEX || pg_class_tuple->relkind == RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -5661,6 +5662,7 @@ recordExtObjInitPriv(Oid objoid, Oid classoid) * restrictions in ALTER EXTENSION ADD, but let's check anyway.) */ if (pg_class_tuple->relkind == RELKIND_INDEX || + pg_class_tuple->relkind == RELKIND_GLOBAL_INDEX || pg_class_tuple->relkind == RELKIND_PARTITIONED_INDEX || pg_class_tuple->relkind == RELKIND_COMPOSITE_TYPE) { @@ -5955,6 +5957,7 @@ removeExtObjInitPriv(Oid objoid, Oid classoid) * restrictions in ALTER EXTENSION DROP, but let's check anyway.) */ if (pg_class_tuple->relkind == RELKIND_INDEX || + pg_class_tuple->relkind == RELKIND_GLOBAL_INDEX || pg_class_tuple->relkind == RELKIND_PARTITIONED_INDEX || pg_class_tuple->relkind == RELKIND_COMPOSITE_TYPE) { diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index eb9aebad75f..7191ffe7009 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1410,6 +1410,7 @@ doDeletion(const ObjectAddress *object, int flags) char relKind = get_rel_relkind(object->objectId); if (relKind == RELKIND_INDEX || + relKind == RELKIND_GLOBAL_INDEX || relKind == RELKIND_PARTITIONED_INDEX) { bool concurrent = ((flags & PERFORM_DELETION_CONCURRENTLY) != 0); diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 419b1330a23..93f07ad2d48 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -324,7 +324,8 @@ heap_create(const char *relname, * user defined relation, not a system one. */ if (!allow_system_table_mods && - ((IsCatalogNamespace(relnamespace) && relkind != RELKIND_INDEX) || + ((IsCatalogNamespace(relnamespace) && + (relkind != RELKIND_INDEX && relkind != RELKIND_GLOBAL_INDEX)) || IsToastNamespace(relnamespace)) && IsNormalProcessingMode()) ereport(ERROR, @@ -426,6 +427,7 @@ heap_create(const char *relname, break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_SEQUENCE: RelationCreateStorage(rel->rd_node, relpersistence); break; @@ -1022,6 +1024,7 @@ AddNewRelationTuple(Relation pg_class_desc, case RELKIND_RELATION: case RELKIND_MATVIEW: case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_TOASTVALUE: /* The relation is real, but as yet empty */ new_rel_reltup->relpages = 0; @@ -1330,6 +1333,7 @@ heap_create_with_catalog(const char *relname, if (!(relkind == RELKIND_SEQUENCE || relkind == RELKIND_TOASTVALUE || relkind == RELKIND_INDEX || + relkind == RELKIND_GLOBAL_INDEX || relkind == RELKIND_PARTITIONED_INDEX)) { Oid new_array_oid; @@ -2149,6 +2153,60 @@ RelationClearMissing(Relation rel) table_close(attr_rel, RowExclusiveLock); } +/* + * StoreAttrMissingVal + * + * Set the missing value of a single attribute. + */ +void +StoreAttrMissingVal(Relation rel, AttrNumber attnum, Datum missingval) +{ + Datum valuesAtt[Natts_pg_attribute] = {0}; + bool nullsAtt[Natts_pg_attribute] = {0}; + bool replacesAtt[Natts_pg_attribute] = {0}; + Relation attrrel; + Form_pg_attribute attStruct; + HeapTuple atttup, + newtup; + + /* This is only supported for plain tables */ + Assert(rel->rd_rel->relkind == RELKIND_RELATION); + + /* Fetch the pg_attribute row */ + attrrel = table_open(AttributeRelationId, RowExclusiveLock); + + atttup = SearchSysCache2(ATTNUM, + ObjectIdGetDatum(RelationGetRelid(rel)), + Int16GetDatum(attnum)); + if (!HeapTupleIsValid(atttup)) /* shouldn't happen */ + elog(ERROR, "cache lookup failed for attribute %d of relation %u", + attnum, RelationGetRelid(rel)); + attStruct = (Form_pg_attribute) GETSTRUCT(atttup); + + /* Make a one-element array containing the value */ + missingval = PointerGetDatum(construct_array(&missingval, + 1, + attStruct->atttypid, + attStruct->attlen, + attStruct->attbyval, + attStruct->attalign)); + + /* Update the pg_attribute row */ + valuesAtt[Anum_pg_attribute_atthasmissing - 1] = BoolGetDatum(true); + replacesAtt[Anum_pg_attribute_atthasmissing - 1] = true; + + valuesAtt[Anum_pg_attribute_attmissingval - 1] = missingval; + replacesAtt[Anum_pg_attribute_attmissingval - 1] = true; + + newtup = heap_modify_tuple(atttup, RelationGetDescr(attrrel), + valuesAtt, nullsAtt, replacesAtt); + CatalogTupleUpdate(attrrel, &newtup->t_self, newtup); + + /* clean up */ + ReleaseSysCache(atttup); + table_close(attrrel, RowExclusiveLock); +} + /* * SetAttrMissing * @@ -2305,6 +2363,12 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, valuesAtt[Anum_pg_attribute_atthasdef - 1] = true; replacesAtt[Anum_pg_attribute_atthasdef - 1] = true; + /* + * Note: this code is dead so far as core Postgres is concerned, + * because no caller passes add_column_mode = true anymore. We keep + * it in back branches on the slight chance that some extension is + * depending on it. + */ if (rel->rd_rel->relkind == RELKIND_RELATION && add_column_mode && !attgenerated) { @@ -2667,13 +2731,8 @@ AddRelationNewConstraints(Relation rel, castNode(Const, expr)->constisnull)) continue; - /* If the DEFAULT is volatile we cannot use a missing value */ - if (colDef->missingMode && - contain_volatile_functions_after_planning((Expr *) expr)) - colDef->missingMode = false; - defOid = StoreAttrDefault(rel, colDef->attnum, expr, is_internal, - colDef->missingMode); + false); cooked = (CookedConstraint *) palloc(sizeof(CookedConstraint)); cooked->contype = CONSTR_DEFAULT; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 33405bbb21c..703724027f4 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -731,6 +731,7 @@ index_create(Relation heapRelation, bool invalid = (flags & INDEX_CREATE_INVALID) != 0; bool concurrent = (flags & INDEX_CREATE_CONCURRENT) != 0; bool partitioned = (flags & INDEX_CREATE_PARTITIONED) != 0; + bool globalindex = (flags & INDEX_CREATE_GLOBAL) != 0; char relkind; TransactionId relfrozenxid; MultiXactId relminmxid; @@ -741,7 +742,10 @@ index_create(Relation heapRelation, /* partitioned indexes must never be "built" by themselves */ Assert(!partitioned || (flags & INDEX_CREATE_SKIP_BUILD)); - relkind = partitioned ? RELKIND_PARTITIONED_INDEX : RELKIND_INDEX; + if (globalindex) + relkind = partitioned ? RELKIND_PARTITIONED_INDEX : RELKIND_GLOBAL_INDEX; + else + relkind = partitioned ? RELKIND_PARTITIONED_INDEX : RELKIND_INDEX; is_exclusion = (indexInfo->ii_ExclusionOps != NULL); pg_class = table_open(RelationRelationId, RowExclusiveLock); @@ -915,6 +919,12 @@ index_create(Relation heapRelation, indexRelationId = binary_upgrade_next_index_pg_class_oid; binary_upgrade_next_index_pg_class_oid = InvalidOid; + + /* + * In PG14, the OID is the relfilenode. No separate relfilenode + * override is needed (binary_upgrade_next_index_pg_class_relfilenode + * was added in PG15). + */ } else { @@ -2888,6 +2898,15 @@ index_update_stats(Relation rel, if (update_stats) { + BlockNumber relpages = RelationGetNumberOfBlocks(rel); + BlockNumber relallvisible; + + if (rd_rel->relkind != RELKIND_INDEX && + rd_rel->relkind != RELKIND_GLOBAL_INDEX) + visibilitymap_count(rel, &relallvisible, NULL); + else /* don't bother for indexes */ + relallvisible = 0; + if (rd_rel->relpages != (int32) relpages) { rd_rel->relpages = (int32) relpages; @@ -2911,12 +2930,19 @@ index_update_stats(Relation rel, if (dirty) { systable_inplace_update_finish(state, tuple); - /* the above sends a cache inval message */ + /* the above sends transactional and immediate cache inval messages */ } else { systable_inplace_update_cancel(state); - /* no need to change tuple, but force relcache inval anyway */ + + /* + * While we didn't change relhasindex, CREATE INDEX needs a + * transactional inval for when the new index's catalog rows become + * visible. Other CREATE INDEX and REINDEX code happens to also queue + * this inval, but keep this in case rare callers rely on this part of + * our API contract. + */ CacheInvalidateRelcacheByTuple(tuple); } diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 0c077bcf11b..80ea6f252a2 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -2318,6 +2318,9 @@ StatisticsObjIsVisible(Oid relid) { Oid namespaceId = lfirst_oid(l); + if (namespaceId == myTempNamespace) + continue; /* do not look in temp namespace */ + if (namespaceId == stxnamespace) { /* Found it first in path */ diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 060a1d82632..c562d2df201 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -1349,6 +1349,7 @@ get_relation_by_qualified_name(ObjectType objtype, List *object, { case OBJECT_INDEX: if (relation->rd_rel->relkind != RELKIND_INDEX && + relation->rd_rel->relkind != RELKIND_GLOBAL_INDEX && relation->rd_rel->relkind != RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -4046,6 +4047,7 @@ getRelationDescription(StringInfo buffer, Oid relid, bool missing_ok) relname); break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: appendStringInfo(buffer, _("index %s"), relname); @@ -4568,6 +4570,7 @@ getRelationTypeDescription(StringInfo buffer, Oid relid, int32 objectSubId, appendStringInfoString(buffer, "table"); break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: appendStringInfoString(buffer, "index"); break; @@ -5983,6 +5986,7 @@ get_relkind_objtype(char relkind) case RELKIND_PARTITIONED_TABLE: return OBJECT_TABLE; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: return OBJECT_INDEX; case RELKIND_SEQUENCE: diff --git a/src/backend/catalog/pg_class.c b/src/backend/catalog/pg_class.c index b696fa2afd4..39f410906c3 100644 --- a/src/backend/catalog/pg_class.c +++ b/src/backend/catalog/pg_class.c @@ -45,6 +45,8 @@ errdetail_relkind_not_supported(char relkind) return errdetail("This operation is not supported for partitioned tables."); case RELKIND_PARTITIONED_INDEX: return errdetail("This operation is not supported for partitioned indexes."); + case RELKIND_GLOBAL_INDEX: + return errdetail("This operation is not supported for global indexes."); default: elog(ERROR, "unrecognized relkind: '%c'", relkind); return 0; diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index 07791b47a61..55a2da35e49 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -22,11 +22,13 @@ #include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" #include "catalog/pg_extension.h" +#include "catalog/pg_type.h" #include "commands/extension.h" #include "miscadmin.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/rel.h" +#include "utils/syscache.h" static bool isObjectPinned(const ObjectAddress *object, Relation rel); @@ -846,6 +848,77 @@ getAutoExtensionsOfObject(Oid classId, Oid objectId) return result; } +/* + * Look up a type belonging to an extension. + * + * Returns the type's OID, or InvalidOid if not found. + * + * Notice that the type is specified by name only, without a schema. + * That's because this will typically be used by relocatable extensions + * which can't make a-priori assumptions about which schema their objects + * are in. As long as the extension only defines one type of this name, + * the answer is unique anyway. + * + * We might later add the ability to look up functions, operators, etc. + */ +Oid +getExtensionType(Oid extensionOid, const char *typname) +{ + Oid result = InvalidOid; + Relation depRel; + ScanKeyData key[3]; + SysScanDesc scan; + HeapTuple tup; + + depRel = table_open(DependRelationId, AccessShareLock); + + ScanKeyInit(&key[0], + Anum_pg_depend_refclassid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(ExtensionRelationId)); + ScanKeyInit(&key[1], + Anum_pg_depend_refobjid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(extensionOid)); + ScanKeyInit(&key[2], + Anum_pg_depend_refobjsubid, + BTEqualStrategyNumber, F_INT4EQ, + Int32GetDatum(0)); + + scan = systable_beginscan(depRel, DependReferenceIndexId, true, + NULL, 3, key); + + while (HeapTupleIsValid(tup = systable_getnext(scan))) + { + Form_pg_depend depform = (Form_pg_depend) GETSTRUCT(tup); + + if (depform->classid == TypeRelationId && + depform->deptype == DEPENDENCY_EXTENSION) + { + Oid typoid = depform->objid; + HeapTuple typtup; + + typtup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typoid)); + if (!HeapTupleIsValid(typtup)) + continue; /* should we throw an error? */ + if (strcmp(NameStr(((Form_pg_type) GETSTRUCT(typtup))->typname), + typname) == 0) + { + result = typoid; + ReleaseSysCache(typtup); + break; /* no need to keep searching */ + } + ReleaseSysCache(typtup); + } + } + + systable_endscan(scan); + + table_close(depRel, AccessShareLock); + + return result; +} + /* * Detect whether a sequence is marked as "owned" by a column * diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 821c2bef444..d043886d04e 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -1170,7 +1170,7 @@ match_prosrc_to_literal(const char *prosrc, const char *literal, if (cursorpos > 0) newcp++; } - chlen = pg_mblen(prosrc); + chlen = pg_mblen_cstr(prosrc); if (strncmp(prosrc, literal, chlen) != 0) goto fail; prosrc += chlen; diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index 29fc4218cd4..941817c8271 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -281,8 +281,8 @@ AddSubscriptionRelState(Oid subid, Oid relid, char state, * Update the state of a subscription table. */ void -UpdateSubscriptionRelState(Oid subid, Oid relid, char state, - XLogRecPtr sublsn) +UpdateSubscriptionRelStateEx(Oid subid, Oid relid, char state, + XLogRecPtr sublsn, bool already_locked) { Relation rel; HeapTuple tup; @@ -290,9 +290,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)); +#endif + + rel = table_open(SubscriptionRelRelationId, NoLock); + } + else + { + LockSharedObject(SubscriptionRelationId, subid, 0, AccessShareLock); + rel = table_open(SubscriptionRelRelationId, RowExclusiveLock); + } /* Try finding existing mapping. */ tup = SearchSysCacheCopy2(SUBSCRIPTIONRELMAP, @@ -326,6 +341,16 @@ UpdateSubscriptionRelState(Oid subid, Oid relid, char state, table_close(rel, NoLock); } +/* + * Update the state of a subscription table. + */ +void +UpdateSubscriptionRelState(Oid subid, Oid relid, char state, + XLogRecPtr sublsn) +{ + UpdateSubscriptionRelStateEx(subid, relid, state, sublsn, false); +} + /* * Get state of subscription table. * diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index fff1aad83ed..efa2d111a61 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -461,9 +461,8 @@ static double asyncQueueUsage(void); static void asyncQueueFillWarning(void); static void SignalBackends(void); static void asyncQueueReadAllNotifications(void); -static bool asyncQueueProcessPageEntries(volatile QueuePosition *current, +static bool asyncQueueProcessPageEntries(QueuePosition *current, QueuePosition stop, - char *page_buffer, Snapshot snapshot); static void asyncQueueAdvanceTail(void); static void ProcessIncomingNotify(bool flush); @@ -1485,6 +1484,7 @@ asyncQueueAddEntries(ListCell *nextNotify) */ qe.length = QUEUE_PAGESIZE - offset; qe.dboid = InvalidOid; + qe.xid = InvalidTransactionId; qe.data[0] = '\0'; /* empty channel */ qe.data[1] = '\0'; /* empty payload */ } @@ -1913,17 +1913,10 @@ ProcessNotifyInterrupt(bool flush) static void asyncQueueReadAllNotifications(void) { - volatile QueuePosition pos; + QueuePosition pos; QueuePosition head; Snapshot snapshot; - /* page_buffer must be adequately aligned, so use a union */ - union - { - char buf[QUEUE_PAGESIZE]; - AsyncQueueEntry align; - } page_buffer; - /* Fetch current state */ LWLockAcquire(NotifyQueueLock, LW_SHARED); /* Assert checks that we have a valid state entry */ @@ -1983,49 +1976,27 @@ asyncQueueReadAllNotifications(void) * It is possible that we fail while trying to send a message to our * frontend (for example, because of encoding conversion failure). If * that happens it is critical that we not try to send the same message - * over and over again. Therefore, we place a PG_TRY block here that will - * forcibly advance our queue position before we lose control to an error. - * (We could alternatively retake NotifyQueueLock and move the position - * before handling each individual message, but that seems like too much - * lock traffic.) + * over and over again. Therefore, we set ExitOnAnyError to upgrade any + * ERRORs to FATAL, causing the client connection to be closed on error. + * + * We used to only skip over the offending message and try to soldier on, + * but it was somewhat questionable to lose a notification and give the + * client an ERROR instead. A client application is not be prepared for + * that and can't tell that a notification was missed. It was also not + * very useful in practice because notifications are often processed while + * a connection is idle and reading a message from the client, and in that + * state, any error is upgraded to FATAL anyway. Closing the connection + * is a clear signal to the application that it might have missed + * notifications. */ - PG_TRY(); { + bool save_ExitOnAnyError = ExitOnAnyError; bool reachedStop; + ExitOnAnyError = true; + do { - int curpage = QUEUE_POS_PAGE(pos); - int curoffset = QUEUE_POS_OFFSET(pos); - int slotno; - int copysize; - - /* - * We copy the data from SLRU into a local buffer, so as to avoid - * holding the NotifySLRULock while we are examining the entries - * and possibly transmitting them to our frontend. Copy only the - * part of the page we will actually inspect. - */ - slotno = SimpleLruReadPage_ReadOnly(NotifyCtl, curpage, - InvalidTransactionId); - if (curpage == QUEUE_POS_PAGE(head)) - { - /* we only want to read as far as head */ - copysize = QUEUE_POS_OFFSET(head) - curoffset; - if (copysize < 0) - copysize = 0; /* just for safety */ - } - else - { - /* fetch all the rest of the page */ - copysize = QUEUE_PAGESIZE - curoffset; - } - memcpy(page_buffer.buf + curoffset, - NotifyCtl->shared->page_buffer[slotno] + curoffset, - copysize); - /* Release lock that we got from SimpleLruReadPage_ReadOnly() */ - LWLockRelease(NotifySLRULock); - /* * Process messages up to the stop position, end of page, or an * uncommitted message. @@ -2041,19 +2012,16 @@ asyncQueueReadAllNotifications(void) * rewrite pages under us. Especially we don't want to hold a lock * while sending the notifications to the frontend. */ - reachedStop = asyncQueueProcessPageEntries(&pos, head, - page_buffer.buf, - snapshot); + reachedStop = asyncQueueProcessPageEntries(&pos, head, snapshot); } while (!reachedStop); - } - PG_FINALLY(); - { + /* Update shared state */ LWLockAcquire(NotifyQueueLock, LW_SHARED); QUEUE_BACKEND_POS(MyBackendId) = pos; LWLockRelease(NotifyQueueLock); + + ExitOnAnyError = save_ExitOnAnyError; } - PG_END_TRY(); /* Done with snapshot */ UnregisterSnapshot(snapshot); @@ -2063,31 +2031,42 @@ asyncQueueReadAllNotifications(void) * Fetch notifications from the shared queue, beginning at position current, * and deliver relevant ones to my frontend. * - * The current page must have been fetched into page_buffer from shared - * memory. (We could access the page right in shared memory, but that - * would imply holding the NotifySLRULock throughout this routine.) - * - * We stop if we reach the "stop" position, or reach a notification from an - * uncommitted transaction, or reach the end of the page. - * * The function returns true once we have reached the stop position or an * uncommitted notification, and false if we have finished with the page. * In other words: once it returns true there is no need to look further. * The QueuePosition *current is advanced past all processed messages. */ static bool -asyncQueueProcessPageEntries(volatile QueuePosition *current, +asyncQueueProcessPageEntries(QueuePosition *current, QueuePosition stop, - char *page_buffer, Snapshot snapshot) { + int64 curpage = QUEUE_POS_PAGE(*current); + int slotno; + char *page_buffer; bool reachedStop = false; bool reachedEndOfPage; - AsyncQueueEntry *qe; + + /* + * We copy the entries into a local buffer to avoid holding the SLRU lock + * while we transmit them to our frontend. The local buffer must be + * adequately aligned, so use a union. + */ + union + { + char buf[QUEUE_PAGESIZE]; + AsyncQueueEntry align; + } local_buf; + char *local_buf_end = local_buf.buf; + + slotno = SimpleLruReadPage_ReadOnly(NotifyCtl, curpage, + InvalidTransactionId); + page_buffer = NotifyCtl->shared->page_buffer[slotno]; do { QueuePosition thisentry = *current; + AsyncQueueEntry *qe; if (QUEUE_POS_EQUAL(thisentry, stop)) break; @@ -2129,18 +2108,23 @@ asyncQueueProcessPageEntries(volatile QueuePosition *current, reachedStop = true; break; } - else if (TransactionIdDidCommit(qe->xid)) - { - /* qe->data is the null-terminated channel name */ - char *channel = qe->data; - if (IsListeningOn(channel)) - { - /* payload follows channel name */ - char *payload = qe->data + strlen(channel) + 1; + /* + * Quick check for the case that we're not listening on any + * channels, before calling TransactionIdDidCommit(). This makes + * that case a little faster, but more importantly, it ensures + * that if there's a bad entry in the queue for which + * TransactionIdDidCommit() fails for some reason, we can skip + * over it on the first LISTEN in a session, and not get stuck on + * it indefinitely. + */ + if (listenChannels == NIL) + continue; - NotifyMyFrontEnd(channel, payload, qe->srcPid); - } + if (TransactionIdDidCommit(qe->xid)) + { + memcpy(local_buf_end, qe, qe->length); + local_buf_end += qe->length; } else { @@ -2154,6 +2138,32 @@ asyncQueueProcessPageEntries(volatile QueuePosition *current, /* Loop back if we're not at end of page */ } while (!reachedEndOfPage); + /* Release lock that we got from SimpleLruReadPage_ReadOnly() */ + LWLockRelease(NotifySLRULock); + + /* + * Now that we have let go of the SLRU bank lock, send the notifications + * to our backend + */ + Assert(local_buf_end - local_buf.buf <= BLCKSZ); + for (char *p = local_buf.buf; p < local_buf_end;) + { + AsyncQueueEntry *qe = (AsyncQueueEntry *) p; + + /* qe->data is the null-terminated channel name */ + char *channel = qe->data; + + if (IsListeningOn(channel)) + { + /* payload follows channel name */ + char *payload = qe->data + strlen(channel) + 1; + + NotifyMyFrontEnd(channel, payload, qe->srcPid); + } + + p += qe->length; + } + if (QUEUE_POS_EQUAL(*current, stop)) reachedStop = true; @@ -2236,6 +2246,117 @@ asyncQueueAdvanceTail(void) LWLockRelease(NotifyQueueTailLock); } +/* + * AsyncNotifyFreezeXids + * + * Prepare the async notification queue for CLOG truncation by freezing + * transaction IDs that are about to become inaccessible. + * + * This function is called by VACUUM before advancing datfrozenxid. It scans + * the notification queue and replaces XIDs that would become inaccessible + * after CLOG truncation with special markers: + * - Committed transactions are set to FrozenTransactionId + * - Aborted/crashed transactions are set to InvalidTransactionId + * + * Only XIDs < newFrozenXid are processed, as those are the ones whose CLOG + * pages will be truncated. If XID < newFrozenXid, it cannot still be running + * (or it would have held back newFrozenXid through ProcArray). + * Therefore, if TransactionIdDidCommit returns false, we know the transaction + * either aborted explicitly or crashed, and we can safely mark it invalid. + */ +void +AsyncNotifyFreezeXids(TransactionId newFrozenXid) +{ + QueuePosition pos; + QueuePosition head; + int64 curpage = -1; + int slotno = -1; + char *page_buffer = NULL; + bool page_dirty = false; + + /* + * Acquire locks in the correct order to avoid deadlocks. As per the + * locking protocol: NotifyQueueTailLock, then NotifyQueueLock, then + * NotifySLRULock. + * + * We only need SHARED mode since we're just reading the head/tail + * positions, not modifying them. + */ + LWLockAcquire(NotifyQueueTailLock, LW_SHARED); + LWLockAcquire(NotifyQueueLock, LW_SHARED); + + pos = QUEUE_TAIL; + head = QUEUE_HEAD; + + /* Release NotifyQueueLock early, we only needed to read the positions */ + LWLockRelease(NotifyQueueLock); + + /* + * Scan the queue from tail to head, freezing XIDs as needed. We hold + * NotifyQueueTailLock throughout to ensure the tail doesn't move while + * we're working. + */ + while (!QUEUE_POS_EQUAL(pos, head)) + { + AsyncQueueEntry *qe; + TransactionId xid; + int64 pageno = QUEUE_POS_PAGE(pos); + int offset = QUEUE_POS_OFFSET(pos); + + /* If we need a different page, release old lock and get new one */ + if (pageno != curpage) + { + /* Release previous page if any */ + if (slotno >= 0) + { + if (page_dirty) + { + NotifyCtl->shared->page_dirty[slotno] = true; + page_dirty = false; + } + LWLockRelease(NotifySLRULock); + } + + LWLockAcquire(NotifySLRULock, LW_EXCLUSIVE); + slotno = SimpleLruReadPage(NotifyCtl, pageno, true, + InvalidTransactionId); + page_buffer = NotifyCtl->shared->page_buffer[slotno]; + curpage = pageno; + } + + qe = (AsyncQueueEntry *) (page_buffer + offset); + xid = qe->xid; + + if (TransactionIdIsNormal(xid) && + TransactionIdPrecedes(xid, newFrozenXid)) + { + if (TransactionIdDidCommit(xid)) + { + qe->xid = FrozenTransactionId; + page_dirty = true; + } + else + { + qe->xid = InvalidTransactionId; + page_dirty = true; + } + } + + /* Advance to next entry */ + asyncQueueAdvance(&pos, qe->length); + } + + /* Release final page lock if we acquired one */ + if (slotno >= 0) + { + if (page_dirty) + NotifyCtl->shared->page_dirty[slotno] = true; + LWLockRelease(NotifySLRULock); + } + + LWLockRelease(NotifyQueueTailLock); +} + /* * ProcessIncomingNotify * diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 33718aad436..b5e6c5c8d89 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -30,6 +30,7 @@ #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" +#include "catalog/pg_inherits.h" #include "catalog/namespace.h" #include "catalog/objectaccess.h" #include "catalog/pg_am.h" @@ -1142,7 +1143,8 @@ swap_relation_files(Oid r1, Oid r2, bool target_is_pg_class, */ /* set rel1's frozen Xid and minimum MultiXid */ - if (relform1->relkind != RELKIND_INDEX) + if (relform1->relkind != RELKIND_INDEX && + relform1->relkind != RELKIND_GLOBAL_INDEX) { Assert(!TransactionIdIsValid(frozenXid) || TransactionIdIsNormal(frozenXid)); @@ -1605,3 +1607,52 @@ get_tables_to_cluster(MemoryContext cluster_context) return rvs; } + +/* + * Given an index on a partitioned table, return a list of RelToCluster for + * all the children leaves tables/indexes. + * + * Like expand_vacuum_rel, but here caller must hold AccessExclusiveLock + * on the table containing the index. + */ +static List * +get_tables_to_cluster_partitioned(MemoryContext cluster_context, Oid indexOid) +{ + List *inhoids; + ListCell *lc; + List *rtcs = NIL; + MemoryContext old_context; + + /* Do not lock the children until they're processed */ + inhoids = find_all_inheritors(indexOid, NoLock, NULL); + + foreach(lc, inhoids) + { + Oid indexrelid = lfirst_oid(lc); + Oid relid = IndexGetRelation(indexrelid, false); + RelToCluster *rtc; + + /* consider only leaf indexes */ + if (get_rel_relkind(indexrelid) != RELKIND_INDEX && + get_rel_relkind(indexrelid) != RELKIND_GLOBAL_INDEX) + continue; + + /* Silently skip partitions which the user has no access to. */ + if (!pg_class_ownercheck(relid, GetUserId()) && + (!pg_database_ownercheck(MyDatabaseId, GetUserId()) || + IsSharedRelation(relid))) + continue; + + /* Use a permanent memory context for the result list */ + old_context = MemoryContextSwitchTo(cluster_context); + + rtc = (RelToCluster *) palloc(sizeof(RelToCluster)); + rtc->tableOid = relid; + rtc->indexOid = indexrelid; + rtcs = lappend(rtcs, rtc); + + MemoryContextSwitchTo(old_context); + } + + return rtcs; +} diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index e4dee3f11ff..e56eff02c6c 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -128,6 +128,9 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt, if (stmt->whereClause) { + Bitmapset *expr_attrs = NULL; + int i; + /* add nsitem to query namespace */ addNSItemToQuery(pstate, nsitem, false, true, true); @@ -140,6 +143,40 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt, /* we have to fix its collations too */ assign_expr_collations(pstate, whereClause); + /* + * Examine all the columns in the WHERE clause expression. When + * the whole-row reference is present, examine all the columns of + * the table. + */ + pull_varattnos(whereClause, 1, &expr_attrs); + if (bms_is_member(0 - FirstLowInvalidHeapAttributeNumber, expr_attrs)) + { + expr_attrs = bms_add_range(expr_attrs, + 1 - FirstLowInvalidHeapAttributeNumber, + RelationGetNumberOfAttributes(rel) - FirstLowInvalidHeapAttributeNumber); + expr_attrs = bms_del_member(expr_attrs, 0 - FirstLowInvalidHeapAttributeNumber); + } + + i = -1; + while ((i = bms_next_member(expr_attrs, i)) >= 0) + { + AttrNumber attno = i + FirstLowInvalidHeapAttributeNumber; + + Assert(attno != 0); + + /* + * Prohibit generated columns in the WHERE clause. Stored + * generated columns are not yet computed when the filtering + * happens. + */ + if (TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated) + ereport(ERROR, + errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + errmsg("generated columns are not supported in COPY FROM WHERE conditions"), + errdetail("Column \"%s\" is a generated column.", + get_attname(RelationGetRelid(rel), attno, false))); + } + whereClause = eval_const_expressions(NULL, whereClause); whereClause = (Node *) canonicalize_qual((Expr *) whereClause, false); diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index a71504fbcae..c04daa3450d 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -45,6 +45,7 @@ #include "catalog/pg_depend.h" #include "catalog/pg_extension.h" #include "catalog/pg_namespace.h" +#include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "commands/alter.h" #include "commands/comment.h" @@ -60,10 +61,12 @@ #include "utils/acl.h" #include "utils/builtins.h" #include "utils/fmgroids.h" +#include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/rel.h" #include "utils/snapmgr.h" +#include "utils/syscache.h" #include "utils/varlena.h" @@ -104,7 +107,26 @@ typedef struct ExtensionVersionInfo struct ExtensionVersionInfo *previous; /* current best predecessor */ } ExtensionVersionInfo; +/* + * Cache structure for get_function_sibling_type (and maybe later, + * allied lookup functions). + */ +typedef struct ExtensionSiblingCache +{ + struct ExtensionSiblingCache *next; /* list link */ + /* lookup key: requesting function's OID and type name */ + Oid reqfuncoid; + const char *typname; + bool valid; /* is entry currently valid? */ + uint32 exthash; /* cache hash of owning extension's OID */ + Oid typeoid; /* OID associated with typname */ +} ExtensionSiblingCache; + +/* Head of linked list of ExtensionSiblingCache structs */ +static ExtensionSiblingCache *ext_sibling_list = NULL; + /* Local functions */ +static void ext_sibling_callback(Datum arg, int cacheid, uint32 hashvalue); static List *find_update_path(List *evi_list, ExtensionVersionInfo *evi_start, ExtensionVersionInfo *evi_target, @@ -254,6 +276,114 @@ get_extension_schema(Oid ext_oid) return result; } +/* + * get_function_sibling_type - find a type belonging to same extension as func + * + * Returns the type's OID, or InvalidOid if not found. + * + * This is useful in extensions, which won't have fixed object OIDs. + * We work from the calling function's own OID, which it can get from its + * FunctionCallInfo parameter, and look up the owning extension and thence + * a type belonging to the same extension. + * + * Notice that the type is specified by name only, without a schema. + * That's because this will typically be used by relocatable extensions + * which can't make a-priori assumptions about which schema their objects + * are in. As long as the extension only defines one type of this name, + * the answer is unique anyway. + * + * We might later add the ability to look up functions, operators, etc. + * + * This code is simply a frontend for some pg_depend lookups. Those lookups + * are fairly expensive, so we provide a simple cache facility. We assume + * that the passed typname is actually a C constant, or at least permanently + * allocated, so that we need not copy that string. + */ +Oid +get_function_sibling_type(Oid funcoid, const char *typname) +{ + ExtensionSiblingCache *cache_entry; + Oid extoid; + Oid typeoid; + + /* + * See if we have the answer cached. Someday there may be enough callers + * to justify a hash table, but for now, a simple linked list is fine. + */ + for (cache_entry = ext_sibling_list; cache_entry != NULL; + cache_entry = cache_entry->next) + { + if (funcoid == cache_entry->reqfuncoid && + strcmp(typname, cache_entry->typname) == 0) + break; + } + if (cache_entry && cache_entry->valid) + return cache_entry->typeoid; + + /* + * Nope, so do the expensive lookups. We do not expect failures, so we do + * not cache negative results. + */ + extoid = getExtensionOfObject(ProcedureRelationId, funcoid); + if (!OidIsValid(extoid)) + return InvalidOid; + typeoid = getExtensionType(extoid, typname); + if (!OidIsValid(typeoid)) + return InvalidOid; + + /* + * Build, or revalidate, cache entry. + */ + if (cache_entry == NULL) + { + /* Register invalidation hook if this is first entry */ + if (ext_sibling_list == NULL) + CacheRegisterSyscacheCallback(EXTENSIONOID, + ext_sibling_callback, + (Datum) 0); + + /* Momentarily zero the space to ensure valid flag is false */ + cache_entry = (ExtensionSiblingCache *) + MemoryContextAllocZero(CacheMemoryContext, + sizeof(ExtensionSiblingCache)); + cache_entry->next = ext_sibling_list; + ext_sibling_list = cache_entry; + } + + cache_entry->reqfuncoid = funcoid; + cache_entry->typname = typname; + cache_entry->exthash = GetSysCacheHashValue1(EXTENSIONOID, + ObjectIdGetDatum(extoid)); + cache_entry->typeoid = typeoid; + /* Mark it valid only once it's fully populated */ + cache_entry->valid = true; + + return typeoid; +} + +/* + * ext_sibling_callback + * Syscache inval callback function for EXTENSIONOID cache + * + * It seems sufficient to invalidate ExtensionSiblingCache entries when + * the owning extension's pg_extension entry is modified or deleted. + * Neither a requesting function's OID, nor the OID of the object it's + * looking for, could change without an extension update or drop/recreate. + */ +static void +ext_sibling_callback(Datum arg, int cacheid, uint32 hashvalue) +{ + ExtensionSiblingCache *cache_entry; + + for (cache_entry = ext_sibling_list; cache_entry != NULL; + cache_entry = cache_entry->next) + { + if (hashvalue == 0 || + cache_entry->exthash == hashvalue) + cache_entry->valid = false; + } +} + /* * Utility functions to check validity of extension and version names */ diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index 901b8bc89b6..1899d36c3b4 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, diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index c2904cdb1a7..2e48d8c3eff 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -728,8 +728,20 @@ DefineIndex(Oid relationId, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot create exclusion constraints on partitioned table \"%s\"", RelationGetRelationName(rel)))); + + if (stmt->global_index && !stmt->unique) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot create global index without unique on partitioned table \"%s\"", + RelationGetRelationName(rel)))); } + if (stmt->global_index && rel->rd_rel->relkind == RELKIND_RELATION && !rel->rd_rel->relispartition) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot create global index on non-partitioned table \"%s\"", + RelationGetRelationName(rel)))); + /* * Don't try to CREATE INDEX on temp tables of other backends. */ @@ -939,7 +951,7 @@ DefineIndex(Oid relationId, * We could lift this limitation if we had global indexes, but those have * their own problems, so this is a useful feature combination. */ - if (partitioned && (stmt->unique || stmt->primary)) + if (partitioned && (stmt->unique || stmt->primary) && !stmt->global_index) { PartitionKey key = RelationGetPartitionKey(rel); const char *constraint_type; @@ -1045,7 +1057,7 @@ DefineIndex(Oid relationId, } } - if (!found) + if (!found && !stmt->global_index) { Form_pg_attribute att; @@ -1152,6 +1164,13 @@ DefineIndex(Oid relationId, flags |= INDEX_CREATE_PARTITIONED; if (stmt->primary) flags |= INDEX_CREATE_IS_PRIMARY; + /* copy the partition indication -1 = first, 0 = N/A, 1 = last */ + if (stmt->global_index) + { + indexInfo->ii_Global_index = stmt->global_index; + indexInfo->ii_GlobalIndexPart = stmt->globalIndexPart; + indexInfo->ii_Nparts = stmt->nparts; + } /* * If the table is partitioned, and recursion was declined but partitions @@ -1164,6 +1183,8 @@ DefineIndex(Oid relationId, if (pd->nparts != 0) flags |= INDEX_CREATE_INVALID; } + if (stmt->global_index) + flags |= INDEX_CREATE_GLOBAL; if (stmt->deferrable) constr_flags |= INDEX_CONSTR_CREATE_DEFERRABLE; @@ -1386,6 +1407,24 @@ DefineIndex(Oid relationId, ListCell *lc; ObjectAddress childAddr; + if (i == nparts - 1 && stmt->global_index) + { + elog(DEBUG2, "mark as last partitioned to scan"); + childStmt->globalIndexPart = 1; + } + + if (i == 0 && stmt->global_index) + { + elog(DEBUG2, "mark as first partitioned to scan"); + childStmt->globalIndexPart = -1; + } + + if (stmt->global_index) + { + childStmt->nparts = nparts; + elog(DEBUG2, "total partitions to build global index %d", childStmt->nparts); + } + /* * We can't use the same index name for the child index, * so clear idxname to let the recursive invocation choose @@ -2411,7 +2450,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 @@ -2427,15 +2468,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)) @@ -2447,6 +2518,8 @@ ChooseRelationName(const char *name1, const char *name2, snprintf(modlabel, sizeof(modlabel), "%s%d", label, ++pass); } + table_close(pgclassrel, AccessShareLock); + return relname; } @@ -2793,6 +2866,7 @@ RangeVarCallbackForReindexIndex(const RangeVar *relation, if (!relkind) return; if (relkind != RELKIND_INDEX && + relkind != RELKIND_GLOBAL_INDEX && relkind != RELKIND_PARTITIONED_INDEX) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -3176,6 +3250,7 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) continue; Assert(partkind == RELKIND_INDEX || + partkind == RELKIND_GLOBAL_INDEX || partkind == RELKIND_RELATION); /* Save partition OID */ @@ -3269,7 +3344,8 @@ ReindexMultipleInternal(List *relids, ReindexParams *params) (void) ReindexRelationConcurrently(relid, &newparams); /* ReindexRelationConcurrently() does the verbose output */ } - else if (relkind == RELKIND_INDEX) + else if (relkind == RELKIND_INDEX || + relkind == RELKIND_GLOBAL_INDEX) { ReindexParams newparams = *params; @@ -3528,6 +3604,7 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) break; } case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: { Oid heapId = IndexGetRelation(relationOid, (params->options & REINDEXOPT_MISSING_OK) != 0); @@ -4005,12 +4082,20 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) get_rel_namespace(oldidx->tableId), false); + /* + * Swapping the indexes might involve TOAST table access, so ensure we + * have a valid snapshot. + */ + PushActiveSnapshot(GetTransactionSnapshot()); + /* * Swap old index with the new one. This also marks the new one as * valid and the old one as not valid. */ index_concurrently_swap(newidx->indexId, oldidx->indexId, oldName); + PopActiveSnapshot(); + /* * Invalidate the relcache for the table, so that after this commit * all sessions will refresh any cached plans that might reference the @@ -4128,7 +4213,8 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) /* Log what we did */ if ((params->options & REINDEXOPT_VERBOSE) != 0) { - if (relkind == RELKIND_INDEX) + if (relkind == RELKIND_INDEX || + relkind == RELKIND_GLOBAL_INDEX) ereport(INFO, (errmsg("index \"%s.%s\" was reindexed", relationNamespace, relationName), @@ -4181,6 +4267,7 @@ IndexSetParentIndex(Relation partitionIdx, Oid parentOid) /* Make sure this is an index */ Assert(partitionIdx->rd_rel->relkind == RELKIND_INDEX || + partitionIdx->rd_rel->relkind == RELKIND_GLOBAL_INDEX || partitionIdx->rd_rel->relkind == RELKIND_PARTITIONED_INDEX); /* @@ -4354,3 +4441,148 @@ set_indexsafe_procflags(void) ProcGlobal->statusFlags[MyProc->pgxactoff] = MyProc->statusFlags; LWLockRelease(ProcArrayLock); } + +bool +PopulateGlobalSpool(Relation idxRel, Relation heapRel, IndexStmt *stmt) +{ + IndexInfo *idxinfo; + int numberOfKeyAttributes; + int numberOfAttributes; + List *allIndexParams; + Oid accessMethodId; + Form_pg_am accessMethodForm; + char *accessMethodName; + HeapTuple tuple; + bool concurrent; + Oid *typeObjectId; + Oid *collationObjectId; + Oid *classObjectId; + int16 *coloptions; + IndexAmRoutine *amRoutine; + bool amcanorder; + Oid root_save_userid; + int root_save_sec_context; + int root_save_nestlevel; + + root_save_nestlevel = NewGUCNestLevel(); + + if (stmt->concurrent && get_rel_persistence(RelationGetRelid(heapRel)) != RELPERSISTENCE_TEMP) + concurrent = true; + else + concurrent = false; + + allIndexParams = list_concat_copy(stmt->indexParams, + stmt->indexIncludingParams); + + numberOfKeyAttributes = list_length(stmt->indexParams); + numberOfAttributes = list_length(allIndexParams); + + accessMethodName = stmt->accessMethod; + tuple = SearchSysCache1(AMNAME, PointerGetDatum(accessMethodName)); + if (!HeapTupleIsValid(tuple)) + { + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("access method \"%s\" does not exist", + accessMethodName))); + } + + accessMethodForm = (Form_pg_am) GETSTRUCT(tuple); + accessMethodId = accessMethodForm->oid; + amRoutine = GetIndexAmRoutine(accessMethodForm->amhandler); + + GetUserIdAndSecContext(&root_save_userid, &root_save_sec_context); + SetUserIdAndSecContext(heapRel->rd_rel->relowner, + root_save_sec_context | SECURITY_RESTRICTED_OPERATION); + + PG_TRY(); + { + idxinfo = makeIndexInfo(numberOfAttributes, + numberOfKeyAttributes, + accessMethodId, + NIL, /* expressions, NIL for now */ + make_ands_implicit((Expr *) stmt->whereClause), + stmt->unique, + !concurrent, + concurrent); + + typeObjectId = (Oid *) palloc(numberOfAttributes * sizeof(Oid)); + collationObjectId = (Oid *) palloc(numberOfAttributes * sizeof(Oid)); + classObjectId = (Oid *) palloc(numberOfAttributes * sizeof(Oid)); + coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16)); + amcanorder = amRoutine->amcanorder; + + pfree(amRoutine); + ReleaseSysCache(tuple); + + ComputeIndexAttrs(idxinfo, + typeObjectId, collationObjectId, classObjectId, + coloptions, allIndexParams, + stmt->excludeOpNames, RelationGetRelid(heapRel), + accessMethodName, accessMethodId, + amcanorder, stmt->isconstraint, root_save_userid, + root_save_sec_context, &root_save_nestlevel); + + /* Fill global unique index related parameters */ + idxinfo->ii_GlobalIndexPart = stmt->globalIndexPart; + idxinfo->ii_BuildGlobalSpool = true; + idxinfo->ii_Nparts = stmt->nparts; + idxinfo->ii_Global_index = stmt->global_index; + + /* + * Determine worker process details for parallel CREATE INDEX. + * Currently, only btree has support for parallel builds. + */ + if (IsNormalProcessingMode() && idxRel->rd_rel->relam == BTREE_AM_OID) + { + idxinfo->ii_ParallelWorkers = + plan_create_index_workers(RelationGetRelid(heapRel), + RelationGetRelid(idxRel)); + } + + idxRel->rd_indam->ambuild(heapRel, idxRel, idxinfo); + } + PG_CATCH(); + { + /* Restore security context before re-throwing */ + AtEOXact_GUC(false, root_save_nestlevel); + SetUserIdAndSecContext(root_save_userid, root_save_sec_context); + PG_RE_THROW(); + } + PG_END_TRY(); + + AtEOXact_GUC(false, root_save_nestlevel); + SetUserIdAndSecContext(root_save_userid, root_save_sec_context); + + return true; +} + +void +ChangeRelKind(Relation idxRel, char kind) +{ + Relation pg_class; + HeapTuple tuple; + Form_pg_class classform; + + /* + * Get a writable copy of the pg_class tuple for the given relation. + */ + pg_class = table_open(RelationRelationId, RowExclusiveLock); + + tuple = SearchSysCacheCopy1(RELOID, + ObjectIdGetDatum(RelationGetRelid(idxRel))); + if (!HeapTupleIsValid(tuple)) + elog(ERROR, "could not find tuple for relation %u", + RelationGetRelid(idxRel)); + + classform = (Form_pg_class) GETSTRUCT(tuple); + + classform->relkind = kind; + idxRel->rd_rel->relkind = kind; + + CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); + + heap_freetuple(tuple); + + table_close(pg_class, RowExclusiveLock); +} diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c index eb50f60ed13..a6a19a9aaad 100644 --- a/src/backend/commands/operatorcmds.c +++ b/src/backend/commands/operatorcmds.c @@ -274,7 +274,6 @@ ValidateRestrictionEstimator(List *restrictionName) { Oid typeId[4]; Oid restrictionOid; - AclResult aclresult; typeId[0] = INTERNALOID; /* PlannerInfo */ typeId[1] = OIDOID; /* operator OID */ @@ -290,11 +289,32 @@ ValidateRestrictionEstimator(List *restrictionName) errmsg("restriction estimator function %s must return type %s", NameListToString(restrictionName), "float8"))); - /* Require EXECUTE rights for the estimator */ - aclresult = pg_proc_aclcheck(restrictionOid, GetUserId(), ACL_EXECUTE); - if (aclresult != ACLCHECK_OK) - aclcheck_error(aclresult, OBJECT_FUNCTION, - NameListToString(restrictionName)); + /* + * If the estimator is not a built-in function, require superuser + * privilege to install it. This protects against using something that is + * not a restriction estimator or has hard-wired assumptions about what + * data types it is working with. (Built-in estimators are required to + * defend themselves adequately against unexpected data type choices, but + * it seems impractical to expect that of extensions' estimators.) + * + * If it is built-in, only require EXECUTE rights. + */ + if (restrictionOid >= FirstGenbkiObjectId) + { + if (!superuser()) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be superuser to specify a non-built-in restriction estimator function"))); + } + else + { + AclResult aclresult; + + aclresult = pg_proc_aclcheck(restrictionOid, GetUserId(), ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, OBJECT_FUNCTION, + NameListToString(restrictionName)); + } return restrictionOid; } @@ -310,7 +330,6 @@ ValidateJoinEstimator(List *joinName) Oid typeId[5]; Oid joinOid; Oid joinOid2; - AclResult aclresult; typeId[0] = INTERNALOID; /* PlannerInfo */ typeId[1] = OIDOID; /* operator OID */ @@ -348,11 +367,23 @@ ValidateJoinEstimator(List *joinName) errmsg("join estimator function %s must return type %s", NameListToString(joinName), "float8"))); - /* Require EXECUTE rights for the estimator */ - aclresult = pg_proc_aclcheck(joinOid, GetUserId(), ACL_EXECUTE); - if (aclresult != ACLCHECK_OK) - aclcheck_error(aclresult, OBJECT_FUNCTION, - NameListToString(joinName)); + /* privilege checks are the same as in ValidateRestrictionEstimator */ + if (joinOid >= FirstGenbkiObjectId) + { + if (!superuser()) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be superuser to specify a non-built-in join estimator function"))); + } + else + { + AclResult aclresult; + + aclresult = pg_proc_aclcheck(joinOid, GetUserId(), ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, OBJECT_FUNCTION, + NameListToString(joinName)); + } return joinOid; } diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index e288dd41cdc..9347b99aa9b 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -96,7 +96,12 @@ parse_publication_options(List *options, pubactions->pubtruncate = false; *publish_given = true; - publish = defGetString(defel); + + /* + * SplitIdentifierString destructively modifies its input, so make + * a copy so we don't modify the memory of the executing statement + */ + publish = pstrdup(defGetString(defel)); if (!SplitIdentifierString(publish, ',', &publish_list)) ereport(ERROR, diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c index df6cb4a6f49..38c76feb5c7 100644 --- a/src/backend/commands/statscmds.c +++ b/src/backend/commands/statscmds.c @@ -62,7 +62,7 @@ compare_int16(const void *a, const void *b) * CREATE STATISTICS */ ObjectAddress -CreateStatistics(CreateStatsStmt *stmt) +CreateStatistics(CreateStatsStmt *stmt, bool check_rights) { int16 attnums[STATS_MAX_DIMENSIONS]; int nattnums = 0; @@ -139,7 +139,13 @@ CreateStatistics(CreateStatsStmt *stmt) errmsg("relation \"%s\" is not a table, foreign table, or materialized view", RelationGetRelationName(rel)))); - /* You must own the relation to create stats on it */ + /* + * You must own the relation to create stats on it. + * + * NB: Concurrent changes could cause this function's lookup to find a + * different relation than a previous lookup by the caller, so we must + * perform this check even when check_rights == false. + */ if (!pg_class_ownercheck(RelationGetRelid(rel), stxowner)) aclcheck_error(ACLCHECK_NOT_OWNER, get_relkind_objtype(rel->rd_rel->relkind), RelationGetRelationName(rel)); @@ -175,6 +181,20 @@ CreateStatistics(CreateStatsStmt *stmt) } namestrcpy(&stxname, namestr); + /* + * Check we have creation rights in target namespace. Skip check if + * caller doesn't want it. + */ + if (check_rights) + { + AclResult aclresult; + + aclresult = pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_CREATE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, OBJECT_SCHEMA, + get_namespace_name(namespaceId)); + } + /* * Deal with the possibility that the statistics object already exists. */ diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index b1a2f3f81a2..bbfd860c401 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -694,7 +694,7 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data) * * It is possible that the origin is not yet created for * tablesync worker, this can happen for the states before - * SUBREL_STATE_FINISHEDCOPY. The apply worker can also + * SUBREL_STATE_DATASYNC. The apply worker can also * concurrently try to drop the origin and by this time * the origin might be already removed. For these reasons, * passing missing_ok = true. @@ -1070,10 +1070,12 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel) List *rstates; /* - * 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, CStringGetDatum(stmt->subname)); @@ -1204,7 +1206,7 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel) * * It is possible that the origin is not yet created for tablesync * worker so passing missing_ok = true. This can happen for the states - * before SUBREL_STATE_FINISHEDCOPY. + * before SUBREL_STATE_DATASYNC. */ ReplicationOriginNameForTablesync(subid, relid, originname, sizeof(originname)); diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 2a04796e8d1..dc39703a7d2 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -36,6 +36,7 @@ #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" +#include "catalog/pg_rewrite.h" #include "catalog/pg_foreign_table.h" #include "catalog/pg_inherits.h" #include "catalog/pg_namespace.h" @@ -79,6 +80,7 @@ #include "partitioning/partdesc.h" #include "pgstat.h" #include "rewrite/rewriteDefine.h" +#include "rewrite/rewriteSupport.h" #include "rewrite/rewriteHandler.h" #include "rewrite/rewriteManip.h" #include "storage/bufmgr.h" @@ -191,6 +193,8 @@ typedef struct AlteredTableInfo char *clusterOnIndex; /* index to use for CLUSTER */ List *changedStatisticsOids; /* OIDs of statistics to rebuild */ List *changedStatisticsDefs; /* string definitions of same */ + List *changedViewOids; /* OIDs of views to rebuild */ + List *changedViewDefs; /* CREATE OR REPLACE VIEW strings for same */ } AlteredTableInfo; /* Struct describing one new constraint to check in Phase 3 scan */ @@ -290,6 +294,12 @@ static const struct dropmsgstrings dropmsgstringarray[] = { gettext_noop("index \"%s\" does not exist, skipping"), gettext_noop("\"%s\" is not an index"), gettext_noop("Use DROP INDEX to remove an index.")}, + {RELKIND_GLOBAL_INDEX, + ERRCODE_UNDEFINED_OBJECT, + gettext_noop("index \"%s\" does not exist"), + gettext_noop("index \"%s\" does not exist, skipping"), + gettext_noop("\"%s\" is not an index"), + gettext_noop("Use DROP INDEX to remove an index.")}, {'\0', 0, NULL, NULL, NULL, NULL} }; @@ -315,6 +325,8 @@ struct DropRelationCallbackState #define ATT_COMPOSITE_TYPE 0x0010 #define ATT_FOREIGN_TABLE 0x0020 #define ATT_PARTITIONED_INDEX 0x0040 +#define ATT_SEQUENCE 0x0080 +#define ATT_GLOBAL_INDEX 0x0100 /* * ForeignTruncateInfo @@ -526,6 +538,7 @@ static ObjectAddress ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, static void RememberConstraintForRebuilding(Oid conoid, AlteredTableInfo *tab); static void RememberIndexForRebuilding(Oid indoid, AlteredTableInfo *tab); static void RememberStatisticsForRebuilding(Oid indoid, AlteredTableInfo *tab); +static void RememberViewForRebuilding(Oid viewOid, AlteredTableInfo *tab); static void ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode); static void ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, @@ -610,6 +623,7 @@ static List *GetParentedForeignKeyRefs(Relation partition); static void ATDetachCheckNoForeignKeyRefs(Relation partition); static char GetAttributeCompression(Oid atttypid, char *compression); +static bool HasGlobalChildIndex(Relation idxRel); /* ---------------------------------------------------------------- * DefineRelation @@ -1179,6 +1193,11 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, idxstmt = generateClonedIndexStmt(NULL, idxRel, attmap, &constraintOid); + if (HasGlobalChildIndex(idxRel)) + { + elog(DEBUG2, "create global index for the new child partition table"); + idxstmt->global_index = true; + } DefineIndex(RelationGetRelid(rel), idxstmt, InvalidOid, @@ -1533,6 +1552,8 @@ RangeVarCallbackForDropRelation(const RangeVar *rel, Oid relOid, Oid oldRelOid, expected_relkind = RELKIND_RELATION; else if (classform->relkind == RELKIND_PARTITIONED_INDEX) expected_relkind = RELKIND_INDEX; + else if (classform->relkind == RELKIND_GLOBAL_INDEX) + expected_relkind = RELKIND_GLOBAL_INDEX; else expected_relkind = classform->relkind; @@ -1553,7 +1574,8 @@ RangeVarCallbackForDropRelation(const RangeVar *rel, Oid relOid, Oid oldRelOid, * only concerns indexes of toast relations that became invalid during a * REINDEX CONCURRENTLY process. */ - if (IsSystemClass(relOid, classform) && classform->relkind == RELKIND_INDEX) + if (IsSystemClass(relOid, classform) && (classform->relkind == RELKIND_INDEX || + classform->relkind == RELKIND_GLOBAL_INDEX)) { HeapTuple locTuple; Form_pg_index indexform; @@ -1592,7 +1614,8 @@ RangeVarCallbackForDropRelation(const RangeVar *rel, Oid relOid, Oid oldRelOid, * entry, though --- the relation may have been dropped. Note that this * code will execute for either plain or partitioned indexes. */ - if (expected_relkind == RELKIND_INDEX && + if ((expected_relkind == RELKIND_INDEX || + expected_relkind == RELKIND_GLOBAL_INDEX) && relOid != oldRelOid) { state->heapOid = IndexGetRelation(relOid, true); @@ -3382,6 +3405,7 @@ renameatt_check(Oid myrelid, Form_pg_class classform, bool recursing) relkind != RELKIND_MATVIEW && relkind != RELKIND_COMPOSITE_TYPE && relkind != RELKIND_INDEX && + relkind != RELKIND_GLOBAL_INDEX && relkind != RELKIND_PARTITIONED_INDEX && relkind != RELKIND_FOREIGN_TABLE && relkind != RELKIND_PARTITIONED_TABLE) @@ -3813,6 +3837,7 @@ RenameRelation(RenameStmt *stmt) */ relkind = get_rel_relkind(relid); obj_is_index = (relkind == RELKIND_INDEX || + relkind == RELKIND_GLOBAL_INDEX || relkind == RELKIND_PARTITIONED_INDEX); if (obj_is_index || is_index_stmt == obj_is_index) break; @@ -3880,6 +3905,7 @@ RenameRelationInternal(Oid myrelid, const char *newrelname, bool is_internal, bo */ Assert(!is_index || is_index == (targetrelation->rd_rel->relkind == RELKIND_INDEX || + targetrelation->rd_rel->relkind == RELKIND_GLOBAL_INDEX || targetrelation->rd_rel->relkind == RELKIND_PARTITIONED_INDEX)); /* @@ -3908,6 +3934,7 @@ RenameRelationInternal(Oid myrelid, const char *newrelname, bool is_internal, bo * Also rename the associated constraint, if any. */ if (targetrelation->rd_rel->relkind == RELKIND_INDEX || + targetrelation->rd_rel->relkind == RELKIND_GLOBAL_INDEX || targetrelation->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) { Oid constraintId = get_index_constraint(myrelid); @@ -3992,6 +4019,7 @@ CheckTableNotInUse(Relation rel, const char *stmt) stmt, RelationGetRelationName(rel)))); if (rel->rd_rel->relkind != RELKIND_INDEX && + rel->rd_rel->relkind != RELKIND_GLOBAL_INDEX && rel->rd_rel->relkind != RELKIND_PARTITIONED_INDEX && AfterTriggerPendingOnRel(RelationGetRelid(rel))) ereport(ERROR, @@ -6083,6 +6111,9 @@ ATSimplePermissions(Relation rel, int allowed_targets) case RELKIND_INDEX: actual_target = ATT_INDEX; break; + case RELKIND_GLOBAL_INDEX: + actual_target = ATT_GLOBAL_INDEX; + break; case RELKIND_PARTITIONED_INDEX: actual_target = ATT_PARTITIONED_INDEX; break; @@ -6814,14 +6845,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, rawEnt = (RawColumnDefault *) palloc(sizeof(RawColumnDefault)); rawEnt->attnum = attribute.attnum; rawEnt->raw_default = copyObject(colDef->raw_default); - - /* - * Attempt to skip a complete table rewrite by storing the specified - * DEFAULT value outside of the heap. This may be disabled inside - * AddRelationNewConstraints if the optimization cannot be applied. - */ - rawEnt->missingMode = (!colDef->generated); - + rawEnt->missingMode = false; /* XXX vestigial */ rawEnt->generated = colDef->generated; /* @@ -6833,13 +6857,6 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, /* Make the additional catalog changes visible */ CommandCounterIncrement(); - - /* - * Did the request for a missing value work? If not we'll have to do a - * rewrite - */ - if (!rawEnt->missingMode) - tab->rewrite |= AT_REWRITE_DEFAULT_VAL; } /* @@ -6856,9 +6873,9 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, * rejects nulls. If there are any domain constraints then we construct * an explicit NULL default value that will be passed through * CoerceToDomain processing. (This is a tad inefficient, since it causes - * rewriting the table which we really don't have to do, but the present - * design of domain processing doesn't offer any simple way of checking - * the constraints more directly.) + * rewriting the table which we really wouldn't have to do; but we do it + * to preserve the historical behavior that such a failure will be raised + * only if the table currently contains some rows.) * * Note: we use build_column_default, and not just the cooked default * returned by AddRelationNewConstraints, so that the right thing happens @@ -6877,6 +6894,9 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, */ if (RELKIND_HAS_STORAGE(relkind) && attribute.attnum > 0) { + bool has_domain_constraints; + bool has_missing = false; + /* * For an identity column, we can't use build_column_default(), * because the sequence ownership isn't set yet. So do it manually. @@ -6889,14 +6909,13 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, nve->typeId = typeOid; defval = (Expr *) nve; - - /* must do a rewrite for identity columns */ - tab->rewrite |= AT_REWRITE_DEFAULT_VAL; } else defval = (Expr *) build_column_default(rel, attribute.attnum); - if (!defval && DomainHasConstraints(typeOid)) + /* Build CoerceToDomain(NULL) expression if needed */ + has_domain_constraints = DomainHasConstraints(typeOid); + if (!defval && has_domain_constraints) { Oid baseTypeId; int32 baseTypeMod; @@ -6922,18 +6941,63 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, { NewColumnValue *newval; + /* Prepare defval for execution, either here or in Phase 3 */ + defval = expression_planner(defval); + + /* Add the new default to the newvals list */ newval = (NewColumnValue *) palloc0(sizeof(NewColumnValue)); newval->attnum = attribute.attnum; - newval->expr = expression_planner(defval); + newval->expr = defval; newval->is_generated = (colDef->generated != '\0'); tab->newvals = lappend(tab->newvals, newval); - } - if (DomainHasConstraints(typeOid)) - tab->rewrite |= AT_REWRITE_DEFAULT_VAL; + /* + * Attempt to skip a complete table rewrite by storing the + * specified DEFAULT value outside of the heap. This is only + * allowed for plain relations and non-generated columns, and the + * default expression can't be volatile (stable is OK). Note that + * contain_volatile_functions deems CoerceToDomain immutable, but + * here we consider that coercion to a domain with constraints is + * volatile; else it might fail even when the table is empty. + */ + if (rel->rd_rel->relkind == RELKIND_RELATION && + !colDef->generated && + !has_domain_constraints && + !contain_volatile_functions((Node *) defval)) + { + EState *estate; + ExprState *exprState; + Datum missingval; + bool missingIsNull; + + /* Evaluate the default expression */ + estate = CreateExecutorState(); + exprState = ExecPrepareExpr(defval, estate); + missingval = ExecEvalExpr(exprState, + GetPerTupleExprContext(estate), + &missingIsNull); + /* If it turns out NULL, nothing to do; else store it */ + if (!missingIsNull) + { + StoreAttrMissingVal(rel, attribute.attnum, missingval); + /* Make the additional catalog change visible */ + CommandCounterIncrement(); + has_missing = true; + } + FreeExecutorState(estate); + } + else + { + /* + * Failed to use missing mode. We have to do a table rewrite + * to install the value. + */ + tab->rewrite |= AT_REWRITE_DEFAULT_VAL; + } + } - if (!TupleDescAttr(rel->rd_att, attribute.attnum - 1)->atthasmissing) + if (!has_missing) { /* * If the new column is NOT NULL, and there is no missing value, @@ -8002,6 +8066,7 @@ ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa * column numbers could contain gaps if columns are later dropped. */ if (rel->rd_rel->relkind != RELKIND_INDEX && + rel->rd_rel->relkind != RELKIND_GLOBAL_INDEX && rel->rd_rel->relkind != RELKIND_PARTITIONED_INDEX && !colName) ereport(ERROR, @@ -8063,6 +8128,7 @@ ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa colName))); if (rel->rd_rel->relkind == RELKIND_INDEX || + rel->rd_rel->relkind == RELKIND_GLOBAL_INDEX || rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) { if (attnum > rel->rd_index->indnkeyatts) @@ -8636,7 +8702,7 @@ ATExecAddStatistics(AlteredTableInfo *tab, Relation rel, /* The CreateStatsStmt has already been through transformStatsStmt */ Assert(stmt->transformed); - address = CreateStatistics(stmt); + address = CreateStatistics(stmt, !is_rebuild); return address; } @@ -9838,14 +9904,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); } /* @@ -9856,8 +9922,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. */ @@ -9933,17 +9997,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; - } - /* * Because we're only expanding the key space at the referenced side, * we don't need to prevent any operation in the referencing table, so @@ -12357,6 +12410,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, char relKind = get_rel_relkind(foundObject.objectId); if (relKind == RELKIND_INDEX || + relKind == RELKIND_GLOBAL_INDEX || relKind == RELKIND_PARTITIONED_INDEX) { Assert(foundObject.objectSubId == 0); @@ -12417,18 +12471,68 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, break; case OCLASS_REWRITE: - + { /* - * View/rule bodies have pretty much the same issues as - * function bodies. FIXME someday. + * If the dependent object is a view's SELECT rule, we can + * rebuild the view automatically after the type change. + * For user-defined rules on regular tables we still reject + * the operation. */ - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot alter type of a column used by a view or rule"), - errdetail("%s depends on column \"%s\"", - getObjectDescription(&foundObject, false), - colName))); + Relation rewriteRel; + ScanKeyData rkey[1]; + SysScanDesc rscan; + HeapTuple rtup; + Oid viewOid = InvalidOid; + bool is_view_select_rule = false; + + rewriteRel = table_open(RewriteRelationId, AccessShareLock); + ScanKeyInit(&rkey[0], + Anum_pg_rewrite_oid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(foundObject.objectId)); + rscan = systable_beginscan(rewriteRel, RewriteOidIndexId, + true, NULL, 1, rkey); + rtup = systable_getnext(rscan); + if (HeapTupleIsValid(rtup)) + { + Form_pg_rewrite ruleform = (Form_pg_rewrite) GETSTRUCT(rtup); + + viewOid = ruleform->ev_class; + /* + * Only rebuild if this is a view's ON SELECT rule: + * ev_type='1', is_instead=true, rulename="_RETURN", and + * the owning relation is a view. + */ + if (ruleform->ev_type == '1' && + ruleform->is_instead && + strcmp(NameStr(ruleform->rulename), + ViewSelectRuleName) == 0 && + get_rel_relkind(viewOid) == RELKIND_VIEW) + is_view_select_rule = true; + } + systable_endscan(rscan); + table_close(rewriteRel, AccessShareLock); + + if (is_view_select_rule) + { + /* + * Remember this view (and any views that depend on it) + * for rebuilding after the type change. + */ + RememberViewForRebuilding(viewOid, tab); + } + else + { + /* Non-view rules cannot be auto-rebuilt */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot alter type of a column used by a view or rule"), + errdetail("%s depends on column \"%s\"", + getObjectDescription(&foundObject, false), + colName))); + } break; + } case OCLASS_TRIGGER: @@ -12861,6 +12965,110 @@ RememberStatisticsForRebuilding(Oid stxoid, AlteredTableInfo *tab) } } +/* + * Subroutine for ATExecAlterColumnType: remember that a view needs to be + * rebuilt after the column type change. Also recursively finds any views + * that depend on this view and remembers them too (in dependency order so + * that recreation will succeed). + */ +static void +RememberViewForRebuilding(Oid viewOid, AlteredTableInfo *tab) +{ + char *defstring; + Relation depRel; + ScanKeyData key[2]; + SysScanDesc scan; + HeapTuple depTup; + + /* + * De-duplication check: if already remembered, skip. This also prevents + * infinite recursion for view dependency cycles (which shouldn't exist, + * but be safe). + */ + if (list_member_oid(tab->changedViewOids, viewOid)) + return; + + /* + * Capture the view's definition string before any type changes happen. + * pg_get_view_createcommand() reads the current catalog state. + */ + defstring = pg_get_view_createcommand(viewOid); + + tab->changedViewOids = lappend_oid(tab->changedViewOids, viewOid); + tab->changedViewDefs = lappend(tab->changedViewDefs, defstring); + + /* + * Now find any views that depend on this view and remember them too. + * We need to do this recursively so that when we recreate views, we + * can do so in topological order (base views first). + */ + depRel = table_open(DependRelationId, AccessShareLock); + + ScanKeyInit(&key[0], + Anum_pg_depend_refclassid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(RelationRelationId)); + ScanKeyInit(&key[1], + Anum_pg_depend_refobjid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(viewOid)); + + scan = systable_beginscan(depRel, DependReferenceIndexId, true, + NULL, 2, key); + + while (HeapTupleIsValid(depTup = systable_getnext(scan))) + { + Form_pg_depend foundDep = (Form_pg_depend) GETSTRUCT(depTup); + + /* + * We're looking for rewrite rules that depend on this view as a + * whole (not on a specific column). These correspond to views that + * SELECT from this view. + */ + if (foundDep->classid == RewriteRelationId && + foundDep->deptype != DEPENDENCY_PIN) + { + Relation rewriteRel; + ScanKeyData rkey[1]; + SysScanDesc rscan; + HeapTuple rtup; + + rewriteRel = table_open(RewriteRelationId, AccessShareLock); + ScanKeyInit(&rkey[0], + Anum_pg_rewrite_oid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(foundDep->objid)); + rscan = systable_beginscan(rewriteRel, RewriteOidIndexId, + true, NULL, 1, rkey); + rtup = systable_getnext(rscan); + if (HeapTupleIsValid(rtup)) + { + Form_pg_rewrite ruleform = (Form_pg_rewrite) GETSTRUCT(rtup); + Oid depViewOid = ruleform->ev_class; + + /* + * Only process SELECT rules of views (not other rule types + * or rules on regular tables). + */ + if (ruleform->ev_type == '1' && + ruleform->is_instead && + strcmp(NameStr(ruleform->rulename), + ViewSelectRuleName) == 0 && + get_rel_relkind(depViewOid) == RELKIND_VIEW) + { + /* Recursively remember this dependent view */ + RememberViewForRebuilding(depViewOid, tab); + } + } + systable_endscan(rscan); + table_close(rewriteRel, AccessShareLock); + } + } + + systable_endscan(scan); + table_close(depRel, AccessShareLock); +} + /* * Cleanup after we've finished all the ALTER TYPE operations for a * particular relation. We have to drop and recreate all the indexes @@ -12886,9 +13094,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 @@ -12904,7 +13115,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)); @@ -12921,7 +13131,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); @@ -12938,12 +13147,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, @@ -12957,6 +13166,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); @@ -12973,6 +13190,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); @@ -13014,17 +13245,62 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode) lappend(tab->subcmds[AT_PASS_OLD_CONSTR], cmd); } + /* + * Add views to the drop list. We must drop them here and recreate them + * later (via afterStmts), because CREATE OR REPLACE VIEW refuses to + * change a view's output column types. All dependent views (including + * transitively dependent ones) were already collected in changedViewOids + * by RememberViewForRebuilding, so DROP_RESTRICT is still safe. + */ + foreach(oid_item, tab->changedViewOids) + { + Oid viewOid = lfirst_oid(oid_item); + + ObjectAddressSet(obj, RelationRelationId, viewOid); + add_exact_object_address(&obj, objects); + } + /* * It should be okay to use DROP_RESTRICT here, since nothing else should - * be depending on these objects. + * be depending on these objects. All transitive view dependencies have + * been collected in changedViewOids, so DROP_RESTRICT will not fail due + * to unrecorded dependents. */ performMultipleDeletions(objects, DROP_RESTRICT, PERFORM_DELETION_INTERNAL); free_object_addresses(objects); /* - * The objects will get recreated during subsequent passes over the work - * queue. + * Queue up CREATE OR REPLACE VIEW statements to recreate the dropped + * views. They will be executed (in order) at the end of Phase 3 via + * tab->afterStmts, after all the work-queue entries have run. + * + * The views are in changedViewOids/changedViewDefs in dependency order + * (base views first), so they will be recreated in the correct order. + */ + foreach(def_item, tab->changedViewDefs) + { + char *viewcmd = (char *) lfirst(def_item); + List *raw_parsetree_list; + ListCell *lc; + + /* + * Parse the saved CREATE OR REPLACE VIEW command. If the new column + * type is incompatible with the view's query (e.g., an operator is + * not available), this will fail and roll back the whole ALTER TABLE. + */ + raw_parsetree_list = raw_parser(viewcmd, RAW_PARSE_DEFAULT); + + foreach(lc, raw_parsetree_list) + { + tab->afterStmts = lappend(tab->afterStmts, + ((RawStmt *) lfirst(lc))->stmt); + } + } + + /* + * The constraint/index/statistics objects will get recreated during + * subsequent passes over the work queue. */ } @@ -13517,6 +13793,7 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lock /* ok to change owner */ break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: if (!recursing) { /* @@ -13666,6 +13943,7 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lock */ if (tuple_class->relkind != RELKIND_COMPOSITE_TYPE && tuple_class->relkind != RELKIND_INDEX && + tuple_class->relkind != RELKIND_GLOBAL_INDEX && tuple_class->relkind != RELKIND_PARTITIONED_INDEX && tuple_class->relkind != RELKIND_TOASTVALUE) changeDependencyOnOwner(RelationRelationId, relationOid, @@ -13990,6 +14268,7 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation, (void) view_reloptions(newOptions, true); break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: (void) index_reloptions(rel->rd_indam->amoptions, newOptions, true); break; @@ -14177,7 +14456,8 @@ ATExecSetTableSpace(Oid tableOid, Oid newTableSpace, LOCKMODE lockmode) newrnode.spcNode = newTableSpace; /* hand off to AM to actually create the new filenode and copy the data */ - if (rel->rd_rel->relkind == RELKIND_INDEX) + if (rel->rd_rel->relkind == RELKIND_INDEX || + rel->rd_rel->relkind == RELKIND_GLOBAL_INDEX) { index_copy_data(rel, newrnode); } @@ -14362,6 +14642,7 @@ AlterTableMoveAll(AlterTableMoveAllStmt *stmt) relForm->relkind != RELKIND_PARTITIONED_TABLE) || (stmt->objtype == OBJECT_INDEX && relForm->relkind != RELKIND_INDEX && + relForm->relkind != RELKIND_GLOBAL_INDEX && relForm->relkind != RELKIND_PARTITIONED_INDEX) || (stmt->objtype == OBJECT_MATVIEW && relForm->relkind != RELKIND_MATVIEW)) @@ -16856,6 +17137,7 @@ RangeVarCallbackForAlterRelation(const RangeVar *rv, Oid relid, Oid oldrelid, errmsg("\"%s\" is not a composite type", rv->relname))); if (reltype == OBJECT_INDEX && relkind != RELKIND_INDEX && + relkind != RELKIND_GLOBAL_INDEX && relkind != RELKIND_PARTITIONED_INDEX && !IsA(stmt, RenameStmt)) ereport(ERROR, @@ -16876,17 +17158,27 @@ RangeVarCallbackForAlterRelation(const RangeVar *rv, Oid relid, Oid oldrelid, * Don't allow ALTER TABLE .. SET SCHEMA on relations that can't be moved * to a different schema, such as indexes and TOAST tables. */ - if (IsA(stmt, AlterObjectSchemaStmt) && - relkind != RELKIND_RELATION && - relkind != RELKIND_VIEW && - relkind != RELKIND_MATVIEW && - relkind != RELKIND_SEQUENCE && - relkind != RELKIND_FOREIGN_TABLE && - relkind != RELKIND_PARTITIONED_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not a table, view, materialized view, sequence, or foreign table", - rv->relname))); + if (IsA(stmt, AlterObjectSchemaStmt)) + { + if (relkind == RELKIND_INDEX || relkind == RELKIND_GLOBAL_INDEX || relkind == RELKIND_PARTITIONED_INDEX) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change schema of index \"%s\"", + rv->relname), + errhint("Change the schema of the table instead."))); + else if (relkind == RELKIND_COMPOSITE_TYPE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change schema of composite type \"%s\"", + rv->relname), + errhint("Use ALTER TYPE instead."))); + else if (relkind == RELKIND_TOASTVALUE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change schema of TOAST table \"%s\"", + rv->relname), + errhint("Change the schema of the table instead."))); + } ReleaseSysCache(tuple); } @@ -17028,6 +17320,8 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu /* Expression */ Node *expr = pelem->expr; char partattname[16]; + Bitmapset *expr_attrs = NULL; + int i; Assert(expr != NULL); atttype = exprType(expr); @@ -17051,9 +17345,55 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu while (IsA(expr, CollateExpr)) expr = (Node *) ((CollateExpr *) expr)->arg; + /* + * Examine all the columns in the partition key expression. When + * the whole-row reference is present, examine all the columns of + * the partitioned table. + */ + pull_varattnos(expr, 1, &expr_attrs); + if (bms_is_member(0 - FirstLowInvalidHeapAttributeNumber, expr_attrs)) + { + expr_attrs = bms_add_range(expr_attrs, + 1 - FirstLowInvalidHeapAttributeNumber, + RelationGetNumberOfAttributes(rel) - FirstLowInvalidHeapAttributeNumber); + expr_attrs = bms_del_member(expr_attrs, 0 - FirstLowInvalidHeapAttributeNumber); + } + + i = -1; + while ((i = bms_next_member(expr_attrs, i)) >= 0) + { + AttrNumber attno = i + FirstLowInvalidHeapAttributeNumber; + + Assert(attno != 0); + + /* + * Cannot allow system column references, since that would + * make partition routing impossible: their values won't be + * known yet when we need to do that. + */ + if (attno < 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("partition key expressions cannot contain system column references"))); + + /* + * Generated columns cannot work: They are computed after + * BEFORE triggers, but partition routing is done before all + * triggers. + */ + if (TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated) + ereport(ERROR, + (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("cannot use generated column in partition key"), + errdetail("Column \"%s\" is a generated column.", + get_attname(RelationGetRelid(rel), attno, false)), + parser_errposition(pstate, pelem->location))); + } + if (IsA(expr, Var) && ((Var *) expr)->varattno > 0) { + /* * User wrote "(column)" or "(column COLLATE something)". * Treat it like simple attribute anyway. @@ -17062,9 +17402,6 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu } else { - Bitmapset *expr_attrs = NULL; - int i; - partattrs[attn] = 0; /* marks the column as expression */ *partexprs = lappend(*partexprs, expr); @@ -17074,41 +17411,6 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu * on the EXPR_KIND_ for partition expressions. */ - /* - * Cannot allow system column references, since that would - * make partition routing impossible: their values won't be - * known yet when we need to do that. - */ - pull_varattnos(expr, 1, &expr_attrs); - for (i = FirstLowInvalidHeapAttributeNumber; i < 0; i++) - { - if (bms_is_member(i - FirstLowInvalidHeapAttributeNumber, - expr_attrs)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("partition key expressions cannot contain system column references"))); - } - - /* - * Generated columns cannot work: They are computed after - * BEFORE triggers, but partition routing is done before all - * triggers. - */ - i = -1; - while ((i = bms_next_member(expr_attrs, i)) >= 0) - { - AttrNumber attno = i + FirstLowInvalidHeapAttributeNumber; - - if (attno > 0 && - TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated) - ereport(ERROR, - (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("cannot use generated column in partition key"), - errdetail("Column \"%s\" is a generated column.", - get_attname(RelationGetRelid(rel), attno, false)), - parser_errposition(pstate, pelem->location))); - } - /* * Preprocess the expression before checking for mutability. * This is essential for the reasons described in @@ -17724,6 +18026,7 @@ AttachPartitionEnsureIndexes(Relation rel, Relation attachrel) IndexInfo **attachInfos; int i; ListCell *cell; + ListCell *cell2; MemoryContext cxt; MemoryContext oldcxt; @@ -17866,15 +18169,185 @@ AttachPartitionEnsureIndexes(Relation rel, Relation attachrel) { IndexStmt *stmt; Oid constraintOid; + bool isGlobal = false; + isGlobal = HasGlobalChildIndex(idxRel); stmt = generateClonedIndexStmt(NULL, idxRel, attmap, &constraintOid); + + /* + * Perform cross partition uniqueness check if it is a global + * unique index + */ + if (isGlobal && idxRel->rd_index->indisunique) + { + PartitionDesc partdesc; + Relation hRel; + Relation iRel; + int j = 0; + int nparts; + Oid *part_oids; + + List *childIndexList = find_inheritance_children(idx, ShareLock); + + partdesc = RelationGetPartitionDesc(rel, true); + nparts = partdesc->nparts; + part_oids = palloc(sizeof(Oid) * nparts); + + memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts); + for (j = 0; j < nparts; j++) + { + Oid childRelid = part_oids[j]; + List *childidxs; + + if (childRelid == RelationGetRelid(attachrel)) + { + elog(DEBUG2, "skip the partition-to-be from building global spool: %d", childRelid); + continue; + } + hRel = table_open(childRelid, AccessShareLock); + + childidxs = RelationGetIndexList(hRel); + foreach(cell2, childidxs) + { + Oid cldidxid = lfirst_oid(cell2); + + /* + * only take a child index that is directly inherited + * to parent index oid + */ + if (list_member_oid(childIndexList, cldidxid)) + { + iRel = index_open(cldidxid, AccessShareLock); + elog(DEBUG2, "found a matching child index OID to build global spool %d", cldidxid); + + /* + * We need to construct a global spool structure + * in nbtsort.c in order to determine global + * uniqueness. Marking partitions now + */ + if (j == 0) + { + elog(DEBUG2, "mark as first partitioned to build global spool"); + stmt->globalIndexPart = -1; + } + else + stmt->globalIndexPart = 0; + + stmt->global_index = true; + stmt->nparts = nparts; + + PopulateGlobalSpool(iRel, hRel, stmt); + index_close(iRel, AccessShareLock); + break; + } + } + table_close(hRel, AccessShareLock); + } + elog(DEBUG2, "mark as the last partitioned to utilize global spool"); + stmt->globalIndexPart = 1; + } + else + { + elog(DEBUG2, "partitioned index %d is not a unique index, build it now...", + RelationGetRelid(idxRel)); + } + DefineIndex(RelationGetRelid(attachrel), stmt, InvalidOid, RelationGetRelid(idxRel), constraintOid, true, false, false, false, false); } + else + { + IndexStmt *stmt; + Oid constraintOid; + bool isGlobal = false; + + stmt = generateClonedIndexStmt(NULL, + idxRel, attmap, + &constraintOid); + isGlobal = HasGlobalChildIndex(idxRel); + if (isGlobal && idxRel->rd_index->indisunique) + { + PartitionDesc partdesc; + Relation hRel; + Relation iRel; + int j = 0; + int nparts; + Oid *part_oids; + + List *childIndexList = find_inheritance_children(idx, ShareLock); + + partdesc = RelationGetPartitionDesc(rel, true); + nparts = partdesc->nparts; + part_oids = palloc(sizeof(Oid) * nparts); + + memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts); + for (j = 0; j < nparts; j++) + { + Oid childRelid = part_oids[j]; + List *childidxs; + + hRel = table_open(childRelid, AccessShareLock); + + childidxs = RelationGetIndexList(hRel); + foreach(cell2, childidxs) + { + Oid cldidxid = lfirst_oid(cell2); + + /* + * only take a child index that is directly inherited + * to parent index oid + */ + if (list_member_oid(childIndexList, cldidxid)) + { + iRel = index_open(cldidxid, AccessShareLock); + elog(DEBUG2, "found a matching child index OID type %c to build global spool %d", + iRel->rd_rel->relkind, cldidxid); + + /* + * change partition-to-be's duplicate unique index + * relkind to RELKIND_GLOBAL_INDEX + */ + if (iRel->rd_rel->relkind != RELKIND_GLOBAL_INDEX) + { + elog(DEBUG2, "Update index relation %d to have relkind = RELKIND_GLOBAL_INDEX", + RelationGetRelid(iRel)); + ChangeRelKind(iRel, RELKIND_GLOBAL_INDEX); + } + + /* + * We need to construct a global spool structure + * in nbtsort.c in order to determine global + * uniqueness. Marking partitions now + */ + if (j == 0) + { + elog(DEBUG2, "mark as first partition to build global spool"); + stmt->globalIndexPart = -1; + } + else if (j == nparts - 1) + { + elog(DEBUG2, "mark as last partition to build global spool"); + stmt->globalIndexPart = 1; + } + else + stmt->globalIndexPart = 0; + + stmt->global_index = true; + stmt->nparts = nparts; + + PopulateGlobalSpool(iRel, hRel, stmt); + index_close(iRel, AccessShareLock); + break; + } + } + table_close(hRel, AccessShareLock); + } + } + } index_close(idxRel, AccessShareLock); } @@ -18065,13 +18538,14 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, Relation partRel; ObjectAddress address; Oid defaultPartOid; + PartitionDesc partdesc; /* * We must lock the default partition, because detaching this partition * will change its partition constraint. */ - defaultPartOid = - get_default_oid_from_partdesc(RelationGetPartitionDesc(rel, true)); + partdesc = RelationGetPartitionDesc(rel, true); + defaultPartOid = get_default_oid_from_partdesc(partdesc); if (OidIsValid(defaultPartOid)) { /* @@ -18138,10 +18612,13 @@ ATExecDetachPartition(List **wqueue, AlteredTableInfo *tab, Relation rel, char *partrelname; /* - * Add a new constraint to the partition being detached, which - * supplants the partition constraint (unless there is one already). + * For strategies other than hash, add a constraint to the partition + * being detached which supplants the partition constraint. For hash + * we cannot do that, because the constraint would reference the + * partitioned table OID, possibly causing problems later. */ - DetachAddConstraintIfNeeded(wqueue, partRel); + if (partdesc->boundinfo->strategy != PARTITION_STRATEGY_HASH) + DetachAddConstraintIfNeeded(wqueue, partRel); /* * We're almost done now; the only traces that remain are the @@ -18212,9 +18689,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 */ @@ -18398,6 +18883,15 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, if (OidIsValid(parentConstrOid) && OidIsValid(constrOid)) ConstraintSetParentConstraint(constrOid, InvalidOid, InvalidOid); + /* + * if it has any global index, make it a regular index relkind after + * detach + */ + if (idx->rd_rel->relkind == RELKIND_GLOBAL_INDEX) + { + elog(DEBUG2, "found a global index, transform it to RELKIND_INDEX at detach..."); + ChangeRelKind(idx, RELKIND_INDEX); + } index_close(idx, NoLock); } @@ -18651,6 +19145,7 @@ RangeVarCallbackForAttachIndex(const RangeVar *rv, Oid relOid, Oid oldRelOid, return; /* concurrently dropped, so nothing to do */ classform = (Form_pg_class) GETSTRUCT(tuple); if (classform->relkind != RELKIND_PARTITIONED_INDEX && + classform->relkind != RELKIND_GLOBAL_INDEX && classform->relkind != RELKIND_INDEX) ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), @@ -19083,3 +19578,31 @@ GetAttributeCompression(Oid atttypid, char *compression) return cmethod; } + +static bool +HasGlobalChildIndex(Relation idxRel) +{ + /* find out if current index contains child indexes that are global */ + List *childIndexOidList; + ListCell *cell; + bool isGlobal = false;; + + childIndexOidList = find_all_inheritors(RelationGetRelid(idxRel), + AccessExclusiveLock, NULL); + + foreach(cell, childIndexOidList) + { + Oid childIndexOid = lfirst_oid(cell); + Relation idxChildRel; + + idxChildRel = index_open(childIndexOid, AccessShareLock); + if (idxChildRel->rd_rel->relkind == RELKIND_GLOBAL_INDEX) + { + isGlobal = true; + index_close(idxChildRel, NoLock); + break; + } + index_close(idxChildRel, NoLock); + } + return isGlobal; +} diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 28aa58cc122..232db9222e0 100755 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -2132,6 +2132,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; } @@ -2390,6 +2392,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, @@ -2630,6 +2641,15 @@ ExecARDeleteTriggers(EState *estate, ResultRelInfo *relinfo, { 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)) { @@ -2954,6 +2974,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 || diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index d870ecb2bc7..6322d2c53b8 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -35,6 +35,7 @@ #include "catalog/pg_database.h" #include "catalog/pg_inherits.h" #include "catalog/pg_namespace.h" +#include "commands/async.h" #include "commands/cluster.h" #include "commands/defrem.h" #include "commands/vacuum.h" @@ -473,7 +474,14 @@ vacuum(List *relations, VacuumParams *params, if (params->options & VACOPT_VACUUM) { - if (!vacuum_rel(vrel->oid, vrel->relation, params)) + VacuumParams params_copy; + + /* + * vacuum_rel() scribbles on the parameters, so give it a copy + * to avoid affecting other relations. + */ + memcpy(¶ms_copy, params, sizeof(VacuumParams)); + if (!vacuum_rel(vrel->oid, vrel->relation, ¶ms_copy)) continue; } @@ -496,6 +504,8 @@ vacuum(List *relations, VacuumParams *params, if (use_own_xacts) { PopActiveSnapshot(); + /* standard_ProcessUtility() does CCI if !use_own_xacts */ + CommandCounterIncrement(); CommitTransactionCommand(); } else @@ -1779,6 +1789,12 @@ vac_truncate_clog(TransactionId frozenXID, return; } + /* + * Freeze any old transaction IDs in the async notification queue before + * CLOG truncation. + */ + AsyncNotifyFreezeXids(frozenXID); + /* * Advance the oldest value for commit timestamps before truncating, so * that if a user requests a timestamp for a transaction we're truncating @@ -1837,9 +1853,16 @@ 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, params, sizeof(VacuumParams)); + /* Begin a transaction for vacuuming this relation */ StartTransactionCommand(); @@ -2090,7 +2113,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params) * totally unimportant for toast relations. */ if (toast_relid != InvalidOid) - vacuum_rel(toast_relid, NULL, params); + vacuum_rel(toast_relid, NULL, &toast_vacuum_params); /* * Now release the session-level lock on the main table. diff --git a/src/backend/executor/execGrouping.c b/src/backend/executor/execGrouping.c index 01f6d2001e1..55f78204403 100644 --- a/src/backend/executor/execGrouping.c +++ b/src/backend/executor/execGrouping.c @@ -149,6 +149,12 @@ execTuplesHashPrepare(int numCols, * * Note that keyColIdx, eqfunctions, and hashfunctions must be allocated in * storage that will live as long as the hashtable does. + * + * LookupTupleHashEntry, FindTupleHashEntry, and related functions may leak + * memory in the tempcxt. It is caller's responsibility to reset that context + * reasonably often, typically once per tuple. (We do it that way, rather + * than managing an extra context within the hashtable, because in many cases + * the caller can specify a tempcxt that it needs to reset per-tuple anyway.) */ TupleHashTable BuildTupleHashTableExt(PlanState *parent, diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 19e9035ed5e..1db0cb86f86 100755 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -91,7 +91,6 @@ static void ExecutePlan(QueryDesc *queryDesc, uint64 numberTuples, ScanDirection direction, DestReceiver *dest); -static bool ExecCheckRTEPerms(RangeTblEntry *rte); static bool ExecCheckRTEPermsModified(Oid relOid, Oid userid, Bitmapset *modifiedCols, AclMode requiredPerms); @@ -594,7 +593,7 @@ ExecCheckRTPerms(List *rangeTable, bool ereport_on_violation) * ExecCheckRTEPerms * Check access permissions for a single RTE. */ -static bool +bool ExecCheckRTEPerms(RangeTblEntry *rte) { AclMode requiredPerms; @@ -984,11 +983,15 @@ InitPlan(QueryDesc *queryDesc, int eflags) * Generally the parser and/or planner should have noticed any such mistake * already, but let's make sure. * + * For INSERT ON CONFLICT, the result relation is required to support the + * onConflictAction, regardless of whether a conflict actually occurs. + * * Note: when changing this function, you probably also need to look at * CheckValidRowMarkRel. */ void -CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) +CheckValidResultRelNew(ResultRelInfo *resultRelInfo, CmdType operation, + OnConflictAction onConflictAction) { Relation resultRel = resultRelInfo->ri_RelationDesc; TriggerDesc *trigDesc = resultRel->trigdesc; @@ -1003,6 +1006,13 @@ CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) case RELKIND_RELATION: case RELKIND_PARTITIONED_TABLE: CheckCmdReplicaIdentity(resultRel, operation); + + /* + * For INSERT ON CONFLICT DO UPDATE, additionally check that the + * target relation supports UPDATE. + */ + if (onConflictAction == ONCONFLICT_UPDATE) + CheckCmdReplicaIdentity(resultRel, CMD_UPDATE); break; case RELKIND_SEQUENCE: ereport(ERROR, @@ -1121,6 +1131,16 @@ CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) } } +/* + * ABI-compatible wrapper to emulate old version of the above function. + * Do not call this version in new code. + */ +void +CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) +{ + CheckValidResultRelNew(resultRelInfo, operation, ONCONFLICT_NONE); +} + /* * Check that a proposed rowmark target relation is a legal target * diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 422d4d92f39..96054a27e5f 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -354,8 +354,11 @@ ExecFindPartition(ModifyTableState *mtstate, true, false); if (rri) { + ModifyTable *node = (ModifyTable *) mtstate->ps.plan; + /* Verify this ResultRelInfo allows INSERTs */ - CheckValidResultRel(rri, CMD_INSERT); + CheckValidResultRelNew(rri, CMD_INSERT, + node ? node->onConflictAction : ONCONFLICT_NONE); /* * Initialize information needed to insert this and @@ -521,7 +524,8 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, * partition-key becomes a DELETE+INSERT operation, so this check is still * required when the operation is CMD_UPDATE. */ - CheckValidResultRel(leaf_part_rri, CMD_INSERT); + CheckValidResultRelNew(leaf_part_rri, CMD_INSERT, + node ? node->onConflictAction : ONCONFLICT_NONE); /* * Open partition indices. The user may have asked to check for conflicts diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index be48153f458..3dce91aa57b 100755 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -29,6 +29,7 @@ #include "storage/bufmgr.h" #include "storage/lmgr.h" #include "utils/builtins.h" +#include "replication/logicalrelation.h" #include "utils/datum.h" #include "utils/lsyscache.h" #include "utils/memutils.h" @@ -175,7 +176,7 @@ RelationFindReplTupleByIndex(Relation rel, Oid idxoid, PushActiveSnapshot(GetLatestSnapshot()); - res = table_tuple_lock(rel, &(outslot->tts_tid), GetLatestSnapshot(), + res = table_tuple_lock(rel, &(outslot->tts_tid), GetActiveSnapshot(), outslot, GetCurrentCommandId(false), lockmode, @@ -359,7 +360,7 @@ RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode, PushActiveSnapshot(GetLatestSnapshot()); - res = table_tuple_lock(rel, &(outslot->tts_tid), GetLatestSnapshot(), + res = table_tuple_lock(rel, &(outslot->tts_tid), GetActiveSnapshot(), outslot, GetCurrentCommandId(false), lockmode, @@ -594,8 +595,8 @@ CheckCmdReplicaIdentity(Relation rel, CmdType cmd) return; /* If relation has replica identity we are always good. */ - if (rel->rd_rel->relreplident == REPLICA_IDENTITY_FULL || - OidIsValid(RelationGetReplicaIndex(rel))) + if (OidIsValid(RelationGetReplicaIndex(rel)) || + logicalrep_identity_is_full(rel)) return; /* diff --git a/src/backend/executor/execScan.c b/src/backend/executor/execScan.c index dc835dee0ec..c7e632c7e9d 100644 --- a/src/backend/executor/execScan.c +++ b/src/backend/executor/execScan.c @@ -55,16 +55,24 @@ ExecScanFetch(ScanState *node, { /* * This is a ForeignScan or CustomScan which has pushed down a - * join to the remote side. The recheck method is responsible not - * only for rechecking the scan/join quals but also for storing - * the correct tuple in the slot. + * join to the remote side. If it is a descendant node in the EPQ + * recheck plan tree, run the recheck method function. Otherwise, + * run the access method function below. */ + if (bms_is_member(epqstate->epqParam, node->ps.plan->extParam)) + { + /* + * The recheck method is responsible not only for rechecking + * the scan/join quals but also for storing the correct tuple + * in the slot. + */ - TupleTableSlot *slot = node->ss_ScanTupleSlot; + TupleTableSlot *slot = node->ss_ScanTupleSlot; - if (!(*recheckMtd) (node, slot)) - ExecClearTuple(slot); /* would not be returned by scan */ - return slot; + if (!(*recheckMtd) (node, slot)) + ExecClearTuple(slot); /* would not be returned by scan */ + return slot; + } } else if (epqstate->relsubs_done[scanrelid - 1]) { @@ -324,7 +332,7 @@ ExecScanReScan(ScanState *node) /* * If an FDW or custom scan provider has replaced the join with a - * scan, there are multiple RTIs; reset the epqScanDone flag for + * scan, there are multiple RTIs; reset the relsubs_done flag for * all of them. */ if (IsA(node->ps.plan, ForeignScan)) diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index 241b3aaa146..e48a547e237 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -1020,7 +1020,7 @@ ExecAppendAsyncRequest(AppendState *node, TupleTableSlot **result) static void ExecAppendAsyncEventWait(AppendState *node) { - int nevents = node->as_nasyncplans + 1; + int nevents = node->as_nasyncplans + 2; long timeout = node->as_syncdone ? -1 : 0; WaitEvent occurred_event[EVENT_BUFFER_SIZE]; int noccurred; @@ -1047,13 +1047,28 @@ ExecAppendAsyncEventWait(AppendState *node) } /* - * If there are no configured events other than the postmaster death - * event, we don't need to wait or poll. + * No need for further processing if none of the subplans configured + * any events. */ if (GetNumRegisteredWaitEvents(node->as_eventset) == 1) noccurred = 0; else { + /* + * Add the process latch to the set, so that we wake up to process + * the standard interrupts with CHECK_FOR_INTERRUPTS(). + * + * NOTE: For historical reasons, it's important that this is added + * to the WaitEventSet after the ExecAsyncConfigureWait() calls. + * Namely, postgres_fdw calls "GetNumRegisteredWaitEvents(set) == + * 1" to check if any other events are in the set. That's a poor + * design, it's questionable for postgres_fdw to be doing that in + * the first place, but we cannot change it now. The pattern has + * possibly been copied to other extensions too. + */ + AddWaitEventToSet(node->as_eventset, WL_LATCH_SET, PGINVALID_SOCKET, + MyLatch, NULL); + /* Return at most EVENT_BUFFER_SIZE events in one call. */ if (nevents > EVENT_BUFFER_SIZE) nevents = EVENT_BUFFER_SIZE; @@ -1102,6 +1117,13 @@ ExecAppendAsyncEventWait(AppendState *node) ExecAsyncNotify(areq); } } + + /* Handle standard interrupts */ + if ((w->events & WL_LATCH_SET) != 0) + { + ResetLatch(MyLatch); + CHECK_FOR_INTERRUPTS(); + } } } diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c index 67d712e0600..0296ec9167b 100644 --- a/src/backend/executor/nodeBitmapHeapscan.c +++ b/src/backend/executor/nodeBitmapHeapscan.c @@ -742,6 +742,20 @@ ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags) scanstate->shared_prefetch_iterator = NULL; scanstate->pstate = NULL; + /* + * Unfortunately it turns out that the below optimization does not + * take the removal of TIDs by a concurrent vacuum into + * account. The concurrent vacuum can remove dead TIDs and make + * pages ALL_VISIBLE while those dead TIDs are referenced in the + * bitmap. This would lead to a !need_tuples scan returning too + * many tuples. + * + * In the back-branches, we therefore simply disable the + * optimization. Removing all the relevant code would be too + * invasive (and a major backpatching pain). + */ + scanstate->can_skip_fetch = false; +#ifdef NOT_ANYMORE /* * 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 @@ -751,6 +765,7 @@ ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags) */ scanstate->can_skip_fetch = (node->scan.plan.qual == NIL && node->scan.plan.targetlist == NIL); +#endif /* * Miscellaneous initialization diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 4e4dd72b778..2a748786e62 100755 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -153,33 +153,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, @@ -2543,14 +2563,6 @@ ExecOnConflictUpdate(ModifyTableContext *context, (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), errmsg("could not serialize access due to concurrent update"))); - /* - * As long as we don't support an UPDATE of INSERT ON CONFLICT for - * a partitioned table we shouldn't reach to a case where tuple to - * be lock is moved to another partition due to concurrent update - * of the partition key. - */ - Assert(!ItemPointerIndicatesMovedPartitions(&tmfd.ctid)); - /* * Tell caller to try again from the very start. * @@ -2568,7 +2580,6 @@ ExecOnConflictUpdate(ModifyTableContext *context, errmsg("could not serialize access due to concurrent delete"))); /* see TM_Updated case */ - Assert(!ItemPointerIndicatesMovedPartitions(&tmfd.ctid)); ExecClearTuple(existing); return false; @@ -3724,8 +3735,12 @@ ExecModifyTable(PlanState *pstate) relkind == RELKIND_MATVIEW || relkind == RELKIND_PARTITIONED_TABLE) { - /* ri_RowIdAttNo refers to a ctid attribute */ - Assert(AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)); + /* + * ri_RowIdAttNo refers to a ctid attribute. See the comment + * in ExecInitModifyTable(). + */ + Assert(AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo) || + relkind == RELKIND_PARTITIONED_TABLE); datum = ExecGetJunkAttribute(slot, resultRelInfo->ri_RowIdAttNo, &isNull); @@ -4066,7 +4081,8 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) /* * Verify result relation is a valid target for the current operation */ - CheckValidResultRel(resultRelInfo, operation); + CheckValidResultRelNew(resultRelInfo, operation, + node->onConflictAction); resultRelInfo++; i++; @@ -4116,7 +4132,16 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) { resultRelInfo->ri_RowIdAttNo = ExecFindJunkAttributeInTlist(subplan->targetlist, "ctid"); - if (!AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) + + /* + * For heap relations, a ctid junk attribute must be present. + * Partitioned tables should only appear here when all leaf + * partitions were pruned, in which case no rows can be + * produced and ctid is not needed. + */ + if (relkind == RELKIND_PARTITIONED_TABLE) + Assert(nrels == 1); + else if (!AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo)) elog(ERROR, "could not find junk ctid column"); } else if (relkind == RELKIND_FOREIGN_TABLE) diff --git a/src/backend/executor/nodeSubplan.c b/src/backend/executor/nodeSubplan.c index 45f8ef518f8..68cfa254845 100644 --- a/src/backend/executor/nodeSubplan.c +++ b/src/backend/executor/nodeSubplan.c @@ -102,6 +102,7 @@ ExecHashSubPlan(SubPlanState *node, ExprContext *econtext, bool *isNull) { + bool result = false; SubPlan *subplan = node->subplan; PlanState *planstate = node->planstate; TupleTableSlot *slot; @@ -132,14 +133,6 @@ ExecHashSubPlan(SubPlanState *node, node->projLeft->pi_exprContext = econtext; slot = ExecProject(node->projLeft); - /* - * Note: because we are typically called in a per-tuple context, we have - * to explicitly clear the projected tuple before returning. Otherwise, - * we'll have a double-free situation: the per-tuple context will probably - * be reset before we're called again, and then the tuple slot will think - * it still needs to free the tuple. - */ - /* * If the LHS is all non-null, probe for an exact match in the main hash * table. If we find one, the result is TRUE. Otherwise, scan the @@ -161,19 +154,10 @@ ExecHashSubPlan(SubPlanState *node, slot, node->cur_eq_comp, node->lhs_hash_funcs) != NULL) - { - ExecClearTuple(slot); - return BoolGetDatum(true); - } - if (node->havenullrows && - findPartialMatch(node->hashnulls, slot, node->cur_eq_funcs)) - { - ExecClearTuple(slot); + result = true; + else if (node->havenullrows && + findPartialMatch(node->hashnulls, slot, node->cur_eq_funcs)) *isNull = true; - return BoolGetDatum(false); - } - ExecClearTuple(slot); - return BoolGetDatum(false); } /* @@ -186,34 +170,31 @@ ExecHashSubPlan(SubPlanState *node, * aren't provably unequal to the LHS; if so, the result is UNKNOWN. * Otherwise, the result is FALSE. */ - if (node->hashnulls == NULL) - { - ExecClearTuple(slot); - return BoolGetDatum(false); - } - if (slotAllNulls(slot)) - { - ExecClearTuple(slot); + else if (node->hashnulls == NULL) + /* just return FALSE */ ; + else if (slotAllNulls(slot)) *isNull = true; - return BoolGetDatum(false); - } /* Scan partly-null table first, since more likely to get a match */ - if (node->havenullrows && - findPartialMatch(node->hashnulls, slot, node->cur_eq_funcs)) - { - ExecClearTuple(slot); + else if (node->havenullrows && + findPartialMatch(node->hashnulls, slot, node->cur_eq_funcs)) *isNull = true; - return BoolGetDatum(false); - } - if (node->havehashrows && - findPartialMatch(node->hashtable, slot, node->cur_eq_funcs)) - { - ExecClearTuple(slot); + else if (node->havehashrows && + findPartialMatch(node->hashtable, slot, node->cur_eq_funcs)) *isNull = true; - return BoolGetDatum(false); - } + + /* + * Note: because we are typically called in a per-tuple context, we have + * to explicitly clear the projected tuple before returning. Otherwise, + * we'll have a double-free situation: the per-tuple context will probably + * be reset before we're called again, and then the tuple slot will think + * it still needs to free the tuple. + */ ExecClearTuple(slot); - return BoolGetDatum(false); + + /* Also must reset the hashtempcxt after each hashtable lookup. */ + MemoryContextReset(node->hashtempcxt); + + return BoolGetDatum(result); } /* @@ -643,6 +624,9 @@ buildSubPlanHash(SubPlanState *node, ExprContext *econtext) * during ExecProject. */ ResetExprContext(innerecontext); + + /* Also must reset the hashtempcxt after each hashtable lookup. */ + MemoryContextReset(node->hashtempcxt); } /* diff --git a/src/backend/executor/nodeTidrangescan.c b/src/backend/executor/nodeTidrangescan.c index 2b0d205d7dd..f75c33a099a 100644 --- a/src/backend/executor/nodeTidrangescan.c +++ b/src/backend/executor/nodeTidrangescan.c @@ -268,6 +268,16 @@ TidRangeNext(TidRangeScanState *node) static bool TidRangeRecheck(TidRangeScanState *node, TupleTableSlot *slot) { + if (!TidRangeEval(node)) + return false; + + Assert(ItemPointerIsValid(&slot->tts_tid)); + + /* Recheck the ctid is still within range */ + if (ItemPointerCompare(&slot->tts_tid, &node->trss_mintid) < 0 || + ItemPointerCompare(&slot->tts_tid, &node->trss_maxtid) > 0) + return false; + return true; } diff --git a/src/backend/executor/nodeTidscan.c b/src/backend/executor/nodeTidscan.c index 48c3737da2e..3165bc3298c 100644 --- a/src/backend/executor/nodeTidscan.c +++ b/src/backend/executor/nodeTidscan.c @@ -400,12 +400,23 @@ TidNext(TidScanState *node) static bool TidRecheck(TidScanState *node, TupleTableSlot *slot) { + ItemPointer match; + + /* WHERE CURRENT OF always intends to resolve to the latest tuple */ + if (node->tss_isCurrentOf) + return true; + + if (node->tss_TidList == NULL) + TidListEval(node); + /* - * XXX shouldn't we check here to make sure tuple matches TID list? In - * runtime-key case this is not certain, is it? However, in the WHERE - * CURRENT OF case it might not match anyway ... + * Binary search the TidList to see if this ctid is mentioned and return + * true if it is. */ - return true; + match = (ItemPointer) bsearch(&slot->tts_tid, node->tss_TidList, + node->tss_NumTids, sizeof(ItemPointerData), + itemptr_comparator); + return match != NULL; } diff --git a/src/backend/jit/llvm/Makefile b/src/backend/jit/llvm/Makefile index 607d16754f5..1c3022b6274 100644 --- a/src/backend/jit/llvm/Makefile +++ b/src/backend/jit/llvm/Makefile @@ -22,8 +22,10 @@ endif PGFILEDESC = "llvmjit - JIT using LLVM" NAME = llvmjit -# LLVM 14 produces deprecation warnings. We'll need to make some changes -# before the relevant functions are removed, but for now silence the warnings. +# Some functions called in LLVM 14 and LLVM 15 are marked with GCC deprecation +# attributes. For LLVM 16 and later, we use the newer replacement functions +# instead, but warnings are suppressed unconditionally. (Note that this is +# only done in branches before REL_18_STABLE.) ifeq ($(GCC), yes) LLVM_CFLAGS += -Wno-deprecated-declarations endif @@ -31,7 +33,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/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index 824d4b270fe..c0d48aac13d 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -719,7 +719,11 @@ llvm_optimize_module(LLVMJitContext *context, LLVMModuleRef module) if (context->base.flags & PGJIT_OPT3) passes = "default"; + else if (context->base.flags & PGJIT_INLINE) + /* if doing inlining, but no expensive optimization, add inline pass */ + passes = "default,mem2reg,inline"; else + /* default includes always-inline pass */ passes = "default,mem2reg"; options = LLVMCreatePassBuilderOptions(); @@ -1339,7 +1343,8 @@ llvm_create_object_layer(void *Ctx, LLVMOrcExecutionSessionRef ES, const char *T { LLVMJITEventListenerRef l = LLVMCreatePerfJITEventListener(); - LLVMOrcRTDyldObjectLinkingLayerRegisterJITEventListener(objlayer, l); + if (l) + LLVMOrcRTDyldObjectLinkingLayerRegisterJITEventListener(objlayer, l); } #endif diff --git a/src/backend/jit/llvm/llvmjit_deform.c b/src/backend/jit/llvm/llvmjit_deform.c index 1014ea7a224..12c806e38c3 100644 --- a/src/backend/jit/llvm/llvmjit_deform.c +++ b/src/backend/jit/llvm/llvmjit_deform.c @@ -679,7 +679,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, v_tmp_loaddata = LLVMBuildPointerCast(b, v_attdatap, vartypep, ""); v_tmp_loaddata = l_load(b, vartype, v_tmp_loaddata, "attr_byval"); - v_tmp_loaddata = LLVMBuildZExt(b, v_tmp_loaddata, TypeSizeT, ""); + v_tmp_loaddata = LLVMBuildSExt(b, v_tmp_loaddata, TypeSizeT, ""); LLVMBuildStore(b, v_tmp_loaddata, v_resultp); } diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 025bdee10c1..8cf2e830efa 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -612,8 +612,8 @@ llvm_compile_expr(ExprState *state) LLVMBuildStore(b, l_sbool_const(1), v_resnullp); /* create blocks for checking args, one for each */ - b_checkargnulls = - palloc(sizeof(LLVMBasicBlockRef *) * op->d.func.nargs); + b_checkargnulls = (LLVMBasicBlockRef *) + palloc(sizeof(LLVMBasicBlockRef) * op->d.func.nargs); for (int argno = 0; argno < op->d.func.nargs; argno++) b_checkargnulls[argno] = l_bb_before_v(b_nonull, "b.%d.isnull.%d", opno, @@ -2065,7 +2065,7 @@ llvm_compile_expr(ExprState *state) v_nullsp = l_ptr_const(nulls, l_ptr(TypeStorageBool)); /* create blocks for checking args */ - b_checknulls = palloc(sizeof(LLVMBasicBlockRef *) * nargs); + b_checknulls = palloc(sizeof(LLVMBasicBlockRef) * nargs); for (int argno = 0; argno < nargs; argno++) { b_checknulls[argno] = diff --git a/src/backend/jit/llvm/llvmjit_inline.cpp b/src/backend/jit/llvm/llvmjit_inline.cpp index c2728c9c432..af6b510d8b5 100644 --- a/src/backend/jit/llvm/llvmjit_inline.cpp +++ b/src/backend/jit/llvm/llvmjit_inline.cpp @@ -243,7 +243,11 @@ llvm_build_inline_plan(LLVMContextRef lc, llvm::Module *mod) llvm_split_symbol_name(symbolName.data(), &cmodname, &cfuncname); +#if LLVM_VERSION_MAJOR >= 21 + funcGUID = llvm::GlobalValue::getGUIDAssumingExternalLinkage(cfuncname); +#else funcGUID = llvm::GlobalValue::getGUID(cfuncname); +#endif /* already processed */ if (inlineState.processed) diff --git a/src/backend/jit/llvm/llvmjit_wrap.cpp b/src/backend/jit/llvm/llvmjit_wrap.cpp index 0a52fdbea20..ddae8965474 100644 --- a/src/backend/jit/llvm/llvmjit_wrap.cpp +++ b/src/backend/jit/llvm/llvmjit_wrap.cpp @@ -118,7 +118,14 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(llvm::orc::ObjectLayer, LLVMOrcObjectLayerRef LLVMOrcObjectLayerRef LLVMOrcCreateRTDyldObjectLinkingLayerWithSafeSectionMemoryManager(LLVMOrcExecutionSessionRef ES) { +#if LLVM_VERSION_MAJOR >= 21 + return wrap(new llvm::orc::RTDyldObjectLinkingLayer( + *unwrap(ES), [](const llvm::MemoryBuffer&) { + return std::make_unique(nullptr, true); + })); +#else return wrap(new llvm::orc::RTDyldObjectLinkingLayer( *unwrap(ES), [] { return std::make_unique(nullptr, true); })); +#endif } #endif diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 70f2e2c0dab..a7b91053dfd 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -97,8 +97,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 = { @@ -2081,7 +2089,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 1c0d7f4a31a..56b1f28e426 100644 --- a/src/backend/libpq/be-secure-gssapi.c +++ b/src/backend/libpq/be-secure-gssapi.c @@ -45,11 +45,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, @@ -113,9 +120,9 @@ be_gssapi_write(Port *port, 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) @@ -209,12 +216,12 @@ be_gssapi_write(Port *port, 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; } @@ -345,12 +352,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; } @@ -510,10 +517,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), @@ -560,16 +570,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; } @@ -616,12 +626,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; } @@ -676,12 +686,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/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 131977b76f4..f9ced7fa8a2 100755 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -3724,6 +3724,7 @@ _copyIndexStmt(const IndexStmt *from) COPY_SCALAR_FIELD(concurrent); COPY_SCALAR_FIELD(if_not_exists); COPY_SCALAR_FIELD(reset_default_tblspc); + COPY_SCALAR_FIELD(global_index); return newnode; } diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c index f6f7923cc7c..66e261f85ec 100644 --- a/src/backend/nodes/makefuncs.c +++ b/src/backend/nodes/makefuncs.c @@ -157,6 +157,53 @@ makeWholeRowVar(RangeTblEntry *rte, varlevelsup); break; + case RTE_SUBQUERY: + + /* + * For a standard subquery, the Var should be of RECORD type. + * However, if we're looking at a subquery that was expanded from + * a view or SRF (only possible during planning), we must use the + * appropriate rowtype, so that the resulting Var has the same + * type that we would have produced from the original RTE. + */ + if (OidIsValid(rte->relid)) + { + /* Subquery was expanded from a view */ + toid = get_rel_type_id(rte->relid); + if (!OidIsValid(toid)) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("relation \"%s\" does not have a composite type", + get_rel_name(rte->relid)))); + } + else if (rte->functions) + { + /* + * Subquery was expanded from a set-returning function. That + * would not have happened if there's more than one function + * or ordinality was requested. We also needn't worry about + * the allowScalar case, since the planner doesn't use that. + * Otherwise this must match the RTE_FUNCTION code below. + */ + Assert(!allowScalar); + fexpr = ((RangeTblFunction *) linitial(rte->functions))->funcexpr; + toid = exprType(fexpr); + if (!type_is_rowtype(toid)) + toid = RECORDOID; + } + else + { + /* Normal subquery-in-FROM */ + toid = RECORDOID; + } + result = makeVar(varno, + InvalidAttrNumber, + toid, + -1, + InvalidOid, + varlevelsup); + break; + case RTE_FUNCTION: /* @@ -213,8 +260,8 @@ makeWholeRowVar(RangeTblEntry *rte, default: /* - * RTE is a join, subselect, tablefunc, or VALUES. We represent - * this as a whole-row Var of RECORD type. (Note that in most + * RTE is a join, tablefunc, VALUES, CTE, etc. We represent these + * cases as a whole-row Var of RECORD type. (Note that in most * cases the Var will be expanded to a RowExpr during planning, * but that is not our concern here.) */ diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 3bb17a86db2..3a74addae5d 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -4104,10 +4104,24 @@ cost_subplan(PlannerInfo *root, SubPlan *subplan, Plan *plan) { QualCost sp_cost; - /* Figure any cost for evaluating the testexpr */ + /* + * Figure any cost for evaluating the testexpr. + * + * Usually, SubPlan nodes are built very early, before we have constructed + * any RelOptInfos for the parent query level, which means the parent root + * does not yet contain enough information to safely consult statistics. + * Therefore, we pass root as NULL here. cost_qual_eval() is already + * well-equipped to handle a NULL root. + * + * One exception is SubPlan nodes built for the initplans of MIN/MAX + * aggregates from indexes (cf. SS_make_initplan_from_plan). In this + * case, having a NULL root is safe because testexpr will be NULL. + * Besides, an initplan will by definition not consult anything from the + * parent plan. + */ cost_qual_eval(&sp_cost, make_ands_implicit((Expr *) subplan->testexpr), - root); + NULL); if (subplan->useHashTable) { diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 6108b652bcc..6c69315ba17 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -3429,6 +3429,16 @@ check_index_predicates(PlannerInfo *root, RelOptInfo *rel) if (is_target_rel) continue; + /* + * If index is !amoptionalkey, also leave indrestrictinfo as set + * above. Otherwise we risk removing all quals for the first index + * key and then not being able to generate an indexscan at all. It + * would be better to be more selective, but we've not yet identified + * which if any of the quals match the first index key. + */ + if (!index->amoptionalkey) + continue; + /* Else compute indrestrictinfo as the non-implied quals */ index->indrestrictinfo = NIL; foreach(lcr, rel->baserestrictinfo) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 73a2bbb9282..4bfd72a8de4 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -6938,6 +6938,8 @@ make_modifytable(PlannerInfo *root, Plan *subplan, List *mergeActionLists, int epqParam) { ModifyTable *node = makeNode(ModifyTable); + bool transition_tables = false; + bool transition_tables_valid = false; List *fdw_private_list; Bitmapset *direct_modify_plans; ListCell *lc; @@ -7063,7 +7065,7 @@ 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. + * OPTIONs from parent views, transition tables on the named relation. */ direct_modify = false; if (fdwroutine != NULL && @@ -7074,7 +7076,19 @@ make_modifytable(PlannerInfo *root, Plan *subplan, withCheckOptionLists == NIL && !has_row_triggers(root, rti, operation) && !has_stored_generated_columns(root, rti)) - direct_modify = fdwroutine->PlanDirectModify(root, node, rti, i); + { + /* transition_tables is the same for all result relations */ + 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/planner.c b/src/backend/optimizer/plan/planner.c index 91d06ccae35..aebb8810a30 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -60,6 +60,7 @@ #include "partitioning/partdesc.h" #include "rewrite/rewriteManip.h" #include "storage/dsm_impl.h" +#include "utils/acl.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/selfuncs.h" @@ -763,6 +764,35 @@ subquery_planner(PlannerGlobal *glob, Query *parse, 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->relkind == RELKIND_VIEW) + { + bool result; + + result = ExecCheckRTEPerms(rte); + if (!result) + aclcheck_error(ACLCHECK_NO_PRIV, OBJECT_VIEW, + get_rel_name(rte->relid)); + } + } + /* * Preprocess RowMark information. We need to do this after subquery * pullup, so that all base relations are present. diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 6771bb2e773..56f7369d13b 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -503,6 +503,15 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte) newrte->colcollations = NIL; newrte->securityQuals = NIL; + /* + * Also, if it's a subquery RTE, lose the relid that may have been kept to + * signal that it had been a view. We don't want that to escape the + * planner, mainly because doing so breaks -DWRITE_READ_PARSE_PLAN_TREES + * testing thanks to outfuncs/readfuncs not preserving it. + */ + if (newrte->rtekind == RTE_SUBQUERY) + newrte->relid = InvalidOid; + glob->finalrtable = lappend(glob->finalrtable, newrte); /* diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 5d075ce6705..bd44e59df41 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -744,8 +744,14 @@ preprocess_function_rtes(PlannerInfo *root) rte->rtekind = RTE_SUBQUERY; rte->subquery = funcquery; rte->security_barrier = false; - /* Clear fields that should not be set in a subquery RTE */ - rte->functions = NIL; + + /* + * Clear fields that should not be set in a subquery RTE. + * However, we leave rte->functions filled in for the moment, + * in case makeWholeRowVar needs to consult it. We'll clear + * it in setrefs.c (see add_rte_to_flat_rtable) so that this + * abuse of the data structure doesn't escape the planner. + */ rte->funcordinality = false; } } diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index c22ea5fa13f..8ccb2796df1 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, @@ -371,9 +372,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 @@ -383,21 +383,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, @@ -408,6 +404,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/util/clauses.c b/src/backend/optimizer/util/clauses.c index ceb48c4cb95..faac33bd20e 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -2240,7 +2240,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; } } diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 742282b6672..ac3b39a5b5e 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -634,6 +634,11 @@ get_relation_foreign_keys(PlannerInfo *root, RelOptInfo *rel, * the purposes of inference. If no opclass (or collation) is specified, then * all matching indexes (that may or may not match the default in terms of * each attribute opclass/collation) are used for inference. + * + * Note: during index CONCURRENTLY operations, different transactions may + * reference different sets of arbiter indexes. This can lead to false unique + * constraint violations that wouldn't occur during normal operations. For + * more information, see insert.sgml. */ List * infer_arbiter_indexes(PlannerInfo *root) @@ -1009,6 +1014,7 @@ estimate_rel_size(Relation rel, int32 *attr_widths, allvisfrac); break; + case RELKIND_GLOBAL_INDEX: case RELKIND_INDEX: /* @@ -2209,6 +2215,56 @@ 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; + default: + elog(ERROR, "unrecognized CmdType: %d", (int) event); + break; + } + + table_close(relation, NoLock); + return result; +} + /* * has_stored_generated_columns * diff --git a/src/backend/oracle_parser/ora_gram.y b/src/backend/oracle_parser/ora_gram.y index fadfcd50f44..62f24d98add 100755 --- a/src/backend/oracle_parser/ora_gram.y +++ b/src/backend/oracle_parser/ora_gram.y @@ -477,7 +477,7 @@ static void determineLanguage(List *options); %type unicode_normal_form %type opt_instead -%type opt_unique opt_concurrently opt_verbose opt_full +%type opt_unique opt_concurrently opt_verbose opt_full opt_global %type opt_freeze opt_analyze opt_default opt_recheck %type opt_binary copy_delimiter @@ -7492,7 +7492,7 @@ defacl_privilege_target: IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' - opt_include opt_reloptions OptTableSpace where_clause + opt_include opt_reloptions OptTableSpace where_clause opt_global { IndexStmt *n = makeNode(IndexStmt); n->unique = $2; @@ -7505,6 +7505,7 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name n->options = $13; n->tableSpace = $14; n->whereClause = $15; + n->global_index = $16; n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; @@ -7522,7 +7523,7 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name } | CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS name ON relation_expr access_method_clause '(' index_params ')' - opt_include opt_reloptions OptTableSpace where_clause + opt_include opt_reloptions OptTableSpace where_clause opt_global { IndexStmt *n = makeNode(IndexStmt); n->unique = $2; @@ -7535,6 +7536,7 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name n->options = $16; n->tableSpace = $17; n->whereClause = $18; + n->global_index = $19; n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; @@ -7557,6 +7559,11 @@ opt_unique: | /*EMPTY*/ { $$ = false; } ; +opt_global: + GLOBAL { $$ = true; } + | /*EMPTY*/ { $$ = false; } + ; + opt_concurrently: CONCURRENTLY { $$ = true; } | /*EMPTY*/ { $$ = false; } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 8578d4c74a1..a819734c0be 100755 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -2792,6 +2792,7 @@ transformPLAssignStmt(ParseState *pstate, PLAssignStmt *stmt) qry->sortClause, EXPR_KIND_GROUP_BY, false /* allow SQL92 rules */ ); + qry->groupDistinct = sstmt->groupDistinct; if (sstmt->distinctClause == NIL) { diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 20a0faf2cee..d4fc1fd4c89 100755 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -468,7 +468,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type unicode_normal_form %type opt_instead -%type opt_unique opt_concurrently opt_verbose opt_full +%type opt_unique opt_concurrently opt_verbose opt_full opt_global %type opt_freeze opt_analyze opt_default opt_recheck %type opt_binary copy_delimiter @@ -2428,7 +2428,7 @@ alter_table_cmd: n->def = (Node *) c; c->contype = CONSTR_FOREIGN; /* others not supported, yet */ c->conname = $3; - processCASbits($4, @4, "ALTER CONSTRAINT statement", + processCASbits($4, @4, "FOREIGN KEY", &c->deferrable, &c->initdeferred, NULL, NULL, yyscanner); @@ -7317,7 +7317,7 @@ defacl_privilege_target: IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' - opt_include opt_reloptions OptTableSpace where_clause + opt_include opt_reloptions OptTableSpace where_clause opt_global { IndexStmt *n = makeNode(IndexStmt); n->unique = $2; @@ -7330,6 +7330,7 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name n->options = $13; n->tableSpace = $14; n->whereClause = $15; + n->global_index = $16; n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; @@ -7347,7 +7348,7 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name } | CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS name ON relation_expr access_method_clause '(' index_params ')' - opt_include opt_reloptions OptTableSpace where_clause + opt_include opt_reloptions OptTableSpace where_clause opt_global { IndexStmt *n = makeNode(IndexStmt); n->unique = $2; @@ -7360,6 +7361,7 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name n->options = $16; n->tableSpace = $17; n->whereClause = $18; + n->global_index = $19; n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; @@ -7377,6 +7379,11 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name } ; +opt_global: + GLOBAL { $$ = true; } + | /*EMPTY*/ { $$ = false; } + ; + opt_unique: UNIQUE { $$ = true; } | /*EMPTY*/ { $$ = false; } diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index f52b5298c47..0aa99ecb68f 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -35,6 +35,8 @@ typedef struct ParseState *pstate; int min_varlevel; int min_agglevel; + int min_ctelevel; + RangeTblEntry *min_cte; int sublevels_up; } check_agg_arguments_context; @@ -54,7 +56,8 @@ typedef struct static int check_agg_arguments(ParseState *pstate, List *directargs, List *args, - Expr *filter); + Expr *filter, + int agglocation); static bool check_agg_arguments_walker(Node *node, check_agg_arguments_context *context); static void check_ungrouped_columns(Node *node, ParseState *pstate, Query *qry, @@ -332,7 +335,8 @@ check_agglevels_and_constraints(ParseState *pstate, Node *expr) min_varlevel = check_agg_arguments(pstate, directargs, args, - filter); + filter, + location); *p_levelsup = min_varlevel; @@ -633,7 +637,8 @@ static int check_agg_arguments(ParseState *pstate, List *directargs, List *args, - Expr *filter) + Expr *filter, + int agglocation) { int agglevel; check_agg_arguments_context context; @@ -641,6 +646,8 @@ check_agg_arguments(ParseState *pstate, context.pstate = pstate; context.min_varlevel = -1; /* signifies nothing found yet */ context.min_agglevel = -1; + context.min_ctelevel = -1; + context.min_cte = NULL; context.sublevels_up = 0; (void) check_agg_arguments_walker((Node *) args, &context); @@ -678,6 +685,20 @@ check_agg_arguments(ParseState *pstate, parser_errposition(pstate, aggloc))); } + /* + * If there's a non-local CTE that's below the aggregate's semantic level, + * complain. It's not quite clear what we should do to fix up such a case + * (treating the CTE reference like a Var seems wrong), and it's also + * unclear whether there is a real-world use for such cases. + */ + if (context.min_ctelevel >= 0 && context.min_ctelevel < agglevel) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("outer-level aggregate cannot use a nested CTE"), + errdetail("CTE \"%s\" is below the aggregate's semantic level.", + context.min_cte->eref->aliasname), + parser_errposition(pstate, agglocation))); + /* * Now check for vars/aggs in the direct arguments, and throw error if * needed. Note that we allow a Var of the agg's semantic level, but not @@ -691,6 +712,7 @@ check_agg_arguments(ParseState *pstate, { context.min_varlevel = -1; context.min_agglevel = -1; + context.min_ctelevel = -1; (void) check_agg_arguments_walker((Node *) directargs, &context); if (context.min_varlevel >= 0 && context.min_varlevel < agglevel) ereport(ERROR, @@ -706,6 +728,13 @@ check_agg_arguments(ParseState *pstate, parser_errposition(pstate, locate_agg_of_level((Node *) directargs, context.min_agglevel)))); + if (context.min_ctelevel >= 0 && context.min_ctelevel < agglevel) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("outer-level aggregate cannot use a nested CTE"), + errdetail("CTE \"%s\" is below the aggregate's semantic level.", + context.min_cte->eref->aliasname), + parser_errposition(pstate, agglocation))); } return agglevel; } @@ -783,6 +812,30 @@ check_agg_arguments_walker(Node *node, parser_errposition(context->pstate, ((WindowFunc *) node)->location))); } + + if (IsA(node, RangeTblEntry)) + { + RangeTblEntry *rte = (RangeTblEntry *) node; + + if (rte->rtekind == RTE_CTE) + { + int ctelevelsup = rte->ctelevelsup; + + /* convert levelsup to frame of reference of original query */ + ctelevelsup -= context->sublevels_up; + /* ignore local CTEs of subqueries */ + if (ctelevelsup >= 0) + { + if (context->min_ctelevel < 0 || + context->min_ctelevel > ctelevelsup) + { + context->min_ctelevel = ctelevelsup; + context->min_cte = rte; + } + } + } + return false; /* allow range_table_walker to continue */ + } if (IsA(node, Query)) { /* Recurse into subselects */ @@ -792,7 +845,7 @@ check_agg_arguments_walker(Node *node, result = query_tree_walker((Query *) node, check_agg_arguments_walker, (void *) context, - 0); + QTW_EXAMINE_RTES_BEFORE); context->sublevels_up--; return result; } diff --git a/src/backend/parser/parse_cte.c b/src/backend/parser/parse_cte.c index 595f762f22b..7e25816710e 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 */ @@ -724,58 +725,56 @@ 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, - (void *) 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, - (void *) 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, WithClause)) { /* * Prevent raw_expression_tree_walker from recursing directly into a @@ -789,6 +788,60 @@ makeDependencyGraphWalker(Node *node, CteState *cstate) (void *) 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, + (void *) 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, + (void *) 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 b5e24b549f3..3932d32e52e 100755 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -2486,10 +2486,18 @@ transformArrayExpr(ParseState *pstate, A_ArrayExpr *a, /* * Check for sub-array expressions, if we haven't already found - * one. + * one. Note we don't accept domain-over-array as a sub-array, + * nor int2vector nor oidvector; those have constraints that don't + * map well to being treated as a sub-array. */ - if (!newa->multidims && type_is_array(exprType(newe))) - newa->multidims = true; + if (!newa->multidims) + { + Oid newetype = exprType(newe); + + if (newetype != INT2VECTOROID && newetype != OIDVECTOROID && + type_is_array(newetype)) + newa->multidims = true; + } } newelems = lappend(newelems, newe); diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 8ea9e0d5766..7727db22043 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -4016,6 +4016,7 @@ transformPartitionCmd(CreateStmtContext *cxt, PartitionCmd *cmd) RelationGetRelationName(parentRel)))); break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: /* the index must be partitioned */ ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), @@ -4200,13 +4201,14 @@ transformPartitionRangeBounds(ParseState *pstate, List *blist, int i, j; - i = j = 0; + j = 0; foreach(lc, blist) { Node *expr = lfirst(lc); PartitionRangeDatum *prd = NULL; - + i = foreach_current_index(lc); + /* * Infinite range bounds -- "minvalue" and "maxvalue" -- get passed in * as ColumnRefs or ColumnRefOrFuncCalls. @@ -4291,7 +4293,6 @@ transformPartitionRangeBounds(ParseState *pstate, List *blist, prd = makeNode(PartitionRangeDatum); prd->kind = PARTITION_RANGE_DATUM_VALUE; prd->value = (Node *) value; - ++i; } prd->location = exprLocation(expr); diff --git a/src/backend/po/de.po b/src/backend/po/de.po index 1f9206ea139..3d66025eb53 100644 --- a/src/backend/po/de.po +++ b/src/backend/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-05 14:30+0000\n" -"PO-Revision-Date: 2022-11-03 23:31+0100\n" +"POT-Creation-Date: 2026-02-18 15:13+0000\n" +"PO-Revision-Date: 2025-08-25 21:56+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" "Language: de\n" @@ -25,24 +25,24 @@ msgid "not recorded" msgstr "nicht aufgezeichnet" #: ../common/controldata_utils.c:78 ../common/controldata_utils.c:83 -#: commands/copyfrom.c:1526 commands/extension.c:3482 utils/adt/genfile.c:128 +#: commands/copyfrom.c:1526 commands/extension.c:3612 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m" #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1329 access/transam/xlog.c:3576 -#: access/transam/xlog.c:4817 access/transam/xlog.c:11662 -#: access/transam/xlog.c:11675 access/transam/xlog.c:12130 -#: access/transam/xlog.c:12210 access/transam/xlog.c:12247 -#: access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 -#: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 +#: access/transam/twophase.c:1329 access/transam/xlog.c:3594 +#: access/transam/xlog.c:4843 access/transam/xlog.c:11771 +#: access/transam/xlog.c:11784 access/transam/xlog.c:12239 +#: access/transam/xlog.c:12319 access/transam/xlog.c:12356 +#: access/transam/xlog.c:12416 access/transam/xlogfuncs.c:703 +#: access/transam/xlogfuncs.c:722 commands/extension.c:3622 libpq/hba.c:534 #: replication/basebackup.c:2016 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 -#: replication/logical/snapbuild.c:1872 replication/logical/snapbuild.c:1914 -#: replication/logical/snapbuild.c:1941 replication/slot.c:1727 -#: replication/slot.c:1768 replication/walsender.c:545 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 +#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1961 +#: replication/logical/snapbuild.c:1988 replication/slot.c:1794 +#: replication/slot.c:1835 replication/walsender.c:559 #: storage/file/buffile.c:445 storage/file/copydir.c:195 #: utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format @@ -50,11 +50,11 @@ msgid "could not read file \"%s\": %m" msgstr "konnte Datei »%s« nicht lesen: %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3581 access/transam/xlog.c:4822 +#: access/transam/xlog.c:3599 access/transam/xlog.c:4848 #: replication/basebackup.c:2020 replication/logical/origin.c:734 -#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 -#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 -#: replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 +#: replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 +#: replication/slot.c:1798 replication/slot.c:1839 replication/walsender.c:564 #: utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -66,16 +66,16 @@ msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:512 access/transam/twophase.c:1341 #: access/transam/twophase.c:1753 access/transam/xlog.c:3445 -#: access/transam/xlog.c:3616 access/transam/xlog.c:3621 -#: access/transam/xlog.c:3946 access/transam/xlog.c:4787 -#: access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 +#: access/transam/xlog.c:3634 access/transam/xlog.c:3639 +#: access/transam/xlog.c:3958 access/transam/xlog.c:4813 +#: access/transam/xlog.c:5741 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 -#: replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 -#: replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 -#: storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 +#: replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 +#: replication/slot.c:1683 replication/slot.c:1846 replication/walsender.c:574 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:735 +#: storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 #: utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" @@ -104,20 +104,20 @@ msgstr "" #: ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 -#: access/transam/xlog.c:3331 access/transam/xlog.c:3487 -#: access/transam/xlog.c:3531 access/transam/xlog.c:3726 -#: access/transam/xlog.c:3811 access/transam/xlog.c:3914 -#: access/transam/xlog.c:4807 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3332 access/transam/xlog.c:3511 +#: access/transam/xlog.c:3549 access/transam/xlog.c:3737 +#: access/transam/xlog.c:3823 access/transam/xlog.c:3926 +#: access/transam/xlog.c:4833 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3612 -#: replication/logical/reorderbuffer.c:4163 -#: replication/logical/reorderbuffer.c:4939 -#: replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1699 replication/walsender.c:518 -#: replication/walsender.c:2563 storage/file/copydir.c:161 -#: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 -#: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 +#: replication/logical/reorderbuffer.c:3743 +#: replication/logical/reorderbuffer.c:4294 +#: replication/logical/reorderbuffer.c:5070 +#: replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 +#: replication/slot.c:1766 replication/walsender.c:532 +#: replication/walsender.c:2581 storage/file/copydir.c:161 +#: storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 +#: storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 #: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 #: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 @@ -127,9 +127,9 @@ msgstr "konnte Datei »%s« nicht öffnen: %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 #: access/transam/twophase.c:1726 access/transam/twophase.c:1735 -#: access/transam/xlog.c:11419 access/transam/xlog.c:11457 -#: access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 +#: access/transam/xlog.c:11528 access/transam/xlog.c:11566 +#: access/transam/xlog.c:11979 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5688 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" @@ -140,11 +140,11 @@ msgstr "konnte Datei »%s« nicht schreiben: %m" #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 #: access/transam/timeline.c:506 access/transam/twophase.c:1747 -#: access/transam/xlog.c:3438 access/transam/xlog.c:3610 -#: access/transam/xlog.c:4780 access/transam/xlog.c:10902 -#: access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 -#: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: access/transam/xlog.c:3438 access/transam/xlog.c:3628 +#: access/transam/xlog.c:4806 access/transam/xlog.c:11011 +#: access/transam/xlog.c:11052 replication/logical/snapbuild.c:1821 +#: replication/slot.c:1667 replication/slot.c:1776 storage/file/fd.c:727 +#: storage/file/fd.c:3623 storage/smgr/md.c:959 storage/smgr/md.c:1000 #: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" @@ -153,32 +153,32 @@ msgstr "konnte Datei »%s« nicht fsyncen: %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 #: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 -#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 -#: lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2552 -#: postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 -#: postmaster/postmaster.c:5975 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6721 +#: lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 +#: libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 +#: postmaster/bgworker.c:349 postmaster/bgworker.c:948 +#: postmaster/postmaster.c:2554 postmaster/postmaster.c:4211 +#: postmaster/postmaster.c:5613 postmaster/postmaster.c:5977 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 -#: replication/logical/logical.c:206 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 -#: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 +#: replication/logical/logical.c:206 replication/walsender.c:606 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 +#: storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: tcop/postgres.c:3655 utils/adt/cryptohashfuncs.c:46 +#: tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 #: utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 #: utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 -#: utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 +#: utils/adt/pg_locale.c:451 utils/adt/pg_locale.c:615 utils/adt/regexp.c:223 #: utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 -#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5061 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:410 utils/mb/mbutils.c:438 +#: utils/mb/mbutils.c:823 utils/mb/mbutils.c:850 utils/misc/guc.c:5061 #: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 -#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 -#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 -#: utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:927 utils/mmgr/mcxt.c:965 +#: utils/mmgr/mcxt.c:1003 utils/mmgr/mcxt.c:1111 utils/mmgr/mcxt.c:1142 +#: utils/mmgr/mcxt.c:1178 utils/mmgr/mcxt.c:1230 utils/mmgr/mcxt.c:1265 +#: utils/mmgr/mcxt.c:1300 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "Speicher aufgebraucht" @@ -208,7 +208,7 @@ msgstr "konnte kein »%s« zum Ausführen finden" msgid "could not change directory to \"%s\": %m" msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m" -#: ../common/exec.c:299 access/transam/xlog.c:11293 +#: ../common/exec.c:299 access/transam/xlog.c:11402 #: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -224,8 +224,8 @@ msgstr "%s() fehlgeschlagen: %m" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 #: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 -#: ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 -#: utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../port/path.c:764 utils/misc/ps_status.c:210 utils/misc/ps_status.c:218 +#: utils/misc/ps_status.c:248 utils/misc/ps_status.c:256 #, c-format msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" @@ -237,15 +237,15 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" #: ../common/file_utils.c:86 ../common/file_utils.c:446 #: ../common/file_utils.c:450 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11395 access/transam/xlog.c:11433 -#: access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11504 access/transam/xlog.c:11542 +#: access/transam/xlog.c:11759 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 -#: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 +#: commands/copyto.c:730 commands/extension.c:3601 commands/tablespace.c:805 #: commands/tablespace.c:894 guc-file.l:1062 postmaster/pgarch.c:696 #: replication/basebackup.c:439 replication/basebackup.c:622 -#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 -#: storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1700 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 +#: storage/file/fd.c:1948 storage/file/fd.c:3148 storage/file/fd.c:3351 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 #: utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 #, c-format @@ -253,104 +253,104 @@ msgid "could not stat file \"%s\": %m" msgstr "konnte »stat« für Datei »%s« nicht ausführen: %m" #: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1520 -#: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 +#: commands/tablespace.c:739 postmaster/postmaster.c:1522 +#: storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" -#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht lesen: %m" #: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1793 -#: replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 -#: storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 +#: replication/slot.c:672 replication/slot.c:1550 replication/slot.c:1699 +#: storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht in »%s« umbenennen: %m" -#: ../common/jsonapi.c:1084 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Escape-Sequenz »\\%s« ist nicht gültig." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Zeichen mit Wert 0x%02x muss escapt werden." -#: ../common/jsonapi.c:1090 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Ende der Eingabe erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Array-Element oder »]« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "»,« oder »]« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1099 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "»:« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1102 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "JSON-Wert erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1105 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "Die Eingabezeichenkette endete unerwartet." -#: ../common/jsonapi.c:1107 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Zeichenkette oder »}« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1110 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "»,« oder »}« erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1113 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Zeichenkette erwartet, aber »%s« gefunden." -#: ../common/jsonapi.c:1116 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "Token »%s« ist ungültig." -#: ../common/jsonapi.c:1119 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kann nicht in »text« umgewandelt werden." -#: ../common/jsonapi.c:1121 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "Nach »\\u« müssen vier Hexadezimalziffern folgen." -#: ../common/jsonapi.c:1124 +#: ../common/jsonapi.c:1127 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:1126 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicode-High-Surrogate darf nicht auf ein High-Surrogate folgen." -#: ../common/jsonapi.c:1128 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:531 jsonpath_scan.l:541 #: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -386,7 +386,7 @@ msgstr "ungültiger Fork-Name" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Gültige Fork-Namen sind »main«, »fsm«, »vm« und »init«." -#: ../common/restricted_token.c:64 libpq/auth.c:1519 libpq/auth.c:2551 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "konnte Bibliothek »%s« nicht laden: Fehlercode %lu" @@ -458,7 +458,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "konnte effektive Benutzer-ID %ld nicht nachschlagen: %s" -#: ../common/username.c:45 libpq/auth.c:2051 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "Benutzer existiert nicht" @@ -581,7 +581,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "Aufforderung für BRIN-Range-Summarization für Index »%s« Seite %u wurde nicht aufgezeichnet" #: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11064 access/transam/xlog.c:11601 +#: access/transam/xlog.c:11173 access/transam/xlog.c:11710 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -616,8 +616,8 @@ msgstr "konnte Basistabelle von Index »%s« nicht öffnen" msgid "index \"%s\" is not valid" msgstr "Index »%s« ist nicht gültig" -#: access/brin/brin_bloom.c:753 access/brin/brin_bloom.c:795 -#: access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 +#: access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 #: statistics/dependencies.c:662 statistics/dependencies.c:715 #: statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 @@ -628,7 +628,7 @@ msgstr "kann keinen Wert vom Typ %s annehmen" #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 +#: access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 #: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" @@ -743,7 +743,7 @@ msgid "index row requires %zu bytes, maximum size is %zu" msgstr "Indexzeile benötigt %zu Bytes, Maximalgröße ist %zu" #: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 -#: tcop/postgres.c:1922 +#: tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "nicht unterstützter Formatcode: %d" @@ -766,57 +766,62 @@ msgstr "Wertebereich des Typs für benutzerdefinierte Relationsparameter übersc msgid "RESET must not include values for parameters" msgstr "RESET darf keinen Parameterwert enthalten" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "unbekannter Parameter-Namensraum »%s«" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "ungültiger Optionsname »%s«: darf nicht »=« enthalten" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12615 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "Tabellen mit WITH OIDS werden nicht unterstützt" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "unbekannter Parameter »%s«" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "Parameter »%s« mehrmals angegeben" -#: access/common/reloptions.c:1592 +#: access/common/reloptions.c:1601 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "ungültiger Wert für Boole’sche Option »%s«: »%s«" -#: access/common/reloptions.c:1604 +#: access/common/reloptions.c:1613 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "ungültiger Wert für ganzzahlige Option »%s«: »%s«" -#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "Wert %s ist außerhalb des gültigen Bereichs für Option »%s«" -#: access/common/reloptions.c:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Gültige Werte sind zwischen »%d« und »%d«." -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "ungültiger Wert für Gleitkommaoption »%s«: »%s«" -#: access/common/reloptions.c:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Gültige Werte sind zwischen »%f« und »%f«." -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "ungültiger Wert für Enum-Option »%s«: »%s«" @@ -831,7 +836,7 @@ msgstr "Komprimierungsmethode lz4 nicht unterstützt" msgid "This functionality requires the server to be built with lz4 support." msgstr "Diese Funktionalität verlangt, dass der Server mit lz4-Unterstützung gebaut wird." -#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1592 #: utils/adt/xml.c:234 #, c-format msgid "You need to rebuild PostgreSQL using %s." @@ -873,18 +878,18 @@ msgstr "auf temporäre Indexe anderer Sitzungen kann nicht zugegriffen werden" msgid "failed to re-find tuple within index \"%s\"" msgstr "konnte Tupel mit Index »%s« nicht erneut finden" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "alte GIN-Indexe unterstützen keine Scans des ganzen Index oder Suchen nach NULL-Werten" -#: access/gin/ginscan.c:432 +#: access/gin/ginscan.c:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Um das zu reparieren, führen Sie REINDEX INDEX \"%s\" aus." #: access/gin/ginutil.c:145 executor/execExpr.c:2177 -#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 +#: utils/adt/arrayfuncs.c:4034 utils/adt/arrayfuncs.c:6704 #: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" @@ -926,7 +931,7 @@ msgstr "Das kommt von einem unvollständigen Page-Split bei der Crash-Recovery v msgid "Please REINDEX it." msgstr "Bitte führen Sie REINDEX für den Index aus." -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "repariere unvollständiges Teilen in Index »%s«, Block %u" @@ -963,19 +968,19 @@ msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält nicht unterstüt msgid "operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s" msgstr "Operatorfamilie »%s« für Zugriffsmethode %s enthält ungültige ORDER-BY-Operatorfamilienangabe für Operator %s" -#: access/hash/hashfunc.c:278 access/hash/hashfunc.c:335 +#: access/hash/hashfunc.c:280 access/hash/hashfunc.c:337 #: utils/adt/varchar.c:993 utils/adt/varchar.c:1054 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "konnte die für das Zeichenketten-Hashing zu verwendende Sortierfolge nicht bestimmen" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 +#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:338 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17208 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1004 utils/adt/varchar.c:733 -#: utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1563 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge explizit zu setzen." @@ -1026,39 +1031,39 @@ msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlt Support-Funktion msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "in Operatorfamilie »%s« für Zugriffsmethode %s fehlen typübergreifende Operatoren" -#: access/heap/heapam.c:2299 +#: access/heap/heapam.c:2302 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "in einem parallelen Arbeitsprozess können keine Tupel eingefügt werden" -#: access/heap/heapam.c:2770 +#: access/heap/heapam.c:2773 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel gelöscht werden" -#: access/heap/heapam.c:2816 +#: access/heap/heapam.c:2819 #, c-format msgid "attempted to delete invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu löschen" -#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 +#: access/heap/heapam.c:3265 access/heap/heapam.c:6617 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "während einer parallelen Operation können keine Tupel aktualisiert werden" -#: access/heap/heapam.c:3449 +#: access/heap/heapam.c:3452 #, c-format msgid "attempted to update invisible tuple" msgstr "Versuch ein unsichtbares Tupel zu aktualisieren" -#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 -#: access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4941 access/heap/heapam.c:4979 +#: access/heap/heapam.c:5246 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "konnte Sperre für Zeile in Relation »%s« nicht setzen" -#: access/heap/heapam.c:6342 commands/trigger.c:3122 -#: executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6371 commands/trigger.c:3152 +#: executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "das zu aktualisierende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" @@ -1080,12 +1085,12 @@ msgstr "konnte nicht in Datei »%s« schreiben, %d von %d geschrieben: %m" #: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3545 -#: access/transam/xlog.c:4759 access/transam/xlog.c:11410 -#: access/transam/xlog.c:11448 access/transam/xlog.c:11853 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 -#: postmaster/postmaster.c:5673 replication/logical/origin.c:587 -#: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: access/transam/xlog.c:3354 access/transam/xlog.c:3563 +#: access/transam/xlog.c:4785 access/transam/xlog.c:11519 +#: access/transam/xlog.c:11557 access/transam/xlog.c:11962 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4636 +#: postmaster/postmaster.c:5675 replication/logical/origin.c:587 +#: replication/slot.c:1611 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -1098,11 +1103,11 @@ msgstr "konnte Datei »%s« nicht auf %u kürzen: %m" #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3426 access/transam/xlog.c:3601 -#: access/transam/xlog.c:4771 postmaster/postmaster.c:4644 -#: postmaster/postmaster.c:4654 replication/logical/origin.c:599 +#: access/transam/xlog.c:3426 access/transam/xlog.c:3619 +#: access/transam/xlog.c:4797 postmaster/postmaster.c:4646 +#: postmaster/postmaster.c:4656 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 -#: replication/logical/snapbuild.c:1750 replication/slot.c:1586 +#: replication/logical/snapbuild.c:1797 replication/slot.c:1647 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 #: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 @@ -1114,11 +1119,11 @@ msgstr "konnte nicht in Datei »%s« schreiben: %m" #: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4432 -#: replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2111 -#: replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 -#: storage/file/fd.c:3239 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: postmaster/postmaster.c:1098 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 +#: replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 +#: replication/slot.c:1750 storage/file/fd.c:785 storage/file/fd.c:3168 +#: storage/file/fd.c:3230 storage/file/reinit.c:250 storage/ipc/dsm.c:315 #: storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 #: utils/time/snapmgr.c:1606 #, c-format @@ -1245,8 +1250,8 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "%u eingefrorene Seite.\n" msgstr[1] "%u eingefrorene Seiten.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 -#: commands/indexcmds.c:4154 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 +#: commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s." @@ -1403,8 +1408,8 @@ msgid "cannot access index \"%s\" while it is being reindexed" msgstr "auf Index »%s« kann nicht zugegriffen werden, während er reindiziert wird" #: access/index/indexam.c:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16894 commands/tablecmds.c:18710 #, c-format msgid "\"%s\" is not an index" msgstr "»%s« ist kein Index" @@ -1450,17 +1455,17 @@ msgstr "Index »%s« enthält eine halbtote interne Seite" msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Die Ursache kann ein unterbrochenes VACUUM in Version 9.3 oder älter vor dem Upgrade sein. Bitte REINDEX durchführen." -#: access/nbtree/nbtutils.c:2680 +#: access/nbtree/nbtutils.c:2685 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "Größe %zu der Indexzeile überschreitet btree-Version %u Maximum %zu für Index »%s«" -#: access/nbtree/nbtutils.c:2686 +#: access/nbtree/nbtutils.c:2691 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Indexzeile verweist auf Tupel (%u,%u) in Relation »%s«." -#: access/nbtree/nbtutils.c:2690 +#: access/nbtree/nbtutils.c:2695 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1501,8 +1506,8 @@ msgid "\"%s\" is an index" msgstr "»%s« ist ein Index" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13560 -#: commands/tablecmds.c:16860 +#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 +#: commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "»%s« ist ein zusammengesetzter Typ" @@ -1557,13 +1562,13 @@ msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« auf dem Prim msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Stellen Sie sicher, dass der Konfigurationsparameter »%s« gesetzt ist." -#: access/transam/multixact.c:1022 +#: access/transam/multixact.c:1106 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "Datenbank nimmt keine Befehle an, die neue MultiXactIds erzeugen, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank »%s« zu vermeiden" -#: access/transam/multixact.c:1024 access/transam/multixact.c:1031 -#: access/transam/multixact.c:1055 access/transam/multixact.c:1064 +#: access/transam/multixact.c:1108 access/transam/multixact.c:1115 +#: access/transam/multixact.c:1139 access/transam/multixact.c:1148 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1572,65 +1577,70 @@ msgstr "" "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/multixact.c:1029 +#: access/transam/multixact.c:1113 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "Datenbank nimmt keine Befehle an, die neue MultiXactIds erzeugen, um Datenverlust wegen Transaktionsnummernüberlauf in Datenbank mit OID %u zu vermeiden" -#: access/transam/multixact.c:1050 access/transam/multixact.c:2334 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2421 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "Datenbank »%s« muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" msgstr[1] "Datenbank »%s« muss gevacuumt werden, bevor %u weitere MultiXactIds aufgebraucht sind" -#: access/transam/multixact.c:1059 access/transam/multixact.c:2343 +#: access/transam/multixact.c:1143 access/transam/multixact.c:2430 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactId aufgebraucht ist" msgstr[1] "Datenbank mit OID %u muss gevacuumt werden, bevor %u weitere MultiXactIds aufgebraucht sind" -#: access/transam/multixact.c:1120 +#: access/transam/multixact.c:1207 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "Grenzwert für Multixact-»Members« überschritten" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1208 #, c-format msgid "This command would create a multixact with %u members, but the remaining space is only enough for %u member." msgid_plural "This command would create a multixact with %u members, but the remaining space is only enough for %u members." msgstr[0] "Dieser Befehl würde eine Multixact mit %u Mitgliedern erzeugen, aber es ist nur genug Platz für %u Mitglied." msgstr[1] "Dieser Befehl würde eine Multixact mit %u Mitgliedern erzeugen, aber es ist nur genug Platz für %u Mitglieder." -#: access/transam/multixact.c:1126 +#: access/transam/multixact.c:1213 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Führen Sie ein datenbankweites VACUUM in der Datenbank mit OID %u aus, mit reduzierten Einstellungen für vacuum_multixact_freeze_min_age und vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1157 +#: access/transam/multixact.c:1244 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "Datenbank mit OID %u muss gevacuumt werden, bevor %d weiteres Multixact-Mitglied aufgebraucht ist" msgstr[1] "Datenbank mit OID %u muss gevacuumt werden, bevor %d weitere Multixact-Mitglieder aufgebraucht sind" -#: access/transam/multixact.c:1162 +#: access/transam/multixact.c:1249 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Führen Sie ein datenbankweites VACUUM in dieser Datenbank aus, mit reduzierten Einstellungen für vacuum_multixact_freeze_min_age und vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1301 +#: access/transam/multixact.c:1388 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u existiert nicht mehr -- anscheinender Überlauf" -#: access/transam/multixact.c:1307 +#: access/transam/multixact.c:1394 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u wurde noch nicht erzeugt -- anscheinender Überlauf" -#: access/transam/multixact.c:2339 access/transam/multixact.c:2348 +#: access/transam/multixact.c:1469 +#, c-format +msgid "MultiXact %u has invalid next offset" +msgstr "MultiXact %u hat ungültiges nächstes Offset" + +#: access/transam/multixact.c:2426 access/transam/multixact.c:2435 #: access/transam/varsup.c:151 access/transam/varsup.c:158 #: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format @@ -1641,61 +1651,66 @@ msgstr "" "Um ein Abschalten der Datenbank zu vermeiden, führen Sie ein komplettes VACUUM über diese Datenbank aus.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2709 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "MultiXact-Member-Wraparound-Schutz ist deaktiviert, weil die älteste gecheckpointete MultiXact %u nicht auf der Festplatte existiert" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2731 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "MultiXact-Member-Wraparound-Schutz ist jetzt aktiviert" -#: access/transam/multixact.c:3038 +#: access/transam/multixact.c:3125 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "älteste MultiXact %u nicht gefunden, älteste ist MultiXact %u, Truncate wird ausgelassen" -#: access/transam/multixact.c:3056 +#: access/transam/multixact.c:3143 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "kann nicht bis MultiXact %u trunkieren, weil sie nicht auf der Festplatte existiert, Trunkierung wird ausgelassen" -#: access/transam/multixact.c:3370 +#: access/transam/multixact.c:3160 +#, c-format +msgid "cannot truncate up to MultiXact %u because it has invalid offset, skipping truncation" +msgstr "kann nicht bis MultiXact %u trunkieren, weil es ein ungültiges Offset hat, Trunkierung wird ausgelassen" + +#: access/transam/multixact.c:3489 #, c-format msgid "invalid MultiXactId: %u" msgstr "ungültige MultiXactId: %u" -#: access/transam/parallel.c:737 access/transam/parallel.c:856 +#: access/transam/parallel.c:744 access/transam/parallel.c:863 #, c-format msgid "parallel worker failed to initialize" msgstr "Initialisierung von parallelem Arbeitsprozess fehlgeschlagen" -#: access/transam/parallel.c:738 access/transam/parallel.c:857 +#: access/transam/parallel.c:745 access/transam/parallel.c:864 #, c-format msgid "More details may be available in the server log." msgstr "Weitere Einzelheiten sind möglicherweise im Serverlog zu finden." -#: access/transam/parallel.c:918 +#: access/transam/parallel.c:925 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "Postmaster beendete während einer parallelen Transaktion" -#: access/transam/parallel.c:1105 +#: access/transam/parallel.c:1112 #, c-format msgid "lost connection to parallel worker" msgstr "Verbindung mit parallelem Arbeitsprozess verloren" -#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 +#: access/transam/parallel.c:1178 access/transam/parallel.c:1180 msgid "parallel worker" msgstr "paralleler Arbeitsprozess" -#: access/transam/parallel.c:1326 +#: access/transam/parallel.c:1333 #, c-format msgid "could not map dynamic shared memory segment" msgstr "konnte dynamisches Shared-Memory-Segment nicht mappen" -#: access/transam/parallel.c:1331 +#: access/transam/parallel.c:1338 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "ungültige magische Zahl in dynamischem Shared-Memory-Segment" @@ -1895,7 +1910,7 @@ msgstr "ungültige Größe in Datei »%s« gespeichert" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "berechnete CRC-Prüfsumme stimmt nicht mit dem Wert in Datei »%s« überein" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6722 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors." @@ -2012,563 +2027,558 @@ msgstr "Datenbank mit OID %u muss innerhalb von %u Transaktionen gevacuumt werde msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "kann nicht mehr als 2^32-2 Befehle in einer Transaktion ausführen" -#: access/transam/xact.c:1584 +#: access/transam/xact.c:1594 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "maximale Anzahl committeter Subtransaktionen (%d) überschritten" -#: access/transam/xact.c:2435 +#: access/transam/xact.c:2445 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die temporäre Objekte bearbeitet hat" -#: access/transam/xact.c:2445 +#: access/transam/xact.c:2455 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "PREPARE kann nicht für eine Transaktion ausgeführt werden, die Snapshots exportiert hat" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3416 +#: access/transam/xact.c:3426 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s kann nicht in einem Transaktionsblock laufen" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3426 +#: access/transam/xact.c:3436 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s kann nicht in einer Subtransaktion laufen" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3436 +#: access/transam/xact.c:3446 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s kann nicht innerhalb einer Pipeline ausgeführt werden" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3446 +#: access/transam/xact.c:3456 #, c-format msgid "%s cannot be executed from a function" msgstr "%s kann nicht aus einer Funktion ausgeführt werden" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3517 access/transam/xact.c:3832 -#: access/transam/xact.c:3911 access/transam/xact.c:4034 -#: access/transam/xact.c:4185 access/transam/xact.c:4254 -#: access/transam/xact.c:4365 +#: access/transam/xact.c:3527 access/transam/xact.c:3842 +#: access/transam/xact.c:3921 access/transam/xact.c:4044 +#: access/transam/xact.c:4195 access/transam/xact.c:4264 +#: access/transam/xact.c:4375 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s kann nur in Transaktionsblöcken verwendet werden" -#: access/transam/xact.c:3718 +#: access/transam/xact.c:3728 #, c-format msgid "there is already a transaction in progress" msgstr "eine Transaktion ist bereits begonnen" -#: access/transam/xact.c:3837 access/transam/xact.c:3916 -#: access/transam/xact.c:4039 +#: access/transam/xact.c:3847 access/transam/xact.c:3926 +#: access/transam/xact.c:4049 #, c-format msgid "there is no transaction in progress" msgstr "keine Transaktion offen" -#: access/transam/xact.c:3927 +#: access/transam/xact.c:3937 #, c-format msgid "cannot commit during a parallel operation" msgstr "während einer parallelen Operation kann nicht committet werden" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4060 #, c-format msgid "cannot abort during a parallel operation" msgstr "während einer parallelen Operation kann nicht abgebrochen werden" -#: access/transam/xact.c:4149 +#: access/transam/xact.c:4159 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "während einer parallelen Operation können keine Sicherungspunkte definiert werden" -#: access/transam/xact.c:4236 +#: access/transam/xact.c:4246 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "während einer parallelen Operation können keine Sicherungspunkte freigegeben werden" -#: access/transam/xact.c:4246 access/transam/xact.c:4297 -#: access/transam/xact.c:4357 access/transam/xact.c:4406 +#: access/transam/xact.c:4256 access/transam/xact.c:4307 +#: access/transam/xact.c:4367 access/transam/xact.c:4416 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "Sicherungspunkt »%s« existiert nicht" -#: access/transam/xact.c:4303 access/transam/xact.c:4412 +#: access/transam/xact.c:4313 access/transam/xact.c:4422 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "Sicherungspunkt »%s« existiert nicht innerhalb der aktuellen Sicherungspunktebene" -#: access/transam/xact.c:4345 +#: access/transam/xact.c:4355 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "während einer parallelen Operation kann nicht auf einen Sicherungspunkt zurückgerollt werden" -#: access/transam/xact.c:4473 +#: access/transam/xact.c:4483 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "während einer parallelen Operation können keine Subtransaktionen gestartet werden" -#: access/transam/xact.c:4541 +#: access/transam/xact.c:4551 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "während einer parallelen Operation können keine Subtransaktionen committet werden" -#: access/transam/xact.c:5188 +#: access/transam/xact.c:5198 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "kann nicht mehr als 2^32-1 Subtransaktionen in einer Transaktion haben" -#: access/transam/xlog.c:1839 +#: access/transam/xlog.c:1851 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "Flush hinter das Ende des erzeugten WAL angefordert; Anforderung %X/%X, aktuelle Position %X/%X" -#: access/transam/xlog.c:2612 +#: access/transam/xlog.c:2622 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "konnte nicht in Logdatei %s bei Position %u, Länge %zu schreiben: %m" -#: access/transam/xlog.c:3489 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "This is known to fail occasionally during archive recovery, where it is harmless." -msgstr "Es ist bekannt, dass dies gelegentlich während der Archivwiederherstellung fehlschlägt, ist da aber harmlos." - -#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 -#: replication/walsender.c:2557 +#: access/transam/xlog.c:4039 access/transam/xlogutils.c:798 +#: replication/walsender.c:2575 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "das angeforderte WAL-Segment %s wurde schon entfernt" -#: access/transam/xlog.c:4289 +#: access/transam/xlog.c:4315 #, c-format msgid "could not rename file \"%s\": %m" msgstr "konnte Datei »%s« nicht umbenennen: %m" -#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 +#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "benötigtes WAL-Verzeichnis »%s« existiert nicht" -#: access/transam/xlog.c:4347 +#: access/transam/xlog.c:4373 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "erzeuge fehlendes WAL-Verzeichnis »%s«" -#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4376 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "konnte fehlendes Verzeichnis »%s« nicht erzeugen: %m" -#: access/transam/xlog.c:4472 +#: access/transam/xlog.c:4498 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "unerwartete Zeitleisten-ID %u in Logsegment %s, Offset %u" -#: access/transam/xlog.c:4610 +#: access/transam/xlog.c:4636 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "neue Zeitleiste %u ist kein Kind der Datenbanksystemzeitleiste %u" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4650 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "neue Zeitleiste %u zweigte von der aktuellen Datenbanksystemzeitleiste %u vor dem aktuellen Wiederherstellungspunkt %X/%X ab" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4669 #, c-format msgid "new target timeline is %u" msgstr "neue Zielzeitleiste ist %u" -#: access/transam/xlog.c:4679 +#: access/transam/xlog.c:4705 #, c-format msgid "could not generate secret authorization token" msgstr "konnte geheimes Autorisierungstoken nicht erzeugen" -#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 -#: access/transam/xlog.c:4871 access/transam/xlog.c:4878 -#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4864 access/transam/xlog.c:4873 #: access/transam/xlog.c:4897 access/transam/xlog.c:4904 -#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 -#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 -#: access/transam/xlog.c:4941 access/transam/xlog.c:4948 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4916 +#: access/transam/xlog.c:4923 access/transam/xlog.c:4930 +#: access/transam/xlog.c:4937 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 access/transam/xlog.c:4958 +#: access/transam/xlog.c:4967 access/transam/xlog.c:4974 #: utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "Datenbankdateien sind inkompatibel mit Server" -#: access/transam/xlog.c:4839 +#: access/transam/xlog.c:4865 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION %d (0x%08x) initialisiert, aber der Server wurde mit PG_CONTROL_VERSION %d (0x%08x) kompiliert." -#: access/transam/xlog.c:4843 +#: access/transam/xlog.c:4869 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "Das Problem könnte eine falsche Byte-Reihenfolge sein. Es sieht so aus, dass Sie initdb ausführen müssen." -#: access/transam/xlog.c:4848 +#: access/transam/xlog.c:4874 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION %d initialisiert, aber der Server wurde mit PG_CONTROL_VERSION %d kompiliert." -#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 -#: access/transam/xlog.c:4882 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4913 #, c-format msgid "It looks like you need to initdb." msgstr "Es sieht so aus, dass Sie initdb ausführen müssen." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4888 #, c-format msgid "incorrect checksum in control file" msgstr "falsche Prüfsumme in Kontrolldatei" -#: access/transam/xlog.c:4872 +#: access/transam/xlog.c:4898 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "Der Datenbank-Cluster wurde mit CATALOG_VERSION_NO %d initialisiert, aber der Server wurde mit CATALOG_VERSION_NO %d kompiliert." -#: access/transam/xlog.c:4879 +#: access/transam/xlog.c:4905 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "Der Datenbank-Cluster wurde mit MAXALIGN %d initialisiert, aber der Server wurde mit MAXALIGN %d kompiliert." -#: access/transam/xlog.c:4886 +#: access/transam/xlog.c:4912 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Der Datenbank-Cluster verwendet anscheinend ein anderes Fließkommazahlenformat als das Serverprogramm." -#: access/transam/xlog.c:4891 +#: access/transam/xlog.c:4917 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "Der Datenbank-Cluster wurde mit BLCKSZ %d initialisiert, aber der Server wurde mit BLCKSZ %d kompiliert." -#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 -#: access/transam/xlog.c:4908 access/transam/xlog.c:4915 -#: access/transam/xlog.c:4922 access/transam/xlog.c:4929 -#: access/transam/xlog.c:4936 access/transam/xlog.c:4944 -#: access/transam/xlog.c:4951 +#: access/transam/xlog.c:4920 access/transam/xlog.c:4927 +#: access/transam/xlog.c:4934 access/transam/xlog.c:4941 +#: access/transam/xlog.c:4948 access/transam/xlog.c:4955 +#: access/transam/xlog.c:4962 access/transam/xlog.c:4970 +#: access/transam/xlog.c:4977 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Es sieht so aus, dass Sie neu kompilieren oder initdb ausführen müssen." -#: access/transam/xlog.c:4898 +#: access/transam/xlog.c:4924 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit RELSEG_SIZE %d initialisiert, aber der Server wurde mit RELSEGSIZE %d kompiliert." -#: access/transam/xlog.c:4905 +#: access/transam/xlog.c:4931 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "Der Datenbank-Cluster wurde mit XLOG_BLCKSZ %d initialisiert, aber der Server wurde mit XLOG_BLCKSZ %d kompiliert." -#: access/transam/xlog.c:4912 +#: access/transam/xlog.c:4938 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "Der Datenbank-Cluster wurde mit NAMEDATALEN %d initialisiert, aber der Server wurde mit NAMEDATALEN %d kompiliert." -#: access/transam/xlog.c:4919 +#: access/transam/xlog.c:4945 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "Der Datenbank-Cluster wurde mit INDEX_MAX_KEYS %d initialisiert, aber der Server wurde mit INDEX_MAX_KEYS %d kompiliert." -#: access/transam/xlog.c:4926 +#: access/transam/xlog.c:4952 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "Der Datenbank-Cluster wurde mit TOAST_MAX_CHUNK_SIZE %d initialisiert, aber der Server wurde mit TOAST_MAX_CHUNK_SIZE %d kompiliert." -#: access/transam/xlog.c:4933 +#: access/transam/xlog.c:4959 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "Der Datenbank-Cluster wurde mit LOBLKSIZE %d initialisiert, aber der Server wurde mit LOBLKSIZE %d kompiliert." -#: access/transam/xlog.c:4942 +#: access/transam/xlog.c:4968 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "Der Datenbank-Cluster wurde ohne USE_FLOAT8_BYVAL initialisiert, aber der Server wurde mit USE_FLOAT8_BYVAL kompiliert." -#: access/transam/xlog.c:4949 +#: access/transam/xlog.c:4975 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "Der Datenbank-Cluster wurde mit USE_FLOAT8_BYVAL initialisiert, aber der Server wurde ohne USE_FLOAT8_BYVAL kompiliert." -#: access/transam/xlog.c:4958 +#: access/transam/xlog.c:4984 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Byte an" msgstr[1] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber die Kontrolldatei gibt %d Bytes an" -#: access/transam/xlog.c:4970 +#: access/transam/xlog.c:4996 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "»min_wal_size« muss mindestens zweimal so groß wie »wal_segment_size« sein" -#: access/transam/xlog.c:4974 +#: access/transam/xlog.c:5000 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "»max_wal_size« muss mindestens zweimal so groß wie »wal_segment_size« sein" -#: access/transam/xlog.c:5408 +#: access/transam/xlog.c:5438 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht schreiben: %m" -#: access/transam/xlog.c:5416 +#: access/transam/xlog.c:5446 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht fsyncen: %m" -#: access/transam/xlog.c:5422 +#: access/transam/xlog.c:5452 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "konnte Bootstrap-Write-Ahead-Log-Datei nicht schließen: %m" -#: access/transam/xlog.c:5483 +#: access/transam/xlog.c:5513 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "Verwendung von Recovery-Befehlsdatei »%s« wird nicht unterstützt" -#: access/transam/xlog.c:5548 +#: access/transam/xlog.c:5578 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "Standby-Modus wird von Servern im Einzelbenutzermodus nicht unterstützt" -#: access/transam/xlog.c:5565 +#: access/transam/xlog.c:5595 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "weder primary_conninfo noch restore_command angegeben" -#: access/transam/xlog.c:5566 +#: access/transam/xlog.c:5596 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Der Datenbankserver prüft das Unterverzeichnis pg_wal regelmäßig auf dort abgelegte Dateien." -#: access/transam/xlog.c:5574 +#: access/transam/xlog.c:5604 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "restore_command muss angegeben werden, wenn der Standby-Modus nicht eingeschaltet ist" -#: access/transam/xlog.c:5612 +#: access/transam/xlog.c:5642 #, c-format msgid "recovery target timeline %u does not exist" msgstr "recovery_target_timeline %u existiert nicht" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5763 #, c-format msgid "archive recovery complete" msgstr "Wiederherstellung aus Archiv abgeschlossen" -#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 +#: access/transam/xlog.c:5829 access/transam/xlog.c:6105 #, c-format msgid "recovery stopping after reaching consistency" msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde" -#: access/transam/xlog.c:5821 +#: access/transam/xlog.c:5850 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet vor WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5940 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "Wiederherstellung beendet vor Commit der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5918 +#: access/transam/xlog.c:5947 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "Wiederherstellung beendet vor Abbruch der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:6000 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "Wiederherstellung beendet bei Restore-Punkt »%s«, Zeit %s" -#: access/transam/xlog.c:5989 +#: access/transam/xlog.c:6018 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "Wiederherstellung beendet nach WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:6056 +#: access/transam/xlog.c:6085 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "Wiederherstellung beendet nach Commit der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6093 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "Wiederherstellung beendet nach Abbruch der Transaktion %u, Zeit %s" -#: access/transam/xlog.c:6109 +#: access/transam/xlog.c:6138 #, c-format msgid "pausing at the end of recovery" msgstr "pausiere am Ende der Wiederherstellung" -#: access/transam/xlog.c:6110 +#: access/transam/xlog.c:6139 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Führen Sie pg_wal_replay_resume() aus, um den Server zum Primärserver zu befördern." -#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 +#: access/transam/xlog.c:6142 access/transam/xlog.c:6424 #, c-format msgid "recovery has paused" msgstr "Wiederherstellung wurde pausiert" -#: access/transam/xlog.c:6114 +#: access/transam/xlog.c:6143 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Führen Sie pg_wal_replay_resume() aus um fortzusetzen." -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6415 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "Hot Standby ist nicht möglich wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 -#: access/transam/xlog.c:6444 +#: access/transam/xlog.c:6416 access/transam/xlog.c:6443 +#: access/transam/xlog.c:6473 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "%s = %d ist eine niedrigere Einstellung als auf dem Primärserver, wo der Wert %d war." -#: access/transam/xlog.c:6396 +#: access/transam/xlog.c:6425 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Wenn die Wiederherstellungspause beendet wird, wird der Server herunterfahren." -#: access/transam/xlog.c:6397 +#: access/transam/xlog.c:6426 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Sie können den Server dann neu starten, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6408 +#: access/transam/xlog.c:6437 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "Beförderung ist nicht möglich wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6418 +#: access/transam/xlog.c:6447 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Starten Sie den Server neu, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6442 +#: access/transam/xlog.c:6471 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "Wiederherstellung abgebrochen wegen unzureichender Parametereinstellungen" -#: access/transam/xlog.c:6448 +#: access/transam/xlog.c:6477 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Sie können den Server neu starten, nachdem die nötigen Konfigurationsänderungen getätigt worden sind." -#: access/transam/xlog.c:6470 +#: access/transam/xlog.c:6499 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "WAL wurde mit wal_level=minimal erzeugt, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6500 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Das passiert, wenn auf dem Server vorübergehend wal_level=minimal gesetzt wurde." -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6501 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "Verwenden Sie ein Backup, das durchgeführt wurde, nachdem wal_level auf höher als minimal gesetzt wurde." -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6570 #, c-format msgid "control file contains invalid checkpoint location" msgstr "Kontrolldatei enthält ungültige Checkpoint-Position" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6581 #, c-format msgid "database system was shut down at %s" msgstr "Datenbanksystem wurde am %s heruntergefahren" -#: access/transam/xlog.c:6558 +#: access/transam/xlog.c:6587 #, c-format msgid "database system was shut down in recovery at %s" msgstr "Datenbanksystem wurde während der Wiederherstellung am %s heruntergefahren" -#: access/transam/xlog.c:6564 +#: access/transam/xlog.c:6593 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "Datenbanksystem wurde beim Herunterfahren unterbrochen; letzte bekannte Aktion am %s" -#: access/transam/xlog.c:6570 +#: access/transam/xlog.c:6599 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "Datenbanksystem wurde während der Wiederherstellung am %s unterbrochen" -#: access/transam/xlog.c:6572 +#: access/transam/xlog.c:6601 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "Das bedeutet wahrscheinlich, dass einige Daten verfälscht sind und Sie die letzte Datensicherung zur Wiederherstellung verwenden müssen." -#: access/transam/xlog.c:6578 +#: access/transam/xlog.c:6607 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "Datenbanksystem wurde während der Wiederherstellung bei Logzeit %s unterbrochen" -#: access/transam/xlog.c:6580 +#: access/transam/xlog.c:6609 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "Wenn dies mehr als einmal vorgekommen ist, dann sind einige Daten möglicherweise verfälscht und Sie müssen ein früheres Wiederherstellungsziel wählen." -#: access/transam/xlog.c:6586 +#: access/transam/xlog.c:6615 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "Datenbanksystem wurde unterbrochen; letzte bekannte Aktion am %s" -#: access/transam/xlog.c:6592 +#: access/transam/xlog.c:6621 #, c-format msgid "control file contains invalid database cluster state" msgstr "Kontrolldatei enthält ungültigen Datenbankclusterstatus" -#: access/transam/xlog.c:6649 +#: access/transam/xlog.c:6678 #, c-format msgid "entering standby mode" msgstr "Standby-Modus eingeschaltet" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6681 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "starte Point-in-Time-Recovery bis XID %u" -#: access/transam/xlog.c:6656 +#: access/transam/xlog.c:6685 #, c-format msgid "starting point-in-time recovery to %s" msgstr "starte Point-in-Time-Recovery bis %s" -#: access/transam/xlog.c:6660 +#: access/transam/xlog.c:6689 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "starte Point-in-Time-Recovery bis »%s«" -#: access/transam/xlog.c:6664 +#: access/transam/xlog.c:6693 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "starte Point-in-Time-Recovery bis WAL-Position (LSN) »%X/%X«" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6697 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "starte Point-in-Time-Recovery bis zum frühesten konsistenten Punkt" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6700 #, c-format msgid "starting archive recovery" msgstr "starte Wiederherstellung aus Archiv" -#: access/transam/xlog.c:6745 +#: access/transam/xlog.c:6774 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "konnte die vom Checkpoint-Datensatz referenzierte Redo-Position nicht finden" -#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 +#: access/transam/xlog.c:6775 access/transam/xlog.c:6785 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2579,300 +2589,305 @@ msgstr "" "Wenn Sie gerade kein Backup wiederherstellen, dann versuchen Sie, die Datei »%s/backup_label« zu entfernen.\n" "Vorsicht: Wenn ein Backup wiederhergestellt wird und »%s/backup_label« gelöscht wird, dann wird das den Cluster verfälschen." -#: access/transam/xlog.c:6755 +#: access/transam/xlog.c:6784 #, c-format msgid "could not locate required checkpoint record" msgstr "konnte den nötigen Checkpoint-Datensatz nicht finden" -#: access/transam/xlog.c:6784 commands/tablespace.c:665 +#: access/transam/xlog.c:6813 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "konnte symbolische Verknüpfung »%s« nicht erstellen: %m" -#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 +#: access/transam/xlog.c:6845 access/transam/xlog.c:6851 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignoriere Datei »%s«, weil keine Datei »%s« existiert" -#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 +#: access/transam/xlog.c:6847 access/transam/xlog.c:12495 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Datei »%s« wurde in »%s« umbenannt." -#: access/transam/xlog.c:6824 +#: access/transam/xlog.c:6853 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:6875 +#: access/transam/xlog.c:6904 #, c-format msgid "could not locate a valid checkpoint record" msgstr "konnte keinen gültigen Checkpoint-Datensatz finden" -#: access/transam/xlog.c:6913 +#: access/transam/xlog.c:6915 +#, c-format +msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X" +msgstr "konnte die Redo-Position %X/%08X, die vom Checkpoint-Datensatz bei %X/%08X referenziert wird, nicht finden" + +#: access/transam/xlog.c:6952 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "angeforderte Zeitleiste %u ist kein Kind der History dieses Servers" -#: access/transam/xlog.c:6915 +#: access/transam/xlog.c:6954 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Neuester Checkpoint ist bei %X/%X auf Zeitleiste %u, aber in der History der angeforderten Zeitleiste zweigte der Server von dieser Zeitleiste bei %X/%X ab." -#: access/transam/xlog.c:6929 +#: access/transam/xlog.c:6968 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "angeforderte Zeitleiste %u enthält nicht den minimalen Wiederherstellungspunkt %X/%X auf Zeitleiste %u" -#: access/transam/xlog.c:6959 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid next transaction ID" msgstr "ungültige nächste Transaktions-ID" -#: access/transam/xlog.c:7059 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo in checkpoint record" msgstr "ungültiges Redo im Checkpoint-Datensatz" -#: access/transam/xlog.c:7070 +#: access/transam/xlog.c:7109 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ungültiger Redo-Datensatz im Shutdown-Checkpoint" -#: access/transam/xlog.c:7110 +#: access/transam/xlog.c:7149 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "Datenbanksystem wurde nicht richtig heruntergefahren; automatische Wiederherstellung läuft" -#: access/transam/xlog.c:7114 +#: access/transam/xlog.c:7153 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "Wiederherstellung nach Absturz beginnt in Zeitleiste %u und hat Zielzeitleiste %u" -#: access/transam/xlog.c:7161 +#: access/transam/xlog.c:7200 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "Daten in backup_label stimmen nicht mit Kontrolldatei überein" -#: access/transam/xlog.c:7162 +#: access/transam/xlog.c:7201 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Das bedeutet, dass die Datensicherung verfälscht ist und Sie eine andere Datensicherung zur Wiederherstellung verwenden werden müssen." -#: access/transam/xlog.c:7389 +#: access/transam/xlog.c:7428 #, c-format msgid "redo starts at %X/%X" msgstr "Redo beginnt bei %X/%X" -#: access/transam/xlog.c:7614 +#: access/transam/xlog.c:7653 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "angeforderter Recovery-Endpunkt ist vor konsistentem Recovery-Punkt" -#: access/transam/xlog.c:7652 +#: access/transam/xlog.c:7691 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "Redo fertig bei %X/%X Systembenutzung: %s" -#: access/transam/xlog.c:7658 +#: access/transam/xlog.c:7697 #, c-format msgid "last completed transaction was at log time %s" msgstr "letzte vollständige Transaktion war bei Logzeit %s" -#: access/transam/xlog.c:7667 +#: access/transam/xlog.c:7706 #, c-format msgid "redo is not required" msgstr "Redo nicht nötig" -#: access/transam/xlog.c:7679 +#: access/transam/xlog.c:7718 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "Wiederherstellung endete bevor das konfigurierte Wiederherstellungsziel erreicht wurde" -#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 +#: access/transam/xlog.c:7802 access/transam/xlog.c:7806 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL endet vor dem Ende der Online-Sicherung" -#: access/transam/xlog.c:7764 +#: access/transam/xlog.c:7803 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Der komplette WAL, der während der Online-Sicherung erzeugt wurde, muss bei der Wiederherstellung verfügbar sein." -#: access/transam/xlog.c:7768 +#: access/transam/xlog.c:7807 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Die mit pg_start_backup() begonnene Online-Sicherung muss mit pg_stop_backup() beendet werden und der ganze WAL bis zu diesem Punkt muss bei der Wiederherstellung verfügbar sein." -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7810 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL endet vor einem konsistenten Wiederherstellungspunkt" -#: access/transam/xlog.c:7806 +#: access/transam/xlog.c:7853 #, c-format msgid "selected new timeline ID: %u" msgstr "gewählte neue Zeitleisten-ID: %u" -#: access/transam/xlog.c:8274 +#: access/transam/xlog.c:8321 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "unerwarteter Verzeichniseintrag »%s« in %s gefunden" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8323 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Alle Verzeichniseinträge in pg_tblspc/ sollten symbolische Verknüpfungen sein." -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8324 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "Entfernen Sie diese Verzeichnisse oder setzen Sie allow_in_place_tablespaces vorrübergehend auf ON, damit die Wiederherstellung abschließen kann." -#: access/transam/xlog.c:8361 +#: access/transam/xlog.c:8408 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X" -#: access/transam/xlog.c:8570 +#: access/transam/xlog.c:8617 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ungültige primäre Checkpoint-Verknüpfung in Kontrolldatei" -#: access/transam/xlog.c:8574 +#: access/transam/xlog.c:8621 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ungültige Checkpoint-Verknüpfung in backup_label-Datei" -#: access/transam/xlog.c:8592 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid primary checkpoint record" msgstr "ungültiger primärer Checkpoint-Datensatz" -#: access/transam/xlog.c:8596 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid checkpoint record" msgstr "ungültiger Checkpoint-Datensatz" -#: access/transam/xlog.c:8607 +#: access/transam/xlog.c:8654 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "ungültige Resource-Manager-ID im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8611 +#: access/transam/xlog.c:8658 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ungültige Resource-Manager-ID im Checkpoint-Datensatz" -#: access/transam/xlog.c:8624 +#: access/transam/xlog.c:8671 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ungültige xl_info im primären Checkpoint-Datensatz" -#: access/transam/xlog.c:8628 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ungültige xl_info im Checkpoint-Datensatz" -#: access/transam/xlog.c:8639 +#: access/transam/xlog.c:8686 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ungültige Länge des primären Checkpoint-Datensatzes" -#: access/transam/xlog.c:8643 +#: access/transam/xlog.c:8690 #, c-format msgid "invalid length of checkpoint record" msgstr "ungültige Länge des Checkpoint-Datensatzes" -#: access/transam/xlog.c:8824 +#: access/transam/xlog.c:8871 #, c-format msgid "shutting down" msgstr "fahre herunter" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8863 +#: access/transam/xlog.c:8910 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "Restart-Punkt beginnt:%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8875 +#: access/transam/xlog.c:8922 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "Checkpoint beginnt:%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:8935 +#: access/transam/xlog.c:8982 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "Restart-Punkt komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB" -#: access/transam/xlog.c:8955 +#: access/transam/xlog.c:9002 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "Checkpoint komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB" -#: access/transam/xlog.c:9406 +#: access/transam/xlog.c:9473 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "gleichzeitige Write-Ahead-Log-Aktivität während das Datenbanksystem herunterfährt" -#: access/transam/xlog.c:9939 +#: access/transam/xlog.c:10046 #, c-format msgid "recovery restart point at %X/%X" msgstr "Recovery-Restart-Punkt bei %X/%X" -#: access/transam/xlog.c:9941 +#: access/transam/xlog.c:10048 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Die letzte vollständige Transaktion war bei Logzeit %s." -#: access/transam/xlog.c:10187 +#: access/transam/xlog.c:10296 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "Restore-Punkt »%s« erzeugt bei %X/%X" -#: access/transam/xlog.c:10332 +#: access/transam/xlog.c:10441 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "unerwartete vorherige Zeitleisten-ID %u (aktuelle Zeitleisten-ID %u) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10341 +#: access/transam/xlog.c:10450 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "unerwartete Zeitleisten-ID %u (nach %u) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10357 +#: access/transam/xlog.c:10466 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "unerwartete Zeitleisten-ID %u in Checkpoint-Datensatz, bevor der minimale Wiederherstellungspunkt %X/%X auf Zeitleiste %u erreicht wurde" -#: access/transam/xlog.c:10432 +#: access/transam/xlog.c:10541 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "Online-Sicherung wurde storniert, Wiederherstellung kann nicht fortgesetzt werden" -#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10598 access/transam/xlog.c:10654 +#: access/transam/xlog.c:10684 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "unerwartete Zeitleisten-ID %u (sollte %u sein) im Checkpoint-Datensatz" -#: access/transam/xlog.c:10733 +#: access/transam/xlog.c:10842 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "fehlender Contrecord bei %X/%X erfolgreich übersprungen, überschrieben am %s" -#: access/transam/xlog.c:10948 +#: access/transam/xlog.c:11057 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "konnte Write-Through-Logdatei »%s« nicht fsyncen: %m" -#: access/transam/xlog.c:10954 +#: access/transam/xlog.c:11063 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "konnte Datei »%s« nicht fdatasyncen: %m" -#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 +#: access/transam/xlog.c:11174 access/transam/xlog.c:11711 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2880,186 +2895,186 @@ msgstr "konnte Datei »%s« nicht fdatasyncen: %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Während der Wiederherstellung können keine WAL-Kontrollfunktionen ausgeführt werden." -#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 +#: access/transam/xlog.c:11183 access/transam/xlog.c:11720 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "WAL-Level nicht ausreichend, um Online-Sicherung durchzuführen" -#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 +#: access/transam/xlog.c:11184 access/transam/xlog.c:11721 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level muss beim Serverstart auf »replica« oder »logical« gesetzt werden." -#: access/transam/xlog.c:11080 +#: access/transam/xlog.c:11189 #, c-format msgid "backup label too long (max %d bytes)" msgstr "Backup-Label zu lang (maximal %d Bytes)" -#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 -#: access/transam/xlog.c:11439 +#: access/transam/xlog.c:11226 access/transam/xlog.c:11510 +#: access/transam/xlog.c:11548 #, c-format msgid "a backup is already in progress" msgstr "ein Backup läuft bereits" -#: access/transam/xlog.c:11118 +#: access/transam/xlog.c:11227 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Führen Sie pg_stop_backup() aus und versuchen Sie es nochmal." -#: access/transam/xlog.c:11214 +#: access/transam/xlog.c:11323 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "mit full_page_writes=off erzeugtes WAL wurde seit dem letzten Restart-Punkt zurückgespielt" -#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 +#: access/transam/xlog.c:11325 access/transam/xlog.c:11916 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." msgstr "Das bedeutet, dass die aktuelle Datensicherung auf dem Standby-Server verfälscht ist und nicht verwendet werden sollte. Schalten Sie auf dem Primärserver full_page_writes ein, führen Sie dort CHECKPOINT aus und versuchen Sie dann die Online-Sicherung erneut." -#: access/transam/xlog.c:11300 replication/basebackup.c:1433 +#: access/transam/xlog.c:11409 replication/basebackup.c:1433 #: utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "Ziel für symbolische Verknüpfung »%s« ist zu lang" -#: access/transam/xlog.c:11350 commands/tablespace.c:385 +#: access/transam/xlog.c:11459 commands/tablespace.c:385 #: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "Tablespaces werden auf dieser Plattform nicht unterstützt" -#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 +#: access/transam/xlog.c:11511 access/transam/xlog.c:11549 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Wenn Sie sicher sind, dass noch kein Backup läuft, entfernen Sie die Datei »%s« und versuchen Sie es noch einmal." -#: access/transam/xlog.c:11627 +#: access/transam/xlog.c:11736 #, c-format msgid "exclusive backup not in progress" msgstr "es läuft kein exklusives Backup" -#: access/transam/xlog.c:11654 +#: access/transam/xlog.c:11763 #, c-format msgid "a backup is not in progress" msgstr "es läuft kein Backup" -#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 -#: access/transam/xlog.c:12144 access/transam/xlog.c:12150 -#: access/transam/xlog.c:12198 access/transam/xlog.c:12278 -#: access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11849 access/transam/xlog.c:11862 +#: access/transam/xlog.c:12253 access/transam/xlog.c:12259 +#: access/transam/xlog.c:12307 access/transam/xlog.c:12387 +#: access/transam/xlog.c:12411 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "ungültige Daten in Datei »%s«" -#: access/transam/xlog.c:11757 replication/basebackup.c:1287 +#: access/transam/xlog.c:11866 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "der Standby-Server wurde während der Online-Sicherung zum Primärserver befördert" -#: access/transam/xlog.c:11758 replication/basebackup.c:1288 +#: access/transam/xlog.c:11867 replication/basebackup.c:1288 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Das bedeutet, dass die aktuelle Online-Sicherung verfälscht ist und nicht verwendet werden sollte. Versuchen Sie, eine neue Online-Sicherung durchzuführen." -#: access/transam/xlog.c:11805 +#: access/transam/xlog.c:11914 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "mit full_page_writes=off erzeugtes WAL wurde während der Online-Sicherung zurückgespielt" -#: access/transam/xlog.c:11925 +#: access/transam/xlog.c:12034 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "Basissicherung beendet, warte bis die benötigten WAL-Segmente archiviert sind" -#: access/transam/xlog.c:11937 +#: access/transam/xlog.c:12046 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "warte immer noch, bis alle benötigten WAL-Segmente archiviert sind (%d Sekunden abgelaufen)" -#: access/transam/xlog.c:11939 +#: access/transam/xlog.c:12048 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Prüfen Sie, ob das archive_command korrekt ausgeführt wird. Dieser Sicherungsvorgang kann gefahrlos abgebrochen werden, aber die Datenbanksicherung wird ohne die fehlenden WAL-Segmente nicht benutzbar sein." -#: access/transam/xlog.c:11946 +#: access/transam/xlog.c:12055 #, c-format msgid "all required WAL segments have been archived" msgstr "alle benötigten WAL-Segmente wurden archiviert" -#: access/transam/xlog.c:11950 +#: access/transam/xlog.c:12059 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "WAL-Archivierung ist nicht eingeschaltet; Sie müssen dafür sorgen, dass alle benötigten WAL-Segmente auf andere Art kopiert werden, um die Sicherung abzuschließen" -#: access/transam/xlog.c:12005 +#: access/transam/xlog.c:12114 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "Backup wird abgebrochen, weil Backend-Prozess beendete, bevor pg_stop_backup aufgerufen wurde" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12308 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Gelesene Zeitleisten-ID ist %u, aber %u wurde erwartet." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12327 +#: access/transam/xlog.c:12436 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-Redo bei %X/%X für %s" -#: access/transam/xlog.c:12375 +#: access/transam/xlog.c:12484 #, c-format msgid "online backup mode was not canceled" msgstr "Online-Sicherungsmodus wurde nicht storniert" -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12485 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m." -#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 -#: access/transam/xlog.c:12407 +#: access/transam/xlog.c:12494 access/transam/xlog.c:12506 +#: access/transam/xlog.c:12516 #, c-format msgid "online backup mode canceled" msgstr "Online-Sicherungsmodus storniert" -#: access/transam/xlog.c:12398 +#: access/transam/xlog.c:12507 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Dateien »%s« und »%s« wurden in »%s« und »%s« umbenannt." -#: access/transam/xlog.c:12408 +#: access/transam/xlog.c:12517 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Datei »%s« wurde in »%s« umbenannt, aber Datei »%s« konnte nicht in »%s« umbenannt werden: %m." -#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12650 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "konnte nicht aus Logsegment %s, Position %u lesen: %m" -#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12656 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "konnte nicht aus Logsegment %s bei Position %u lesen: %d von %zu gelesen" -#: access/transam/xlog.c:13112 +#: access/transam/xlog.c:13233 #, c-format msgid "WAL receiver process shutdown requested" msgstr "Herunterfahren des WAL-Receiver-Prozesses verlangt" -#: access/transam/xlog.c:13207 +#: access/transam/xlog.c:13345 #, c-format msgid "received promote request" msgstr "Anforderung zum Befördern empfangen" -#: access/transam/xlog.c:13220 +#: access/transam/xlog.c:13358 #, c-format msgid "promote trigger file found: %s" msgstr "Promote-Triggerdatei gefunden: %s" -#: access/transam/xlog.c:13228 +#: access/transam/xlog.c:13366 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "konnte »stat« für Promote-Triggerdatei »%s« nicht ausführen: %m" @@ -3118,34 +3133,34 @@ msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Meinten Sie pg_stop_backup('f')?" #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 -#: commands/event_trigger.c:1869 commands/extension.c:1966 -#: commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 +#: commands/event_trigger.c:1869 commands/extension.c:2096 +#: commands/extension.c:2204 commands/extension.c:2489 commands/prepare.c:713 #: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 #: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 -#: replication/slotfuncs.c:255 replication/walsender.c:3328 +#: replication/slotfuncs.c:255 replication/walsender.c:3346 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 #: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 #: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 #: utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 -#: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 +#: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1899 +#: utils/adt/varlena.c:4867 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 #: utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann" #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 -#: commands/event_trigger.c:1873 commands/extension.c:1970 -#: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 +#: commands/event_trigger.c:1873 commands/extension.c:2100 +#: commands/extension.c:2208 commands/extension.c:2493 commands/prepare.c:717 #: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 -#: replication/slotfuncs.c:259 replication/walsender.c:3332 +#: replication/slotfuncs.c:259 replication/walsender.c:3350 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 +#: utils/adt/pgstatfuncs.c:1903 utils/adt/varlena.c:4871 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3227,122 +3242,122 @@ msgstr "ungültiger Datensatz-Offset bei %X/%X" msgid "contrecord is requested by %X/%X" msgstr "Contrecord angefordert von %X/%X" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ungültige Datensatzlänge bei %X/%X: %u erwartet, %u erhalten" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "keine Contrecord-Flag bei %X/%X" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%X" -#: access/transam/xlogreader.c:728 +#: access/transam/xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ungültige Resource-Manager-ID %u bei %X/%X" -#: access/transam/xlogreader.c:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X" -#: access/transam/xlogreader.c:795 +#: access/transam/xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X" -#: access/transam/xlogreader.c:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ungültige magische Zahl %04X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ungültige Info-Bits %04X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: Datenbanksystemidentifikator in WAL-Datei ist %llu, Datenbanksystemidentifikator in pg_control ist %llu" -#: access/transam/xlogreader.c:869 +#: access/transam/xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche Segmentgröße im Seitenkopf" -#: access/transam/xlogreader.c:875 +#: access/transam/xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im Seitenkopf" -#: access/transam/xlogreader.c:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "unerwartete Pageaddr %X/%X in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in Logsegment %s, Offset %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u außer der Reihe bei %X/%X" -#: access/transam/xlogreader.c:1298 +#: access/transam/xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X" -#: access/transam/xlogreader.c:1305 +#: access/transam/xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X" -#: access/transam/xlogreader.c:1341 +#: access/transam/xlogreader.c:1349 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1357 +#: access/transam/xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_IS_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X" -#: access/transam/xlogreader.c:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ungültige block_id %u bei %X/%X" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "Datensatz mit ungültiger Länge bei %X/%X" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" @@ -3352,12 +3367,12 @@ msgstr "ungültiges komprimiertes Abbild bei %X/%X, Block %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X benötigt eine Zweierpotenz zwischen 1 MB und 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "--%s benötigt einen Wert" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "-c %s benötigt einen Wert" @@ -3506,10 +3521,10 @@ msgid "large object %u does not exist" msgstr "Large Object %u existiert nicht" #: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 -#: commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 -#: commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 -#: commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 -#: commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 +#: commands/copy.c:402 commands/copy.c:422 commands/copy.c:432 +#: commands/copy.c:441 commands/copy.c:450 commands/copy.c:460 +#: commands/copy.c:469 commands/copy.c:478 commands/copy.c:496 +#: commands/copy.c:512 commands/copy.c:532 commands/copy.c:549 #: commands/dbcommands.c:158 commands/dbcommands.c:167 #: commands/dbcommands.c:176 commands/dbcommands.c:185 #: commands/dbcommands.c:194 commands/dbcommands.c:203 @@ -3517,14 +3532,14 @@ msgstr "Large Object %u existiert nicht" #: commands/dbcommands.c:230 commands/dbcommands.c:239 #: commands/dbcommands.c:261 commands/dbcommands.c:1541 #: commands/dbcommands.c:1550 commands/dbcommands.c:1559 -#: commands/dbcommands.c:1568 commands/extension.c:1757 -#: commands/extension.c:1767 commands/extension.c:1777 -#: commands/extension.c:3074 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:606 +#: commands/dbcommands.c:1568 commands/extension.c:1887 +#: commands/extension.c:1897 commands/extension.c:1907 +#: commands/extension.c:3204 commands/foreigncmds.c:550 +#: commands/foreigncmds.c:559 commands/functioncmds.c:606 #: commands/functioncmds.c:772 commands/functioncmds.c:781 #: commands/functioncmds.c:790 commands/functioncmds.c:799 #: commands/functioncmds.c:2097 commands/functioncmds.c:2105 -#: commands/publicationcmds.c:87 commands/publicationcmds.c:130 +#: commands/publicationcmds.c:87 commands/publicationcmds.c:135 #: commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 #: commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 #: commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 @@ -3532,7 +3547,7 @@ msgstr "Large Object %u existiert nicht" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 #: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 -#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 +#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -3545,9 +3560,9 @@ msgstr "Large Object %u existiert nicht" #: commands/user.c:638 commands/user.c:647 commands/user.c:655 #: commands/user.c:663 parser/parse_utilcmd.c:402 #: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 -#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 -#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 -#: replication/walsender.c:894 replication/walsender.c:904 +#: replication/pgoutput/pgoutput.c:238 replication/pgoutput/pgoutput.c:248 +#: replication/pgoutput/pgoutput.c:258 replication/walsender.c:897 +#: replication/walsender.c:908 replication/walsender.c:918 #, c-format msgid "conflicting or redundant options" msgstr "widersprüchliche oder überflüssige Optionen" @@ -3563,29 +3578,29 @@ msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "Klausel IN SCHEMA kann nicht verwendet werden, wenn GRANT/REVOKE ON SCHEMAS verwendet wird" #: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 -#: commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 -#: commands/tablecmds.c:7147 commands/tablecmds.c:7303 -#: commands/tablecmds.c:7353 commands/tablecmds.c:7427 -#: commands/tablecmds.c:7497 commands/tablecmds.c:7609 -#: commands/tablecmds.c:7703 commands/tablecmds.c:7762 -#: commands/tablecmds.c:7851 commands/tablecmds.c:7880 -#: commands/tablecmds.c:8035 commands/tablecmds.c:8117 -#: commands/tablecmds.c:8273 commands/tablecmds.c:8395 -#: commands/tablecmds.c:11888 commands/tablecmds.c:12080 -#: commands/tablecmds.c:12240 commands/tablecmds.c:13403 -#: commands/tablecmds.c:15950 commands/trigger.c:942 parser/analyze.c:2471 +#: commands/analyze.c:390 commands/copy.c:781 commands/sequence.c:1709 +#: commands/tablecmds.c:7180 commands/tablecmds.c:7336 +#: commands/tablecmds.c:7386 commands/tablecmds.c:7460 +#: commands/tablecmds.c:7530 commands/tablecmds.c:7642 +#: commands/tablecmds.c:7736 commands/tablecmds.c:7795 +#: commands/tablecmds.c:7884 commands/tablecmds.c:7913 +#: commands/tablecmds.c:8068 commands/tablecmds.c:8150 +#: commands/tablecmds.c:8306 commands/tablecmds.c:8428 +#: commands/tablecmds.c:11908 commands/tablecmds.c:12100 +#: commands/tablecmds.c:12260 commands/tablecmds.c:13446 +#: commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 #: parser/parse_relation.c:714 parser/parse_target.c:1077 #: parser/parse_type.c:144 parser/parse_utilcmd.c:3425 -#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2845 +#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 #: utils/adt/ruleutils.c:2732 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "Spalte »%s« von Relation »%s« existiert nicht" #: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 -#: commands/tablecmds.c:249 commands/tablecmds.c:16824 utils/adt/acl.c:2053 -#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 -#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 +#: utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 +#: utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" msgstr "»%s« ist keine Sequenz" @@ -4008,12 +4023,12 @@ msgstr "Schema mit OID %u existiert nicht" msgid "tablespace with OID %u does not exist" msgstr "Tablespace mit OID %u existiert nicht" -#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "Fremddaten-Wrapper mit OID %u existiert nicht" -#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "Fremdserver mit OID %u existiert nicht" @@ -4069,12 +4084,12 @@ msgstr "Konversion mit OID %u existiert nicht" msgid "extension with OID %u does not exist" msgstr "Erweiterung mit OID %u existiert nicht" -#: catalog/aclchk.c:5379 commands/publicationcmds.c:818 +#: catalog/aclchk.c:5379 commands/publicationcmds.c:823 #, c-format msgid "publication with OID %u does not exist" msgstr "Publikation mit OID %u existiert nicht" -#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "Subskription mit OID %u existiert nicht" @@ -4175,12 +4190,13 @@ msgstr "kann %s nicht löschen, weil andere Objekte davon abhängen" #: catalog/dependency.c:1204 catalog/dependency.c:1211 #: catalog/dependency.c:1223 commands/tablecmds.c:1301 -#: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 -#: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 -#: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 -#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 -#: utils/misc/guc.c:11643 +#: commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 +#: commands/view.c:506 libpq/auth.c:346 replication/slot.c:181 +#: replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 +#: storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 +#: utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 +#: utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 +#: utils/misc/guc.c:12599 utils/misc/guc.c:12601 #, c-format msgid "%s" msgstr "%s" @@ -4224,7 +4240,7 @@ msgstr "Änderungen an Systemkatalogen sind gegenwärtig nicht erlaubt." msgid "tables can have at most %d columns" msgstr "Tabellen können höchstens %d Spalten haben" -#: catalog/heap.c:527 commands/tablecmds.c:7037 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "Spaltenname »%s« steht im Konflikt mit dem Namen einer Systemspalte" @@ -4285,105 +4301,105 @@ msgstr "Eine Relation hat einen zugehörigen Typ mit dem selben Namen, daher mü msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "Heap-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" -#: catalog/heap.c:2469 +#: catalog/heap.c:2529 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "zur partitionierten Tabelle »%s« kann kein NO-INHERIT-Constraint hinzugefügt werden" -#: catalog/heap.c:2742 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "Check-Constraint »%s« existiert bereits" -#: catalog/heap.c:2912 catalog/index.c:886 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8769 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8802 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "Constraint »%s« existiert bereits für Relation »%s«" -#: catalog/heap.c:2919 +#: catalog/heap.c:2974 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2930 +#: catalog/heap.c:2985 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit vererbtem Constraint für Relation »%s«" -#: catalog/heap.c:2940 +#: catalog/heap.c:2995 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für Relation »%s«" -#: catalog/heap.c:2945 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "Constraint »%s« wird mit geerbter Definition zusammengeführt" -#: catalog/heap.c:3050 +#: catalog/heap.c:3105 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "generierte Spalte »%s« kann nicht im Spaltengenerierungsausdruck verwendet werden" -#: catalog/heap.c:3052 +#: catalog/heap.c:3107 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Eine generierte Spalte kann nicht auf eine andere generierte Spalte verweisen." -#: catalog/heap.c:3058 +#: catalog/heap.c:3113 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "Variable mit Verweis auf die ganze Zeile kann nicht im Spaltengenerierungsausdruck verwendet werden" -#: catalog/heap.c:3059 +#: catalog/heap.c:3114 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Dadurch würde die generierte Spalte von ihrem eigenen Wert abhängen." -#: catalog/heap.c:3114 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "Generierungsausdruck ist nicht »immutable«" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1288 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "Spalte »%s« hat Typ %s, aber der Vorgabeausdruck hat Typ %s" -#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1293 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen." -#: catalog/heap.c:3194 +#: catalog/heap.c:3249 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "nur Verweise auf Tabelle »%s« sind im Check-Constraint zugelassen" -#: catalog/heap.c:3492 +#: catalog/heap.c:3547 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "nicht unterstützte Kombination aus ON COMMIT und Fremdschlüssel" -#: catalog/heap.c:3493 +#: catalog/heap.c:3548 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "Tabelle »%s« verweist auf »%s«, aber sie haben nicht die gleiche ON-COMMIT-Einstellung." -#: catalog/heap.c:3498 +#: catalog/heap.c:3553 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "kann eine Tabelle, die in einen Fremdschlüssel-Constraint eingebunden ist, nicht leeren" -#: catalog/heap.c:3499 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Tabelle »%s« verweist auf »%s«." -#: catalog/heap.c:3501 +#: catalog/heap.c:3556 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Leeren Sie die Tabelle »%s« gleichzeitig oder verwenden Sie TRUNCATE ... CASCADE." @@ -4444,34 +4460,34 @@ msgstr "Index-OID-Wert für pg_class ist im Binary-Upgrade-Modus nicht gesetzt" msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY muss die erste Aktion in einer Transaktion sein" -#: catalog/index.c:3653 +#: catalog/index.c:3660 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht reindizieren" -#: catalog/index.c:3664 commands/indexcmds.c:3555 +#: catalog/index.c:3671 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "ungültiger Index einer TOAST-Tabelle kann nicht reindiziert werden" -#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 +#: catalog/index.c:3687 commands/indexcmds.c:3469 commands/indexcmds.c:3613 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "Systemrelation »%s« kann nicht verschoben werden" -#: catalog/index.c:3824 +#: catalog/index.c:3831 #, c-format msgid "index \"%s\" was reindexed" msgstr "Index »%s« wurde neu indiziert" -#: catalog/index.c:3961 +#: catalog/index.c:3968 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "ungültiger Index »%s.%s« einer TOAST-Tabelle kann nicht reindizert werden, wird übersprungen" #: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5251 +#: commands/trigger.c:5285 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: »%s.%s.%s«" @@ -4502,8 +4518,8 @@ msgstr "Relation »%s.%s« existiert nicht" msgid "relation \"%s\" does not exist" msgstr "Relation »%s« existiert nicht" -#: catalog/namespace.c:501 catalog/namespace.c:3076 commands/extension.c:1541 -#: commands/extension.c:1547 +#: catalog/namespace.c:501 catalog/namespace.c:3079 commands/extension.c:1671 +#: commands/extension.c:1677 #, c-format msgid "no schema has been selected to create in" msgstr "kein Schema für die Objekterzeugung ausgewählt" @@ -4528,86 +4544,86 @@ msgstr "nur temporäre Relationen können in temporären Schemas erzeugt werden" msgid "statistics object \"%s\" does not exist" msgstr "Statistikobjekt »%s« existiert nicht" -#: catalog/namespace.c:2391 +#: catalog/namespace.c:2394 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "Textsucheparser »%s« existiert nicht" -#: catalog/namespace.c:2517 +#: catalog/namespace.c:2520 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "Textsuchewörterbuch »%s« existiert nicht" -#: catalog/namespace.c:2644 +#: catalog/namespace.c:2647 #, c-format msgid "text search template \"%s\" does not exist" msgstr "Textsuchevorlage »%s« existiert nicht" -#: catalog/namespace.c:2770 commands/tsearchcmds.c:1127 +#: catalog/namespace.c:2773 commands/tsearchcmds.c:1127 #: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "Textsuchekonfiguration »%s« existiert nicht" -#: catalog/namespace.c:2883 parser/parse_expr.c:810 parser/parse_target.c:1269 +#: catalog/namespace.c:2886 parser/parse_expr.c:810 parser/parse_target.c:1269 #, c-format msgid "cross-database references are not implemented: %s" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: %s" -#: catalog/namespace.c:2889 gram.y:15103 gram.y:17077 parser/parse_expr.c:817 +#: catalog/namespace.c:2892 gram.y:15103 gram.y:17077 parser/parse_expr.c:817 #: parser/parse_target.c:1276 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "falscher qualifizierter Name (zu viele Namensteile): %s" -#: catalog/namespace.c:3019 +#: catalog/namespace.c:3022 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "Objekte können nicht in oder aus temporären Schemas verschoben werden" -#: catalog/namespace.c:3025 +#: catalog/namespace.c:3028 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "Objekte können nicht in oder aus TOAST-Schemas verschoben werden" -#: catalog/namespace.c:3098 commands/schemacmds.c:263 commands/schemacmds.c:343 +#: catalog/namespace.c:3101 commands/schemacmds.c:263 commands/schemacmds.c:343 #: commands/tablecmds.c:1246 #, c-format msgid "schema \"%s\" does not exist" msgstr "Schema »%s« existiert nicht" -#: catalog/namespace.c:3129 +#: catalog/namespace.c:3132 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "falscher Relationsname (zu viele Namensteile): %s" -#: catalog/namespace.c:3696 +#: catalog/namespace.c:3699 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "Sortierfolge »%s« für Kodierung »%s« existiert nicht" -#: catalog/namespace.c:3751 +#: catalog/namespace.c:3754 #, c-format msgid "conversion \"%s\" does not exist" msgstr "Konversion »%s« existiert nicht" -#: catalog/namespace.c:4015 +#: catalog/namespace.c:4018 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "keine Berechtigung, um temporäre Tabellen in Datenbank »%s« zu erzeugen" -#: catalog/namespace.c:4031 +#: catalog/namespace.c:4034 #, c-format msgid "cannot create temporary tables during recovery" msgstr "während der Wiederherstellung können keine temporären Tabellen erzeugt werden" -#: catalog/namespace.c:4037 +#: catalog/namespace.c:4040 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "während einer parallelen Operation können keine temporären Tabellen erzeugt werden" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 +#: catalog/namespace.c:4341 commands/tablespace.c:1211 commands/variable.c:64 +#: tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "Die Listensyntax ist ungültig." @@ -4615,25 +4631,25 @@ msgstr "Die Listensyntax ist ungültig." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 #: commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 #: commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 -#: commands/tablecmds.c:12016 +#: commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "»%s« ist keine Tabelle" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6169 commands/tablecmds.c:16829 commands/view.c:119 +#: commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "»%s« ist keine Sicht" #: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 -#: commands/tablecmds.c:16834 +#: commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "»%s« ist keine materialisierte Sicht" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6172 commands/tablecmds.c:16839 +#: commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "»%s« ist keine Fremdtabelle" @@ -4656,7 +4672,7 @@ msgstr "Vorgabewert für Spalte »%s« von Relation »%s« existiert nicht" #: catalog/objectaddress.c:1645 commands/functioncmds.c:139 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 -#: utils/adt/acl.c:4411 +#: utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "Typ »%s« existiert nicht" @@ -4676,8 +4692,9 @@ msgstr "Funktion %d (%s, %s) von %s existiert nicht" msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "Benutzerabbildung für Benutzer »%s« auf Server »%s« existiert nicht" -#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:733 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 +#: commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 +#: foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "Server »%s« existiert nicht" @@ -5258,27 +5275,27 @@ msgstr "Konversion »%s« existiert bereits" msgid "default conversion for %s to %s already exists" msgstr "Standardumwandlung von %s nach %s existiert bereits" -#: catalog/pg_depend.c:218 commands/extension.c:3370 +#: catalog/pg_depend.c:220 commands/extension.c:3500 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s ist schon Mitglied der Erweiterung »%s«" -#: catalog/pg_depend.c:225 catalog/pg_depend.c:276 commands/extension.c:3410 +#: catalog/pg_depend.c:227 catalog/pg_depend.c:278 commands/extension.c:3540 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s ist kein Mitglied der Erweiterung »%s«" -#: catalog/pg_depend.c:228 +#: catalog/pg_depend.c:230 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "Eine Erweiterung darf kein Objekt ersetzen, das ihr nicht gehört." -#: catalog/pg_depend.c:279 +#: catalog/pg_depend.c:281 #, 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 "Eine Erweiterung darf CREATE .. IF NOT EXISTS zum Überspringen der Erzeugung eines Objekts nur verwenden, wenn ihr das vorhandene Objekt schon gehört." -#: catalog/pg_depend.c:644 +#: catalog/pg_depend.c:646 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "kann Abhängigkeit von %s nicht entfernen, weil es ein Systemobjekt ist" @@ -5329,7 +5346,7 @@ msgid "The partition is being detached concurrently or has an unfinished detach. msgstr "Die Partition wird nebenläufig abgetrennt oder hat eine unfertige Abtrennoperation." #: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 -#: commands/tablecmds.c:15139 +#: commands/tablecmds.c:15182 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Verwendet Sie ALTER TABLE ... DETACH PARTITION ... FINALIZE, um die unerledigte Abtrennoperation abzuschließen." @@ -5359,7 +5376,7 @@ msgstr "»%s« ist kein gültiger Operatorname" msgid "only binary operators can have commutators" msgstr "nur binäre Operatoren können Kommutatoren haben" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:507 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:538 #, c-format msgid "only binary operators can have join selectivity" msgstr "nur binäre Operatoren können Join-Selectivity haben" @@ -5379,12 +5396,12 @@ msgstr "nur binäre Operatoren können eine Hash-Funktion haben" msgid "only boolean operators can have negators" msgstr "nur Boole’sche Operatoren können Negatoren haben" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:515 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:546 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "nur Boole’sche Operatoren können Restriction-Selectivity haben" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:519 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:550 #, c-format msgid "only boolean operators can have join selectivity" msgstr "nur Boole’sche Operatoren können Join-Selectivity haben" @@ -5531,8 +5548,8 @@ msgstr "Temporäre und ungeloggte Tabellen können nicht repliziert werden." msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "Relation »%s« ist schon Mitglied der Publikation »%s«" -#: catalog/pg_publication.c:533 commands/publicationcmds.c:458 -#: commands/publicationcmds.c:786 +#: catalog/pg_publication.c:533 commands/publicationcmds.c:463 +#: commands/publicationcmds.c:791 #, c-format msgid "publication \"%s\" does not exist" msgstr "Publikation »%s« existiert nicht" @@ -5606,17 +5623,17 @@ msgid "cannot reassign ownership of objects owned by %s because they are require msgstr "kann den Eigentümer von den Objekten, die %s gehören, nicht ändern, weil die Objekte vom Datenbanksystem benötigt werden" #: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 -#: commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "Subskription »%s« existiert nicht" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "konnte Relation-Mapping für Subskription »%s« nicht löschen" -#: catalog/pg_subscription.c:434 +#: catalog/pg_subscription.c:459 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "Tabellensynchronisierung für Relation »%s« ist im Gang und hat Status »%c«." @@ -5624,7 +5641,7 @@ msgstr "Tabellensynchronisierung für Relation »%s« ist im Gang und hat Status #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:441 +#: catalog/pg_subscription.c:466 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Verwenden Sie %s um die Subskription zu aktivieren, falls noch nicht aktiviert, oder %s um die Subskription zu löschen." @@ -5675,13 +5692,13 @@ msgstr "Fehler während der Erzeugung eines Multirange-Typs für Typ »%s«." msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Sie können einen Multirange-Typnamen manuell angeben, mit dem Attribut »multirange_type_name«." -#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1046 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ungültige Seite in Block %u von Relation %s" #: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 -#: commands/tablecmds.c:16694 +#: commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "»%s« ist keine Tabelle oder materialisierte Sicht" @@ -5781,12 +5798,12 @@ msgstr "Parameter »%s« muss READ_ONLY, SHAREABLE oder READ_WRITE sein" msgid "event trigger \"%s\" already exists" msgstr "Ereignistrigger »%s« existiert bereits" -#: commands/alter.c:88 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "Fremddaten-Wrapper »%s« existiert bereits" -#: commands/alter.c:91 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "Server »%s« existiert bereits" @@ -5796,7 +5813,7 @@ msgstr "Server »%s« existiert bereits" msgid "language \"%s\" already exists" msgstr "Sprache »%s« existiert bereits" -#: commands/alter.c:97 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:185 #, c-format msgid "publication \"%s\" already exists" msgstr "Publikation »%s« existiert bereits" @@ -5873,7 +5890,7 @@ msgid "handler function is not specified" msgstr "keine Handler-Funktion angegeben" #: commands/amcmds.c:264 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:699 +#: commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 #: parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" @@ -5924,27 +5941,27 @@ msgstr "überspringe Analysieren des Vererbungsbaums »%s.%s« --- dieser Vererb msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "überspringe Analysieren des Vererbungsbaums »%s.%s« --- dieser Vererbungsbaum enthält keine analysierbaren abgeleiteten Tabellen" -#: commands/async.c:646 +#: commands/async.c:645 #, c-format msgid "channel name cannot be empty" msgstr "Kanalname kann nicht leer sein" -#: commands/async.c:652 +#: commands/async.c:651 #, c-format msgid "channel name too long" msgstr "Kanalname zu lang" -#: commands/async.c:657 +#: commands/async.c:656 #, c-format msgid "payload string too long" msgstr "Payload-Zeichenkette zu lang" -#: commands/async.c:876 +#: commands/async.c:875 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "PREPARE kann nicht in einer Transaktion ausgeführt werden, die LISTEN, UNLISTEN oder NOTIFY ausgeführt hat" -#: commands/async.c:980 +#: commands/async.c:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "zu viele Benachrichtigungen in NOTIFY-Schlange" @@ -5984,7 +6001,7 @@ msgstr "eine partitionierte Tabelle kann nicht geclustert werden" msgid "there is no previously clustered index for table \"%s\"" msgstr "es gibt keinen bereits geclusterten Index für Tabelle »%s«" -#: commands/cluster.c:187 commands/tablecmds.c:13858 commands/tablecmds.c:15718 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "Index »%s« für Tabelle »%s« existiert nicht" @@ -5999,7 +6016,7 @@ msgstr "globaler Katalog kann nicht geclustert werden" msgid "cannot vacuum temporary tables of other sessions" msgstr "temporäre Tabellen anderer Sitzungen können nicht gevacuumt werden" -#: commands/cluster.c:471 commands/tablecmds.c:15728 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "»%s« ist kein Index für Tabelle »%s«" @@ -6198,156 +6215,168 @@ msgstr "nur Superuser oder Mitglieder von pg_read_server_files können mit COPY msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "nur Superuser oder Mitglieder von pg_write_server_files können mit COPY in eine Datei schreiben" -#: commands/copy.c:188 +#: commands/copy.c:175 +#, c-format +msgid "generated columns are not supported in COPY FROM WHERE conditions" +msgstr "generierte Spalten werden in COPY-FROM-WHERE-Bedingungen nicht unterstützt" + +#: commands/copy.c:176 commands/tablecmds.c:11928 commands/tablecmds.c:17048 +#: commands/tablecmds.c:17127 commands/trigger.c:653 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:974 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "Spalte »%s« ist eine generierte Spalte." + +#: commands/copy.c:225 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM wird nicht unterstützt mit Sicherheit auf Zeilenebene" -#: commands/copy.c:189 +#: commands/copy.c:226 #, c-format msgid "Use INSERT statements instead." msgstr "Verwenden Sie stattdessen INSERT-Anweisungen." -#: commands/copy.c:377 +#: commands/copy.c:414 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-Format »%s« nicht erkannt" -#: commands/copy.c:450 commands/copy.c:466 commands/copy.c:481 -#: commands/copy.c:503 +#: commands/copy.c:487 commands/copy.c:503 commands/copy.c:518 +#: commands/copy.c:540 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "Argument von Option »%s« muss eine Liste aus Spaltennamen sein" -#: commands/copy.c:518 +#: commands/copy.c:555 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "Argument von Option »%s« muss ein gültiger Kodierungsname sein" -#: commands/copy.c:525 commands/dbcommands.c:254 commands/dbcommands.c:1575 +#: commands/copy.c:562 commands/dbcommands.c:254 commands/dbcommands.c:1575 #, c-format msgid "option \"%s\" not recognized" msgstr "Option »%s« nicht erkannt" -#: commands/copy.c:537 +#: commands/copy.c:574 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "DELIMITER kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:542 +#: commands/copy.c:579 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "NULL kann nicht im BINARY-Modus angegeben werden" -#: commands/copy.c:564 +#: commands/copy.c:601 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "DELIMITER für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:571 +#: commands/copy.c:608 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-Trennzeichen kann nicht Newline oder Carriage Return sein" -#: commands/copy.c:577 +#: commands/copy.c:614 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPY NULL-Darstellung kann nicht Newline oder Carriage Return enthalten" -#: commands/copy.c:594 +#: commands/copy.c:631 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "DELIMITER für COPY darf nicht »%s« sein" -#: commands/copy.c:600 +#: commands/copy.c:637 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER ist nur im CSV-Modus verfügbar" -#: commands/copy.c:606 +#: commands/copy.c:643 #, c-format msgid "COPY quote available only in CSV mode" msgstr "Quote-Zeichen für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:611 +#: commands/copy.c:648 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "Quote-Zeichen für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:616 +#: commands/copy.c:653 #, c-format msgid "COPY delimiter and quote must be different" msgstr "DELIMITER und QUOTE für COPY müssen verschieden sein" -#: commands/copy.c:622 +#: commands/copy.c:659 #, c-format msgid "COPY escape available only in CSV mode" msgstr "Escape-Zeichen für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:627 +#: commands/copy.c:664 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "Escape-Zeichen für COPY muss ein einzelnes Ein-Byte-Zeichen sein" -#: commands/copy.c:633 +#: commands/copy.c:670 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "FORCE_QUOTE für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:637 +#: commands/copy.c:674 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "FORCE_QUOTE ist nur bei COPY TO verfügbar" -#: commands/copy.c:643 +#: commands/copy.c:680 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "FORCE_NOT_NULL für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:647 +#: commands/copy.c:684 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "FORCE_NOT_NULL ist nur bei COPY FROM verfügbar" -#: commands/copy.c:653 +#: commands/copy.c:690 #, c-format msgid "COPY force null available only in CSV mode" msgstr "FORCE_NULL für COPY ist nur im CSV-Modus verfügbar" -#: commands/copy.c:658 +#: commands/copy.c:695 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "FORCE_NULL ist nur bei COPY FROM verfügbar" -#: commands/copy.c:664 +#: commands/copy.c:701 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "Trennzeichen für COPY darf nicht in der NULL-Darstellung erscheinen" -#: commands/copy.c:671 +#: commands/copy.c:708 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "CSV-Quote-Zeichen darf nicht in der NULL-Darstellung erscheinen" -#: commands/copy.c:732 +#: commands/copy.c:769 #, c-format msgid "column \"%s\" is a generated column" msgstr "Spalte »%s« ist eine generierte Spalte" -#: commands/copy.c:734 +#: commands/copy.c:771 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Generierte Spalten können nicht in COPY verwendet werden." -#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 +#: commands/copy.c:786 commands/indexcmds.c:1842 commands/statscmds.c:265 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 -#: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 +#: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2687 #, c-format msgid "column \"%s\" does not exist" msgstr "Spalte »%s« existiert nicht" -#: commands/copy.c:756 commands/tablecmds.c:2370 commands/trigger.c:951 +#: commands/copy.c:793 commands/tablecmds.c:2370 commands/trigger.c:951 #: parser/parse_target.c:1093 parser/parse_target.c:1104 #, c-format msgid "column \"%s\" specified more than once" @@ -6428,7 +6457,7 @@ msgstr "Spalte »%s« mit FORCE_NOT_NULL wird von COPY nicht verwendet" msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "Spalte »%s« mit FORCE_NULL wird von COPY nicht verwendet" -#: commands/copyfrom.c:1343 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1343 utils/mb/mbutils.c:394 #, c-format msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "Standardumwandlung von Kodierung »%s« nach »%s« existiert nicht" @@ -7029,7 +7058,7 @@ msgstr "Verwenden Sie DROP AGGREGATE, um Aggregatfunktionen zu löschen." #: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 #: commands/tablecmds.c:3750 commands/tablecmds.c:3803 -#: commands/tablecmds.c:16145 tcop/utility.c:1324 +#: commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "Relation »%s« existiert nicht, wird übersprungen" @@ -7059,7 +7088,7 @@ msgstr "Sortierfolge »%s« existiert nicht, wird übersprungen" msgid "conversion \"%s\" does not exist, skipping" msgstr "Konversion »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:293 commands/statscmds.c:674 +#: commands/dropcmds.c:293 commands/statscmds.c:694 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "Statistikobjekt »%s« existiert nicht, wird übersprungen" @@ -7154,7 +7183,7 @@ msgstr "Regel »%s« für Relation »%s« existiert nicht, wird übersprungen" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "Fremddaten-Wrapper »%s« existiert nicht, wird übersprungen" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "Server »%s« existiert nicht, wird übersprungen" @@ -7261,355 +7290,355 @@ msgstr "EXPLAIN-Option WAL erfordert ANALYZE" msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAIN-Option TIMING erfordert ANALYZE" -#: commands/extension.c:173 commands/extension.c:3032 +#: commands/extension.c:195 commands/extension.c:3162 #, c-format msgid "extension \"%s\" does not exist" msgstr "Erweiterung »%s« existiert nicht" -#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 -#: commands/extension.c:303 +#: commands/extension.c:402 commands/extension.c:411 commands/extension.c:423 +#: commands/extension.c:433 #, c-format msgid "invalid extension name: \"%s\"" msgstr "ungültiger Erweiterungsname: »%s«" -#: commands/extension.c:273 +#: commands/extension.c:403 #, c-format msgid "Extension names must not be empty." msgstr "Erweiterungsnamen dürfen nicht leer sein." -#: commands/extension.c:282 +#: commands/extension.c:412 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Erweiterungsnamen dürfen nicht »--« enthalten." -#: commands/extension.c:294 +#: commands/extension.c:424 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Erweiterungsnamen dürfen nicht mit »-« anfangen oder aufhören." -#: commands/extension.c:304 +#: commands/extension.c:434 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Erweiterungsnamen dürfen keine Verzeichnistrennzeichen enthalten." -#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 -#: commands/extension.c:347 +#: commands/extension.c:449 commands/extension.c:458 commands/extension.c:467 +#: commands/extension.c:477 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "ungültiger Erweiterungsversionsname: »%s«" -#: commands/extension.c:320 +#: commands/extension.c:450 #, c-format msgid "Version names must not be empty." msgstr "Versionsnamen dürfen nicht leer sein." -#: commands/extension.c:329 +#: commands/extension.c:459 #, c-format msgid "Version names must not contain \"--\"." msgstr "Versionsnamen dürfen nicht »--« enthalten." -#: commands/extension.c:338 +#: commands/extension.c:468 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "Versionsnamen dürfen nicht mit »-« anfangen oder aufhören." -#: commands/extension.c:348 +#: commands/extension.c:478 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Versionsnamen dürfen keine Verzeichnistrennzeichen enthalten." -#: commands/extension.c:498 +#: commands/extension.c:628 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "konnte Erweiterungskontrolldatei »%s« nicht öffnen: %m" -#: commands/extension.c:520 commands/extension.c:530 +#: commands/extension.c:650 commands/extension.c:660 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "Parameter »%s« kann nicht in einer sekundären Erweitungskontrolldatei gesetzt werden" -#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 +#: commands/extension.c:682 commands/extension.c:690 commands/extension.c:698 #: utils/misc/guc.c:7118 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "Parameter »%s« erfordert einen Boole’schen Wert" -#: commands/extension.c:577 +#: commands/extension.c:707 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "»%s« ist kein gültiger Kodierungsname" -#: commands/extension.c:591 +#: commands/extension.c:721 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "Parameter »%s« muss eine Liste von Erweiterungsnamen sein" -#: commands/extension.c:598 +#: commands/extension.c:728 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "unbekannter Parameter »%s« in Datei »%s«" -#: commands/extension.c:607 +#: commands/extension.c:737 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "Parameter »schema« kann nicht angegeben werden, wenn »relocatable« an ist" -#: commands/extension.c:785 +#: commands/extension.c:915 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "Transaktionskontrollanweisungen sind nicht in einem Erweiterungsskript erlaubt" -#: commands/extension.c:862 +#: commands/extension.c:992 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "keine Berechtigung, um Erweiterung »%s« zu erzeugen" -#: commands/extension.c:865 +#: commands/extension.c:995 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "CREATE-Privileg für die aktuelle Datenbank wird benötigt, um diese Erweiterung anzulegen." -#: commands/extension.c:866 +#: commands/extension.c:996 #, c-format msgid "Must be superuser to create this extension." msgstr "Nur Superuser können diese Erweiterung anlegen." -#: commands/extension.c:870 +#: commands/extension.c:1000 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "keine Berechtigung, um Erweiterung »%s« zu aktualisieren" -#: commands/extension.c:873 +#: commands/extension.c:1003 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "CREATE-Privileg für die aktuelle Datenbank wird benötigt, um diese Erweiterung zu aktualisieren." -#: commands/extension.c:874 +#: commands/extension.c:1004 #, c-format msgid "Must be superuser to update this extension." msgstr "Nur Superuser können diese Erweiterung aktualisieren." -#: commands/extension.c:1003 +#: commands/extension.c:1133 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "ungültiges Zeichen im Erweiterungseigentümer: darf keins aus »%s« enthalten" -#: commands/extension.c:1027 +#: commands/extension.c:1157 #, c-format msgid "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" msgstr "ungültiges Zeichen in Schema von Erweiterung »%s«: darf keins aus »%s« enthalten" -#: commands/extension.c:1222 +#: commands/extension.c:1352 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "Erweiterung »%s« hat keinen Aktualisierungspfad von Version »%s« auf Version »%s«" -#: commands/extension.c:1430 commands/extension.c:3093 +#: commands/extension.c:1560 commands/extension.c:3223 #, c-format msgid "version to install must be specified" msgstr "die zu installierende Version muss angegeben werden" -#: commands/extension.c:1467 +#: commands/extension.c:1597 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "Erweiterung »%s« hat kein Installationsskript und keinen Aktualisierungspfad für Version »%s«" -#: commands/extension.c:1501 +#: commands/extension.c:1631 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "Erweiterung »%s« muss in Schema »%s« installiert werden" -#: commands/extension.c:1661 +#: commands/extension.c:1791 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "zyklische Abhängigkeit zwischen Erweiterungen »%s« und »%s« entdeckt" -#: commands/extension.c:1666 +#: commands/extension.c:1796 #, c-format msgid "installing required extension \"%s\"" msgstr "installiere benötigte Erweiterung »%s«" -#: commands/extension.c:1689 +#: commands/extension.c:1819 #, c-format msgid "required extension \"%s\" is not installed" msgstr "benötigte Erweiterung »%s« ist nicht installiert" -#: commands/extension.c:1692 +#: commands/extension.c:1822 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "Verwenden Sie CREATE EXTENSION ... CASCADE, um die benötigten Erweiterungen ebenfalls zu installieren." -#: commands/extension.c:1727 +#: commands/extension.c:1857 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "Erweiterung »%s« existiert bereits, wird übersprungen" -#: commands/extension.c:1734 +#: commands/extension.c:1864 #, c-format msgid "extension \"%s\" already exists" msgstr "Erweiterung »%s« existiert bereits" -#: commands/extension.c:1745 +#: commands/extension.c:1875 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "geschachteltes CREATE EXTENSION wird nicht unterstützt" -#: commands/extension.c:1918 +#: commands/extension.c:2048 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "Erweiterung »%s« kann nicht gelöscht werden, weil sie gerade geändert wird" -#: commands/extension.c:2479 +#: commands/extension.c:2609 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s kann nur von einem SQL-Skript aufgerufen werden, das von CREATE EXTENSION ausgeführt wird" -#: commands/extension.c:2491 +#: commands/extension.c:2621 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u bezieht sich nicht auf eine Tabelle" -#: commands/extension.c:2496 +#: commands/extension.c:2626 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "Tabelle »%s« ist kein Mitglied der anzulegenden Erweiterung" -#: commands/extension.c:2850 +#: commands/extension.c:2980 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "kann Erweiterung »%s« nicht in Schema »%s« verschieben, weil die Erweiterung das Schema enthält" -#: commands/extension.c:2891 commands/extension.c:2951 +#: commands/extension.c:3021 commands/extension.c:3081 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "Erweiterung »%s« unterstützt SET SCHEMA nicht" -#: commands/extension.c:2953 +#: commands/extension.c:3083 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "%s ist nicht im Schema der Erweiterung (»%s«)" -#: commands/extension.c:3012 +#: commands/extension.c:3142 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "geschachteltes ALTER EXTENSION wird nicht unterstützt" -#: commands/extension.c:3104 +#: commands/extension.c:3234 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "Version »%s« von Erweiterung »%s« ist bereits installiert" -#: commands/extension.c:3316 +#: commands/extension.c:3446 #, c-format msgid "cannot add an object of this type to an extension" msgstr "ein Objekt dieses Typs kann nicht zu einer Erweiterung hinzugefügt werden" -#: commands/extension.c:3382 +#: commands/extension.c:3512 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "kann Schema »%s« nicht zu Erweiterung »%s« hinzufügen, weil das Schema die Erweiterung enthält" -#: commands/extension.c:3476 +#: commands/extension.c:3606 #, c-format msgid "file \"%s\" is too large" msgstr "Datei »%s« ist zu groß" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "Option »%s« nicht gefunden" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "Option »%s« mehrmals angegeben" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "keine Berechtigung, um Eigentümer des Fremddaten-Wrappers »%s« zu ändern" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "Nur Superuser können den Eigentümer eines Fremddaten-Wrappers ändern." -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Der Eigentümer eines Fremddaten-Wrappers muss ein Superuser sein." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:711 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "Fremddaten-Wrapper »%s« existiert nicht" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "keine Berechtigung, um Fremddaten-Wrapper »%s« zu erzeugen" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Nur Superuser können Fremddaten-Wrapper anlegen." -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "keine Berechtigung, um Fremddaten-Wrapper »%s« zu ändern" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Nur Superuser können Fremddaten-Wrapper ändern." -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "das Ändern des Handlers des Fremddaten-Wrappers kann das Verhalten von bestehenden Fremdtabellen verändern" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "durch Ändern des Validators des Fremddaten-Wrappers können die Optionen von abhängigen Objekten ungültig werden" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "Server »%s« existiert bereits, wird übersprungen" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "Benutzerabbildung für »%s« existiert bereits für Server »%s«, wird übersprungen" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "Benutzerabbildung für »%s« existiert bereits für Server »%s«" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "Benutzerabbildung für »%s« existiert nicht für Server »%s«" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "Benutzerabbildung für »%s« existiert nicht für Server »%s«, wird übersprungen" -#: commands/foreigncmds.c:1511 foreign/foreign.c:399 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "Fremddaten-Wrapper »%s« hat keinen Handler" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "Fremddaten-Wrapper »%s« unterstützt IMPORT FOREIGN SCHEMA nicht" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "importiere Fremdtabelle »%s«" @@ -8128,8 +8157,8 @@ msgstr "inkludierte Spalte unterstützt die Optionen NULLS FIRST/LAST nicht" msgid "could not determine which collation to use for index expression" msgstr "konnte die für den Indexausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 -#: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17215 commands/typecmds.c:810 +#: parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" @@ -8165,8 +8194,8 @@ msgstr "Zugriffsmethode »%s« unterstützt die Optionen ASC/DESC nicht" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "Zugriffsmethode »%s« unterstützt die Optionen NULLS FIRST/LAST nicht" -#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 -#: commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17240 +#: commands/tablecmds.c:17246 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "Datentyp %s hat keine Standardoperatorklasse für Zugriffsmethode »%s«" @@ -8192,78 +8221,78 @@ msgstr "Operatorklasse »%s« akzeptiert Datentyp %s nicht" msgid "there are multiple default operator classes for data type %s" msgstr "es gibt mehrere Standardoperatorklassen für Datentyp %s" -#: commands/indexcmds.c:2631 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "unbekannte REINDEX-Option »%s«" -#: commands/indexcmds.c:2855 +#: commands/indexcmds.c:2889 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "Tabelle »%s« hat keine Indexe, die nebenläufig reindiziert werden können" -#: commands/indexcmds.c:2869 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "Tabelle »%s« hat keine zu reindizierenden Indexe" -#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 -#: commands/indexcmds.c:3544 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 +#: commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden" -#: commands/indexcmds.c:2932 +#: commands/indexcmds.c:2966 #, c-format msgid "can only reindex the currently open database" msgstr "nur die aktuell geöffnete Datenbank kann reindiziert werden" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3054 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "Systemkataloge können nicht nebenläufig reindiziert werden, werden alle übersprungen" -#: commands/indexcmds.c:3053 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "Systemrelationen können nicht verschoben werden, werden alle übersprungen" -#: commands/indexcmds.c:3100 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "beim Reindizieren der partitionierten Tabelle »%s.%s«" -#: commands/indexcmds.c:3103 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "beim Reindizieren des partitionierten Index »%s.%s«" -#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "Tabelle »%s.%s« wurde neu indiziert" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "ungültiger Index »%s.%s« kann nicht nebenläufig reindizert werden, wird übersprungen" -#: commands/indexcmds.c:3454 +#: commands/indexcmds.c:3488 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "Exclusion-Constraint-Index »%s.%s« kann nicht nebenläufig reindizert werden, wird übersprungen" -#: commands/indexcmds.c:3609 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "diese Art Relation kann nicht nebenläufig reindiziert werden" -#: commands/indexcmds.c:3630 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "nicht geteilte Relation kann nicht nach Tablespace »%s« verschoben werden" -#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "Index »%s.%s« wurde neu indiziert" @@ -8531,7 +8560,7 @@ msgstr "Operatorfamilie »%s« für Zugriffsmethode »%s« existiert bereits in msgid "SETOF type not allowed for operator argument" msgstr "SETOF-Typ nicht als Operatorargument erlaubt" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:479 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:510 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "Operator-Attribut »%s« unbekannt" @@ -8556,31 +8585,41 @@ msgstr "rechtes Argument des Operators muss angegeben werden" msgid "Postfix operators are not supported." msgstr "Postfix-Operatoren werden nicht unterstützt." -#: commands/operatorcmds.c:290 +#: commands/operatorcmds.c:289 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "Restriktionsschätzfunktion %s muss Typ %s zurückgeben" -#: commands/operatorcmds.c:333 +#: commands/operatorcmds.c:307 +#, c-format +msgid "must be superuser to specify a non-built-in restriction estimator function" +msgstr "nur Superuser können eine nicht eingebaute Restriktionsschätzfunktion angeben" + +#: commands/operatorcmds.c:352 #, c-format msgid "join estimator function %s has multiple matches" msgstr "Join-Schätzfunktion %s hat mehrere Übereinstimmungen" -#: commands/operatorcmds.c:348 +#: commands/operatorcmds.c:367 #, c-format msgid "join estimator function %s must return type %s" msgstr "Join-Schätzfunktion %s muss Typ %s zurückgeben" -#: commands/operatorcmds.c:473 +#: commands/operatorcmds.c:376 +#, c-format +msgid "must be superuser to specify a non-built-in join estimator function" +msgstr "nur Superuser können eine nicht eingebaute Join-Schätzfunktion angeben" + +#: commands/operatorcmds.c:504 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "Operator-Attribut »%s« kann nicht geändert werden" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:157 #: commands/tablecmds.c:1582 commands/tablecmds.c:2162 #: commands/tablecmds.c:3402 commands/tablecmds.c:6112 -#: commands/tablecmds.c:9048 commands/tablecmds.c:16750 -#: commands/tablecmds.c:16785 commands/trigger.c:313 commands/trigger.c:1289 +#: commands/tablecmds.c:9081 commands/tablecmds.c:16793 +#: commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 #: commands/trigger.c:1398 rewrite/rewriteDefine.c:278 #: rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format @@ -8633,7 +8672,7 @@ msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "kann WITH-HOLD-Cursor nicht in einer sicherheitsbeschränkten Operation erzeugen" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2643 utils/adt/xml.c:2813 +#: executor/execCurrent.c:70 utils/adt/xml.c:2636 utils/adt/xml.c:2806 #, c-format msgid "cursor \"%s\" does not exist" msgstr "Cursor »%s« existiert nicht" @@ -8643,7 +8682,7 @@ msgstr "Cursor »%s« existiert nicht" msgid "invalid statement name: must not be empty" msgstr "ungültiger Anweisungsname: darf nicht leer sein" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1483 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "konnte Datentyp von Parameter $%d nicht ermitteln" @@ -8688,57 +8727,57 @@ msgstr "vorbereitete Anweisung »%s« existiert nicht" msgid "must be superuser to create custom procedural language" msgstr "nur Superuser können maßgeschneiderte prozedurale Sprachen erzeugen" -#: commands/publicationcmds.c:104 +#: commands/publicationcmds.c:109 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "ungültige Listensyntax für »publish«-Option" -#: commands/publicationcmds.c:122 +#: commands/publicationcmds.c:127 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "unbekannter »publish«-Wert: »%s«" -#: commands/publicationcmds.c:137 +#: commands/publicationcmds.c:142 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "unbekannter Publikationsparameter: »%s«" -#: commands/publicationcmds.c:169 +#: commands/publicationcmds.c:174 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "nur Superuser können eine Publikation FOR ALL TABLES erzeugen" -#: commands/publicationcmds.c:250 +#: commands/publicationcmds.c:255 #, c-format msgid "wal_level is insufficient to publish logical changes" msgstr "wal_level ist nicht ausreichend, um logische Veränderungen zu publizieren" -#: commands/publicationcmds.c:251 +#: commands/publicationcmds.c:256 #, c-format msgid "Set wal_level to logical before creating subscriptions." msgstr "Setzen Sie wal_level auf »logical« bevor Sie Subskriptionen erzeugen." -#: commands/publicationcmds.c:376 +#: commands/publicationcmds.c:381 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "Publikation »%s« ist als FOR ALL TABLES definiert" -#: commands/publicationcmds.c:378 +#: commands/publicationcmds.c:383 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "In einer FOR-ALL-TABLES-Publikation können keine Tabellen hinzugefügt oder entfernt werden." -#: commands/publicationcmds.c:707 +#: commands/publicationcmds.c:712 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "Relation »%s« ist nicht Teil der Publikation" -#: commands/publicationcmds.c:750 +#: commands/publicationcmds.c:755 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "keine Berechtigung, um Eigentümer der Publikation »%s« zu ändern" -#: commands/publicationcmds.c:752 +#: commands/publicationcmds.c:757 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "Der Eigentümer einer FOR-ALL-TABLES-Publikation muss ein Superuser sein." @@ -8898,13 +8937,13 @@ msgstr "Sequenz muss im selben Schema wie die verknüpfte Tabelle sein" msgid "cannot change ownership of identity sequence" msgstr "kann Eigentümer einer Identitätssequenz nicht ändern" -#: commands/sequence.c:1725 commands/tablecmds.c:13550 -#: commands/tablecmds.c:16165 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 +#: commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Sequenz »%s« ist mit Tabelle »%s« verknüpft." -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "in CREATE STATISTICS ist nur eine einzelne Relation erlaubt" @@ -8914,72 +8953,72 @@ msgstr "in CREATE STATISTICS ist nur eine einzelne Relation erlaubt" msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "Relation »%s« ist keine Tabelle, Fremdtabelle oder materialisierte Sicht" -#: commands/statscmds.c:193 +#: commands/statscmds.c:213 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "Statistikobjekt »%s« existiert bereits, wird übersprungen" -#: commands/statscmds.c:201 +#: commands/statscmds.c:221 #, c-format msgid "statistics object \"%s\" already exists" msgstr "Statistikobjekt »%s« existiert bereits" -#: commands/statscmds.c:212 +#: commands/statscmds.c:232 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "Statistiken können nicht mehr als %d Spalten enthalten" -#: commands/statscmds.c:253 commands/statscmds.c:276 commands/statscmds.c:309 +#: commands/statscmds.c:273 commands/statscmds.c:296 commands/statscmds.c:329 #, c-format msgid "statistics creation on system columns is not supported" msgstr "Statistikerzeugung für Systemspalten wird nicht unterstützt" -#: commands/statscmds.c:260 commands/statscmds.c:283 +#: commands/statscmds.c:280 commands/statscmds.c:303 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "Spalte »%s« kann nicht in Statistiken verwendet werden, weil ihr Typ %s keine Standardoperatorklasse für btree hat" -#: commands/statscmds.c:326 +#: commands/statscmds.c:346 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "Ausdruck kann nicht in multivariaten Statistiken verwendet werden, weil sein Typ %s keine Standardoperatorklasse für btree hat" -#: commands/statscmds.c:347 +#: commands/statscmds.c:367 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "wenn Statistiken für einen einzelnen Ausdruck gebaut werden, kann die Statistikart nicht angegeben werden" -#: commands/statscmds.c:376 +#: commands/statscmds.c:396 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "unbekannte Statistikart »%s«" -#: commands/statscmds.c:405 +#: commands/statscmds.c:425 #, c-format msgid "extended statistics require at least 2 columns" msgstr "erweiterte Statistiken benötigen mindestens 2 Spalten" -#: commands/statscmds.c:423 +#: commands/statscmds.c:443 #, c-format msgid "duplicate column name in statistics definition" msgstr "doppelter Spaltenname in Statistikdefinition" -#: commands/statscmds.c:458 +#: commands/statscmds.c:478 #, c-format msgid "duplicate expression in statistics definition" msgstr "doppelter Ausdruck in Statistikdefinition" -#: commands/statscmds.c:639 commands/tablecmds.c:8014 +#: commands/statscmds.c:659 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "Statistikziel %d ist zu niedrig" -#: commands/statscmds.c:647 commands/tablecmds.c:8022 +#: commands/statscmds.c:667 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "setze Statistikziel auf %d herab" -#: commands/statscmds.c:670 +#: commands/statscmds.c:690 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "Statistikobjekt »%s.%s« existiert nicht, wird übersprungen" @@ -9009,7 +9048,7 @@ msgid "must be superuser to create subscriptions" msgstr "nur Superuser können Subskriptionen erzeugen" #: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 -#: replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "konnte nicht mit dem Publikationsserver verbinden: %s" @@ -9050,63 +9089,63 @@ msgstr "Verwenden Sie ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH ist für eine deaktivierte Subskription nicht erlaubt" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "Subskription »%s« existiert nicht, wird übersprungen" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "Replikations-Slot »%s« auf dem Publikationsserver wurde gelöscht" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "konnte Replikations-Slot »%s« auf dem Publikationsserver nicht löschen: %s" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "keine Berechtigung, um Eigentümer der Subskription »%s« zu ändern" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Der Eigentümer einer Subskription muss ein Superuser sein." -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "konnte Liste der replizierten Tabellen nicht vom Publikationsserver empfangen: %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "konnte beim Versuch den Replikations-Slot »%s« zu löschen nicht mit dem Publikationsserver verbinden: %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1581 +#: commands/subscriptioncmds.c:1583 #, c-format msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." msgstr "Verwenden Sie %s, um die Subskription zu deaktivieren, und dann %s, um sie vom Slot zu trennen." -#: commands/subscriptioncmds.c:1612 +#: commands/subscriptioncmds.c:1614 #, c-format msgid "publication name \"%s\" used more than once" msgstr "Publikationsname »%s« mehrmals angegeben" -#: commands/subscriptioncmds.c:1656 +#: commands/subscriptioncmds.c:1658 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "Publikation »%s« ist bereits in Subskription »%s«" -#: commands/subscriptioncmds.c:1670 +#: commands/subscriptioncmds.c:1672 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "Publikation »%s« ist nicht in Subskription »%s«" -#: commands/subscriptioncmds.c:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "kann nicht alle Publikationen von einer Subskription löschen" @@ -9167,7 +9206,7 @@ msgstr "materialisierte Sicht »%s« existiert nicht, wird übersprungen" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Verwenden Sie DROP MATERIALIZED VIEW, um eine materialisierte Sicht zu löschen." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18688 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18753 #: parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" @@ -9191,8 +9230,8 @@ msgstr "»%s« ist kein Typ" msgid "Use DROP TYPE to remove a type." msgstr "Verwenden Sie DROP TYPE, um einen Typen zu löschen." -#: commands/tablecmds.c:277 commands/tablecmds.c:13389 -#: commands/tablecmds.c:15868 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 +#: commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "Fremdtabelle »%s« existiert nicht" @@ -9216,7 +9255,7 @@ msgstr "ON COMMIT kann nur mit temporären Tabellen verwendet werden" msgid "cannot create temporary table within security-restricted operation" msgstr "kann temporäre Tabelle nicht in einer sicherheitsbeschränkten Operation erzeugen" -#: commands/tablecmds.c:738 commands/tablecmds.c:14675 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "von der Relation »%s« würde mehrmals geerbt werden" @@ -9286,7 +9325,7 @@ msgstr "kann Fremdtabelle »%s« nicht leeren" msgid "cannot truncate temporary tables of other sessions" msgstr "kann temporäre Tabellen anderer Sitzungen nicht leeren" -#: commands/tablecmds.c:2427 commands/tablecmds.c:14572 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "von partitionierter Tabelle »%s« kann nicht geerbt werden" @@ -9307,12 +9346,12 @@ msgstr "geerbte Relation »%s« ist keine Tabelle oder Fremdtabelle" msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "eine temporäre Relation kann nicht als Partition der permanenten Relation »%s« erzeugt werden" -#: commands/tablecmds.c:2461 commands/tablecmds.c:14551 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "von temporärer Relation »%s« kann nicht geerbt werden" -#: commands/tablecmds.c:2471 commands/tablecmds.c:14559 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "von temporärer Relation einer anderen Sitzung kann nicht geerbt werden" @@ -9367,7 +9406,7 @@ msgid "inherited column \"%s\" has a generation conflict" msgstr "geerbte Spalte »%s« hat einen Generierungskonflikt" #: commands/tablecmds.c:2682 commands/tablecmds.c:2737 -#: commands/tablecmds.c:12114 parser/parse_utilcmd.c:1260 +#: commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 #: parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 #: parser/parse_utilcmd.c:1857 #, c-format @@ -9651,12 +9690,12 @@ msgstr "zu einer getypten Tabelle kann keine Spalte hinzugefügt werden" msgid "cannot add column to a partition" msgstr "zu einer Partition kann keine Spalte hinzugefügt werden" -#: commands/tablecmds.c:6657 commands/tablecmds.c:14802 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedlichen Typ für Spalte »%s«" -#: commands/tablecmds.c:6663 commands/tablecmds.c:14809 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedliche Sortierfolge für Spalte »%s«" @@ -9671,928 +9710,921 @@ msgstr "Definition von Spalte »%s« für abgeleitete Tabelle »%s« wird zusamm msgid "cannot recursively add identity column to table that has child tables" msgstr "eine Identitätsspalte kann nicht rekursiv zu einer Tabelle hinzugefügt werden, die abgeleitete Tabellen hat" -#: commands/tablecmds.c:6967 +#: commands/tablecmds.c:7000 #, c-format msgid "column must be added to child tables too" msgstr "Spalte muss ebenso in den abgeleiteten Tabellen hinzugefügt werden" -#: commands/tablecmds.c:7045 +#: commands/tablecmds.c:7078 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "Spalte »%s« von Relation »%s« existiert bereits, wird übersprungen" -#: commands/tablecmds.c:7052 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "Spalte »%s« von Relation »%s« existiert bereits" -#: commands/tablecmds.c:7118 commands/tablecmds.c:11742 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "Constraint kann nicht nur von der partitionierten Tabelle entfernt werden, wenn Partitionen existieren" -#: commands/tablecmds.c:7119 commands/tablecmds.c:7436 -#: commands/tablecmds.c:8463 commands/tablecmds.c:11743 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 +#: commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Lassen Sie das Schlüsselwort ONLY weg." -#: commands/tablecmds.c:7156 commands/tablecmds.c:7362 -#: commands/tablecmds.c:7504 commands/tablecmds.c:7618 -#: commands/tablecmds.c:7712 commands/tablecmds.c:7771 -#: commands/tablecmds.c:7889 commands/tablecmds.c:8055 -#: commands/tablecmds.c:8125 commands/tablecmds.c:8281 -#: commands/tablecmds.c:11897 commands/tablecmds.c:13412 -#: commands/tablecmds.c:15959 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 +#: commands/tablecmds.c:7537 commands/tablecmds.c:7651 +#: commands/tablecmds.c:7745 commands/tablecmds.c:7804 +#: commands/tablecmds.c:7922 commands/tablecmds.c:8088 +#: commands/tablecmds.c:8158 commands/tablecmds.c:8314 +#: commands/tablecmds.c:11917 commands/tablecmds.c:13455 +#: commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "Systemspalte »%s« kann nicht geändert werden" -#: commands/tablecmds.c:7162 commands/tablecmds.c:7510 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "Spalte »%s« von Relation »%s« ist eine Identitätsspalte" -#: commands/tablecmds.c:7205 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "Spalte »%s« ist in einem Primärschlüssel" -#: commands/tablecmds.c:7210 +#: commands/tablecmds.c:7243 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "Spalte »%s« ist in einem Index, der als Replik-Identität verwendet wird" -#: commands/tablecmds.c:7233 +#: commands/tablecmds.c:7266 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "Spalte »%s« ist in Elterntabelle als NOT NULL markiert" -#: commands/tablecmds.c:7433 commands/tablecmds.c:8946 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, c-format msgid "constraint must be added to child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen hinzugefügt werden" -#: commands/tablecmds.c:7434 +#: commands/tablecmds.c:7467 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Spalte »%s« von Relation »%s« ist nicht bereits NOT NULL." -#: commands/tablecmds.c:7512 +#: commands/tablecmds.c:7545 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Verwenden Sie stattdessen ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7517 +#: commands/tablecmds.c:7550 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "Spalte »%s« von Relation »%s« ist eine generierte Spalte" -#: commands/tablecmds.c:7520 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Verwenden Sie stattdessen ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION." -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7662 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "Spalte »%s« von Relation »%s« muss als NOT NULL deklariert werden, bevor Sie Identitätsspalte werden kann" -#: commands/tablecmds.c:7635 +#: commands/tablecmds.c:7668 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "Spalte »%s« von Relation »%s« ist bereits eine Identitätsspalte" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:7674 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "Spalte »%s« von Relation »%s« hat bereits einen Vorgabewert" -#: commands/tablecmds.c:7718 commands/tablecmds.c:7779 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte" -#: commands/tablecmds.c:7784 +#: commands/tablecmds.c:7817 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "Spalte »%s« von Relation »%s« ist keine Identitätsspalte, wird übersprungen" -#: commands/tablecmds.c:7837 +#: commands/tablecmds.c:7870 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION muss auch auf abgeleitete Tabellen angewendet werden" -#: commands/tablecmds.c:7859 +#: commands/tablecmds.c:7892 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "Generierungsausdruck von vererbter Spalte kann nicht gelöscht werden" -#: commands/tablecmds.c:7897 +#: commands/tablecmds.c:7930 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "Spalte »%s« von Relation »%s« ist keine gespeicherte generierte Spalte" -#: commands/tablecmds.c:7902 +#: commands/tablecmds.c:7935 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "Spalte »%s« von Relation »%s« ist keine gespeicherte generierte Spalte, wird übersprungen" -#: commands/tablecmds.c:8002 +#: commands/tablecmds.c:8035 #, c-format msgid "cannot refer to non-index column by number" msgstr "auf eine Nicht-Index-Spalte kann nicht per Nummer verwiesen werden" -#: commands/tablecmds.c:8045 +#: commands/tablecmds.c:8078 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "Spalte Nummer %d von Relation »%s« existiert nicht" -#: commands/tablecmds.c:8064 +#: commands/tablecmds.c:8097 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "Statistiken von eingeschlossener Spalte »%s« von Index »%s« können nicht geändert werden" -#: commands/tablecmds.c:8069 +#: commands/tablecmds.c:8102 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "kann Statistiken von Spalte »%s« von Index »%s«, welche kein Ausdruck ist, nicht ändern" -#: commands/tablecmds.c:8071 +#: commands/tablecmds.c:8104 #, c-format msgid "Alter statistics on table column instead." msgstr "Ändern Sie stattdessen die Statistiken für die Tabellenspalte." -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "ungültiger Storage-Typ »%s«" -#: commands/tablecmds.c:8293 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "Spaltendatentyp %s kann nur Storage-Typ PLAIN" -#: commands/tablecmds.c:8338 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "aus einer getypten Tabelle können keine Spalten gelöscht werden" -#: commands/tablecmds.c:8401 +#: commands/tablecmds.c:8434 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "Spalte »%s« von Relation »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:8414 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "Systemspalte »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:8424 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "geerbte Spalte »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:8437 +#: commands/tablecmds.c:8470 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "Spalte »%s« kann nicht gelöscht werden, weil sie Teil des Partitionierungsschlüssels von Relation »%s« ist" -#: commands/tablecmds.c:8462 +#: commands/tablecmds.c:8495 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "Spalte kann nicht nur aus der partitionierten Tabelle gelöscht werden, wenn Partitionen existieren" -#: commands/tablecmds.c:8666 +#: commands/tablecmds.c:8699 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX wird für partitionierte Tabellen nicht unterstützt" -#: commands/tablecmds.c:8691 +#: commands/tablecmds.c:8724 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX benennt Index »%s« um in »%s«" -#: commands/tablecmds.c:9026 +#: commands/tablecmds.c:9059 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ONLY nicht möglich für Fremdschlüssel für partitionierte Tabelle »%s« verweisend auf Relation »%s«" -#: commands/tablecmds.c:9032 +#: commands/tablecmds.c:9065 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "Hinzufügen von Fremdschlüssel mit NOT VALID nicht möglich für partitionierte Tabelle »%s« verweisend auf Relation »%s«" -#: commands/tablecmds.c:9035 +#: commands/tablecmds.c:9068 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Dieses Feature wird für partitionierte Tabellen noch nicht unterstützt." -#: commands/tablecmds.c:9042 commands/tablecmds.c:9447 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "Relation »%s«, auf die verwiesen wird, ist keine Tabelle" -#: commands/tablecmds.c:9065 +#: commands/tablecmds.c:9098 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen" -#: commands/tablecmds.c:9072 +#: commands/tablecmds.c:9105 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "Constraints für ungeloggte Tabellen dürfen nur auf permanente oder ungeloggte Tabellen verweisen" -#: commands/tablecmds.c:9078 +#: commands/tablecmds.c:9111 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "Constraints für temporäre Tabellen dürfen nur auf temporäre Tabellen verweisen" -#: commands/tablecmds.c:9082 +#: commands/tablecmds.c:9115 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "Constraints für temporäre Tabellen müssen temporäre Tabellen dieser Sitzung beinhalten" -#: commands/tablecmds.c:9148 commands/tablecmds.c:9154 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "ungültige %s-Aktion für Fremdschlüssel-Constraint, der eine generierte Spalte enthält" -#: commands/tablecmds.c:9170 +#: commands/tablecmds.c:9203 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "Anzahl der Quell- und Zielspalten im Fremdschlüssel stimmt nicht überein" -#: commands/tablecmds.c:9277 +#: commands/tablecmds.c:9310 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "Fremdschlüssel-Constraint »%s« kann nicht implementiert werden" -#: commands/tablecmds.c:9279 +#: commands/tablecmds.c:9312 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Schlüsselspalten »%s« und »%s« haben inkompatible Typen: %s und %s." -#: commands/tablecmds.c:9642 commands/tablecmds.c:10072 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 #: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "Fremdschlüssel-Constraints auf Fremdtabellen werden nicht unterstützt" -#: commands/tablecmds.c:10055 +#: commands/tablecmds.c:10075 #, c-format msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" msgstr "kann Tabelle »%s« nicht als Partition anfügen, weil auf sie von Fremdschlüssel »%s« verwiesen wird" -#: commands/tablecmds.c:10525 commands/tablecmds.c:10806 -#: commands/tablecmds.c:11699 commands/tablecmds.c:11774 +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 +#: commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "Constraint »%s« von Relation »%s« existiert nicht" -#: commands/tablecmds.c:10532 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "Constraint »%s« von Relation »%s« ist kein Fremdschlüssel-Constraint" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:10590 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "Constraint »%s« von Relation »%s« kann nicht geändert werden" -#: commands/tablecmds.c:10573 +#: commands/tablecmds.c:10593 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "Constraint »%s« ist von Constraint »%s« von Relation »%s« abgeleitet." -#: commands/tablecmds.c:10575 +#: commands/tablecmds.c:10595 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Sie können stattdessen den Constraint, von dem er abgeleitet ist, ändern." -#: commands/tablecmds.c:10814 +#: commands/tablecmds.c:10834 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "Constraint »%s« von Relation »%s« ist kein Fremdschlüssel- oder Check-Constraint" -#: commands/tablecmds.c:10892 +#: commands/tablecmds.c:10912 #, c-format msgid "constraint must be validated on child tables too" msgstr "Constraint muss ebenso in den abgeleiteten Tabellen validiert werden" -#: commands/tablecmds.c:10982 +#: commands/tablecmds.c:11002 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "Spalte »%s«, die im Fremdschlüssel verwendet wird, existiert nicht" -#: commands/tablecmds.c:10988 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "Systemspalten können nicht in Fremdschlüsseln verwendet werden" -#: commands/tablecmds.c:10992 +#: commands/tablecmds.c:11012 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "Fremdschlüssel kann nicht mehr als %d Schlüssel haben" -#: commands/tablecmds.c:11057 +#: commands/tablecmds.c:11077 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "aufschiebbarer Primärschlüssel kann nicht für Tabelle »%s«, auf die verwiesen wird, verwendet werden" -#: commands/tablecmds.c:11074 +#: commands/tablecmds.c:11094 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "in Tabelle »%s«, auf die verwiesen wird, gibt es keinen Primärschlüssel" -#: commands/tablecmds.c:11143 +#: commands/tablecmds.c:11163 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "die Liste der Spalten, auf die ein Fremdschlüssel verweist, darf keine doppelten Einträge enthalten" -#: commands/tablecmds.c:11237 +#: commands/tablecmds.c:11257 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "aufschiebbarer Unique-Constraint kann nicht für Tabelle »%s«, auf die verwiesen wird, verwendet werden" -#: commands/tablecmds.c:11242 +#: commands/tablecmds.c:11262 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "in Tabelle »%s«, auf die verwiesen wird, gibt es keinen Unique-Constraint, der auf die angegebenen Schlüssel passt" -#: commands/tablecmds.c:11655 +#: commands/tablecmds.c:11675 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "geerbter Constraint »%s« von Relation »%s« kann nicht gelöscht werden" -#: commands/tablecmds.c:11705 +#: commands/tablecmds.c:11725 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "Constraint »%s« von Relation »%s« existiert nicht, wird übersprungen" -#: commands/tablecmds.c:11881 +#: commands/tablecmds.c:11901 #, c-format msgid "cannot alter column type of typed table" msgstr "Spaltentyp einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:11907 +#: commands/tablecmds.c:11927 #, c-format msgid "cannot specify USING when altering type of generated column" msgstr "USING kann nicht angegeben werden, wenn der Typ einer generierten Spalte geändert wird" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 -#: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "Spalte »%s« ist eine generierte Spalte." - -#: commands/tablecmds.c:11918 +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "kann vererbte Spalte »%s« nicht ändern" -#: commands/tablecmds.c:11927 +#: commands/tablecmds.c:11947 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "Spalte »%s« kann nicht geändert werden, weil sie Teil des Partitionierungsschlüssels von Relation »%s« ist" -#: commands/tablecmds.c:11977 +#: commands/tablecmds.c:11997 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "Ergebnis der USING-Klausel für Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:11980 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "Sie müssen möglicherweise eine ausdrückliche Typumwandlung hinzufügen." -#: commands/tablecmds.c:11984 +#: commands/tablecmds.c:12004 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11988 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Sie müssen möglicherweise »USING %s::%s« angeben." -#: commands/tablecmds.c:12087 +#: commands/tablecmds.c:12107 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "geerbte Spalte »%s« von Relation »%s« kann nicht geändert werden" -#: commands/tablecmds.c:12115 +#: commands/tablecmds.c:12135 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING-Ausdruck enthält einen Verweis auf die ganze Zeile der Tabelle." -#: commands/tablecmds.c:12126 +#: commands/tablecmds.c:12146 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "Typ der vererbten Spalte »%s« muss ebenso in den abgeleiteten Tabellen geändert werden" -#: commands/tablecmds.c:12251 +#: commands/tablecmds.c:12271 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "Typ der Spalte »%s« kann nicht zweimal geändert werden" -#: commands/tablecmds.c:12289 +#: commands/tablecmds.c:12309 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "Generierungsausdruck der Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:12294 +#: commands/tablecmds.c:12314 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "Vorgabewert der Spalte »%s« kann nicht automatisch in Typ %s umgewandelt werden" -#: commands/tablecmds.c:12372 +#: commands/tablecmds.c:12392 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "Typ einer Spalte, die von einer generierten Spalte verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12373 +#: commands/tablecmds.c:12393 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Spalte »%s« wird von generierter Spalte »%s« verwendet." -#: commands/tablecmds.c:12401 +#: commands/tablecmds.c:12421 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "Typ einer Spalte, die von einer Funktion oder Prozedur verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12402 commands/tablecmds.c:12416 -#: commands/tablecmds.c:12435 commands/tablecmds.c:12453 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 +#: commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s hängt von Spalte »%s« ab" -#: commands/tablecmds.c:12415 +#: commands/tablecmds.c:12435 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "Typ einer Spalte, die von einer Sicht oder Regel verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12434 +#: commands/tablecmds.c:12454 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "Typ einer Spalte, die in einer Trigger-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:12472 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "Typ einer Spalte, die in einer Policy-Definition verwendet wird, kann nicht geändert werden" -#: commands/tablecmds.c:13520 commands/tablecmds.c:13532 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "kann Eigentümer des Index »%s« nicht ändern" -#: commands/tablecmds.c:13522 commands/tablecmds.c:13534 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Ändern Sie stattdessen den Eigentümer der Tabelle des Index." -#: commands/tablecmds.c:13548 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "kann Eigentümer der Sequenz »%s« nicht ändern" -#: commands/tablecmds.c:13562 commands/tablecmds.c:16861 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "Verwenden Sie stattdessen ALTER TYPE." -#: commands/tablecmds.c:13571 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "»%s« ist keine Tabelle, Sicht, Sequenz oder Fremdtabelle" -#: commands/tablecmds.c:13910 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "mehrere SET TABLESPACE Unterbefehle sind ungültig" -#: commands/tablecmds.c:13987 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, Index noch TOAST-Tabelle" -#: commands/tablecmds.c:14020 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION wird nur für automatisch aktualisierbare Sichten unterstützt" -#: commands/tablecmds.c:14273 +#: commands/tablecmds.c:14316 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "nur Tabellen, Indexe und materialisierte Sichten existieren in Tablespaces" -#: commands/tablecmds.c:14285 +#: commands/tablecmds.c:14328 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "Relationen können nicht in den oder aus dem Tablespace »pg_global« verschoben werden" -#: commands/tablecmds.c:14377 +#: commands/tablecmds.c:14420 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "Abbruch weil Sperre für Relation »%s.%s« nicht verfügbar ist" -#: commands/tablecmds.c:14393 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "keine passenden Relationen in Tablespace »%s« gefunden" -#: commands/tablecmds.c:14510 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "Vererbung einer getypten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:14515 commands/tablecmds.c:15071 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "Vererbung einer Partition kann nicht geändert werden" -#: commands/tablecmds.c:14520 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "Vererbung einer partitionierten Tabelle kann nicht geändert werden" -#: commands/tablecmds.c:14566 +#: commands/tablecmds.c:14609 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "an temporäre Relation einer anderen Sitzung kann nicht vererbt werden" -#: commands/tablecmds.c:14579 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "von einer Partition kann nicht geerbt werden" -#: commands/tablecmds.c:14601 commands/tablecmds.c:17507 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17560 #, c-format msgid "circular inheritance not allowed" msgstr "zirkuläre Vererbung ist nicht erlaubt" -#: commands/tablecmds.c:14602 commands/tablecmds.c:17508 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17561 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "»%s« ist schon von »%s« abgeleitet." -#: commands/tablecmds.c:14615 +#: commands/tablecmds.c:14658 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "Trigger »%s« verhindert, dass Tabelle »%s« ein Vererbungskind werden kann" -#: commands/tablecmds.c:14617 +#: commands/tablecmds.c:14660 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW-Trigger mit Übergangstabellen werden in Vererbungshierarchien nicht unterstützt." -#: commands/tablecmds.c:14820 +#: commands/tablecmds.c:14863 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "Spalte »%s« in abgeleiteter Tabelle muss als NOT NULL markiert sein" -#: commands/tablecmds.c:14829 +#: commands/tablecmds.c:14872 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "Spalte »%s« in abgeleiteter Tabelle muss eine generierte Spalte sein" -#: commands/tablecmds.c:14879 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "Spalte »%s« in abgeleiteter Tabelle hat einen widersprüchlichen Generierungsausdruck" -#: commands/tablecmds.c:14907 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "Spalte »%s« fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:14995 +#: commands/tablecmds.c:15038 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "abgeleitete Tabelle »%s« hat unterschiedliche Definition für Check-Constraint »%s«" -#: commands/tablecmds.c:15003 +#: commands/tablecmds.c:15046 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "Constraint »%s« kollidiert mit nicht vererbtem Constraint für abgeleitete Tabelle »%s«" -#: commands/tablecmds.c:15014 +#: commands/tablecmds.c:15057 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "Constraint »%s« kollidiert mit NOT-VALID-Constraint für abgeleitete Tabelle »%s«" -#: commands/tablecmds.c:15049 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "Constraint »%s« fehlt in abgeleiteter Tabelle" -#: commands/tablecmds.c:15135 +#: commands/tablecmds.c:15178 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "Partition »%s« hat schon eine unerledigte Abtrennoperation in der partitionierten Tabelle »%s.%s«" -#: commands/tablecmds.c:15164 commands/tablecmds.c:15212 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "Relation »%s« ist keine Partition von Relation »%s«" -#: commands/tablecmds.c:15218 +#: commands/tablecmds.c:15261 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "Relation »%s« ist keine Basisrelation von Relation »%s«" -#: commands/tablecmds.c:15446 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "getypte Tabellen können nicht erben" -#: commands/tablecmds.c:15476 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "Spalte »%s« fehlt in Tabelle" -#: commands/tablecmds.c:15487 +#: commands/tablecmds.c:15530 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "Tabelle hat Spalte »%s«, aber Typ benötigt »%s«" -#: commands/tablecmds.c:15496 +#: commands/tablecmds.c:15539 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "Tabelle »%s« hat unterschiedlichen Typ für Spalte »%s«" -#: commands/tablecmds.c:15510 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "Tabelle hat zusätzliche Spalte »%s«" -#: commands/tablecmds.c:15562 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "»%s« ist keine getypte Tabelle" -#: commands/tablecmds.c:15736 +#: commands/tablecmds.c:15779 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "nicht eindeutiger Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15742 +#: commands/tablecmds.c:15785 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil er nicht IMMEDIATE ist" -#: commands/tablecmds.c:15748 +#: commands/tablecmds.c:15791 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "Ausdrucksindex »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15754 +#: commands/tablecmds.c:15797 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "partieller Index »%s« kann nicht als Replik-Identität verwendet werden" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:15814 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil Spalte %d eine Systemspalte ist" -#: commands/tablecmds.c:15778 +#: commands/tablecmds.c:15821 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "Index »%s« kann nicht als Replik-Identität verwendet werden, weil Spalte »%s« NULL-Werte akzeptiert" -#: commands/tablecmds.c:16025 +#: commands/tablecmds.c:16068 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "kann den geloggten Status der Tabelle »%s« nicht ändern, weil sie temporär ist" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:16092 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "kann Tabelle »%s« nicht in ungeloggt ändern, weil sie Teil einer Publikation ist" -#: commands/tablecmds.c:16051 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Ungeloggte Relationen können nicht repliziert werden." -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16139 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "konnte Tabelle »%s« nicht in geloggt ändern, weil sie auf die ungeloggte Tabelle »%s« verweist" -#: commands/tablecmds.c:16106 +#: commands/tablecmds.c:16149 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "konnte Tabelle »%s« nicht in ungeloggt ändern, weil sie auf die geloggte Tabelle »%s« verweist" -#: commands/tablecmds.c:16164 +#: commands/tablecmds.c:16207 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "einer Tabelle zugeordnete Sequenz kann nicht in ein anderes Schema verschoben werden" -#: commands/tablecmds.c:16269 +#: commands/tablecmds.c:16312 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "Relation »%s« existiert bereits in Schema »%s«" -#: commands/tablecmds.c:16844 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "»%s« ist kein zusammengesetzter Typ" -#: commands/tablecmds.c:16876 +#: commands/tablecmds.c:16919 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "»%s« ist weder Tabelle, Sicht, materialisierte Sicht, Sequenz noch Fremdtabelle" -#: commands/tablecmds.c:16911 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "unbekannte Partitionierungsstrategie »%s«" -#: commands/tablecmds.c:16919 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "Partitionierungsstrategie »list« kann nicht mit mehr als einer Spalte verwendet werden" -#: commands/tablecmds.c:16985 +#: commands/tablecmds.c:17028 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "Spalte »%s«, die im Partitionierungsschlüssel verwendet wird, existiert nicht" -#: commands/tablecmds.c:16993 +#: commands/tablecmds.c:17036 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "Systemspalte »%s« kann nicht im Partitionierungsschlüssel verwendet werden" -#: commands/tablecmds.c:17004 commands/tablecmds.c:17094 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17126 #, c-format msgid "cannot use generated column in partition key" msgstr "generierte Spalte kann nicht im Partitionierungsschlüssel verwendet werden" -#: commands/tablecmds.c:17077 +#: commands/tablecmds.c:17116 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "Partitionierungsschlüsselausdruck kann nicht auf Systemspalten verweisen" -#: commands/tablecmds.c:17124 +#: commands/tablecmds.c:17177 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "Funktionen im Partitionierungsschlüsselausdruck müssen als IMMUTABLE markiert sein" -#: commands/tablecmds.c:17133 +#: commands/tablecmds.c:17186 #, c-format msgid "cannot use constant expression as partition key" msgstr "Partitionierungsschlüssel kann kein konstanter Ausdruck sein" -#: commands/tablecmds.c:17154 +#: commands/tablecmds.c:17207 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "konnte die für den Partitionierungsausdruck zu verwendende Sortierfolge nicht bestimmen" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17242 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Sie müssen eine hash-Operatorklasse angeben oder eine hash-Standardoperatorklasse für den Datentyp definieren." -#: commands/tablecmds.c:17195 +#: commands/tablecmds.c:17248 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Sie müssen eine btree-Operatorklasse angeben oder eine btree-Standardoperatorklasse für den Datentyp definieren." -#: commands/tablecmds.c:17447 +#: commands/tablecmds.c:17500 #, c-format msgid "\"%s\" is already a partition" msgstr "»%s« ist bereits eine Partition" -#: commands/tablecmds.c:17453 +#: commands/tablecmds.c:17506 #, c-format msgid "cannot attach a typed table as partition" msgstr "eine getypte Tabelle kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17469 +#: commands/tablecmds.c:17522 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ein Vererbungskind kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17483 +#: commands/tablecmds.c:17536 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "eine Tabelle mit abgeleiteten Tabellen kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17517 +#: commands/tablecmds.c:17570 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "eine temporäre Relation kann nicht als Partition an permanente Relation »%s« angefügt werden" -#: commands/tablecmds.c:17525 +#: commands/tablecmds.c:17578 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "eine permanente Relation kann nicht als Partition an temporäre Relation »%s« angefügt werden" -#: commands/tablecmds.c:17533 +#: commands/tablecmds.c:17586 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "kann nicht als Partition an temporäre Relation einer anderen Sitzung anfügen" -#: commands/tablecmds.c:17540 +#: commands/tablecmds.c:17593 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "temporäre Relation einer anderen Sitzung kann nicht als Partition angefügt werden" -#: commands/tablecmds.c:17560 +#: commands/tablecmds.c:17613 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "Tabelle »%s« enthält Spalte »%s«, die nicht in der Elterntabelle »%s« gefunden wurde" -#: commands/tablecmds.c:17563 +#: commands/tablecmds.c:17616 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Die neue Partition darf nur Spalten enthalten, die auch die Elterntabelle hat." -#: commands/tablecmds.c:17575 +#: commands/tablecmds.c:17628 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "Trigger »%s« verhindert, dass Tabelle »%s« eine Partition werden kann" -#: commands/tablecmds.c:17577 commands/trigger.c:459 +#: commands/tablecmds.c:17630 commands/trigger.c:459 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "ROW-Trigger mit Übergangstabellen werden für Partitionen nicht unterstützt" -#: commands/tablecmds.c:17756 +#: commands/tablecmds.c:17809 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "kann Fremdtabelle »%s« nicht als Partition an partitionierte Tabelle »%s« anfügen" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:17812 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Partitionierte Tabelle »%s« enthält Unique-Indexe." -#: commands/tablecmds.c:18083 +#: commands/tablecmds.c:18137 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "nebenläufiges Abtrennen einer Partition ist nicht möglich, wenn eine Standardpartition existiert" -#: commands/tablecmds.c:18192 +#: commands/tablecmds.c:18249 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "partitionierte Tabelle »%s« wurde nebenläufig entfernt" -#: commands/tablecmds.c:18198 +#: commands/tablecmds.c:18255 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "Partition »%s« wurde nebenläufig entfernt" -#: commands/tablecmds.c:18722 commands/tablecmds.c:18742 -#: commands/tablecmds.c:18762 commands/tablecmds.c:18781 -#: commands/tablecmds.c:18823 +#: commands/tablecmds.c:18787 commands/tablecmds.c:18807 +#: commands/tablecmds.c:18827 commands/tablecmds.c:18846 +#: commands/tablecmds.c:18888 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "kann Index »%s« nicht als Partition an Index »%s« anfügen" -#: commands/tablecmds.c:18725 +#: commands/tablecmds.c:18790 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Index »%s« ist bereits an einen anderen Index angefügt." -#: commands/tablecmds.c:18745 +#: commands/tablecmds.c:18810 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Index »%s« ist kein Index irgendeiner Partition von Tabelle »%s«." -#: commands/tablecmds.c:18765 +#: commands/tablecmds.c:18830 #, c-format msgid "The index definitions do not match." msgstr "Die Indexdefinitionen stimmen nicht überein." -#: commands/tablecmds.c:18784 +#: commands/tablecmds.c:18849 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Der Index »%s« gehört zu einem Constraint in Tabelle »%s«, aber kein Constraint existiert für Index »%s«." -#: commands/tablecmds.c:18826 +#: commands/tablecmds.c:18891 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Ein anderer Index ist bereits für Partition »%s« angefügt." -#: commands/tablecmds.c:19063 +#: commands/tablecmds.c:19128 #, c-format msgid "column data type %s does not support compression" msgstr "Spaltendatentyp %s unterstützt keine Komprimierung" -#: commands/tablecmds.c:19070 +#: commands/tablecmds.c:19135 #, c-format msgid "invalid compression method \"%s\"" msgstr "ungültige Komprimierungsmethode »%s«" #: commands/tablespace.c:161 commands/tablespace.c:177 -#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1478 +#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1538 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" @@ -10691,8 +10723,8 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "Verzeichnis »%s« ist bereits als Tablespace in Verwendung" #: commands/tablespace.c:768 commands/tablespace.c:781 -#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3169 -#: storage/file/fd.c:3560 +#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 +#: storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "konnte Verzeichnis »%s« nicht löschen: %m" @@ -10923,59 +10955,64 @@ msgstr "Trigger »%s« für Tabelle »%s« existiert nicht" msgid "permission denied: \"%s\" is a system trigger" msgstr "keine Berechtigung: »%s« ist ein Systemtrigger" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "Triggerfunktion %u gab NULL-Wert zurück" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 -#: commands/trigger.c:3056 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 +#: commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "Trigger für BEFORE STATEMENT kann keinen Wert zurückgeben" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "Verschieben einer Zeile in eine andere Partition durch einen BEFORE-FOR-EACH-ROW-Trigger wird nicht unterstützt" -#: commands/trigger.c:2356 +#: commands/trigger.c:2358 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Vor der Ausführung von Trigger »%s« gehörte die Zeile in Partition »%s.%s«." -#: commands/trigger.c:3123 executor/nodeModifyTable.c:1314 -#: executor/nodeModifyTable.c:1388 executor/nodeModifyTable.c:1969 -#: executor/nodeModifyTable.c:2059 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 +#, c-format +msgid "cannot collect transition tuples from child foreign tables" +msgstr "aus abgeleiteten Fremdtabellen können keine Übergangstupel gesammelt werden" + +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 +#: executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 +#: executor/nodeModifyTable.c:2079 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Verwenden Sie einen AFTER-Trigger anstelle eines BEFORE-Triggers, um Änderungen an andere Zeilen zu propagieren." -#: commands/trigger.c:3152 executor/nodeLockRows.c:229 -#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:238 -#: executor/nodeModifyTable.c:1330 executor/nodeModifyTable.c:1986 -#: executor/nodeModifyTable.c:2232 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 +#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 +#: executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 +#: executor/nodeModifyTable.c:2252 #, c-format msgid "could not serialize access due to concurrent update" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitiger Aktualisierung" -#: commands/trigger.c:3160 executor/nodeModifyTable.c:1420 -#: executor/nodeModifyTable.c:2076 executor/nodeModifyTable.c:2256 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 +#: executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2268 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "konnte Zugriff nicht serialisieren wegen gleichzeitigem Löschen" -#: commands/trigger.c:4254 +#: commands/trigger.c:4284 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "aufgeschobener Trigger kann nicht in einer sicherheitsbeschränkten Operation ausgelöst werden" -#: commands/trigger.c:5302 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "Constraint »%s« ist nicht aufschiebbar" -#: commands/trigger.c:5325 +#: commands/trigger.c:5359 #, c-format msgid "constraint \"%s\" does not exist" msgstr "Constraint »%s« existiert nicht" @@ -11442,7 +11479,7 @@ msgid "permission denied to create role" msgstr "keine Berechtigung, um Rolle zu erzeugen" #: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15260 -#: gram.y:15305 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: gram.y:15305 utils/adt/acl.c:5265 utils/adt/acl.c:5271 #, c-format msgid "role name \"%s\" is reserved" msgstr "Rollenname »%s« ist reserviert" @@ -11513,8 +11550,8 @@ msgstr "in DROP ROLE kann kein Rollenplatzhalter verwendet werden" #: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 #: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 -#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:755 +#: utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 +#: utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "Rolle »%s« existiert nicht" @@ -11619,107 +11656,107 @@ msgstr "Rolle »%s« ist schon Mitglied der Rolle »%s«" msgid "role \"%s\" is not a member of role \"%s\"" msgstr "Rolle »%s« ist kein Mitglied der Rolle »%s«" -#: commands/vacuum.c:133 +#: commands/vacuum.c:134 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "unbekannte ANALYZE-Option »%s«" -#: commands/vacuum.c:171 +#: commands/vacuum.c:172 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "Option PARALLEL benötigt einen Wert zwischen 0 und %d" -#: commands/vacuum.c:183 +#: commands/vacuum.c:184 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "parallele Arbeitsprozesse für Vacuum müssen zwischen 0 und %d sein" -#: commands/vacuum.c:200 +#: commands/vacuum.c:201 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "unbekannte VACUUM-Option »%s«" -#: commands/vacuum.c:223 +#: commands/vacuum.c:224 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL kann nicht parallel ausgeführt werden" -#: commands/vacuum.c:239 +#: commands/vacuum.c:240 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "Option ANALYZE muss angegeben werden, wenn eine Spaltenliste angegeben ist" -#: commands/vacuum.c:329 +#: commands/vacuum.c:330 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s kann nicht aus VACUUM oder ANALYZE ausgeführt werden" -#: commands/vacuum.c:339 +#: commands/vacuum.c:340 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM-Option DISABLE_PAGE_SKIPPING kann nicht zusammen mit FULL verwendet werden" -#: commands/vacuum.c:346 +#: commands/vacuum.c:347 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "PROCESS_TOAST benötigt VACUUM FULL" -#: commands/vacuum.c:587 +#: commands/vacuum.c:597 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "überspringe »%s« --- nur Superuser kann sie vacuumen" -#: commands/vacuum.c:591 +#: commands/vacuum.c:601 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "überspringe »%s« --- nur Superuser oder Eigentümer der Datenbank kann sie vacuumen" -#: commands/vacuum.c:595 +#: commands/vacuum.c:605 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "überspringe »%s« --- nur Eigentümer der Tabelle oder der Datenbank kann sie vacuumen" -#: commands/vacuum.c:610 +#: commands/vacuum.c:620 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "überspringe »%s« --- nur Superuser kann sie analysieren" -#: commands/vacuum.c:614 +#: commands/vacuum.c:624 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "überspringe »%s« --- nur Superuser oder Eigentümer der Datenbank kann sie analysieren" -#: commands/vacuum.c:618 +#: commands/vacuum.c:628 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "überspringe »%s« --- nur Eigentümer der Tabelle oder der Datenbank kann sie analysieren" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:707 commands/vacuum.c:803 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "überspringe Vacuum von »%s« --- Sperre nicht verfügbar" -#: commands/vacuum.c:702 +#: commands/vacuum.c:712 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "überspringe Vacuum von »%s« --- Relation existiert nicht mehr" -#: commands/vacuum.c:718 commands/vacuum.c:798 +#: commands/vacuum.c:728 commands/vacuum.c:808 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "überspringe Analyze von »%s« --- Sperre nicht verfügbar" -#: commands/vacuum.c:723 +#: commands/vacuum.c:733 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "überspringe Analyze von »%s« --- Relation existiert nicht mehr" -#: commands/vacuum.c:1041 +#: commands/vacuum.c:1051 #, c-format msgid "oldest xmin is far in the past" msgstr "älteste xmin ist weit in der Vergangenheit" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1052 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11728,32 +11765,32 @@ msgstr "" "Schließen Sie bald alle offenen Transaktionen, um Überlaufprobleme zu vermeiden.\n" "Eventuell müssen Sie auch alte vorbereitete Transaktionen committen oder zurückrollen oder unbenutzte Replikations-Slots löschen." -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1093 #, c-format msgid "oldest multixact is far in the past" msgstr "älteste Multixact ist weit in der Vergangenheit" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1094 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Schließen Sie bald alle offenen Transaktionen mit Multixacts, um Überlaufprobleme zu vermeiden." -#: commands/vacuum.c:1769 +#: commands/vacuum.c:1779 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "einige Datenbanken sind seit über 2 Milliarden Transaktionen nicht gevacuumt worden" -#: commands/vacuum.c:1770 +#: commands/vacuum.c:1780 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Sie haben möglicherweise bereits Daten wegen Transaktionsnummernüberlauf verloren." -#: commands/vacuum.c:1938 +#: commands/vacuum.c:1961 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "überspringe »%s« --- kann Nicht-Tabellen oder besondere Systemtabellen nicht vacuumen" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 #: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." @@ -11963,8 +12000,8 @@ msgstr "kein Wert für Parameter %d gefunden" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 #: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 #: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 -#: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 -#: executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, c-format msgid "table row type and query-specified row type do not match" msgstr "Zeilentyp der Tabelle und der von der Anfrage angegebene Zeilentyp stimmen nicht überein" @@ -11974,18 +12011,18 @@ msgstr "Zeilentyp der Tabelle und der von der Anfrage angegebene Zeilentyp stimm msgid "Query has too many columns." msgstr "Anfrage hat zu viele Spalten." -#: executor/execExpr.c:644 executor/nodeModifyTable.c:156 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "Anfrage liefert einen Wert für eine gelöschte Spalte auf Position %d." #: executor/execExpr.c:650 executor/execExprInterp.c:4063 -#: executor/nodeModifyTable.c:139 +#: executor/nodeModifyTable.c:174 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "Tabelle hat Typ %s auf Position %d, aber Anfrage erwartet %s." -#: executor/execExpr.c:1098 parser/parse_agg.c:828 +#: executor/execExpr.c:1098 parser/parse_agg.c:881 #, c-format msgid "window function calls cannot be nested" msgstr "Aufrufe von Fensterfunktionen können nicht geschachtelt werden" @@ -12059,8 +12096,8 @@ msgstr "Arrayelement mit Typ %s kann nicht in ARRAY-Konstrukt mit Elementtyp %s #: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 -#: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 -#: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 +#: utils/adt/arrayfuncs.c:3515 utils/adt/arrayfuncs.c:5586 +#: utils/adt/arrayfuncs.c:6105 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" @@ -12077,8 +12114,8 @@ msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dim #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 #: utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 #: utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 -#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 -#: utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 +#: utils/adt/arrayfuncs.c:3545 utils/adt/arrayfuncs.c:6197 +#: utils/adt/arrayfuncs.c:6538 utils/adt/arrayutils.c:88 #: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" @@ -12146,165 +12183,165 @@ msgstr "Schlüssel %s kollidiert mit vorhandenem Schlüssel %s." msgid "Key conflicts with existing key." msgstr "Der Schlüssel kollidiert mit einem vorhandenen Schlüssel." -#: executor/execMain.c:1006 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "kann Sequenz »%s« nicht ändern" -#: executor/execMain.c:1012 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "kann TOAST-Relation »%s« nicht ändern" -#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 -#: rewrite/rewriteHandler.c:3986 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3148 +#: rewrite/rewriteHandler.c:4010 #, c-format msgid "cannot insert into view \"%s\"" msgstr "kann nicht in Sicht »%s« einfügen" -#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 -#: rewrite/rewriteHandler.c:3989 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3151 +#: rewrite/rewriteHandler.c:4013 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Um Einfügen in die Sicht zu ermöglichen, richten Sie einen INSTEAD OF INSERT Trigger oder eine ON INSERT DO INSTEAD Regel ohne Bedingung ein." -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 -#: rewrite/rewriteHandler.c:3994 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3156 +#: rewrite/rewriteHandler.c:4018 #, c-format msgid "cannot update view \"%s\"" msgstr "kann Sicht »%s« nicht aktualisieren" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 -#: rewrite/rewriteHandler.c:3997 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:4021 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Um Aktualisieren der Sicht zu ermöglichen, richten Sie einen INSTEAD OF UPDATE Trigger oder eine ON UPDATE DO INSTEAD Regel ohne Bedingung ein." -#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 -#: rewrite/rewriteHandler.c:4002 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3164 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "cannot delete from view \"%s\"" msgstr "kann nicht aus Sicht »%s« löschen" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 -#: rewrite/rewriteHandler.c:4005 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3167 +#: rewrite/rewriteHandler.c:4029 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Um Löschen aus der Sicht zu ermöglichen, richten Sie einen INSTEAD OF DELETE Trigger oder eine ON DELETE DO INSTEAD Regel ohne Bedingung ein." -#: executor/execMain.c:1059 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "kann materialisierte Sicht »%s« nicht ändern" -#: executor/execMain.c:1071 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "kann nicht in Fremdtabelle »%s« einfügen" -#: executor/execMain.c:1077 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "Fremdtabelle »%s« erlaubt kein Einfügen" -#: executor/execMain.c:1084 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "kann Fremdtabelle »%s« nicht aktualisieren" -#: executor/execMain.c:1090 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "Fremdtabelle »%s« erlaubt kein Aktualisieren" -#: executor/execMain.c:1097 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "kann nicht aus Fremdtabelle »%s« löschen" -#: executor/execMain.c:1103 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "Fremdtabelle »%s« erlaubt kein Löschen" -#: executor/execMain.c:1114 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "kann Relation »%s« nicht ändern" -#: executor/execMain.c:1141 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "kann Zeilen in Sequenz »%s« nicht sperren" -#: executor/execMain.c:1148 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "kann Zeilen in TOAST-Relation »%s« nicht sperren" -#: executor/execMain.c:1155 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "kann Zeilen in Sicht »%s« nicht sperren" -#: executor/execMain.c:1163 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "kann Zeilen in materialisierter Sicht »%s« nicht sperren" -#: executor/execMain.c:1172 executor/execMain.c:2591 +#: executor/execMain.c:1192 executor/execMain.c:2613 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "kann Zeilen in Fremdtabelle »%s« nicht sperren" -#: executor/execMain.c:1178 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "kann Zeilen in Relation »%s« nicht sperren" -#: executor/execMain.c:1807 +#: executor/execMain.c:1827 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "neue Zeile für Relation »%s« verletzt Partitions-Constraint" -#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 -#: executor/execMain.c:2051 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 +#: executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "Fehlgeschlagene Zeile enthält %s." -#: executor/execMain.c:1889 +#: executor/execMain.c:1909 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "NULL-Wert in Spalte »%s« von Relation »%s« verletzt Not-Null-Constraint" -#: executor/execMain.c:1940 +#: executor/execMain.c:1960 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "neue Zeile für Relation »%s« verletzt Check-Constraint »%s«" -#: executor/execMain.c:2049 +#: executor/execMain.c:2069 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "neue Zeile verletzt Check-Option für Sicht »%s«" -#: executor/execMain.c:2059 +#: executor/execMain.c:2079 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene »%s« für Tabelle »%s«" -#: executor/execMain.c:2064 +#: executor/execMain.c:2084 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene für Tabelle »%s«" -#: executor/execMain.c:2071 +#: executor/execMain.c:2091 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene »%s« (USING-Ausdruck) für Tabelle »%s«" -#: executor/execMain.c:2076 +#: executor/execMain.c:2096 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "neue Zeile verletzt Policy für Sicherheit auf Zeilenebene (USING-Ausdruck) für Tabelle »%s«" @@ -12334,10 +12371,10 @@ msgstr "gleichzeitige Aktualisierung, versuche erneut" msgid "concurrent delete, retrying" msgstr "gleichzeitiges Löschen, versuche erneut" -#: executor/execReplication.c:277 parser/parse_cte.c:301 +#: executor/execReplication.c:277 parser/parse_cte.c:302 #: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 -#: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 -#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6255 +#: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3870 +#: utils/adt/arrayfuncs.c:4424 utils/adt/arrayfuncs.c:6418 #: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" @@ -12520,7 +12557,7 @@ msgstr "Rückgabetyp %s wird von SQL-Funktionen nicht unterstützt" msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "unerwartetes EOF für Tape %d: %zu Bytes angefordert, %zu Bytes gelesen" -#: executor/nodeAgg.c:3979 parser/parse_agg.c:670 parser/parse_agg.c:698 +#: executor/nodeAgg.c:3979 parser/parse_agg.c:677 parser/parse_agg.c:720 #, c-format msgid "aggregate function calls cannot be nested" msgstr "Aufrufe von Aggregatfunktionen können nicht geschachtelt werden" @@ -12572,30 +12609,35 @@ msgstr "FULL JOIN wird nur für Merge-Verbund-fähige Verbundbedingungen unterst #: executor/nodeModifyTable.c:164 #, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "Anfrage liefert einen Wert für eine generierte Spalte auf Position %d." + +#: executor/nodeModifyTable.c:184 +#, c-format msgid "Query has too few columns." msgstr "Anfrage hat zu wenige Spalten." -#: executor/nodeModifyTable.c:1313 executor/nodeModifyTable.c:1387 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "das zu löschende Tupel wurde schon durch eine vom aktuellen Befehl ausgelöste Operation verändert" -#: executor/nodeModifyTable.c:1591 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "ungültige ON-UPDATE-Angabe" -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:1612 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Das Ergebnistupel würde in einer anderen Partition erscheinen als das ursprüngliche Tupel." -#: executor/nodeModifyTable.c:2211 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "Befehl in ON CONFLICT DO UPDATE kann eine Zeile nicht ein zweites Mal ändern" -#: executor/nodeModifyTable.c:2212 +#: executor/nodeModifyTable.c:2232 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Stellen Sie sicher, dass keine im selben Befehl fürs Einfügen vorgesehene Zeilen doppelte Werte haben, die einen Constraint verletzen würden." @@ -12610,8 +12652,8 @@ msgstr "Parameter von TABLESAMPLE darf nicht NULL sein" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "Parameter von TABLESAMPLE REPEATABLE darf nicht NULL sein" -#: executor/nodeSubplan.c:325 executor/nodeSubplan.c:351 -#: executor/nodeSubplan.c:405 executor/nodeSubplan.c:1174 +#: executor/nodeSubplan.c:306 executor/nodeSubplan.c:332 +#: executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile" @@ -12717,7 +12759,7 @@ msgstr "%s kann nicht als Cursor geöffnet werden" msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE wird nicht unterstützt" -#: executor/spi.c:1730 parser/analyze.c:2864 +#: executor/spi.c:1730 parser/analyze.c:2865 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Scrollbare Cursor müssen READ ONLY sein." @@ -12758,7 +12800,7 @@ msgstr "konnte Tupel nicht an Shared-Memory-Queue senden" msgid "user mapping not found for \"%s\"" msgstr "Benutzerabbildung für »%s« nicht gefunden" -#: foreign/foreign.c:331 optimizer/plan/createplan.c:7047 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 #: optimizer/util/plancat.c:474 #, c-format msgid "access to non-system foreign table is restricted" @@ -13072,8 +13114,8 @@ msgstr "WITH TIES kann nicht ohne ORDER-BY-Klausel angegeben werden" msgid "improper use of \"*\"" msgstr "unzulässige Verwendung von »*«" -#: gram.y:16630 gram.y:16647 tsearch/spell.c:983 tsearch/spell.c:1000 -#: tsearch/spell.c:1017 tsearch/spell.c:1034 tsearch/spell.c:1099 +#: gram.y:16630 gram.y:16647 tsearch/spell.c:982 tsearch/spell.c:998 +#: tsearch/spell.c:1014 tsearch/spell.c:1030 tsearch/spell.c:1095 #, c-format msgid "syntax error" msgstr "Syntaxfehler" @@ -13225,8 +13267,8 @@ msgstr "konnte Konfigurationsverzeichnis »%s« nicht öffnen: %m" #: jsonpath_gram.y:528 jsonpath_scan.l:519 jsonpath_scan.l:530 #: jsonpath_scan.l:540 jsonpath_scan.l:582 utils/adt/encode.c:482 -#: utils/adt/encode.c:547 utils/adt/jsonfuncs.c:629 utils/adt/varlena.c:336 -#: utils/adt/varlena.c:377 +#: utils/adt/encode.c:547 utils/adt/jsonfuncs.c:629 utils/adt/varlena.c:337 +#: utils/adt/varlena.c:378 #, c-format msgid "invalid input syntax for type %s" msgstr "ungültige Eingabesyntax für Typ %s" @@ -13419,565 +13461,565 @@ msgstr "Fehlerhafter Proof in »client-final-message«." msgid "Garbage found at the end of client-final-message." msgstr "Müll am Ende der »client-final-message« gefunden." -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "Authentifizierung für Benutzer »%s« fehlgeschlagen: Host abgelehnt" -#: libpq/auth.c:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "»trust«-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Ident-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "Peer-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "Passwort-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "GSSAPI-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "SSPI-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "PAM-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "BSD-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "LDAP-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "RADIUS-Authentifizierung für Benutzer »%s« fehlgeschlagen" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "Authentifizierung für Benutzer »%s« fehlgeschlagen: ungültige Authentifizierungsmethode" -#: libpq/auth.c:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "Verbindung stimmte mit pg_hba.conf-Zeile %d überein: »%s«" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "Authentifizierungsbezeichner mehrmals gesetzt" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "vorheriger Bezeichner: »%s«; neuer Bezeichner: »%s«" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "Verbindung authentifiziert: Identität=»%s« Methode=%s (%s:%d)" -#: libpq/auth.c:420 +#: libpq/auth.c:428 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "Client-Zertifikate können nur überprüft werden, wenn Wurzelzertifikat verfügbar ist" -#: libpq/auth.c:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "Verbindung erfordert ein gültiges Client-Zertifikat" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "GSS-Verschlüsselung" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "SSL-Verschlüsselung" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "keine Verschlüsselung" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf lehnt Replikationsverbindung ab für Host »%s«, Benutzer »%s«, %s" #. translator: last %s describes encryption state -#: libpq/auth.c:480 +#: libpq/auth.c:488 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf lehnt Verbindung ab für Host »%s«, Benutzer »%s«, Datenbank »%s«, %s" -#: libpq/auth.c:518 +#: libpq/auth.c:526 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "Auflösung der Client-IP-Adresse ergab »%s«, Vorwärtsauflösung stimmt überein." -#: libpq/auth.c:521 +#: libpq/auth.c:529 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "Auflösung der Client-IP-Adresse ergab »%s«, Vorwärtsauflösung nicht geprüft." -#: libpq/auth.c:524 +#: libpq/auth.c:532 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "Auflösung der Client-IP-Adresse ergab »%s«, Vorwärtsauflösung stimmt nicht überein." -#: libpq/auth.c:527 +#: libpq/auth.c:535 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "Konnte Client-Hostnamen »%s« nicht in IP-Adresse übersetzen: %s." -#: libpq/auth.c:532 +#: libpq/auth.c:540 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Konnte Client-IP-Adresse nicht in einen Hostnamen auflösen: %s." #. translator: last %s describes encryption state -#: libpq/auth.c:540 +#: libpq/auth.c:548 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "kein pg_hba.conf-Eintrag für Replikationsverbindung von Host »%s«, Benutzer »%s«, %s" #. translator: last %s describes encryption state -#: libpq/auth.c:548 +#: libpq/auth.c:556 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "kein pg_hba.conf-Eintrag für Host »%s«, Benutzer »%s«, Datenbank »%s«, %s" -#: libpq/auth.c:721 +#: libpq/auth.c:729 #, c-format msgid "expected password response, got message type %d" msgstr "Passwort-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "ungültige Größe des Passwortpakets" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "Client gab leeres Passwort zurück" -#: libpq/auth.c:885 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "MD5-Authentifizierung wird nicht unterstützt, wenn »db_user_namespace« angeschaltet ist" -#: libpq/auth.c:891 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "konnte zufälliges MD5-Salt nicht erzeugen" -#: libpq/auth.c:957 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "SASL-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1086 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "konnte Umgebung nicht setzen: %m" -#: libpq/auth.c:1122 +#: libpq/auth.c:1130 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1182 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "Annahme des GSS-Sicherheitskontexts fehlgeschlagen" -#: libpq/auth.c:1223 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "Abfrage des GSS-Benutzernamens fehlgeschlagen" -#: libpq/auth.c:1372 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "konnte SSPI-Credentials nicht erhalten" -#: libpq/auth.c:1397 +#: libpq/auth.c:1405 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI-Antwort erwartet, Message-Typ %d empfangen" -#: libpq/auth.c:1475 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "konnte SSPI-Sicherheitskontext nicht akzeptieren" -#: libpq/auth.c:1537 +#: libpq/auth.c:1545 msgid "could not get token from SSPI security context" msgstr "konnte kein Token vom SSPI-Sicherheitskontext erhalten" -#: libpq/auth.c:1676 libpq/auth.c:1695 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "konnte Namen nicht umwandeln" -#: libpq/auth.c:1708 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "Realm-Name zu lang" -#: libpq/auth.c:1723 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "umgewandelter Account-Name zu lang" -#: libpq/auth.c:1904 +#: libpq/auth.c:1912 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "konnte Socket für Ident-Verbindung nicht erzeugen: %m" -#: libpq/auth.c:1919 +#: libpq/auth.c:1927 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "konnte nicht mit lokaler Adresse »%s« verbinden: %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1939 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "konnte nicht mit Ident-Server auf Adresse »%s«, Port %s verbinden: %m" -#: libpq/auth.c:1953 +#: libpq/auth.c:1961 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "konnte Anfrage an Ident-Server auf Adresse »%s«, Port %s nicht senden: %m" -#: libpq/auth.c:1970 +#: libpq/auth.c:1978 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "konnte Antwort von Ident-Server auf Adresse »%s«, Port %s nicht empfangen: %m" -#: libpq/auth.c:1980 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "ungültig formatierte Antwort vom Ident-Server: »%s«" -#: libpq/auth.c:2033 +#: libpq/auth.c:2041 #, c-format msgid "peer authentication is not supported on this platform" msgstr "Peer-Authentifizierung wird auf dieser Plattform nicht unterstützt" -#: libpq/auth.c:2037 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %m" -#: libpq/auth.c:2049 +#: libpq/auth.c:2057 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "konnte lokale Benutzer-ID %ld nicht nachschlagen: %s" -#: libpq/auth.c:2150 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "Fehler von der unteren PAM-Ebene: %s" -#: libpq/auth.c:2161 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "nicht unterstützte PAM-Conversation: %d/»%s«" -#: libpq/auth.c:2221 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "konnte PAM-Authenticator nicht erzeugen: %s" -#: libpq/auth.c:2232 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) fehlgeschlagen: %s" -#: libpq/auth.c:2264 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) fehlgeschlagen: %s" -#: libpq/auth.c:2276 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) fehlgeschlagen: %s" -#: libpq/auth.c:2289 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate fehlgeschlagen: %s" -#: libpq/auth.c:2302 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt fehlgeschlagen: %s" -#: libpq/auth.c:2313 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "konnte PAM-Authenticator nicht freigeben: %s" -#: libpq/auth.c:2393 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "konnte LDAP nicht initialisieren: Fehlercode %d" -#: libpq/auth.c:2430 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "konnte keinen Domain-Namen aus ldapbasedn herauslesen" -#: libpq/auth.c:2438 +#: libpq/auth.c:2446 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP-Authentifizierung konnte keine DNS-SRV-Einträge für »%s« finden" -#: libpq/auth.c:2440 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Geben Sie einen LDAP-Servernamen explizit an." -#: libpq/auth.c:2492 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "konnte LDAP nicht initialisieren: %s" -#: libpq/auth.c:2502 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps wird mit dieser LDAP-Bibliothek nicht unterstützt" -#: libpq/auth.c:2510 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "konnte LDAP nicht initialisieren: %m" -#: libpq/auth.c:2520 +#: libpq/auth.c:2528 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "konnte LDAP-Protokollversion nicht setzen: %s" -#: libpq/auth.c:2560 +#: libpq/auth.c:2568 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "konnte Funktion _ldap_start_tls_sA in wldap32.dll nicht laden" -#: libpq/auth.c:2561 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP über SSL wird auf dieser Plattform nicht unterstützt." -#: libpq/auth.c:2577 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "konnte LDAP-TLS-Sitzung nicht starten: %s" -#: libpq/auth.c:2648 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP-Server nicht angegeben, und kein ldapbasedn" -#: libpq/auth.c:2655 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "LDAP-Server nicht angegeben" -#: libpq/auth.c:2717 +#: libpq/auth.c:2725 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "ungültiges Zeichen im Benutzernamen für LDAP-Authentifizierung" -#: libpq/auth.c:2734 +#: libpq/auth.c:2742 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "erstes LDAP-Binden für ldapbinddn »%s« auf Server »%s« fehlgeschlagen: %s" -#: libpq/auth.c:2763 +#: libpq/auth.c:2771 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "konnte LDAP nicht mit Filter »%s« auf Server »%s« durchsuchen: %s" -#: libpq/auth.c:2777 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-Benutzer »%s« existiert nicht" -#: libpq/auth.c:2778 +#: libpq/auth.c:2786 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-Suche nach Filter »%s« auf Server »%s« gab keine Einträge zurück." -#: libpq/auth.c:2782 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-Benutzer »%s« ist nicht eindeutig" -#: libpq/auth.c:2783 +#: libpq/auth.c:2791 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "LDAP-Suche nach Filter »%s« auf Server »%s« gab %d Eintrag zurück." msgstr[1] "LDAP-Suche nach Filter »%s« auf Server »%s« gab %d Einträge zurück." -#: libpq/auth.c:2803 +#: libpq/auth.c:2811 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "konnte DN fũr den ersten Treffer für »%s« auf Server »%s« nicht lesen: %s" -#: libpq/auth.c:2824 +#: libpq/auth.c:2832 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "Losbinden fehlgeschlagen nach Suche nach Benutzer »%s« auf Server »%s«" -#: libpq/auth.c:2855 +#: libpq/auth.c:2863 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "LDAP-Login fehlgeschlagen für Benutzer »%s« auf Server »%s«: %s" -#: libpq/auth.c:2887 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP-Diagnostik: %s" -#: libpq/auth.c:2925 +#: libpq/auth.c:2933 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen: Client-Zertifikat enthält keinen Benutzernamen" -#: libpq/auth.c:2946 +#: libpq/auth.c:2954 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "Zertifikatauthentifizierung für Benutzer »%s« fehlgeschlagen: konnte Subject-DN nicht abfragen" -#: libpq/auth.c:2969 +#: libpq/auth.c:2977 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "Zertifikatüberprüfung (clientcert=verify=full) für Benutzer »%s« fehlgeschlagen: DN stimmt nicht überein" -#: libpq/auth.c:2974 +#: libpq/auth.c:2982 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "Zertifikatüberprüfung (clientcert=verify=full) für Benutzer »%s« fehlgeschlagen: CN stimmt nicht überein" -#: libpq/auth.c:3076 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-Server nicht angegeben" -#: libpq/auth.c:3083 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS-Geheimnis nicht angegeben" -#: libpq/auth.c:3097 +#: libpq/auth.c:3105 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS-Authentifizierung unterstützt keine Passwörter länger als %d Zeichen" -#: libpq/auth.c:3204 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "konnte RADIUS-Servername »%s« nicht in Adresse übersetzen: %s" -#: libpq/auth.c:3218 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "konnte zufälligen Verschlüsselungsvektor nicht erzeugen" -#: libpq/auth.c:3252 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "konnte MD5-Verschlüsselung des Passworts nicht durchführen" -#: libpq/auth.c:3278 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "konnte RADIUS-Socket nicht erstellen: %m" -#: libpq/auth.c:3300 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "konnte lokales RADIUS-Socket nicht binden: %m" -#: libpq/auth.c:3310 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "konnte RADIUS-Paket nicht senden: %m" -#: libpq/auth.c:3343 libpq/auth.c:3369 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "Zeitüberschreitung beim Warten auf RADIUS-Antwort von %s" -#: libpq/auth.c:3362 +#: libpq/auth.c:3370 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "konnte Status des RADIUS-Sockets nicht prüfen: %m" -#: libpq/auth.c:3392 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "konnte RADIUS-Antwort nicht lesen: %m" -#: libpq/auth.c:3405 libpq/auth.c:3409 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "RADIUS-Antwort von %s wurde von falschem Port gesendet: %d" -#: libpq/auth.c:3418 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "RADIUS-Antwort von %s zu kurz: %d" -#: libpq/auth.c:3425 +#: libpq/auth.c:3433 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "RADIUS-Antwort von %s hat verfälschte Länge: %d (tatsächliche Länge %d)" -#: libpq/auth.c:3433 +#: libpq/auth.c:3441 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "RADIUS-Antwort von %s unterscheidet sich von Anfrage: %d (sollte %d sein)" -#: libpq/auth.c:3458 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "konnte MD5-Verschlüsselung des empfangenen Pakets nicht durchführen" -#: libpq/auth.c:3467 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "RADIUS-Antwort von %s hat falsche MD5-Signatur" -#: libpq/auth.c:3485 +#: libpq/auth.c:3493 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "RADIUS-Antwort von %s hat ungültigen Code (%d) für Benutzer »%s«" @@ -14082,44 +14124,39 @@ msgstr "private Schlüsseldatei »%s« erlaubt Zugriff von Gruppe oder Welt" msgid "File must have permissions u=rw (0600) or less if owned by the database user, or permissions u=rw,g=r (0640) or less if owned by root." msgstr "Dateirechte müssen u=rw (0600) oder weniger sein, wenn der Eigentümer der Datenbankbenutzer ist, oder u=rw,g=r (0640) oder weniger, wenn der Eigentümer »root« ist." -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:208 msgid "GSSAPI wrap error" msgstr "GSSAPI-Wrap-Fehler" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "ausgehende GSSAPI-Nachricht würde keine Vertraulichkeit verwenden" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "Server versuchte übergroßes GSSAPI-Paket zu senden (%zu > %zu)" -#: libpq/be-secure-gssapi.c:351 +#: libpq/be-secure-gssapi.c:358 libpq/be-secure-gssapi.c:580 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "übergroßes GSSAPI-Paket vom Client gesendet (%zu > %zu)" -#: libpq/be-secure-gssapi.c:389 +#: libpq/be-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "GSSAPI-Unwrap-Fehler" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "eingehende GSSAPI-Nachricht verwendete keine Vertraulichkeit" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "übergroßes GSSAPI-Paket vom Client gesendet (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "konnte GSSAPI-Sicherheitskontext nicht akzeptieren" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "GSSAPI-Fehler bei der Größenprüfung" @@ -14392,7 +14429,7 @@ msgstr "Authentifizierungsoption »%s« ist nur gültig für Authentifizierungsm #: libpq/hba.c:1673 libpq/hba.c:1731 libpq/hba.c:1748 libpq/hba.c:1761 #: libpq/hba.c:1773 libpq/hba.c:1792 libpq/hba.c:1879 libpq/hba.c:1897 #: libpq/hba.c:1991 libpq/hba.c:2010 libpq/hba.c:2039 libpq/hba.c:2052 -#: libpq/hba.c:2075 libpq/hba.c:2097 libpq/hba.c:2111 tsearch/ts_locale.c:232 +#: libpq/hba.c:2075 libpq/hba.c:2097 libpq/hba.c:2111 tsearch/ts_locale.c:205 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "Zeile %d in Konfigurationsdatei »%s«" @@ -14865,7 +14902,7 @@ msgstr "es besteht keine Client-Verbindung" msgid "could not receive data from client: %m" msgstr "konnte Daten vom Client nicht empfangen: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "Verbindung wird abgebrochen, weil Protokollsynchronisierung verloren wurde" @@ -15231,14 +15268,14 @@ msgstr "erweiterbarer Knotentyp »%s« existiert bereits" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods »%s« wurde nicht registriert" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "Relation »%s« hat keinen zusammengesetzten Typ" #: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 #: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 -#: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 +#: parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" @@ -15266,49 +15303,49 @@ msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s kann nicht auf die nullbare Seite eines äußeren Verbundes angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1316 parser/analyze.c:1720 parser/analyze.c:1976 -#: parser/analyze.c:3155 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 +#: parser/analyze.c:3156 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s ist nicht in UNION/INTERSECT/EXCEPT erlaubt" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "konnte GROUP BY nicht implementieren" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 -#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 +#: optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Einige Datentypen unterstützen nur Hashing, während andere nur Sortieren unterstützen." -#: optimizer/plan/planner.c:4387 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "konnte DISTINCT nicht implementieren" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "konnte PARTITION BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:5236 +#: optimizer/plan/planner.c:5266 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Fensterpartitionierungsspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/planner.c:5240 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "konnte ORDER BY für Fenster nicht implementieren" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fenstersortierspalten müssen sortierbare Datentypen haben." -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "zu viele Range-Table-Einträge" @@ -15344,22 +15381,22 @@ msgstr "kann Relation »%s« nicht öffnen" msgid "cannot access temporary or unlogged relations during recovery" msgstr "während der Wiederherstellung kann nicht auf temporäre oder ungeloggte Tabellen zugegriffen werden" -#: optimizer/util/plancat.c:702 +#: optimizer/util/plancat.c:707 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "Inferenzangaben mit Unique-Index über die gesamte Zeile werden nicht unterstützt" -#: optimizer/util/plancat.c:719 +#: optimizer/util/plancat.c:724 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "Constraint in der ON-CONFLICT-Klausel hat keinen zugehörigen Index" -#: optimizer/util/plancat.c:769 +#: optimizer/util/plancat.c:774 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE nicht unterstützt mit Exclusion-Constraints" -#: optimizer/util/plancat.c:879 +#: optimizer/util/plancat.c:884 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "es gibt keinen Unique-Constraint oder Exclusion-Constraint, der auf die ON-CONFLICT-Angabe passt" @@ -15390,7 +15427,7 @@ msgid "SELECT ... INTO is not allowed here" msgstr "SELECT ... INTO ist hier nicht erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:1623 parser/analyze.c:3366 +#: parser/analyze.c:1623 parser/analyze.c:3367 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s kann nicht auf VALUES angewendet werden" @@ -15443,455 +15480,465 @@ msgid "variable \"%s\" is of type %s but expression is of type %s" msgstr "Variable »%s« hat Typ %s, aber der Ausdruck hat Typ %s" #. translator: %s is a SQL keyword -#: parser/analyze.c:2814 parser/analyze.c:2822 +#: parser/analyze.c:2815 parser/analyze.c:2823 #, c-format msgid "cannot specify both %s and %s" msgstr "%s und %s können nicht beide angegeben werden" -#: parser/analyze.c:2842 +#: parser/analyze.c:2843 #, c-format msgid "DECLARE CURSOR must not contain data-modifying statements in WITH" msgstr "DECLARE CURSOR darf keine datenmodifizierenden Anweisungen in WITH enthalten" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2850 +#: parser/analyze.c:2851 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s wird nicht unterstützt" -#: parser/analyze.c:2853 +#: parser/analyze.c:2854 #, c-format msgid "Holdable cursors must be READ ONLY." msgstr "Haltbare Cursor müssen READ ONLY sein." #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2861 +#: parser/analyze.c:2862 #, c-format msgid "DECLARE SCROLL CURSOR ... %s is not supported" msgstr "DECLARE SCROLL CURSOR ... %s wird nicht unterstützt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:2872 +#: parser/analyze.c:2873 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s ist nicht gültig" -#: parser/analyze.c:2875 +#: parser/analyze.c:2876 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Insensitive Cursor müssen READ ONLY sein." -#: parser/analyze.c:2941 +#: parser/analyze.c:2942 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "materialisierte Sichten dürfen keine datenmodifizierenden Anweisungen in WITH verwenden" -#: parser/analyze.c:2951 +#: parser/analyze.c:2952 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "materialisierte Sichten dürfen keine temporären Tabellen oder Sichten verwenden" -#: parser/analyze.c:2961 +#: parser/analyze.c:2962 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "materialisierte Sichten können nicht unter Verwendung von gebundenen Parametern definiert werden" -#: parser/analyze.c:2973 +#: parser/analyze.c:2974 #, c-format msgid "materialized views cannot be unlogged" msgstr "materialisierte Sichten können nicht ungeloggt sein" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3162 +#: parser/analyze.c:3163 #, c-format msgid "%s is not allowed with DISTINCT clause" msgstr "%s ist nicht mit DISTINCT-Klausel erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3169 +#: parser/analyze.c:3170 #, c-format msgid "%s is not allowed with GROUP BY clause" msgstr "%s ist nicht mit GROUP-BY-Klausel erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3176 +#: parser/analyze.c:3177 #, c-format msgid "%s is not allowed with HAVING clause" msgstr "%s ist nicht mit HAVING-Klausel erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3183 +#: parser/analyze.c:3184 #, c-format msgid "%s is not allowed with aggregate functions" msgstr "%s ist nicht mit Aggregatfunktionen erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3190 +#: parser/analyze.c:3191 #, c-format msgid "%s is not allowed with window functions" msgstr "%s ist nicht mit Fensterfunktionen erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3197 +#: parser/analyze.c:3198 #, c-format msgid "%s is not allowed with set-returning functions in the target list" msgstr "%s ist nicht mit Funktionen mit Ergebnismenge in der Targetliste erlaubt" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3289 +#: parser/analyze.c:3290 #, c-format msgid "%s must specify unqualified relation names" msgstr "%s muss unqualifizierte Relationsnamen angeben" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3339 +#: parser/analyze.c:3340 #, c-format msgid "%s cannot be applied to a join" msgstr "%s kann nicht auf einen Verbund angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3348 +#: parser/analyze.c:3349 #, c-format msgid "%s cannot be applied to a function" msgstr "%s kann nicht auf eine Funktion angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3357 +#: parser/analyze.c:3358 #, c-format msgid "%s cannot be applied to a table function" msgstr "%s kann nicht auf eine Tabellenfunktion angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3375 +#: parser/analyze.c:3376 #, c-format msgid "%s cannot be applied to a WITH query" msgstr "%s kann nicht auf eine WITH-Anfrage angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3384 +#: parser/analyze.c:3385 #, c-format msgid "%s cannot be applied to a named tuplestore" msgstr "%s kann nicht auf einen benannten Tupelstore angewendet werden" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3404 +#: parser/analyze.c:3405 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "Relation »%s« in %s nicht in der FROM-Klausel gefunden" -#: parser/parse_agg.c:208 parser/parse_oper.c:227 +#: parser/parse_agg.c:211 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" -msgstr "konnte keine Sortieroperator für Typ %s ermitteln" +msgstr "konnte keinen Sortieroperator für Typ %s ermitteln" -#: parser/parse_agg.c:210 +#: parser/parse_agg.c:213 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Aggregatfunktionen mit DISTINCT müssen ihre Eingaben sortieren können." -#: parser/parse_agg.c:268 +#: parser/parse_agg.c:271 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING muss weniger als 32 Argumente haben" -#: parser/parse_agg.c:371 +#: parser/parse_agg.c:375 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "Aggregatfunktionen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:377 msgid "grouping operations are not allowed in JOIN conditions" msgstr "Gruppieroperationen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:383 +#: parser/parse_agg.c:387 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "Aggregatfunktionen sind nicht in der FROM-Klausel ihrer eigenen Anfrageebene erlaubt" -#: parser/parse_agg.c:385 +#: parser/parse_agg.c:389 msgid "grouping operations are not allowed in FROM clause of their own query level" msgstr "Gruppieroperationen sind nicht in der FROM-Klausel ihrer eigenen Anfrageebene erlaubt" -#: parser/parse_agg.c:390 +#: parser/parse_agg.c:394 msgid "aggregate functions are not allowed in functions in FROM" msgstr "Aggregatfunktionen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:396 msgid "grouping operations are not allowed in functions in FROM" msgstr "Gruppieroperationen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:400 +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in policy expressions" msgstr "Aggregatfunktionen sind in Policy-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:402 +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in policy expressions" msgstr "Gruppieroperationen sind in Policy-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:419 +#: parser/parse_agg.c:423 msgid "aggregate functions are not allowed in window RANGE" msgstr "Aggregatfunktionen sind in der Fenster-RANGE-Klausel nicht erlaubt" -#: parser/parse_agg.c:421 +#: parser/parse_agg.c:425 msgid "grouping operations are not allowed in window RANGE" msgstr "Gruppieroperationen sind in der Fenster-RANGE-Klausel nicht erlaubt" -#: parser/parse_agg.c:426 +#: parser/parse_agg.c:430 msgid "aggregate functions are not allowed in window ROWS" msgstr "Aggregatfunktionen sind in der Fenster-ROWS-Klausel nicht erlaubt" -#: parser/parse_agg.c:428 +#: parser/parse_agg.c:432 msgid "grouping operations are not allowed in window ROWS" msgstr "Gruppieroperationen sind in der Fenster-ROWS-Klausel nicht erlaubt" -#: parser/parse_agg.c:433 +#: parser/parse_agg.c:437 msgid "aggregate functions are not allowed in window GROUPS" msgstr "Aggregatfunktionen sind in der Fenster-GROUPS-Klausel nicht erlaubt" -#: parser/parse_agg.c:435 +#: parser/parse_agg.c:439 msgid "grouping operations are not allowed in window GROUPS" msgstr "Gruppieroperationen sind in der Fenster-GROUPS-Klausel nicht erlaubt" -#: parser/parse_agg.c:469 +#: parser/parse_agg.c:473 msgid "aggregate functions are not allowed in check constraints" msgstr "Aggregatfunktionen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:471 +#: parser/parse_agg.c:475 msgid "grouping operations are not allowed in check constraints" msgstr "Gruppieroperationen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:478 +#: parser/parse_agg.c:482 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "Aggregatfunktionen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:480 +#: parser/parse_agg.c:484 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "Gruppieroperationen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:485 +#: parser/parse_agg.c:489 msgid "aggregate functions are not allowed in index expressions" msgstr "Aggregatfunktionen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:487 +#: parser/parse_agg.c:491 msgid "grouping operations are not allowed in index expressions" msgstr "Gruppieroperationen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:496 msgid "aggregate functions are not allowed in index predicates" msgstr "Aggregatfunktionen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:494 +#: parser/parse_agg.c:498 msgid "grouping operations are not allowed in index predicates" msgstr "Gruppieroperationen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:503 msgid "aggregate functions are not allowed in statistics expressions" msgstr "Aggregatfunktionen sind in Statistikausdrücken nicht erlaubt" -#: parser/parse_agg.c:501 +#: parser/parse_agg.c:505 msgid "grouping operations are not allowed in statistics expressions" msgstr "Gruppieroperationen sind in Statistikausdrücken nicht erlaubt" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:510 msgid "aggregate functions are not allowed in transform expressions" msgstr "Aggregatfunktionen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:508 +#: parser/parse_agg.c:512 msgid "grouping operations are not allowed in transform expressions" msgstr "Gruppieroperationen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:517 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "Aggregatfunktionen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:515 +#: parser/parse_agg.c:519 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "Gruppieroperationen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:524 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "Aggregatfunktionen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_agg.c:522 +#: parser/parse_agg.c:526 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "Gruppieroperationen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:531 msgid "aggregate functions are not allowed in partition bound" msgstr "Aggregatfunktionen sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_agg.c:529 +#: parser/parse_agg.c:533 msgid "grouping operations are not allowed in partition bound" msgstr "Gruppieroperationen sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:538 msgid "aggregate functions are not allowed in partition key expressions" msgstr "Aggregatfunktionen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:540 msgid "grouping operations are not allowed in partition key expressions" msgstr "Gruppieroperationen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:546 msgid "aggregate functions are not allowed in column generation expressions" msgstr "Aggregatfunktionen sind in Spaltengenerierungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:548 msgid "grouping operations are not allowed in column generation expressions" msgstr "Gruppieroperationen sind in Spaltengenerierungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:550 +#: parser/parse_agg.c:554 msgid "aggregate functions are not allowed in CALL arguments" msgstr "Aggregatfunktionen sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_agg.c:552 +#: parser/parse_agg.c:556 msgid "grouping operations are not allowed in CALL arguments" msgstr "Gruppieroperationen sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_agg.c:558 +#: parser/parse_agg.c:562 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "Aggregatfunktionen sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:560 +#: parser/parse_agg.c:564 msgid "grouping operations are not allowed in COPY FROM WHERE conditions" msgstr "Gruppieroperationen sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:587 parser/parse_clause.c:1834 +#: parser/parse_agg.c:591 parser/parse_clause.c:1834 #, c-format msgid "aggregate functions are not allowed in %s" msgstr "Aggregatfunktionen sind in %s nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:590 +#: parser/parse_agg.c:594 #, c-format msgid "grouping operations are not allowed in %s" msgstr "Gruppieroperationen sind in %s nicht erlaubt" -#: parser/parse_agg.c:691 +#: parser/parse_agg.c:690 parser/parse_agg.c:727 +#, c-format +msgid "outer-level aggregate cannot use a nested CTE" +msgstr "Aggregatfunktionen auf äußerer Ebene kann keine geschachtelte CTE verwenden" + +#: parser/parse_agg.c:691 parser/parse_agg.c:728 +#, c-format +msgid "CTE \"%s\" is below the aggregate's semantic level." +msgstr "CTE »%s« ist unterhalb der semantischen Ebene der Aggregatfunktion." + +#: parser/parse_agg.c:713 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "Aggregatfunktion auf äußerer Ebene kann keine Variable einer unteren Ebene in ihren direkten Argumenten haben" -#: parser/parse_agg.c:769 +#: parser/parse_agg.c:798 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "Aufrufe von Aggregatfunktionen können keine Aufrufe von Funktionen mit Ergebnismenge enthalten" -#: parser/parse_agg.c:770 parser/parse_expr.c:1678 parser/parse_expr.c:2159 +#: parser/parse_agg.c:799 parser/parse_expr.c:1678 parser/parse_expr.c:2167 #: parser/parse_func.c:883 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Sie können möglicherweise die Funktion mit Ergebnismenge in ein LATERAL-FROM-Element verschieben." -#: parser/parse_agg.c:775 +#: parser/parse_agg.c:804 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "Aufrufe von Aggregatfunktionen können keine Aufrufe von Fensterfunktionen enthalten" -#: parser/parse_agg.c:854 +#: parser/parse_agg.c:907 msgid "window functions are not allowed in JOIN conditions" msgstr "Fensterfunktionen sind in JOIN-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:861 +#: parser/parse_agg.c:914 msgid "window functions are not allowed in functions in FROM" msgstr "Fensterfunktionen sind in Funktionen in FROM nicht erlaubt" -#: parser/parse_agg.c:867 +#: parser/parse_agg.c:920 msgid "window functions are not allowed in policy expressions" msgstr "Fensterfunktionen sind in Policy-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:880 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in window definitions" msgstr "Fensterfunktionen sind in Fensterdefinitionen nicht erlaubt" -#: parser/parse_agg.c:912 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in check constraints" msgstr "Fensterfunktionen sind in Check-Constraints nicht erlaubt" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in DEFAULT expressions" msgstr "Fensterfunktionen sind in DEFAULT-Ausdrücken nicht erlaubt" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:972 msgid "window functions are not allowed in index expressions" msgstr "Fensterfunktionen sind in Indexausdrücken nicht erlaubt" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:975 msgid "window functions are not allowed in statistics expressions" msgstr "Fensterfunktionen sind in Statistikausdrücken nicht erlaubt" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:978 msgid "window functions are not allowed in index predicates" msgstr "Fensterfunktionen sind in Indexprädikaten nicht erlaubt" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:981 msgid "window functions are not allowed in transform expressions" msgstr "Fensterfunktionen sind in Umwandlungsausdrücken nicht erlaubt" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:984 msgid "window functions are not allowed in EXECUTE parameters" msgstr "Fensterfunktionen sind in EXECUTE-Parametern nicht erlaubt" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:987 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "Fensterfunktionen sind in der WHEN-Bedingung eines Triggers nicht erlaubt" -#: parser/parse_agg.c:937 +#: parser/parse_agg.c:990 msgid "window functions are not allowed in partition bound" msgstr "Fensterfunktionen sind in Partitionsbegrenzungen nicht erlaubt" -#: parser/parse_agg.c:940 +#: parser/parse_agg.c:993 msgid "window functions are not allowed in partition key expressions" msgstr "Fensterfunktionen sind in Partitionierungsschlüsselausdrücken nicht erlaubt" -#: parser/parse_agg.c:943 +#: parser/parse_agg.c:996 msgid "window functions are not allowed in CALL arguments" msgstr "Fensterfunktionen sind in CALL-Argumenten nicht erlaubt" -#: parser/parse_agg.c:946 +#: parser/parse_agg.c:999 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "Fensterfunktionen sind in COPY-FROM-WHERE-Bedingungen nicht erlaubt" -#: parser/parse_agg.c:949 +#: parser/parse_agg.c:1002 msgid "window functions are not allowed in column generation expressions" msgstr "Fensterfunktionen sind in Spaltengenerierungsausdrücken nicht erlaubt" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:972 parser/parse_clause.c:1843 +#: parser/parse_agg.c:1025 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "Fensterfunktionen sind in %s nicht erlaubt" -#: parser/parse_agg.c:1006 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1059 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "Fenster »%s« existiert nicht" -#: parser/parse_agg.c:1090 +#: parser/parse_agg.c:1143 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "zu viele Grouping-Sets vorhanden (maximal 4096)" -#: parser/parse_agg.c:1230 +#: parser/parse_agg.c:1283 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "Aggregatfunktionen sind nicht im rekursiven Ausdruck einer rekursiven Anfrage erlaubt" -#: parser/parse_agg.c:1423 +#: parser/parse_agg.c:1476 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "Spalte »%s.%s« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden" -#: parser/parse_agg.c:1426 +#: parser/parse_agg.c:1479 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Direkte Argumente einer Ordered-Set-Aggregatfunktion dürfen nur gruppierte Spalten verwenden." -#: parser/parse_agg.c:1431 +#: parser/parse_agg.c:1484 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "Unteranfrage verwendet nicht gruppierte Spalte »%s.%s« aus äußerer Anfrage" -#: parser/parse_agg.c:1595 +#: parser/parse_agg.c:1648 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "Argumente von GROUPING müssen Gruppierausdrücke der zugehörigen Anfrageebene sein" @@ -16169,7 +16216,7 @@ msgstr "Wandeln Sie den Offset-Wert in den genauen beabsichtigten Typ um." #: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 #: parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 -#: parser/parse_expr.c:2060 parser/parse_expr.c:2662 parser/parse_target.c:1008 +#: parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "kann Typ %s nicht in Typ %s umwandeln" @@ -16364,147 +16411,147 @@ msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in INTERSECT erscheinen msgid "recursive reference to query \"%s\" must not appear within EXCEPT" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht in EXCEPT erscheinen" -#: parser/parse_cte.c:136 +#: parser/parse_cte.c:137 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "WIHT-Anfragename »%s« mehrmals angegeben" -#: parser/parse_cte.c:307 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "konnte keinen Ist-Ungleich-Operator für Typ %s ermitteln" -#: parser/parse_cte.c:334 +#: parser/parse_cte.c:335 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "WITH-Klausel mit datenmodifizierender Anweisung muss auf der obersten Ebene sein" -#: parser/parse_cte.c:383 +#: 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 "Spalte %2$d in rekursiver Anfrage »%1$s« hat Typ %3$s im nicht-rekursiven Teilausdruck aber Typ %4$s insgesamt" -#: parser/parse_cte.c:389 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Wandeln Sie die Ausgabe des nicht-rekursiven Teilausdrucks in den korrekten Typ um." -#: parser/parse_cte.c:394 +#: 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 "Spalte %2$d in rekursiver Anfrage »%1$s« hat Sortierfolge %3$s im nicht-rekursiven Teilausdruck aber Sortierfolge %4$s insgesamt" -#: parser/parse_cte.c:398 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Verwenden Sie die COLLATE-Klausel, um die Sortierfolge des nicht-rekursiven Teilsausdrucks zu setzen." -#: parser/parse_cte.c:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "WITH-Anfrage ist nicht rekursiv" -#: parser/parse_cte.c:450 +#: 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 "mit einer SEARCH- oder CYCLE-Klausel muss die linke Seite von UNION ein SELECT sein" -#: parser/parse_cte.c:455 +#: 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 "mit einer SEARCH- oder CYCLE-Klausel muss mit rechte Seite von UNION ein SELECT sein" -#: parser/parse_cte.c:470 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "Search-Spalte »%s« ist nicht in der Spaltenliste der WITH-Anfrage" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "Search-Spalte »%s« mehrmals angegeben" -#: parser/parse_cte.c:486 +#: parser/parse_cte.c:487 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "Search-Sequenz-Spaltenname »%s« schon in Spaltenliste der WITH-Anfrage verwendet" -#: parser/parse_cte.c:503 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "Cycle-Spalte »%s« ist nicht in der Spaltenliste der WITH-Anfrage" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "Zyklusspalte »%s« mehrmals angegeben" -#: parser/parse_cte.c:519 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "Zyklusmarkierungsspaltenname »%s« schon in Spaltenliste der WITH-Anfrage verwendet" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "Zykluspfadspaltenname »%s« schon in Spaltenliste der WITH-Anfrage verwendet" -#: parser/parse_cte.c:534 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "Zyklusmarkierungsspaltenname und Zykluspfadspaltenname sind gleich" -#: parser/parse_cte.c:544 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "Search-Sequenz-Spaltenname und Zyklusmarkierungsspaltenname sind gleich" -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "Search-Sequenz-Spaltenname und Zykluspfadspaltenname sind gleich" -#: parser/parse_cte.c:635 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "WITH-Anfrage »%s« hat %d Spalten verfügbar, aber %d Spalten wurden angegeben" -#: parser/parse_cte.c:815 +#: parser/parse_cte.c:868 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "gegenseitige Rekursion zwischen WITH-Elementen ist nicht implementiert" -#: parser/parse_cte.c:867 +#: parser/parse_cte.c:920 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "rekursive Anfrage »%s« darf keine datenmodifizierenden Anweisungen enthalten" -#: parser/parse_cte.c:875 +#: parser/parse_cte.c:928 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "rekursive Anfrage »%s« hat nicht die Form nicht-rekursiver-Ausdruck UNION [ALL] rekursiver-Ausdruck" -#: parser/parse_cte.c:910 +#: parser/parse_cte.c:963 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:916 +#: parser/parse_cte.c:969 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:922 +#: parser/parse_cte.c:975 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:928 +#: parser/parse_cte.c:981 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE in einer rekursiven Anfrage ist nicht implementiert" -#: parser/parse_cte.c:1007 +#: parser/parse_cte.c:1060 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "rekursiver Verweis auf Anfrage »%s« darf nicht mehrmals erscheinen" @@ -16566,7 +16613,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF erfordert, dass Operator = boolean ergibt" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%s darf keine Ergebnismenge zurückgeben" @@ -16582,7 +16629,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "die Quelle für ein UPDATE-Element mit mehreren Spalten muss ein Sub-SELECT oder ein ROW()-Ausdruck sein" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "Funktionen mit Ergebnismenge sind in %s nicht erlaubt" @@ -16654,82 +16701,82 @@ msgstr "Unteranfrage hat zu viele Spalten" msgid "subquery has too few columns" msgstr "Unteranfrage hat zu wenige Spalten" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, c-format msgid "cannot determine type of empty array" msgstr "kann Typ eines leeren Arrays nicht bestimmen" -#: parser/parse_expr.c:2001 +#: parser/parse_expr.c:2009 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Wandeln Sie ausdrücklich in den gewünschten Typ um, zum Beispiel ARRAY[]::integer[]." -#: parser/parse_expr.c:2015 +#: parser/parse_expr.c:2023 #, c-format msgid "could not find element type for data type %s" msgstr "konnte Elementtyp für Datentyp %s nicht finden" -#: parser/parse_expr.c:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW-Ausdrücke können höchstens %d Einträge haben" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "unbenannter XML-Attributwert muss ein Spaltenverweis sein" -#: parser/parse_expr.c:2304 +#: parser/parse_expr.c:2312 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "unbenannter XML-Elementwert muss ein Spaltenverweis sein" -#: parser/parse_expr.c:2319 +#: parser/parse_expr.c:2327 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML-Attributname »%s« einscheint mehrmals" -#: parser/parse_expr.c:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "kann das Ergebnis von XMLSERIALIZE nicht in Typ %s umwandeln" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "ungleiche Anzahl Einträge in Zeilenausdrücken" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "kann Zeilen mit Länge null nicht vergleichen" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "Zeilenvergleichsoperator muss Typ boolean zurückgeben, nicht Typ %s" -#: parser/parse_expr.c:2777 +#: parser/parse_expr.c:2785 #, c-format msgid "row comparison operator must not return a set" msgstr "Zeilenvergleichsoperator darf keine Ergebnismenge zurückgeben" -#: parser/parse_expr.c:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "konnte Interpretation des Zeilenvergleichsoperators %s nicht bestimmen" -#: parser/parse_expr.c:2838 +#: parser/parse_expr.c:2846 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Zeilenvergleichsoperatoren müssen einer »btree«-Operatorfamilie zugeordnet sein." -#: parser/parse_expr.c:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Es gibt mehrere gleichermaßen plausible Kandidaten." -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM erfordert, dass Operator = boolean ergibt" @@ -17670,22 +17717,22 @@ msgstr "FROM muss genau einen Wert pro Partitionierungsspalte angeben" msgid "TO must specify exactly one value per partitioning column" msgstr "TO muss genau einen Wert pro Partitionierungsspalte angeben" -#: parser/parse_utilcmd.c:4240 +#: parser/parse_utilcmd.c:4242 #, c-format msgid "cannot specify NULL in range bound" msgstr "NULL kann nicht in der Bereichsgrenze angegeben werden" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4290 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "jede Begrenzung, die auf MAXVALUE folgt, muss auch MAXVALUE sein" -#: parser/parse_utilcmd.c:4296 +#: parser/parse_utilcmd.c:4297 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "jede Begrenzung, die auf MINVALUE folgt, muss auch MINVALUE sein" -#: parser/parse_utilcmd.c:4339 +#: parser/parse_utilcmd.c:4340 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "angegebener Wert kann nicht in Typ %s für Spalte »%s« umgewandelt werden" @@ -17703,7 +17750,7 @@ msgstr "ungültiges Unicode-Escape-Zeichen" msgid "invalid Unicode escape value" msgstr "ungültiger Unicode-Escape-Wert" -#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6555 +#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6604 #, c-format msgid "invalid Unicode escape" msgstr "ungültiges Unicode-Escape" @@ -17714,7 +17761,7 @@ msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Unicode-Escapes müssen \\XXXX oder \\+XXXXXX sein." #: parser/parser.c:497 scan.l:638 scan.l:654 scan.l:670 -#: utils/adt/varlena.c:6580 +#: utils/adt/varlena.c:6629 #, c-format msgid "invalid Unicode surrogate pair" msgstr "ungültiges Unicode-Surrogatpaar" @@ -17791,7 +17838,7 @@ msgid "column %d of the partition key has type \"%s\", but supplied value is of msgstr "Spalte %d des Partitionierungsschlüssels hat Typ »%s«, aber der angegebene Wert hat Typ »%s«" #: port/pg_sema.c:209 port/pg_shmem.c:678 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "konnte »stat« für Datenverzeichnis »%s« nicht ausführen: %m" @@ -17865,17 +17912,17 @@ msgstr "bereits bestehender Shared-Memory-Block (Schlüssel %lu, ID %lu) wird no msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Beenden Sie alle alten Serverprozesse, die zum Datenverzeichnis »%s« gehören." -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "konnte Semaphore nicht erzeugen: %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "Fehlgeschlagener Systemaufruf war semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:129 +#: port/sysv_sema.c:144 #, 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" @@ -17884,7 +17931,7 @@ msgstr "" "Dieser Fehler bedeutet *nicht*, dass kein Platz mehr auf der Festplatte ist. Er tritt auf, wenn entweder die Systemhöchstgrenze für die Anzahl Semaphor-Sets (SEMMNI) oder die Systemhöchstgrenze für die Anzahl Semaphore (SEMMNS) überschritten würde. Sie müssen den entsprechenden Kernelparameter erhöhen. Alternativ können Sie den Semaphorverbrauch von PostgreSQL reduzieren indem Sie den Parameter »max_connections« herabsetzen.\n" "Die PostgreSQL-Dokumentation enthält weitere Informationen, wie Sie Ihr System für PostgreSQL konfigurieren können." -#: port/sysv_sema.c:159 +#: port/sysv_sema.c:174 #, 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 "Sie müssen möglicherweise den Kernelparameter SEMVMX auf mindestens %d erhöhen. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation." @@ -18024,27 +18071,27 @@ msgstr "konnte Autovacuum-Worker-Prozess nicht starten (fork-Fehler): %m" msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "Autovacuum: lösche verwaiste temporäre Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2548 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisches Vacuum der Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2551 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisches Analysieren der Tabelle »%s.%s.%s«" -#: postmaster/autovacuum.c:2744 +#: postmaster/autovacuum.c:2754 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "verarbeite Arbeitseintrag für Relation »%s.%s.%s«" -#: postmaster/autovacuum.c:3430 +#: postmaster/autovacuum.c:3440 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "Autovacuum wegen Fehlkonfiguration nicht gestartet" -#: postmaster/autovacuum.c:3431 +#: postmaster/autovacuum.c:3441 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Schalten Sie die Option »track_counts« ein." @@ -18074,7 +18121,7 @@ msgstr "Background-Worker »%s«: ungültiges Neustart-Intervall" msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "Background-Worker »%s«: parallele Arbeitsprozesse dürfen nicht für Neustart konfiguriert sein" -#: postmaster/bgworker.c:723 tcop/postgres.c:3229 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "Background-Worker »%s« wird abgebrochen aufgrund von Anweisung des Administrators" @@ -18106,24 +18153,24 @@ msgstr[1] "Mit den aktuellen Einstellungen können bis zu %d Background-Worker r msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter »max_worker_processes«." -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" msgstr[0] "Checkpoints passieren zu oft (alle %d Sekunde)" msgstr[1] "Checkpoints passieren zu oft (alle %d Sekunden)" -#: postmaster/checkpointer.c:432 +#: postmaster/checkpointer.c:435 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Erhöhen Sie eventuell den Konfigurationsparameter »max_wal_size«." -#: postmaster/checkpointer.c:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "Checkpoint-Anforderung fehlgeschlagen" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Einzelheiten finden Sie in den letzten Meldungen im Serverlog." @@ -18164,7 +18211,7 @@ msgstr "Der fehlgeschlagene Archivbefehl war: %s" msgid "archive command was terminated by exception 0x%X" msgstr "Archivbefehl wurde durch Ausnahme 0x%X beendet" -#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3761 #, 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." @@ -18356,103 +18403,103 @@ msgstr "WAL-Streaming (max_wal_senders > 0) benötigt wal_level »replica« oder msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ungültige datetoken-Tabellen, bitte reparieren\n" -#: postmaster/postmaster.c:1052 +#: postmaster/postmaster.c:1054 #, c-format msgid "could not create I/O completion port for child queue" msgstr "konnte Ein-/Ausgabe-Completion-Port für Child-Queue nicht erzeugen" -#: postmaster/postmaster.c:1128 +#: postmaster/postmaster.c:1130 #, c-format msgid "ending log output to stderr" msgstr "Logausgabe nach stderr endet" -#: postmaster/postmaster.c:1129 +#: postmaster/postmaster.c:1131 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Die weitere Logausgabe geht an Logziel »%s«." -#: postmaster/postmaster.c:1140 +#: postmaster/postmaster.c:1142 #, c-format msgid "starting %s" msgstr "%s startet" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 +#: postmaster/postmaster.c:1163 postmaster/postmaster.c:1262 #: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ungültige Listensyntax für Parameter »%s«" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1194 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "konnte Listen-Socket für »%s« nicht erzeugen" -#: postmaster/postmaster.c:1198 +#: postmaster/postmaster.c:1200 #, c-format msgid "could not create any TCP/IP sockets" msgstr "konnte keine TCP/IP-Sockets erstellen" -#: postmaster/postmaster.c:1230 +#: postmaster/postmaster.c:1232 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() fehlgeschlagen: Fehlercode %ld" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1284 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "konnte Unix-Domain-Socket in Verzeichnis »%s« nicht erzeugen" -#: postmaster/postmaster.c:1288 +#: postmaster/postmaster.c:1290 #, c-format msgid "could not create any Unix-domain sockets" msgstr "konnte keine Unix-Domain-Sockets erzeugen" -#: postmaster/postmaster.c:1300 +#: postmaster/postmaster.c:1302 #, c-format msgid "no socket created for listening" msgstr "keine Listen-Socket erzeugt" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1333 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: konnte Rechte der externen PID-Datei »%s« nicht ändern: %s\n" -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1337 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: konnte externe PID-Datei »%s« nicht schreiben: %s\n" -#: postmaster/postmaster.c:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1370 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "konnte pg_hba.conf nicht laden" -#: postmaster/postmaster.c:1396 +#: postmaster/postmaster.c:1398 #, c-format msgid "postmaster became multithreaded during startup" msgstr "Postmaster ist während des Starts multithreaded geworden" -#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 +#: postmaster/postmaster.c:1399 postmaster/postmaster.c:5150 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Setzen Sie die Umgebungsvariable LC_ALL auf eine gültige Locale." -#: postmaster/postmaster.c:1492 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: konnte Pfad des eigenen Programs nicht finden" -#: postmaster/postmaster.c:1499 +#: postmaster/postmaster.c:1501 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: konnte kein passendes Programm »postgres« finden" -#: postmaster/postmaster.c:1522 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1524 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Dies kann auf eine unvollständige PostgreSQL-Installation hindeuten, oder darauf, dass die Datei »%s« von ihrer richtigen Stelle verschoben worden ist." -#: postmaster/postmaster.c:1549 +#: postmaster/postmaster.c:1551 #, c-format msgid "" "%s: could not find the database system\n" @@ -18463,476 +18510,476 @@ msgstr "" "Es wurde im Verzeichnis »%s« erwartet,\n" "aber die Datei »%s« konnte nicht geöffnet werden: %s\n" -#: postmaster/postmaster.c:1726 +#: postmaster/postmaster.c:1728 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() fehlgeschlagen im Postmaster: %m" -#: postmaster/postmaster.c:1862 +#: postmaster/postmaster.c:1864 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "SIGKILL wird an ungehorsame Kinder gesendet" -#: postmaster/postmaster.c:1883 +#: postmaster/postmaster.c:1885 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "führe sofortiges Herunterfahren durch, weil Sperrdatei im Datenverzeichnis ungültig ist" -#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 +#: postmaster/postmaster.c:1988 postmaster/postmaster.c:2016 #, c-format msgid "incomplete startup packet" msgstr "unvollständiges Startpaket" -#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2000 postmaster/postmaster.c:2033 #, c-format msgid "invalid length of startup packet" msgstr "ungültige Länge des Startpakets" -#: postmaster/postmaster.c:2060 +#: postmaster/postmaster.c:2062 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "konnte SSL-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "received unencrypted data after SSL request" msgstr "unverschlüsselte Daten nach SSL-Anforderung empfangen" -#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2081 postmaster/postmaster.c:2125 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "Das könnte entweder ein Fehler in der Client-Software oder ein Hinweis auf einen versuchten Man-in-the-Middle-Angriff sein." -#: postmaster/postmaster.c:2104 +#: postmaster/postmaster.c:2106 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "konnte GSSAPI-Verhandlungsantwort nicht senden: %m" -#: postmaster/postmaster.c:2122 +#: postmaster/postmaster.c:2124 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "unverschlüsselte Daten nach GSSAPI-Verschlüsselungsanforderung empfangen" -#: postmaster/postmaster.c:2146 +#: postmaster/postmaster.c:2148 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "nicht unterstütztes Frontend-Protokoll %u.%u: Server unterstützt %u.0 bis %u.%u" -#: postmaster/postmaster.c:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: postmaster/postmaster.c:2212 utils/misc/guc.c:7138 utils/misc/guc.c:7174 #: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 #: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ungültiger Wert für Parameter »%s«: »%s«" -#: postmaster/postmaster.c:2213 +#: postmaster/postmaster.c:2215 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Gültige Werte sind: »false«, 0, »true«, 1, »database«." -#: postmaster/postmaster.c:2258 +#: postmaster/postmaster.c:2260 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "ungültiges Layout des Startpakets: Abschluss als letztes Byte erwartet" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2277 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "kein PostgreSQL-Benutzername im Startpaket angegeben" -#: postmaster/postmaster.c:2339 +#: postmaster/postmaster.c:2341 #, c-format msgid "the database system is starting up" msgstr "das Datenbanksystem startet" -#: postmaster/postmaster.c:2345 +#: postmaster/postmaster.c:2347 #, c-format msgid "the database system is not yet accepting connections" msgstr "das Datenbanksystem nimmt noch keine Verbindungen an" -#: postmaster/postmaster.c:2346 +#: postmaster/postmaster.c:2348 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "Konsistenter Wiederherstellungszustand wurde noch nicht erreicht." -#: postmaster/postmaster.c:2350 +#: postmaster/postmaster.c:2352 #, c-format msgid "the database system is not accepting connections" msgstr "das Datenbanksystem nimmt keine Verbindungen an" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2353 #, c-format msgid "Hot standby mode is disabled." msgstr "Hot-Standby-Modus ist deaktiviert." -#: postmaster/postmaster.c:2356 +#: postmaster/postmaster.c:2358 #, c-format msgid "the database system is shutting down" msgstr "das Datenbanksystem fährt herunter" -#: postmaster/postmaster.c:2361 +#: postmaster/postmaster.c:2363 #, c-format msgid "the database system is in recovery mode" msgstr "das Datenbanksystem ist im Wiederherstellungsmodus" -#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2368 storage/ipc/procarray.c:499 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "tut mir leid, schon zu viele Verbindungen" -#: postmaster/postmaster.c:2456 +#: postmaster/postmaster.c:2458 #, c-format msgid "wrong key in cancel request for process %d" msgstr "falscher Schlüssel in Stornierungsanfrage für Prozess %d" -#: postmaster/postmaster.c:2468 +#: postmaster/postmaster.c:2470 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d in Stornierungsanfrage stimmte mit keinem Prozess überein" -#: postmaster/postmaster.c:2721 +#: postmaster/postmaster.c:2723 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUP empfangen, Konfigurationsdateien werden neu geladen" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 +#: postmaster/postmaster.c:2749 postmaster/postmaster.c:2753 #, c-format msgid "%s was not reloaded" msgstr "%s wurde nicht neu geladen" -#: postmaster/postmaster.c:2761 +#: postmaster/postmaster.c:2763 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-Konfiguration wurde nicht neu geladen" -#: postmaster/postmaster.c:2817 +#: postmaster/postmaster.c:2819 #, c-format msgid "received smart shutdown request" msgstr "intelligentes Herunterfahren verlangt" -#: postmaster/postmaster.c:2863 +#: postmaster/postmaster.c:2865 #, c-format msgid "received fast shutdown request" msgstr "schnelles Herunterfahren verlangt" -#: postmaster/postmaster.c:2881 +#: postmaster/postmaster.c:2883 #, c-format msgid "aborting any active transactions" msgstr "etwaige aktive Transaktionen werden abgebrochen" -#: postmaster/postmaster.c:2905 +#: postmaster/postmaster.c:2907 #, c-format msgid "received immediate shutdown request" msgstr "sofortiges Herunterfahren verlangt" -#: postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:2984 #, c-format msgid "shutdown at recovery target" msgstr "Herunterfahren beim Wiederherstellungsziel" -#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3002 postmaster/postmaster.c:3038 msgid "startup process" msgstr "Startprozess" -#: postmaster/postmaster.c:3003 +#: postmaster/postmaster.c:3005 #, c-format msgid "aborting startup due to startup process failure" msgstr "Serverstart abgebrochen wegen Startprozessfehler" -#: postmaster/postmaster.c:3078 +#: postmaster/postmaster.c:3080 #, c-format msgid "database system is ready to accept connections" msgstr "Datenbanksystem ist bereit, um Verbindungen anzunehmen" -#: postmaster/postmaster.c:3099 +#: postmaster/postmaster.c:3101 msgid "background writer process" msgstr "Background-Writer-Prozess" -#: postmaster/postmaster.c:3153 +#: postmaster/postmaster.c:3155 msgid "checkpointer process" msgstr "Checkpointer-Prozess" -#: postmaster/postmaster.c:3169 +#: postmaster/postmaster.c:3171 msgid "WAL writer process" msgstr "WAL-Schreibprozess" -#: postmaster/postmaster.c:3184 +#: postmaster/postmaster.c:3186 msgid "WAL receiver process" msgstr "WAL-Receiver-Prozess" -#: postmaster/postmaster.c:3199 +#: postmaster/postmaster.c:3201 msgid "autovacuum launcher process" msgstr "Autovacuum-Launcher-Prozess" -#: postmaster/postmaster.c:3217 +#: postmaster/postmaster.c:3219 msgid "archiver process" msgstr "Archivierprozess" -#: postmaster/postmaster.c:3232 +#: postmaster/postmaster.c:3234 msgid "statistics collector process" msgstr "Statistiksammelprozess" -#: postmaster/postmaster.c:3246 +#: postmaster/postmaster.c:3248 msgid "system logger process" msgstr "Systemlogger-Prozess" -#: postmaster/postmaster.c:3310 +#: postmaster/postmaster.c:3312 #, c-format msgid "background worker \"%s\"" msgstr "Background-Worker »%s«" -#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 -#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 +#: postmaster/postmaster.c:3396 postmaster/postmaster.c:3416 +#: postmaster/postmaster.c:3423 postmaster/postmaster.c:3441 msgid "server process" msgstr "Serverprozess" -#: postmaster/postmaster.c:3493 +#: postmaster/postmaster.c:3495 #, c-format msgid "terminating any other active server processes" msgstr "aktive Serverprozesse werden abgebrochen" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3746 +#: postmaster/postmaster.c:3748 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) beendete mit Status %d" -#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 -#: postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 +#: postmaster/postmaster.c:3750 postmaster/postmaster.c:3762 +#: postmaster/postmaster.c:3772 postmaster/postmaster.c:3783 #, c-format msgid "Failed process was running: %s" msgstr "Der fehlgeschlagene Prozess führte aus: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3757 +#: postmaster/postmaster.c:3759 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) wurde durch Ausnahme 0x%X beendet" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3767 +#: postmaster/postmaster.c:3769 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) wurde von Signal %d beendet: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3779 +#: postmaster/postmaster.c:3781 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) beendete mit unbekanntem Status %d" -#: postmaster/postmaster.c:3993 +#: postmaster/postmaster.c:3995 #, c-format msgid "abnormal database system shutdown" msgstr "abnormales Herunterfahren des Datenbanksystems" -#: postmaster/postmaster.c:4031 +#: postmaster/postmaster.c:4033 #, c-format msgid "shutting down due to startup process failure" msgstr "fahre herunter wegen Startprozessfehler" -#: postmaster/postmaster.c:4037 +#: postmaster/postmaster.c:4039 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "fahre herunter, weil restart_after_crash aus ist" -#: postmaster/postmaster.c:4049 +#: postmaster/postmaster.c:4051 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alle Serverprozesse beendet; initialisiere neu" -#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 -#: postmaster/postmaster.c:5966 +#: postmaster/postmaster.c:4225 postmaster/postmaster.c:5577 +#: postmaster/postmaster.c:5968 #, c-format msgid "could not generate random cancel key" msgstr "konnte zufälligen Stornierungsschlüssel nicht erzeugen" -#: postmaster/postmaster.c:4277 +#: postmaster/postmaster.c:4279 #, c-format msgid "could not fork new process for connection: %m" msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:4319 +#: postmaster/postmaster.c:4321 msgid "could not fork new process for connection: " msgstr "konnte neuen Prozess für Verbindung nicht starten (fork-Fehler): " -#: postmaster/postmaster.c:4425 +#: postmaster/postmaster.c:4427 #, c-format msgid "connection received: host=%s port=%s" msgstr "Verbindung empfangen: Host=%s Port=%s" -#: postmaster/postmaster.c:4430 +#: postmaster/postmaster.c:4432 #, c-format msgid "connection received: host=%s" msgstr "Verbindung empfangen: Host=%s" -#: postmaster/postmaster.c:4673 +#: postmaster/postmaster.c:4675 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "konnte Serverprozess »%s« nicht ausführen: %m" -#: postmaster/postmaster.c:4731 +#: postmaster/postmaster.c:4733 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "konnte Backend-Parameter-Datei-Mapping nicht erzeugen: Fehlercode %lu" -#: postmaster/postmaster.c:4740 +#: postmaster/postmaster.c:4742 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "konnte Backend-Parameter-Speicher nicht mappen: Fehlercode %lu" -#: postmaster/postmaster.c:4767 +#: postmaster/postmaster.c:4769 #, c-format msgid "subprocess command line too long" msgstr "Kommandozeile für Subprozess zu lang" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4787 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "Aufruf von CreateProcess() fehlgeschlagen: %m (Fehlercode %lu)" -#: postmaster/postmaster.c:4812 +#: postmaster/postmaster.c:4814 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "konnte Sicht der Backend-Parameter-Datei nicht unmappen: Fehlercode %lu" -#: postmaster/postmaster.c:4816 +#: postmaster/postmaster.c:4818 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "konnte Handle für Backend-Parameter-Datei nicht schließen: Fehlercode %lu" -#: postmaster/postmaster.c:4838 +#: postmaster/postmaster.c:4840 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "Aufgabe nach zu vielen Versuchen, Shared Memory zu reservieren" -#: postmaster/postmaster.c:4839 +#: postmaster/postmaster.c:4841 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Dies kann durch ASLR oder Antivirus-Software verursacht werden." -#: postmaster/postmaster.c:5021 +#: postmaster/postmaster.c:5023 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-Konfiguration konnte im Kindprozess nicht geladen werden" -#: postmaster/postmaster.c:5147 +#: postmaster/postmaster.c:5149 #, c-format msgid "postmaster became multithreaded" msgstr "Postmaster ist multithreaded geworden" -#: postmaster/postmaster.c:5235 +#: postmaster/postmaster.c:5237 #, c-format msgid "database system is ready to accept read-only connections" msgstr "Datenbanksystem ist bereit, um lesende Verbindungen anzunehmen" -#: postmaster/postmaster.c:5499 +#: postmaster/postmaster.c:5501 #, c-format msgid "could not fork startup process: %m" msgstr "konnte Startprozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5503 +#: postmaster/postmaster.c:5505 #, c-format msgid "could not fork archiver process: %m" msgstr "konnte Archivierer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5507 +#: postmaster/postmaster.c:5509 #, c-format msgid "could not fork background writer process: %m" msgstr "konnte Background-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5511 +#: postmaster/postmaster.c:5513 #, c-format msgid "could not fork checkpointer process: %m" msgstr "konnte Checkpointer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5515 +#: postmaster/postmaster.c:5517 #, c-format msgid "could not fork WAL writer process: %m" msgstr "konnte WAL-Writer-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5519 +#: postmaster/postmaster.c:5521 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "konnte WAL-Receiver-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5523 +#: postmaster/postmaster.c:5525 #, c-format msgid "could not fork process: %m" msgstr "konnte Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 +#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 #, c-format msgid "database connection requirement not indicated during registration" msgstr "die Notwendigkeit, Datenbankverbindungen zu erzeugen, wurde bei der Registrierung nicht angezeigt" -#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "invalid processing mode in background worker" msgstr "ungültiger Verarbeitungsmodus in Background-Worker" -#: postmaster/postmaster.c:5839 +#: postmaster/postmaster.c:5841 #, c-format msgid "could not fork worker process: %m" msgstr "konnte Worker-Prozess nicht starten (fork-Fehler): %m" -#: postmaster/postmaster.c:5952 +#: postmaster/postmaster.c:5954 #, c-format msgid "no slot available for new worker process" msgstr "kein Slot für neuen Worker-Prozess verfügbar" -#: postmaster/postmaster.c:6286 +#: postmaster/postmaster.c:6288 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "konnte Socket %d nicht für Verwendung in Backend duplizieren: Fehlercode %d" -#: postmaster/postmaster.c:6318 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "konnte geerbtes Socket nicht erzeugen: Fehlercode %d\n" -#: postmaster/postmaster.c:6347 +#: postmaster/postmaster.c:6349 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "konnte Servervariablendatei »%s« nicht öffnen: %s\n" -#: postmaster/postmaster.c:6354 +#: postmaster/postmaster.c:6356 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "konnte nicht aus Servervariablendatei »%s« lesen: %s\n" -#: postmaster/postmaster.c:6363 +#: postmaster/postmaster.c:6365 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht löschen: %s\n" -#: postmaster/postmaster.c:6380 +#: postmaster/postmaster.c:6382 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht mappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6389 +#: postmaster/postmaster.c:6391 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "konnte Sicht der Backend-Variablen nicht unmappen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6396 +#: postmaster/postmaster.c:6398 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "konnte Handle für Backend-Parametervariablen nicht schließen: Fehlercode %lu\n" -#: postmaster/postmaster.c:6558 +#: postmaster/postmaster.c:6560 #, c-format msgid "could not read exit code for process\n" msgstr "konnte Exitcode des Prozesses nicht lesen\n" -#: postmaster/postmaster.c:6600 +#: postmaster/postmaster.c:6602 #, c-format msgid "could not post child completion status\n" msgstr "konnte Child-Completion-Status nicht versenden\n" @@ -19198,7 +19245,7 @@ msgid "error reading result of streaming command: %s" msgstr "Fehler beim Lesen des Ergebnisses von Streaming-Befehl: %s" #: replication/libpqwalreceiver/libpqwalreceiver.c:570 -#: replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "unerwartetes Ergebnis nach CommandComplete: %s" @@ -19213,43 +19260,43 @@ msgstr "konnte Zeitleisten-History-Datei nicht vom Primärserver empfangen: %s" msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "1 Tupel mit 2 Feldern erwartet, %d Tupel mit %d Feldern erhalten." -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:824 -#: replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 +#: replication/libpqwalreceiver/libpqwalreceiver.c:821 +#: replication/libpqwalreceiver/libpqwalreceiver.c:828 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "konnte keine Daten vom WAL-Stream empfangen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, c-format msgid "could not send data to WAL stream: %s" msgstr "konnte keine Daten an den WAL-Stream senden: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "konnte Replikations-Slot »%s« nicht erzeugen: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "ungültige Antwort auf Anfrage" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d Felder erwartet, %d Feldern erhalten." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, c-format msgid "the query interface requires a database connection" msgstr "Ausführen von Anfragen benötigt eine Datenbankverbindung" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "leere Anfrage" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "unerwarteter Pipeline-Modus" @@ -19303,12 +19350,12 @@ msgstr "logische Dekodierung benötigt eine Datenbankverbindung" msgid "logical decoding cannot be used while in recovery" msgstr "logische Dekodierung kann nicht während der Wiederherstellung verwendet werden" -#: replication/logical/logical.c:350 replication/logical/logical.c:502 +#: replication/logical/logical.c:350 replication/logical/logical.c:504 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "physischer Replikations-Slot kann nicht für logisches Dekodieren verwendet werden" -#: replication/logical/logical.c:355 replication/logical/logical.c:507 +#: replication/logical/logical.c:355 replication/logical/logical.c:509 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "Replikations-Slot »%s« wurde nicht in dieser Datenbank erzeugt" @@ -19318,40 +19365,40 @@ msgstr "Replikations-Slot »%s« wurde nicht in dieser Datenbank erzeugt" msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "logischer Replikations-Slot kann nicht in einer Transaktion erzeugt werden, die Schreibvorgänge ausgeführt hat" -#: replication/logical/logical.c:552 +#: replication/logical/logical.c:554 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "starte logisches Dekodieren für Slot »%s«" -#: replication/logical/logical.c:554 +#: replication/logical/logical.c:556 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Streaming beginnt bei Transaktionen, die nach %X/%X committen; lese WAL ab %X/%X." -#: replication/logical/logical.c:699 +#: replication/logical/logical.c:701 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X" msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s, zugehörige LSN %X/%X" -#: replication/logical/logical.c:705 +#: replication/logical/logical.c:707 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s" -#: replication/logical/logical.c:876 replication/logical/logical.c:921 -#: replication/logical/logical.c:966 replication/logical/logical.c:1012 +#: replication/logical/logical.c:878 replication/logical/logical.c:923 +#: replication/logical/logical.c:968 replication/logical/logical.c:1014 #, c-format msgid "logical replication at prepare time requires a %s callback" msgstr "logische Replikation bei PREPARE TRANSACTION benötigt einen %s-Callback" -#: replication/logical/logical.c:1244 replication/logical/logical.c:1293 -#: replication/logical/logical.c:1334 replication/logical/logical.c:1420 -#: replication/logical/logical.c:1469 +#: replication/logical/logical.c:1246 replication/logical/logical.c:1295 +#: replication/logical/logical.c:1336 replication/logical/logical.c:1422 +#: replication/logical/logical.c:1471 #, c-format msgid "logical streaming requires a %s callback" msgstr "logisches Streaming benötigt einen %s-Callback" -#: replication/logical/logical.c:1379 +#: replication/logical/logical.c:1381 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "logisches Streaming bei PREPARE TRANSACTION benötigt einen %s-Callback" @@ -19463,7 +19510,7 @@ msgid "could not find free replication state slot for replication origin with OI msgstr "konnte keinen freien Replication-State-Slot für Replication-Origin mit OID %u finden" #: replication/logical/origin.c:941 replication/logical/origin.c:1128 -#: replication/slot.c:1867 +#: replication/slot.c:1934 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Erhöhen Sie max_replication_slots und versuchen Sie es erneut." @@ -19516,29 +19563,29 @@ msgstr "Zielrelation für logische Replikation »%s.%s« verwendet Systemspalten msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "Zielrelation für logische Replikation »%s.%s« existiert nicht" -#: replication/logical/reorderbuffer.c:3842 +#: replication/logical/reorderbuffer.c:3973 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "konnte nicht in Datendatei für XID %u schreiben: %m" -#: replication/logical/reorderbuffer.c:4188 -#: replication/logical/reorderbuffer.c:4213 +#: replication/logical/reorderbuffer.c:4319 +#: replication/logical/reorderbuffer.c:4344 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "konnte nicht aus Reorder-Buffer-Spill-Datei lesen: %m" -#: replication/logical/reorderbuffer.c:4192 -#: replication/logical/reorderbuffer.c:4217 +#: replication/logical/reorderbuffer.c:4323 +#: replication/logical/reorderbuffer.c:4348 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "konnte nicht aus Reorder-Buffer-Spill-Datei lesen: %d statt %u Bytes gelesen" -#: replication/logical/reorderbuffer.c:4467 +#: replication/logical/reorderbuffer.c:4598 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "konnte Datei »%s« nicht löschen, bei Löschen von pg_replslot/%s/xid*: %m" -#: replication/logical/reorderbuffer.c:4966 +#: replication/logical/reorderbuffer.c:5097 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "konnte nicht aus Datei »%s« lesen: %d statt %d Bytes gelesen" @@ -19555,58 +19602,58 @@ msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs msgstr[0] "logischer Dekodierungs-Snapshot exportiert: »%s« mit %u Transaktions-ID" msgstr[1] "logischer Dekodierungs-Snapshot exportiert: »%s« mit %u Transaktions-IDs" -#: replication/logical/snapbuild.c:1374 replication/logical/snapbuild.c:1486 -#: replication/logical/snapbuild.c:2017 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 +#: replication/logical/snapbuild.c:2068 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "logisches Dekodieren fand konsistenten Punkt bei %X/%X" -#: replication/logical/snapbuild.c:1376 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "Keine laufenden Transaktionen." -#: replication/logical/snapbuild.c:1437 +#: replication/logical/snapbuild.c:1484 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "logisches Dekodieren fand initialen Startpunkt bei %X/%X" -#: replication/logical/snapbuild.c:1439 replication/logical/snapbuild.c:1463 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Warten auf Abschluss der Transaktionen (ungefähr %d), die älter als %u sind." -#: replication/logical/snapbuild.c:1461 +#: replication/logical/snapbuild.c:1508 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "logisches Dekodieren fand initialen konsistenten Punkt bei %X/%X" -#: replication/logical/snapbuild.c:1488 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "Es laufen keine alten Transaktionen mehr." -#: replication/logical/snapbuild.c:1885 +#: replication/logical/snapbuild.c:1932 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "Scanbuild-State-Datei »%s« hat falsche magische Zahl %u statt %u" -#: replication/logical/snapbuild.c:1891 +#: replication/logical/snapbuild.c:1938 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "Snapbuild-State-Datei »%s« hat nicht unterstützte Version: %u statt %u" -#: replication/logical/snapbuild.c:1962 +#: replication/logical/snapbuild.c:2009 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "Prüfsummenfehler bei Snapbuild-State-Datei »%s«: ist %u, sollte %u sein" -#: replication/logical/snapbuild.c:2019 +#: replication/logical/snapbuild.c:2070 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Logische Dekodierung beginnt mit gespeichertem Snapshot." -#: replication/logical/snapbuild.c:2091 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "konnte Dateinamen »%s« nicht parsen" @@ -19616,32 +19663,27 @@ msgstr "konnte Dateinamen »%s« nicht parsen" msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat abgeschlossen" -#: replication/logical/tablesync.c:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "konnte Tabelleninformationen für Tabelle »%s.%s« nicht vom Publikationsserver holen: %s" -#: replication/logical/tablesync.c:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "Tabelle »%s.%s« nicht auf dem Publikationsserver gefunden" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "konnte Kopieren des Anfangsinhalts für Tabelle »%s.%s« nicht starten: %s" -#: replication/logical/tablesync.c:1069 +#: replication/logical/tablesync.c:1104 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "beim Kopieren der Tabelle konnte die Transaktion auf dem Publikationsserver nicht gestartet werden: %s" -#: replication/logical/tablesync.c:1110 -#, c-format -msgid "replication origin \"%s\" already exists" -msgstr "Replication-Origin »%s« existiert bereits" - -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1142 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "beim Kopieren der Tabelle konnte die Transaktion auf dem Publikationsserver nicht beenden werden: %s" @@ -19701,27 +19743,27 @@ msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird neu msgid "could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes" msgstr "konnte nicht aus der subxact-Datei »%s« einer gestreamten Transaktion lesen: es wurden nur %zu von %zu Bytes gelesen" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "Apply-Worker für logische Replikation für Subskription %u« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "Apply-Worker für logische Replikation für Subskription »%s« wird nicht starten, weil die Subskription während des Starts deaktiviert wurde" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "Arbeitsprozess für logische Replikation für Tabellensynchronisation für Subskription »%s«, Tabelle »%s« hat gestartet" -#: replication/logical/worker.c:3170 +#: replication/logical/worker.c:3177 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "Apply-Worker für logische Replikation für Subskription »%s« hat gestartet" -#: replication/logical/worker.c:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "für die Subskription ist kein Replikations-Slot gesetzt" @@ -19736,148 +19778,147 @@ msgstr "ungültige proto_version" msgid "proto_version \"%s\" out of range" msgstr "proto_version »%s« ist außerhalb des gültigen Bereichs" -#: replication/pgoutput/pgoutput.c:227 +#: replication/pgoutput/pgoutput.c:231 #, c-format msgid "invalid publication_names syntax" msgstr "ungültige Syntax für publication_names" -#: replication/pgoutput/pgoutput.c:324 +#: replication/pgoutput/pgoutput.c:328 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder niedriger" -#: replication/pgoutput/pgoutput.c:330 +#: replication/pgoutput/pgoutput.c:334 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "Client sendete proto_version=%d, aber wir unterstützen nur Protokoll %d oder höher" -#: replication/pgoutput/pgoutput.c:336 +#: replication/pgoutput/pgoutput.c:340 #, c-format msgid "publication_names parameter missing" msgstr "Parameter »publication_names« fehlt" -#: replication/pgoutput/pgoutput.c:349 +#: replication/pgoutput/pgoutput.c:353 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "angeforderte proto_version=%d unterstützt Streaming nicht, benötigt %d oder höher" -#: replication/pgoutput/pgoutput.c:354 +#: replication/pgoutput/pgoutput.c:358 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "Streaming angefordert, aber wird vom Ausgabe-Plugin nicht unterstützt" -#: replication/slot.c:180 +#: replication/slot.c:212 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "Replikations-Slot-Name »%s« ist zu kurz" -#: replication/slot.c:189 +#: replication/slot.c:220 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "Replikations-Slot-Name »%s« ist zu lang" -#: replication/slot.c:202 +#: replication/slot.c:232 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "Replikations-Slot-Name »%s« enthält ungültiges Zeichen" -#: replication/slot.c:204 -#, c-format +#: replication/slot.c:233 msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Replikations-Slot-Namen dürfen nur Kleinbuchstaben, Zahlen und Unterstriche enthalten." -#: replication/slot.c:258 +#: replication/slot.c:287 #, c-format msgid "replication slot \"%s\" already exists" msgstr "Replikations-Slot »%s« existiert bereits" -#: replication/slot.c:268 +#: replication/slot.c:297 #, c-format msgid "all replication slots are in use" msgstr "alle Replikations-Slots sind in Benutzung" -#: replication/slot.c:269 +#: replication/slot.c:298 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Geben Sie einen frei oder erhöhen Sie max_replication_slots." -#: replication/slot.c:402 replication/slotfuncs.c:761 -#: utils/adt/pgstatfuncs.c:2228 +#: replication/slot.c:431 replication/slotfuncs.c:761 +#: utils/adt/pgstatfuncs.c:2240 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "Replikations-Slot »%s« existiert nicht" -#: replication/slot.c:448 replication/slot.c:1025 +#: replication/slot.c:477 replication/slot.c:1083 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "Replikations-Slot »%s« ist aktiv für PID %d" -#: replication/slot.c:676 replication/slot.c:1419 replication/slot.c:1802 +#: replication/slot.c:705 replication/slot.c:1479 replication/slot.c:1869 #, c-format msgid "could not remove directory \"%s\"" msgstr "konnte Verzeichnis »%s« nicht löschen" -#: replication/slot.c:1060 +#: replication/slot.c:1118 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "Replikations-Slots können nur verwendet werden, wenn max_replication_slots > 0" -#: replication/slot.c:1065 +#: replication/slot.c:1123 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "Replikations-Slots können nur verwendet werden, wenn wal_level >= replica" -#: replication/slot.c:1250 +#: replication/slot.c:1310 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "Prozess %d wird beendet, um Replikations-Slot »%s« freizugeben" -#: replication/slot.c:1288 +#: replication/slot.c:1348 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "Slot »%s« wird ungültig gemacht, weil seine restart_lsn %X/%X max_slot_wal_keep_size überschreitet" -#: replication/slot.c:1740 +#: replication/slot.c:1807 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "Replikations-Slot-Datei »%s« hat falsche magische Zahl: %u statt %u" -#: replication/slot.c:1747 +#: replication/slot.c:1814 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "Replikations-Slot-Datei »%s« hat nicht unterstützte Version %u" -#: replication/slot.c:1754 +#: replication/slot.c:1821 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "Replikations-Slot-Datei »%s« hat falsche Länge %u" -#: replication/slot.c:1790 +#: replication/slot.c:1857 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "Prüfsummenfehler bei Replikations-Slot-Datei »%s«: ist %u, sollte %u sein" -#: replication/slot.c:1824 +#: replication/slot.c:1891 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "logischer Replikations-Slot »%s« existiert, aber wal_level < logical" -#: replication/slot.c:1826 +#: replication/slot.c:1893 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Ändern Sie wal_level in logical oder höher." -#: replication/slot.c:1830 +#: replication/slot.c:1897 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "physischer Replikations-Slot »%s« existiert, aber wal_level < replica" -#: replication/slot.c:1832 +#: replication/slot.c:1899 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Ändern Sie wal_level in replica oder höher." -#: replication/slot.c:1866 +#: replication/slot.c:1933 #, c-format msgid "too many replication slots active before shutdown" msgstr "zu viele aktive Replikations-Slots vor dem Herunterfahren" @@ -19932,37 +19973,37 @@ msgstr "kann unfertigen Replikations-Slot »%s« nicht kopieren" msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Versuchen Sie es erneut, wenn confirmed_flush_lsn des Quell-Replikations-Slots gültig ist." -#: replication/syncrep.c:268 +#: replication/syncrep.c:311 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "Warten auf synchrone Replikation wird storniert and Verbindung wird abgebrochen, aufgrund von Anweisung des Administrators" -#: replication/syncrep.c:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "Die Transaktion wurde lokal bereits committet, aber möglicherweise noch nicht zum Standby repliziert." -#: replication/syncrep.c:285 +#: replication/syncrep.c:328 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "storniere Warten auf synchrone Replikation wegen Benutzeraufforderung" -#: replication/syncrep.c:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "Standby »%s« ist jetzt ein synchroner Standby mit Priorität %u" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "Standby »%s« ist jetzt ein Kandidat für synchroner Standby mit Quorum" -#: replication/syncrep.c:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "Parser für synchronous_standby_names fehlgeschlagen" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "Anzahl synchroner Standbys (%d) muss größer als null sein" @@ -20027,7 +20068,7 @@ msgstr "WAL-Receiver-Prozess wird abgebrochen wegen Zeitüberschreitung" msgid "primary server contains no more WAL on requested timeline %u" msgstr "Primärserver enthält kein WAL mehr auf angeforderter Zeitleiste %u" -#: replication/walreceiver.c:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "konnte Logsegment %s nicht schließen: %m" @@ -20037,129 +20078,129 @@ msgstr "konnte Logsegment %s nicht schließen: %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "hole Zeitleisten-History-Datei für Zeitleiste %u vom Primärserver" -#: replication/walreceiver.c:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "konnte nicht in Logsegment %s bei Position %u, Länge %lu schreiben: %m" -#: replication/walsender.c:525 storage/smgr/md.c:1336 +#: replication/walsender.c:539 storage/smgr/md.c:1339 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "konnte Positionszeiger nicht ans Ende der Datei »%s« setzen: %m" -#: replication/walsender.c:529 +#: replication/walsender.c:543 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "konnte Positionszeiger nicht den Anfang der Datei »%s« setzen: %m" -#: replication/walsender.c:580 +#: replication/walsender.c:594 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM wurde nicht vor START_REPLICATION ausgeführt" -#: replication/walsender.c:609 +#: replication/walsender.c:623 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "logischer Replikations-Slot kann nicht für physische Replikation verwendet werden" -#: replication/walsender.c:678 +#: replication/walsender.c:692 #, c-format msgid "requested starting point %X/%X on timeline %u is not in this server's history" msgstr "angeforderter Startpunkt %X/%X auf Zeitleiste %u ist nicht in der History dieses Servers" -#: replication/walsender.c:681 +#: replication/walsender.c:695 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Die History dieses Servers zweigte von Zeitleiste %u bei %X/%X ab." -#: replication/walsender.c:725 +#: replication/walsender.c:739 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "angeforderter Startpunkt %X/%X ist vor der WAL-Flush-Position dieses Servers %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:975 +#: replication/walsender.c:989 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s darf nicht in einer Transaktion aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:985 +#: replication/walsender.c:999 #, c-format msgid "%s must be called inside a transaction" msgstr "%s muss in einer Transaktion aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:991 +#: replication/walsender.c:1005 #, c-format msgid "%s must be called in REPEATABLE READ isolation mode transaction" msgstr "%s muss in einer Transaktion im Isolationsmodus REPEATABLE READ aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:997 +#: replication/walsender.c:1011 #, c-format msgid "%s must be called before any query" msgstr "%s muss vor allen Anfragen aufgerufen werden" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1003 +#: replication/walsender.c:1017 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s darf nicht in einer Subtransaktion aufgerufen werden" -#: replication/walsender.c:1146 +#: replication/walsender.c:1160 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "kann nicht aus logischem Replikations-Slot »%s« lesen" -#: replication/walsender.c:1148 +#: replication/walsender.c:1162 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Dieser Slot wurde ungültig gemacht, weil er die maximale reservierte Größe überschritten hat." -#: replication/walsender.c:1158 +#: replication/walsender.c:1172 #, c-format msgid "terminating walsender process after promotion" msgstr "WAL-Sender-Prozess wird nach Beförderung abgebrochen" -#: replication/walsender.c:1552 +#: replication/walsender.c:1566 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "während der WAL-Sender im Stoppmodus ist können keine neuen Befehle ausgeführt werden" -#: replication/walsender.c:1587 +#: replication/walsender.c:1601 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "im WAL-Sender für physische Replikation können keine SQL-Befehle ausgeführt werden" -#: replication/walsender.c:1620 +#: replication/walsender.c:1634 #, c-format msgid "received replication command: %s" msgstr "Replikationsbefehl empfangen: %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1081 -#: tcop/postgres.c:1440 tcop/postgres.c:1713 tcop/postgres.c:2194 -#: tcop/postgres.c:2627 tcop/postgres.c:2706 +#: replication/walsender.c:1642 tcop/fastpath.c:208 tcop/postgres.c:1046 +#: tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 +#: tcop/postgres.c:2592 tcop/postgres.c:2671 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "aktuelle Transaktion wurde abgebrochen, Befehle werden bis zum Ende der Transaktion ignoriert" -#: replication/walsender.c:1763 replication/walsender.c:1798 +#: replication/walsender.c:1777 replication/walsender.c:1812 #, c-format msgid "unexpected EOF on standby connection" msgstr "unerwartetes EOF auf Standby-Verbindung" -#: replication/walsender.c:1786 +#: replication/walsender.c:1800 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ungültiger Standby-Message-Typ »%c«" -#: replication/walsender.c:1875 +#: replication/walsender.c:1889 #, c-format msgid "unexpected message type \"%c\"" msgstr "unerwarteter Message-Typ »%c«" -#: replication/walsender.c:2288 +#: replication/walsender.c:2306 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "WAL-Sender-Prozess wird abgebrochen wegen Zeitüberschreitung bei der Replikation" @@ -20385,198 +20426,198 @@ msgstr "Umbenennen einer ON-SELECT-Regel ist nicht erlaubt" msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "WITH-Anfragename »%s« erscheint sowohl in der Regelaktion als auch in der umzuschreibenden Anfrage" -#: rewrite/rewriteHandler.c:610 +#: rewrite/rewriteHandler.c:613 #, c-format msgid "INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "INSTEAD...SELECT-Regelaktionen werden für Anfrangen mit datenmodifizierenden Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:663 +#: rewrite/rewriteHandler.c:666 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING-Listen können nicht in mehreren Regeln auftreten" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:898 rewrite/rewriteHandler.c:937 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "kann keinen Wert außer DEFAULT in Spalte »%s« einfügen" -#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:966 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "Spalte »%s« ist eine Identitätsspalte, die als GENERATED ALWAYS definiert ist." -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:902 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Verwenden Sie OVERRIDING SYSTEM VALUE, um diese Einschränkung außer Kraft zu setzen." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: rewrite/rewriteHandler.c:964 rewrite/rewriteHandler.c:972 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "Spalte »%s« kann nur auf DEFAULT aktualisiert werden" -#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 +#: rewrite/rewriteHandler.c:1107 rewrite/rewriteHandler.c:1125 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "mehrere Zuweisungen zur selben Spalte »%s«" -#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:1726 rewrite/rewriteHandler.c:3181 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "Zugriff auf Nicht-System-Sicht »%s« ist beschränkt" -#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 +#: rewrite/rewriteHandler.c:2158 rewrite/rewriteHandler.c:4084 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Regeln für Relation »%s«" -#: rewrite/rewriteHandler.c:2256 +#: rewrite/rewriteHandler.c:2263 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "unendliche Rekursion entdeckt in Policys für Relation »%s«" -#: rewrite/rewriteHandler.c:2586 +#: rewrite/rewriteHandler.c:2593 msgid "Junk view columns are not updatable." msgstr "Junk-Sichtspalten sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2591 +#: rewrite/rewriteHandler.c:2598 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Sichtspalten, die nicht Spalten ihrer Basisrelation sind, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2594 +#: rewrite/rewriteHandler.c:2601 msgid "View columns that refer to system columns are not updatable." msgstr "Sichtspalten, die auf Systemspalten verweisen, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2604 msgid "View columns that return whole-row references are not updatable." msgstr "Sichtspalten, die Verweise auf ganze Zeilen zurückgeben, sind nicht aktualisierbar." -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Sichten, die DISTINCT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2661 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Sichten, die GROUP BY enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing HAVING are not automatically updatable." msgstr "Sichten, die HAVING enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2674 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Sichten, die UNION, INTERSECT oder EXCEPT enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2670 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing WITH are not automatically updatable." msgstr "Sichten, die WITH enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2680 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Sichten, die LIMIT oder OFFSET enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2685 +#: rewrite/rewriteHandler.c:2692 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Sichten, die Aggregatfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2688 +#: rewrite/rewriteHandler.c:2695 msgid "Views that return window functions are not automatically updatable." msgstr "Sichten, die Fensterfunktionen zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2698 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Sichten, die Funktionen mit Ergebnismenge zurückgeben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 -#: rewrite/rewriteHandler.c:2710 +#: rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2709 +#: rewrite/rewriteHandler.c:2717 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Sichten, die nicht aus einer einzigen Tabelle oder Sicht lesen, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2713 +#: rewrite/rewriteHandler.c:2720 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Sichten, die TABLESAMPLE enthalten, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:2737 +#: rewrite/rewriteHandler.c:2744 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Sichten, die keine aktualisierbaren Spalten haben, sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:3234 +#: rewrite/rewriteHandler.c:3241 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "kann nicht in Spalte »%s« von Sicht »%s« einfügen" -#: rewrite/rewriteHandler.c:3242 +#: rewrite/rewriteHandler.c:3249 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "kann Spalte »%s« von Sicht »%s« nicht aktualisieren" -#: rewrite/rewriteHandler.c:3724 +#: rewrite/rewriteHandler.c:3747 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-NOTIFY-Regeln werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3735 +#: rewrite/rewriteHandler.c:3758 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-NOTHING-Regeln werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3749 +#: rewrite/rewriteHandler.c:3772 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-Regeln mit Bedingung werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3753 +#: rewrite/rewriteHandler.c:3776 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "DO-ALSO-Regeln werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3758 +#: rewrite/rewriteHandler.c:3781 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "DO-INSTEAD-Regeln mit mehreren Anweisungen werden für datenmodifizierende Anweisungen in WITH nicht unterstützt" -#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 -#: rewrite/rewriteHandler.c:4004 +#: rewrite/rewriteHandler.c:4012 rewrite/rewriteHandler.c:4020 +#: rewrite/rewriteHandler.c:4028 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Sichten mit DO-INSTEAD-Regeln mit Bedingung sind nicht automatisch aktualisierbar." -#: rewrite/rewriteHandler.c:4109 +#: rewrite/rewriteHandler.c:4134 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "INSERT RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4111 +#: rewrite/rewriteHandler.c:4136 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "Sie benötigen eine ON INSERT DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel." -#: rewrite/rewriteHandler.c:4116 +#: rewrite/rewriteHandler.c:4141 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "UPDATE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4118 +#: rewrite/rewriteHandler.c:4143 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "Sie benötigen eine ON UPDATE DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel." -#: rewrite/rewriteHandler.c:4123 +#: rewrite/rewriteHandler.c:4148 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "DELETE RETURNING kann in Relation »%s« nicht ausgeführt werden" -#: rewrite/rewriteHandler.c:4125 +#: rewrite/rewriteHandler.c:4150 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "Sie benötigen eine ON DELETE DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel." -#: rewrite/rewriteHandler.c:4143 +#: rewrite/rewriteHandler.c:4168 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT mit ON-CONFLICT-Klausel kann nicht mit Tabelle verwendet werden, die INSERT- oder UPDATE-Regeln hat" -#: rewrite/rewriteHandler.c:4200 +#: rewrite/rewriteHandler.c:4225 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH kann nicht in einer Anfrage verwendet werden, die durch Regeln in mehrere Anfragen umgeschrieben wird" @@ -20736,47 +20777,47 @@ msgstr "Statistikobjekt »%s.%s« konnte für Relation »%s.%s« nicht berechnet msgid "function returning record called in context that cannot accept type record" msgstr "Funktion, die einen Record zurückgibt, in einem Zusammenhang aufgerufen, der Typ record nicht verarbeiten kann" -#: storage/buffer/bufmgr.c:598 storage/buffer/bufmgr.c:765 +#: storage/buffer/bufmgr.c:605 storage/buffer/bufmgr.c:772 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "auf temporäre Tabellen anderer Sitzungen kann nicht zugegriffen werden" -#: storage/buffer/bufmgr.c:843 +#: storage/buffer/bufmgr.c:850 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "kann Relation %s nicht auf über %u Blöcke erweitern" -#: storage/buffer/bufmgr.c:930 +#: storage/buffer/bufmgr.c:937 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "unerwartete Daten hinter Dateiende in Block %u von Relation %s" -#: storage/buffer/bufmgr.c:932 +#: storage/buffer/bufmgr.c:939 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Das scheint mit fehlerhaften Kernels vorzukommen; Sie sollten eine Systemaktualisierung in Betracht ziehen." -#: storage/buffer/bufmgr.c:1031 +#: storage/buffer/bufmgr.c:1038 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "ungültige Seite in Block %u von Relation %s; fülle Seite mit Nullen" -#: storage/buffer/bufmgr.c:4533 +#: storage/buffer/bufmgr.c:4600 #, c-format msgid "could not write block %u of %s" msgstr "konnte Block %u von %s nicht schreiben" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4602 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Mehrere Fehlschläge --- Schreibfehler ist möglicherweise dauerhaft." -#: storage/buffer/bufmgr.c:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4623 storage/buffer/bufmgr.c:4642 #, c-format msgid "writing block %u of relation %s" msgstr "schreibe Block %u von Relation %s" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4946 #, c-format msgid "snapshot too old" msgstr "Snapshot zu alt" @@ -20806,113 +20847,113 @@ msgstr "konnte Größe von temporärer Datei »%s« von BufFile »%s« nicht bes msgid "could not delete shared fileset \"%s\": %m" msgstr "konnte geteiltes Datei-Set »%s« nicht löschen: %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:874 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "kann Datei »%s« nicht kürzen: %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "konnte schmutzige Daten nicht flushen: %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, c-format msgid "could not determine dirty data size: %m" msgstr "konnte Größe der schmutzigen Daten nicht bestimmen: %m" -#: storage/file/fd.c:597 +#: storage/file/fd.c:594 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "munmap() fehlgeschlagen beim Flushen von Daten: %m" -#: storage/file/fd.c:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "konnte Datei »%s« nicht nach »%s« linken: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit fehlgeschlagen: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "nicht genug Dateideskriptoren verfügbar, um Serverprozess zu starten" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "System erlaubt %d, wir benötigen mindestens %d." -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 -#: storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 +#: storage/file/fd.c:2668 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "keine Dateideskriptoren mehr: %m; freigeben und nochmal versuchen" -#: storage/file/fd.c:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "temporäre Datei: Pfad »%s«, Größe %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "konnte temporäres Verzeichnis »%s« nicht erzeugen: %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "konnte temporäres Unterverzeichnis »%s« nicht erzeugen: %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht erzeugen: %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht öffnen: %m" -#: storage/file/fd.c:1859 +#: storage/file/fd.c:1850 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht löschen: %m" -#: storage/file/fd.c:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "konnte Datei »%s« nicht löschen: %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "Größe der temporären Datei überschreitet temp_file_limit (%dkB)" -#: storage/file/fd.c:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "maxAllocatedDescs (%d) überschritten beim Versuch, die Datei »%s« zu öffnen" -#: storage/file/fd.c:2496 +#: storage/file/fd.c:2487 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "maxAllocatedDescs (%d) überschritten beim Versuch, den Befehl »%s« auszuführen" -#: storage/file/fd.c:2653 +#: storage/file/fd.c:2644 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "maxAllocatedDescs (%d) überschritten beim Versuch, das Verzeichnis »%s« zu öffnen" -#: storage/file/fd.c:3183 +#: storage/file/fd.c:3174 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "unerwartete Datei im Verzeichnis für temporäre Dateien gefunden: »%s«" -#: storage/file/fd.c:3312 +#: storage/file/fd.c:3303 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "konnte Dateisystem für Datei »%s« nicht synchronisieren: %m" @@ -21116,12 +21157,12 @@ msgstr "Wiederherstellung wartet immer noch nach %ld,%03d ms: %s" msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "Warten der Wiederherstellung beendet nach %ld,%03d ms: %s" -#: storage/ipc/standby.c:883 tcop/postgres.c:3358 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "storniere Anfrage wegen Konflikt mit der Wiederherstellung" -#: storage/ipc/standby.c:884 tcop/postgres.c:2512 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Benutzertransaktion hat Verklemmung (Deadlock) mit Wiederherstellung verursacht." @@ -21194,102 +21235,102 @@ msgstr "Verklemmung (Deadlock) entdeckt" msgid "See server log for query details." msgstr "Einzelheiten zur Anfrage finden Sie im Serverlog." -#: storage/lmgr/lmgr.c:825 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "beim Aktualisieren von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:828 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "beim Löschen von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:831 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "beim Sperren von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:834 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "beim Sperren von aktualisierter Version (%u,%u) von Tupel in Relation »%s«" -#: storage/lmgr/lmgr.c:837 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "beim Einfügen von Indextupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "beim Prüfen der Eindeutigkeit von Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:843 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "beim erneuten Prüfen des aktualisierten Tupels (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "beim Prüfen eines Exclusion-Constraints für Tupel (%u,%u) in Relation »%s«" -#: storage/lmgr/lmgr.c:1139 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "Relation %u der Datenbank %u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1151 #, c-format msgid "extension of relation %u of database %u" msgstr "Erweiterung von Relation %u in Datenbank %u" -#: storage/lmgr/lmgr.c:1151 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid der Datenbank %u" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "page %u of relation %u of database %u" msgstr "Seite %u von Relation %u von Datenbank %u" -#: storage/lmgr/lmgr.c:1163 +#: storage/lmgr/lmgr.c:1169 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "Tupel (%u, %u) von Relation %u von Datenbank %u" -#: storage/lmgr/lmgr.c:1171 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "Transaktion %u" -#: storage/lmgr/lmgr.c:1176 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "virtuelle Transaktion %d/%u" -#: storage/lmgr/lmgr.c:1182 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "spekulatives Token %u von Transaktion %u" -#: storage/lmgr/lmgr.c:1188 +#: storage/lmgr/lmgr.c:1194 #, c-format msgid "object %u of class %u of database %u" msgstr "Objekt %u von Klasse %u von Datenbank %u" -#: storage/lmgr/lmgr.c:1196 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "Benutzersperre [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1203 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "Benutzersperre [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "unbekannter Locktag-Typ %d" @@ -21478,22 +21519,22 @@ msgstr "konnte Block %u in Datei »%s« nicht schreiben: %m" msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "konnte Block %u in Datei »%s« nicht schreiben: es wurden nur %d von %d Bytes geschrieben" -#: storage/smgr/md.c:842 +#: storage/smgr/md.c:845 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "konnte Datei »%s« nicht auf %u Blöcke kürzen: es sind jetzt nur %u Blöcke" -#: storage/smgr/md.c:897 +#: storage/smgr/md.c:900 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "konnte Datei »%s« nicht auf %u Blöcke kürzen: %m" -#: storage/smgr/md.c:1301 +#: storage/smgr/md.c:1304 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "konnte Datei »%s« nicht öffnen (Zielblock %u): vorhergehendes Segment hat nur %u Blöcke" -#: storage/smgr/md.c:1315 +#: storage/smgr/md.c:1318 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "konnte Datei »%s« nicht öffnen (Zielblock %u): %m" @@ -21508,8 +21549,8 @@ msgstr "Funktion »%s« kann nicht via Fastpath-Interface aufgerufen werden" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "Fastpath-Funktionsaufruf: »%s« (OID %u)" -#: tcop/fastpath.c:312 tcop/postgres.c:1308 tcop/postgres.c:1566 -#: tcop/postgres.c:2037 tcop/postgres.c:2293 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 +#: tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "Dauer: %s ms" @@ -21539,295 +21580,295 @@ msgstr "ungültige Argumentgröße %d in Funktionsaufruf-Message" msgid "incorrect binary data format in function argument %d" msgstr "falsches Binärdatenformat in Funktionsargument %d" -#: tcop/postgres.c:449 tcop/postgres.c:4836 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "ungültiger Frontend-Message-Typ %d" -#: tcop/postgres.c:1018 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "Anweisung: %s" -#: tcop/postgres.c:1313 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "Dauer: %s ms Anweisung: %s" -#: tcop/postgres.c:1419 +#: tcop/postgres.c:1384 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "kann nicht mehrere Befehle in vorbereitete Anweisung einfügen" -#: tcop/postgres.c:1571 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "Dauer: %s ms Parsen %s: %s" -#: tcop/postgres.c:1638 tcop/postgres.c:2608 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "unbenannte vorbereitete Anweisung existiert nicht" -#: tcop/postgres.c:1690 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "Binden-Nachricht hat %d Parameterformate aber %d Parameter" -#: tcop/postgres.c:1696 +#: tcop/postgres.c:1661 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "Binden-Nachricht enthält %d Parameter, aber vorbereitete Anweisung »%s« erfordert %d" -#: tcop/postgres.c:1915 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "falsches Binärdatenformat in Binden-Parameter %d" -#: tcop/postgres.c:2042 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "Dauer: %s ms Binden %s%s%s: %s" -#: tcop/postgres.c:2093 tcop/postgres.c:2692 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "Portal »%s« existiert nicht" -#: tcop/postgres.c:2173 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2175 tcop/postgres.c:2301 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "Ausführen Fetch von" -#: tcop/postgres.c:2176 tcop/postgres.c:2302 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "Ausführen" -#: tcop/postgres.c:2298 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "Dauer: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2444 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "Vorbereiten: %s" -#: tcop/postgres.c:2469 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "Parameter: %s" -#: tcop/postgres.c:2484 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "Abbruchgrund: Konflikt bei Wiederherstellung" -#: tcop/postgres.c:2500 +#: tcop/postgres.c:2465 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Benutzer hat Shared-Buffer-Pin zu lange gehalten." -#: tcop/postgres.c:2503 +#: tcop/postgres.c:2468 #, c-format msgid "User was holding a relation lock for too long." msgstr "Benutzer hat Relationssperre zu lange gehalten." -#: tcop/postgres.c:2506 +#: tcop/postgres.c:2471 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "Benutzer hat (möglicherweise) einen Tablespace verwendet, der gelöscht werden muss." -#: tcop/postgres.c:2509 +#: tcop/postgres.c:2474 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "Benutzeranfrage hat möglicherweise Zeilenversionen sehen müssen, die entfernt werden müssen." -#: tcop/postgres.c:2515 +#: tcop/postgres.c:2480 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Benutzer war mit einer Datenbank verbunden, die gelöscht werden muss." -#: tcop/postgres.c:2554 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "Portal »%s« Parameter $%d = %s" -#: tcop/postgres.c:2557 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "Portal »%s« Parameter $%d" -#: tcop/postgres.c:2563 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "unbenanntes Portal Parameter $%d = %s" -#: tcop/postgres.c:2566 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "unbenanntes Portal Parameter $%d" -#: tcop/postgres.c:2912 +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "Verbindung wird abgebrochen wegen unerwartetem SIGQUIT-Signal" -#: tcop/postgres.c:2918 +#: tcop/postgres.c:2883 #, c-format msgid "terminating connection because of crash of another server process" msgstr "Verbindung wird abgebrochen wegen Absturz eines anderen Serverprozesses" -#: tcop/postgres.c:2919 +#: tcop/postgres.c:2884 #, c-format msgid "The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory." msgstr "Der Postmaster hat diesen Serverprozess angewiesen, die aktuelle Transaktion zurückzurollen und die Sitzung zu beenden, weil ein anderer Serverprozess abnormal beendet wurde und möglicherweise das Shared Memory verfälscht hat." -#: tcop/postgres.c:2923 tcop/postgres.c:3284 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "In einem Moment sollten Sie wieder mit der Datenbank verbinden und Ihren Befehl wiederholen können." -#: tcop/postgres.c:2930 +#: tcop/postgres.c:2895 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "Verbindung wird abgebrochen aufgrund von Befehl für sofortiges Herunterfahren" -#: tcop/postgres.c:3016 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "Fließkommafehler" -#: tcop/postgres.c:3017 +#: tcop/postgres.c:2982 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Eine ungültige Fließkommaoperation wurde signalisiert. Das bedeutet wahrscheinlich ein Ergebnis außerhalb des gültigen Bereichs oder eine ungültige Operation, zum Beispiel Division durch null." -#: tcop/postgres.c:3188 +#: tcop/postgres.c:3153 #, c-format msgid "canceling authentication due to timeout" msgstr "storniere Authentifizierung wegen Zeitüberschreitung" -#: tcop/postgres.c:3192 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "Autovacuum-Prozess wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3196 +#: tcop/postgres.c:3161 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "Arbeitsprozess für logische Replikation wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3213 tcop/postgres.c:3223 tcop/postgres.c:3282 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "Verbindung wird abgebrochen wegen Konflikt mit der Wiederherstellung" -#: tcop/postgres.c:3234 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "Verbindung wird abgebrochen aufgrund von Anweisung des Administrators" -#: tcop/postgres.c:3265 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "Verbindung zum Client wurde verloren" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung einer Sperre" -#: tcop/postgres.c:3342 +#: tcop/postgres.c:3307 #, c-format msgid "canceling statement due to statement timeout" msgstr "storniere Anfrage wegen Zeitüberschreitung der Anfrage" -#: tcop/postgres.c:3349 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "storniere Autovacuum-Aufgabe" -#: tcop/postgres.c:3372 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "storniere Anfrage wegen Benutzeraufforderung" -#: tcop/postgres.c:3386 +#: tcop/postgres.c:3351 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Transaktion" -#: tcop/postgres.c:3397 +#: tcop/postgres.c:3362 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "Verbindung wird abgebrochen wegen Zeitüberschreitung in inaktiver Sitzung" -#: tcop/postgres.c:3526 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "Grenze für Stacktiefe überschritten" -#: tcop/postgres.c:3527 +#: tcop/postgres.c:3492 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "Erhöhen Sie den Konfigurationsparameter »max_stack_depth« (aktuell %dkB), nachdem Sie sichergestellt haben, dass die Stacktiefenbegrenzung Ihrer Plattform ausreichend ist." -#: tcop/postgres.c:3590 +#: tcop/postgres.c:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "»max_stack_depth« darf %ldkB nicht überschreiten." -#: tcop/postgres.c:3592 +#: tcop/postgres.c:3557 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Erhöhen Sie die Stacktiefenbegrenzung Ihrer Plattform mit »ulimit -s« oder der lokalen Entsprechung." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:3978 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ungültiges Kommandozeilenargument für Serverprozess: %s" -#: tcop/postgres.c:4014 tcop/postgres.c:4020 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Versuchen Sie »%s --help« für weitere Informationen." -#: tcop/postgres.c:4018 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ungültiges Kommandozeilenargument: %s" -#: tcop/postgres.c:4081 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: weder Datenbankname noch Benutzername angegeben" -#: tcop/postgres.c:4738 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ungültiger Subtyp %d von CLOSE-Message" -#: tcop/postgres.c:4773 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ungültiger Subtyp %d von DESCRIBE-Message" -#: tcop/postgres.c:4857 +#: tcop/postgres.c:4822 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "Fastpath-Funktionsaufrufe werden auf einer Replikationsverbindung nicht unterstützt" -#: tcop/postgres.c:4861 +#: tcop/postgres.c:4826 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "erweitertes Anfrageprotokoll wird nicht auf einer Replikationsverbindung unterstützt" -#: tcop/postgres.c:5038 +#: tcop/postgres.c:5003 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "Verbindungsende: Sitzungszeit: %d:%02d:%02d.%03d Benutzer=%s Datenbank=%s Host=%s%s%s" @@ -21837,12 +21878,12 @@ msgstr "Verbindungsende: Sitzungszeit: %d:%02d:%02d.%03d Benutzer=%s Datenbank=% msgid "bind message has %d result formats but query has %d columns" msgstr "Bind-Message hat %d Ergebnisspalten, aber Anfrage hat %d Spalten" -#: tcop/pquery.c:939 tcop/pquery.c:1698 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "Cursor kann nur vorwärts scannen" -#: tcop/pquery.c:940 tcop/pquery.c:1699 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Deklarieren Sie ihn mit der Option SCROLL, um rückwarts scannen zu können." @@ -21882,6 +21923,11 @@ msgstr "%s kann nicht in einem Hintergrundprozess ausgeführt werden" msgid "must be superuser to do CHECKPOINT" msgstr "nur Superuser können CHECKPOINT ausführen" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS unterstützt nur Relationsnamen in der FROM-Klausel" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -22002,79 +22048,79 @@ msgstr "unbekannter Thesaurus-Parameter: »%s«" msgid "missing Dictionary parameter" msgstr "Parameter »Dictionary« fehlt" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 -#: tsearch/spell.c:1063 +#: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 +#: tsearch/spell.c:1060 #, c-format msgid "invalid affix flag \"%s\"" msgstr "ungültiges Affix-Flag »%s«" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:387 tsearch/spell.c:1064 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "Affix-Flag »%s« ist außerhalb des gültigen Bereichs" -#: tsearch/spell.c:415 +#: tsearch/spell.c:417 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "ungültiges Zeichen in Affix-Flag »%s«" -#: tsearch/spell.c:435 +#: tsearch/spell.c:437 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "ungültiges Affix-Flag »%s« mit Flag-Wert »long«" -#: tsearch/spell.c:525 +#: tsearch/spell.c:527 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "konnte Wörterbuchdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:766 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "ungültiger regulärer Ausdruck: %s" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 -#: tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1187 tsearch/spell.c:1199 tsearch/spell.c:1758 +#: tsearch/spell.c:1763 tsearch/spell.c:1768 #, c-format msgid "invalid affix alias \"%s\"" msgstr "ungültiges Affixalias »%s«" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1240 tsearch/spell.c:1311 tsearch/spell.c:1460 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "konnte Affixdatei »%s« nicht öffnen: %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1294 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell-Wörterbuch unterstützt nur die Flag-Werte »default«, »long« und »num«" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1338 #, c-format msgid "invalid number of flag vector aliases" msgstr "ungültige Anzahl Flag-Vektor-Aliasse" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1361 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "Anzahl der Aliasse überschreitet angegebene Zahl %d" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1575 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "Affixdatei enthält Befehle im alten und im neuen Stil" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "Zeichenkette ist zu lang für tsvector (%d Bytes, maximal %d Bytes)" -#: tsearch/ts_locale.c:227 +#: tsearch/ts_locale.c:200 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "Zeile %d in Konfigurationsdatei »%s«: »%s«" -#: tsearch/ts_locale.c:307 +#: tsearch/ts_locale.c:280 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "Umwandlung von wchar_t in Serverkodierung fehlgeschlagen: %m" @@ -22106,137 +22152,137 @@ msgstr "konnte Stoppwortdatei »%s« nicht öffnen: %m" msgid "text search parser does not support headline creation" msgstr "Textsucheparser unterstützt das Erzeugen von Headlines nicht" -#: tsearch/wparser_def.c:2593 +#: tsearch/wparser_def.c:2594 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "unbekannter Headline-Parameter: »%s«" -#: tsearch/wparser_def.c:2612 +#: tsearch/wparser_def.c:2613 #, c-format msgid "MinWords should be less than MaxWords" msgstr "»MinWords« sollte kleiner als »MaxWords« sein" -#: tsearch/wparser_def.c:2616 +#: tsearch/wparser_def.c:2617 #, c-format msgid "MinWords should be positive" msgstr "»MinWords« sollte positiv sein" -#: tsearch/wparser_def.c:2620 +#: tsearch/wparser_def.c:2621 #, c-format msgid "ShortWord should be >= 0" msgstr "»ShortWord« sollte >= 0 sein" -#: tsearch/wparser_def.c:2624 +#: tsearch/wparser_def.c:2625 #, c-format msgid "MaxFragments should be >= 0" msgstr "»MaxFragments« sollte >= 0 sein" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "Bezeichner zu lang" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Bezeichner muss weniger als %d Zeichen haben." -#: utils/adt/acl.c:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "unbekanntes Schlüsselwort: »%s«" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL-Schlüsselwort muss »group« oder »user« sein." -#: utils/adt/acl.c:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "Name fehlt" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Auf das Schlüsselwort »group« oder »user« muss ein Name folgen." -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "»=«-Zeichen fehlt" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "ungültiges Moduszeichen: muss eines aus »%s« sein" -#: utils/adt/acl.c:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "auf das »/«-Zeichen muss ein Name folgen" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "nicht angegebener Grantor wird auf user ID %u gesetzt" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL-Array enthält falschen Datentyp" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL-Arrays müssen eindimensional sein" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL-Array darf keine NULL-Werte enthalten" -#: utils/adt/acl.c:563 +#: utils/adt/acl.c:580 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "überflüssiger Müll am Ende der ACL-Angabe" -#: utils/adt/acl.c:1198 +#: utils/adt/acl.c:1215 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "Grant-Optionen können nicht an den eigenen Grantor gegeben werden" -#: utils/adt/acl.c:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "abhängige Privilegien existieren" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Verwenden Sie CASCADE, um diese auch zu entziehen." -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert wird nicht mehr unterstützt" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove wird nicht mehr unterstützt" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "unbekannter Privilegtyp: »%s«" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "Funktion »%s« existiert nicht" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "Berechtigung nur für Mitglied von Rolle »%s«" @@ -22256,15 +22302,15 @@ msgstr "Eingabedatentyp ist kein Array" #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 #: utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 -#: utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 -#: utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 -#: utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 -#: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 -#: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 -#: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 -#: utils/adt/int8.c:1299 utils/adt/numeric.c:1783 utils/adt/numeric.c:4246 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 -#: utils/adt/varlena.c:3422 +#: utils/adt/float.c:4066 utils/adt/int.c:786 utils/adt/int.c:808 +#: utils/adt/int.c:822 utils/adt/int.c:836 utils/adt/int.c:867 +#: utils/adt/int.c:888 utils/adt/int.c:1005 utils/adt/int.c:1019 +#: utils/adt/int.c:1033 utils/adt/int.c:1066 utils/adt/int.c:1080 +#: utils/adt/int.c:1094 utils/adt/int.c:1125 utils/adt/int.c:1207 +#: utils/adt/int.c:1271 utils/adt/int.c:1339 utils/adt/int.c:1345 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 +#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1157 +#: utils/adt/varlena.c:3468 #, c-format msgid "integer out of range" msgstr "integer ist außerhalb des gültigen Bereichs" @@ -22397,8 +22443,8 @@ msgstr "Mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dim msgid "Junk after closing right brace." msgstr "Müll nach schließender rechter geschweifter Klammer." -#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 -#: utils/adt/arrayfuncs.c:5938 +#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3511 +#: utils/adt/arrayfuncs.c:6101 #, c-format msgid "invalid number of dimensions: %d" msgstr "ungültige Anzahl Dimensionen: %d" @@ -22437,8 +22483,8 @@ msgstr "Auswählen von Stücken aus Arrays mit fester Länge ist nicht implement #: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 #: utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 -#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5924 -#: utils/adt/arrayfuncs.c:5950 utils/adt/arrayfuncs.c:5961 +#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:6087 +#: utils/adt/arrayfuncs.c:6113 utils/adt/arrayfuncs.c:6124 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 #: utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 @@ -22477,85 +22523,85 @@ msgstr "Wenn ein Slice eines leeren Array-Wertes zugewiesen wird, dann müssen d msgid "source array too small" msgstr "Quellarray ist zu klein" -#: utils/adt/arrayfuncs.c:3583 +#: utils/adt/arrayfuncs.c:3669 #, c-format msgid "null array element not allowed in this context" msgstr "NULL-Werte im Array sind in diesem Zusammenhang nicht erlaubt" -#: utils/adt/arrayfuncs.c:3685 utils/adt/arrayfuncs.c:3856 -#: utils/adt/arrayfuncs.c:4246 +#: utils/adt/arrayfuncs.c:3846 utils/adt/arrayfuncs.c:4017 +#: utils/adt/arrayfuncs.c:4407 #, c-format msgid "cannot compare arrays of different element types" msgstr "kann Arrays mit verschiedenen Elementtypen nicht vergleichen" -#: utils/adt/arrayfuncs.c:4034 utils/adt/multirangetypes.c:2742 -#: utils/adt/multirangetypes.c:2814 utils/adt/rangetypes.c:1343 +#: utils/adt/arrayfuncs.c:4195 utils/adt/multirangetypes.c:2743 +#: utils/adt/multirangetypes.c:2815 utils/adt/rangetypes.c:1343 #: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "konnte keine Hash-Funktion für Typ %s ermitteln" -#: utils/adt/arrayfuncs.c:4161 utils/adt/rowtypes.c:1979 +#: utils/adt/arrayfuncs.c:4322 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "konnte keine erweiterte Hash-Funktion für Typ %s ermitteln" -#: utils/adt/arrayfuncs.c:5338 +#: utils/adt/arrayfuncs.c:5499 #, c-format msgid "data type %s is not an array type" msgstr "Datentyp %s ist kein Array-Typ" -#: utils/adt/arrayfuncs.c:5393 +#: utils/adt/arrayfuncs.c:5554 #, c-format msgid "cannot accumulate null arrays" msgstr "Arrays, die NULL sind, können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5421 +#: utils/adt/arrayfuncs.c:5582 #, c-format msgid "cannot accumulate empty arrays" msgstr "leere Arrays können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5448 utils/adt/arrayfuncs.c:5454 +#: utils/adt/arrayfuncs.c:5609 utils/adt/arrayfuncs.c:5615 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "Arrays unterschiedlicher Dimensionalität können nicht akkumuliert werden" -#: utils/adt/arrayfuncs.c:5822 utils/adt/arrayfuncs.c:5862 +#: utils/adt/arrayfuncs.c:5985 utils/adt/arrayfuncs.c:6025 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "Dimensions-Array oder Untergrenzen-Array darf nicht NULL sein" -#: utils/adt/arrayfuncs.c:5925 utils/adt/arrayfuncs.c:5951 +#: utils/adt/arrayfuncs.c:6088 utils/adt/arrayfuncs.c:6114 #, c-format msgid "Dimension array must be one dimensional." msgstr "Dimensions-Array muss eindimensional sein." -#: utils/adt/arrayfuncs.c:5930 utils/adt/arrayfuncs.c:5956 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "dimension values cannot be null" msgstr "Dimensionswerte dürfen nicht NULL sein" -#: utils/adt/arrayfuncs.c:5962 +#: utils/adt/arrayfuncs.c:6125 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Untergrenzen-Array hat andere Größe als Dimensions-Array." -#: utils/adt/arrayfuncs.c:6240 +#: utils/adt/arrayfuncs.c:6403 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "Entfernen von Elementen aus mehrdimensionalen Arrays wird nicht unterstützt" -#: utils/adt/arrayfuncs.c:6517 +#: utils/adt/arrayfuncs.c:6680 #, c-format msgid "thresholds must be one-dimensional array" msgstr "Parameter »thresholds« muss ein eindimensionales Array sein" -#: utils/adt/arrayfuncs.c:6522 +#: utils/adt/arrayfuncs.c:6685 #, c-format msgid "thresholds array must not contain NULLs" msgstr "»thresholds«-Array darf keine NULL-Werte enthalten" -#: utils/adt/arrayfuncs.c:6755 +#: utils/adt/arrayfuncs.c:6918 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "Anzahl der zu entfernenden Elemente muss zwischen 0 und %d sein" @@ -22607,8 +22653,8 @@ msgstr "Kodierungsumwandlung zwischen %s und ASCII wird nicht unterstützt" #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 #: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 -#: utils/adt/numeric.c:720 utils/adt/numeric.c:6901 utils/adt/numeric.c:6925 -#: utils/adt/numeric.c:6949 utils/adt/numeric.c:7907 utils/adt/numutils.c:116 +#: utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 +#: utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 utils/adt/numutils.c:116 #: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 #: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 #: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 @@ -22625,13 +22671,13 @@ msgid "money out of range" msgstr "money ist außerhalb des gültigen Bereichs" #: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 -#: utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 -#: utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 +#: utils/adt/int.c:851 utils/adt/int.c:967 utils/adt/int.c:1047 +#: utils/adt/int.c:1109 utils/adt/int.c:1147 utils/adt/int.c:1175 #: utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 #: utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 -#: utils/adt/numeric.c:3046 utils/adt/numeric.c:3069 utils/adt/numeric.c:3154 -#: utils/adt/numeric.c:3172 utils/adt/numeric.c:3268 utils/adt/numeric.c:8456 -#: utils/adt/numeric.c:8746 utils/adt/numeric.c:10392 +#: utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 +#: utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 utils/adt/numeric.c:8457 +#: utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 #: utils/adt/timestamp.c:3317 #, c-format msgid "division by zero" @@ -22674,7 +22720,7 @@ msgid "date out of range: \"%s\"" msgstr "date ist außerhalb des gültigen Bereichs: »%s«" #: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 -#: utils/adt/xml.c:2259 +#: utils/adt/xml.c:2252 #, c-format msgid "date out of range" msgstr "date ist außerhalb des gültigen Bereichs" @@ -22736,8 +22782,8 @@ msgstr "»date«-Einheit »%s« nicht erkannt" #: utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 #: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 #: utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 -#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2281 -#: utils/adt/xml.c:2288 utils/adt/xml.c:2308 utils/adt/xml.c:2315 +#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2274 +#: utils/adt/xml.c:2281 utils/adt/xml.c:2301 utils/adt/xml.c:2308 #, c-format msgid "timestamp out of range" msgstr "timestamp ist außerhalb des gültigen Bereichs" @@ -22753,8 +22799,8 @@ msgid "time field value out of range: %d:%02d:%02g" msgstr "Zeit-Feldwert ist außerhalb des gültigen Bereichs: %d:%02d:%02g" #: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 -#: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 -#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2450 +#: utils/adt/float.c:1123 utils/adt/int.c:643 utils/adt/int.c:690 +#: utils/adt/int.c:725 utils/adt/int8.c:499 utils/adt/numeric.c:2451 #: utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 #: utils/adt/timestamp.c:3450 #, c-format @@ -22936,37 +22982,37 @@ msgstr "»%s« ist außerhalb des gültigen Bereichs für Typ real" msgid "\"%s\" is out of range for type double precision" msgstr "»%s« ist außerhalb des gültigen Bereichs für Typ double precision" -#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 -#: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 -#: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 -#: utils/adt/int8.c:1320 utils/adt/numeric.c:4358 utils/adt/numeric.c:4363 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:363 +#: utils/adt/int.c:901 utils/adt/int.c:923 utils/adt/int.c:937 +#: utils/adt/int.c:951 utils/adt/int.c:983 utils/adt/int.c:1221 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "smallint ist außerhalb des gültigen Bereichs" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3564 utils/adt/numeric.c:9339 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, c-format msgid "cannot take square root of a negative number" msgstr "Quadratwurzel von negativer Zahl kann nicht ermittelt werden" -#: utils/adt/float.c:1526 utils/adt/numeric.c:3839 utils/adt/numeric.c:3951 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, c-format msgid "zero raised to a negative power is undefined" msgstr "null hoch eine negative Zahl ist undefiniert" -#: utils/adt/float.c:1530 utils/adt/numeric.c:3843 utils/adt/numeric.c:10244 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "eine negative Zahl hoch eine nicht ganze Zahl ergibt ein komplexes Ergebnis" -#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3751 -#: utils/adt/numeric.c:10017 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 +#: utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "Logarithmus von null kann nicht ermittelt werden" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3689 -#: utils/adt/numeric.c:3746 utils/adt/numeric.c:10021 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 +#: utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "Logarithmus negativer Zahlen kann nicht ermittelt werden" @@ -22985,22 +23031,22 @@ msgstr "Eingabe ist außerhalb des gültigen Bereichs" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "setseed-Parameter %g ist außerhalb des gültigen Bereichs [-1;-1]" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1723 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "Anzahl muss größer als null sein" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1734 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "Operand, Untergrenze und Obergrenze dürfen nicht NaN sein" -#: utils/adt/float.c:4041 utils/adt/numeric.c:1739 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "Untergrenze und Obergrenze müssen endlich sein" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1753 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "Untergrenze kann nicht gleich der Obergrenze sein" @@ -23257,12 +23303,12 @@ msgstr "Verwenden Sie die 24-Stunden-Uhr oder geben Sie eine Stunde zwischen 1 u msgid "cannot calculate day of year without year information" msgstr "kann Tag des Jahres nicht berechnen ohne Jahrinformationen" -#: utils/adt/formatting.c:5606 +#: utils/adt/formatting.c:5608 #, c-format msgid "\"EEEE\" not supported for input" msgstr "»E« wird nicht bei der Eingabe unterstützt" -#: utils/adt/formatting.c:5618 +#: utils/adt/formatting.c:5620 #, c-format msgid "\"RN\" not supported for input" msgstr "»RN« wird nicht bei der Eingabe unterstützt" @@ -23283,8 +23329,8 @@ msgid "path must be in or below the current directory" msgstr "Pfad muss in oder unter aktuellem Verzeichnis sein" #: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 -#: utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:835 -#: utils/adt/oracle_compat.c:1130 +#: utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:844 +#: utils/adt/oracle_compat.c:1139 #, c-format msgid "requested length too large" msgstr "verlangte Länge zu groß" @@ -23380,22 +23426,27 @@ msgstr "kann Kreis mit Radius null nicht in Polygon umwandeln" msgid "must request at least 2 points" msgstr "mindestens 2 Punkte müssen angefordert werden" -#: utils/adt/int.c:164 +#: utils/adt/int.c:158 +#, c-format +msgid "array is not a valid int2vector" +msgstr "Array ist kein gültiger int2vector" + +#: utils/adt/int.c:188 #, c-format msgid "int2vector has too many elements" msgstr "int2vector-Wert hat zu viele Elemente" -#: utils/adt/int.c:237 +#: utils/adt/int.c:265 #, c-format msgid "invalid int2vector data" msgstr "ungültige int2vector-Daten" -#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:271 utils/adt/oid.c:239 utils/adt/oid.c:324 #, c-format msgid "oidvector has too many elements" msgstr "oidvector-Wert hat zu viele Elemente" -#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 +#: utils/adt/int.c:1537 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 #: utils/adt/timestamp.c:5879 utils/adt/timestamp.c:5959 #, c-format msgid "step size cannot equal zero" @@ -23410,7 +23461,7 @@ msgstr "Schrittgröße kann nicht gleich null sein" #: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 #: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 #: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 -#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4317 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 #: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" @@ -23528,23 +23579,23 @@ msgstr "kann jsonb-Objekt nicht in Typ %s umwandeln" msgid "cannot cast jsonb array or object to type %s" msgstr "kann jsonb-Array oder -Objekt nicht in Typ %s umwandeln" -#: utils/adt/jsonb_util.c:751 +#: utils/adt/jsonb_util.c:748 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "Anzahl der jsonb-Objekte-Paare überschreitet erlaubtes Maximum (%zu)" -#: utils/adt/jsonb_util.c:792 +#: utils/adt/jsonb_util.c:789 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "Anzahl der jsonb-Arrayelemente überschreitet erlaubtes Maximum (%zu)" -#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "Gesamtgröße der jsonb-Array-Elemente überschreitet die maximale Größe von %u Bytes" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 -#: utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 +#: utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "Gesamtgröße der jsonb-Objektelemente überschreitet die maximale Größe von %u Bytes" @@ -23922,7 +23973,7 @@ msgstr "Wert kann nicht von %s nach %s konvertiert werden ohne Verwendung von Ze msgid "Use *_tz() function for time zone support." msgstr "Verwenden Sie die *_tz()-Funktion für Zeitzonenunterstützung." -#: utils/adt/levenshtein.c:133 +#: utils/adt/levenshtein.c:135 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "Levenshtein-Argument überschreitet die maximale Länge von %d Zeichen" @@ -23947,12 +23998,12 @@ msgstr "nichtdeterministische Sortierfolgen werden von ILIKE nicht unterstützt" msgid "LIKE pattern must not end with escape character" msgstr "LIKE-Muster darf nicht mit Escape-Zeichen enden" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 #, c-format msgid "invalid escape string" msgstr "ungültige ESCAPE-Zeichenkette" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:704 #, c-format msgid "Escape string must be empty or one character." msgstr "ESCAPE-Zeichenkette muss null oder ein Zeichen lang sein." @@ -24079,22 +24130,22 @@ msgstr "Start einer Range erwartet." msgid "Expected comma or end of multirange." msgstr "Komma oder Ende der Multirange erwartet." -#: utils/adt/multirangetypes.c:975 +#: utils/adt/multirangetypes.c:976 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "Multiranges können nicht aus mehrdimensionalen Arrays konstruiert werden" -#: utils/adt/multirangetypes.c:1001 +#: utils/adt/multirangetypes.c:1002 #, c-format msgid "multirange values cannot contain null members" msgstr "Multirange-Werte können keine Mitglieder, die NULL sind, haben" -#: utils/adt/multirangetypes.c:1349 +#: utils/adt/multirangetypes.c:1350 #, c-format msgid "range_agg must be called with a range" msgstr "range_agg muss mit einem Range-Type aufgerufen werden" -#: utils/adt/multirangetypes.c:1420 +#: utils/adt/multirangetypes.c:1421 #, c-format msgid "range_intersect_agg must be called with a multirange" msgstr "range_intersect_agg muss mit einem Multirange-Typ aufgerufen werden" @@ -24233,46 +24284,46 @@ msgstr "Schrittgröße kann nicht NaN sein" msgid "step size cannot be infinity" msgstr "Schrittgröße kann nicht unendlich sein" -#: utils/adt/numeric.c:3504 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "Fakultät einer negativen Zahl ist undefiniert" -#: utils/adt/numeric.c:3514 utils/adt/numeric.c:6964 utils/adt/numeric.c:7437 -#: utils/adt/numeric.c:9814 utils/adt/numeric.c:10302 utils/adt/numeric.c:10428 -#: utils/adt/numeric.c:10502 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 +#: utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 +#: utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "Wert verursacht Überlauf im »numeric«-Format" -#: utils/adt/numeric.c:4224 utils/adt/numeric.c:4304 utils/adt/numeric.c:4345 -#: utils/adt/numeric.c:4539 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 +#: utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "kann NaN nicht in %s umwandeln" -#: utils/adt/numeric.c:4228 utils/adt/numeric.c:4308 utils/adt/numeric.c:4349 -#: utils/adt/numeric.c:4543 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 +#: utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "kann Unendlich nicht in %s umwandeln" -#: utils/adt/numeric.c:4552 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn ist außerhalb des gültigen Bereichs" -#: utils/adt/numeric.c:7521 utils/adt/numeric.c:7568 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "Feldüberlauf bei Typ »numeric«" -#: utils/adt/numeric.c:7522 +#: utils/adt/numeric.c:7523 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Ein Feld mit Präzision %d, Skala %d muss beim Runden einen Betrag von weniger als %s%d ergeben." -#: utils/adt/numeric.c:7569 +#: utils/adt/numeric.c:7570 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "Ein Feld mit Präzision %d, Skala %d kann keinen unendlichen Wert enthalten." @@ -24282,27 +24333,32 @@ msgstr "Ein Feld mit Präzision %d, Skala %d kann keinen unendlichen Wert enthal msgid "value \"%s\" is out of range for 8-bit integer" msgstr "Wert »%s« ist außerhalb des gültigen Bereichs für 8-Bit-Ganzzahl" -#: utils/adt/oid.c:290 +#: utils/adt/oid.c:211 +#, c-format +msgid "array is not a valid oidvector" +msgstr "Array ist kein gültiger oidvector" + +#: utils/adt/oid.c:318 #, c-format msgid "invalid oidvector data" msgstr "ungültige oidvector-Daten" -#: utils/adt/oracle_compat.c:972 +#: utils/adt/oracle_compat.c:981 #, c-format msgid "requested character too large" msgstr "verlangtes Zeichen zu groß" -#: utils/adt/oracle_compat.c:1022 utils/adt/oracle_compat.c:1084 +#: utils/adt/oracle_compat.c:1031 utils/adt/oracle_compat.c:1093 #, c-format msgid "requested character too large for encoding: %d" msgstr "gewünschtes Zeichen ist zu groß für die Kodierung: %d" -#: utils/adt/oracle_compat.c:1063 +#: utils/adt/oracle_compat.c:1072 #, c-format msgid "requested character not valid for encoding: %d" msgstr "gewünschtes Zeichen ist nicht gültig für die Kodierung: %d" -#: utils/adt/oracle_compat.c:1077 +#: utils/adt/oracle_compat.c:1086 #, c-format msgid "null character not permitted" msgstr "Null-Zeichen ist nicht erlaubt" @@ -24313,99 +24369,99 @@ msgstr "Null-Zeichen ist nicht erlaubt" msgid "percentile value %g is not between 0 and 1" msgstr "Perzentilwert %g ist nicht zwischen 0 und 1" -#: utils/adt/pg_locale.c:1228 +#: utils/adt/pg_locale.c:1229 #, c-format msgid "Apply system library package updates." msgstr "Aktualisieren Sie die Systembibliotheken." -#: utils/adt/pg_locale.c:1442 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "could not create locale \"%s\": %m" msgstr "konnte Locale »%s« nicht erzeugen: %m" -#: utils/adt/pg_locale.c:1445 +#: utils/adt/pg_locale.c:1448 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Das Betriebssystem konnte keine Locale-Daten für den Locale-Namen »%s« finden." -#: utils/adt/pg_locale.c:1547 +#: utils/adt/pg_locale.c:1550 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "Sortierfolgen mit unterschiedlichen »collate«- und »ctype«-Werten werden auf dieser Plattform nicht unterstützt" -#: utils/adt/pg_locale.c:1556 +#: utils/adt/pg_locale.c:1559 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "Sortierfolgen-Provider LIBC wird auf dieser Plattform nicht unterstützt" -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "Sortierfolgen mit unterschiedlichen »collate«- und »ctype«-Werten werden von ICU nicht unterstützt" -#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1940 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1664 +#: utils/adt/pg_locale.c:1943 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "konnte Collator für Locale »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:1588 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "ICU wird in dieser Installation nicht unterstützt" -#: utils/adt/pg_locale.c:1609 +#: utils/adt/pg_locale.c:1612 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "Sortierfolge »%s« hat keine tatsächliche Version, aber eine Version wurde angegeben" -#: utils/adt/pg_locale.c:1616 +#: utils/adt/pg_locale.c:1619 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "Version von Sortierfolge »%s« stimmt nicht überein" -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1621 #, c-format msgid "The collation in the database was created using version %s, but the operating system provides version %s." msgstr "Die Sortierfolge in der Datenbank wurde mit Version %s erzeugt, aber das Betriebssystem hat Version %s." -#: utils/adt/pg_locale.c:1621 +#: utils/adt/pg_locale.c:1624 #, c-format msgid "Rebuild all objects affected by this collation and run ALTER COLLATION %s REFRESH VERSION, or build PostgreSQL with the right library version." msgstr "Bauen Sie alle von dieser Sortierfolge beinflussten Objekte neu und führen Sie ALTER COLLATION %s REFRESH VERSION aus, oder bauen Sie PostgreSQL mit der richtigen Bibliotheksversion." -#: utils/adt/pg_locale.c:1692 +#: utils/adt/pg_locale.c:1695 #, c-format msgid "could not load locale \"%s\"" msgstr "konnte Locale »%s« nicht laden" -#: utils/adt/pg_locale.c:1717 +#: utils/adt/pg_locale.c:1720 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "konnte Sortierfolgenversion für Locale »%s« nicht ermitteln: Fehlercode %lu" -#: utils/adt/pg_locale.c:1755 +#: utils/adt/pg_locale.c:1758 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "Kodierung »%s« wird von ICU nicht unterstützt" -#: utils/adt/pg_locale.c:1762 +#: utils/adt/pg_locale.c:1765 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "konnte ICU-Konverter für Kodierung »%s« nicht öffnen: %s" -#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 -#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 +#: utils/adt/pg_locale.c:1796 utils/adt/pg_locale.c:1805 +#: utils/adt/pg_locale.c:1834 utils/adt/pg_locale.c:1844 #, c-format msgid "%s failed: %s" msgstr "%s fehlgeschlagen: %s" -#: utils/adt/pg_locale.c:2113 +#: utils/adt/pg_locale.c:2116 #, c-format msgid "invalid multibyte character for locale" msgstr "ungültiges Mehrbytezeichen für Locale" -#: utils/adt/pg_locale.c:2114 +#: utils/adt/pg_locale.c:2117 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Die LC_CTYPE-Locale des Servers ist wahrscheinlich mit der Kodierung der Datenbank inkompatibel." @@ -24515,7 +24571,7 @@ msgstr "Zu viele Kommas." msgid "Junk after right parenthesis or bracket." msgstr "Müll nach rechter runder oder eckiger Klammer." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1614 utils/adt/varlena.c:4595 #, c-format msgid "regular expression failed: %s" msgstr "regulärer Ausdruck fehlgeschlagen: %s" @@ -24525,23 +24581,23 @@ msgstr "regulärer Ausdruck fehlgeschlagen: %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "ungültige Option für regulären Ausdruck: »%.*s«" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:850 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "SQL regulärer Ausdruck darf nicht mehr als zwei Escape-Double-Quote-Separatoren enthalten" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1052 utils/adt/regexp.c:1434 utils/adt/regexp.c:1489 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s unterstützt die »Global«-Option nicht" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1054 #, c-format msgid "Use the regexp_matches function instead." msgstr "Verwenden Sie stattdessen die Funktion regexp_matches." -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1236 #, c-format msgid "too many regular expression matches" msgstr "zu viele Treffer für regulären Ausdruck" @@ -24557,7 +24613,7 @@ msgid "more than one operator named %s" msgstr "es gibt mehrere Operatoren namens %s" #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 +#: utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "zu viele Argumente" @@ -24569,7 +24625,7 @@ msgstr "Geben Sie zwei Argumente für den Operator an." #: utils/adt/regproc.c:1639 utils/adt/regproc.c:1663 utils/adt/regproc.c:1764 #: utils/adt/regproc.c:1788 utils/adt/regproc.c:1890 utils/adt/regproc.c:1895 -#: utils/adt/varlena.c:3698 utils/adt/varlena.c:3703 +#: utils/adt/varlena.c:3744 utils/adt/varlena.c:3749 #, c-format msgid "invalid name syntax" msgstr "ungültige Namenssyntax" @@ -24969,12 +25025,12 @@ msgstr "Gewichtungs-Array darf keine NULL-Werte enthalten" msgid "weight out of range" msgstr "Gewichtung ist außerhalb des gültigen Bereichs" -#: utils/adt/tsvector.c:215 +#: utils/adt/tsvector.c:212 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "Wort ist zu lang (%ld Bytes, maximal %ld Bytes)" -#: utils/adt/tsvector.c:222 +#: utils/adt/tsvector.c:219 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "Zeichenkette ist zu lang für tsvector (%ld Bytes, maximal %ld Bytes)" @@ -25000,37 +25056,37 @@ msgstr "unbekannte Gewichtung: »%c«" msgid "ts_stat query must return one tsvector column" msgstr "ts_stat-Anfrage muss eine tsvector-Spalte zurückgeben" -#: utils/adt/tsvector_op.c:2618 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "tsvector-Spalte »%s« existiert nicht" -#: utils/adt/tsvector_op.c:2625 +#: utils/adt/tsvector_op.c:2629 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "Spalte »%s« hat nicht Typ tsvector" -#: utils/adt/tsvector_op.c:2637 +#: utils/adt/tsvector_op.c:2641 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "Konfigurationsspalte »%s« existiert nicht" -#: utils/adt/tsvector_op.c:2643 +#: utils/adt/tsvector_op.c:2647 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "Spalte »%s« hat nicht Typ regconfig" -#: utils/adt/tsvector_op.c:2650 +#: utils/adt/tsvector_op.c:2654 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "Konfigurationsspalte »%s« darf nicht NULL sein" -#: utils/adt/tsvector_op.c:2663 +#: utils/adt/tsvector_op.c:2667 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "Textsuchekonfigurationsname »%s« muss Schemaqualifikation haben" -#: utils/adt/tsvector_op.c:2688 +#: utils/adt/tsvector_op.c:2692 #, c-format msgid "column \"%s\" is not of a character type" msgstr "Spalte »%s« hat keinen Zeichentyp" @@ -25040,12 +25096,12 @@ msgstr "Spalte »%s« hat keinen Zeichentyp" msgid "syntax error in tsvector: \"%s\"" msgstr "Syntaxfehler in tsvector: »%s«" -#: utils/adt/tsvector_parser.c:200 +#: utils/adt/tsvector_parser.c:199 #, c-format msgid "there is no escaped character: \"%s\"" msgstr "es gibt kein escaptes Zeichen: »%s«" -#: utils/adt/tsvector_parser.c:318 +#: utils/adt/tsvector_parser.c:313 #, c-format msgid "wrong position info in tsvector: \"%s\"" msgstr "falsche Positionsinformationen in tsvector: »%s«" @@ -25095,9 +25151,9 @@ msgstr "ungültige Länge in externer Bitkette" msgid "bit string too long for type bit varying(%d)" msgstr "Bitkette ist zu lang für Typ bit varying(%d)" -#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:890 -#: utils/adt/varlena.c:953 utils/adt/varlena.c:1110 utils/adt/varlena.c:3340 -#: utils/adt/varlena.c:3418 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:894 +#: utils/adt/varlena.c:958 utils/adt/varlena.c:1153 utils/adt/varlena.c:3386 +#: utils/adt/varlena.c:3464 #, c-format msgid "negative substring length not allowed" msgstr "negative Teilzeichenkettenlänge nicht erlaubt" @@ -25122,7 +25178,7 @@ msgstr "binäres »Exklusiv-Oder« nicht mit Bitketten unterschiedlicher Länge msgid "bit index %d out of valid range (0..%d)" msgstr "Bitindex %d ist außerhalb des gültigen Bereichs (0..%d)" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3622 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3668 #, c-format msgid "new bit must be 0 or 1" msgstr "neues Bit muss 0 oder 1 sein" @@ -25137,107 +25193,107 @@ msgstr "Wert zu lang für Typ character(%d)" msgid "value too long for type character varying(%d)" msgstr "Wert zu lang für Typ character varying(%d)" -#: utils/adt/varchar.c:732 utils/adt/varlena.c:1516 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1562 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "konnte die für den Zeichenkettenvergleich zu verwendende Sortierfolge nicht bestimmen" -#: utils/adt/varlena.c:1209 utils/adt/varlena.c:1956 +#: utils/adt/varlena.c:1252 utils/adt/varlena.c:2002 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "nichtdeterministische Sortierfolgen werden für Teilzeichenkettensuchen nicht unterstützt" -#: utils/adt/varlena.c:1615 utils/adt/varlena.c:1628 +#: utils/adt/varlena.c:1661 utils/adt/varlena.c:1674 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "konnte Zeichenkette nicht in UTF-16 umwandeln: Fehlercode %lu" -#: utils/adt/varlena.c:1643 +#: utils/adt/varlena.c:1689 #, c-format msgid "could not compare Unicode strings: %m" msgstr "konnte Unicode-Zeichenketten nicht vergleichen: %m" -#: utils/adt/varlena.c:1694 utils/adt/varlena.c:2406 +#: utils/adt/varlena.c:1740 utils/adt/varlena.c:2452 #, c-format msgid "collation failed: %s" msgstr "Vergleichung fehlgeschlagen: %s" -#: utils/adt/varlena.c:2613 +#: utils/adt/varlena.c:2659 #, c-format msgid "sort key generation failed: %s" msgstr "Sortierschlüsselerzeugung fehlgeschlagen: %s" -#: utils/adt/varlena.c:3506 utils/adt/varlena.c:3573 +#: utils/adt/varlena.c:3552 utils/adt/varlena.c:3619 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "Index %d ist außerhalb des gültigen Bereichs, 0..%d" -#: utils/adt/varlena.c:3537 utils/adt/varlena.c:3609 +#: utils/adt/varlena.c:3583 utils/adt/varlena.c:3655 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "Index %lld ist außerhalb des gültigen Bereichs, 0..%lld" -#: utils/adt/varlena.c:4645 +#: utils/adt/varlena.c:4691 #, c-format msgid "field position must not be zero" msgstr "Feldposition darf nicht null sein" -#: utils/adt/varlena.c:5686 +#: utils/adt/varlena.c:5735 #, c-format msgid "unterminated format() type specifier" msgstr "Typspezifikation in format() nicht abgeschlossen" -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5821 utils/adt/varlena.c:5942 +#: utils/adt/varlena.c:5736 utils/adt/varlena.c:5870 utils/adt/varlena.c:5991 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Für ein einzelnes »%%« geben Sie »%%%%« an." -#: utils/adt/varlena.c:5819 utils/adt/varlena.c:5940 +#: utils/adt/varlena.c:5868 utils/adt/varlena.c:5989 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "unbekannte Typspezifikation in format(): »%.*s«" -#: utils/adt/varlena.c:5832 utils/adt/varlena.c:5889 +#: utils/adt/varlena.c:5881 utils/adt/varlena.c:5938 #, c-format msgid "too few arguments for format()" msgstr "zu wenige Argumente für format()" -#: utils/adt/varlena.c:5985 utils/adt/varlena.c:6167 +#: utils/adt/varlena.c:6034 utils/adt/varlena.c:6216 #, c-format msgid "number is out of range" msgstr "Zahl ist außerhalb des gültigen Bereichs" -#: utils/adt/varlena.c:6048 utils/adt/varlena.c:6076 +#: utils/adt/varlena.c:6097 utils/adt/varlena.c:6125 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "Format gibt Argument 0 an, aber die Argumente sind von 1 an nummeriert" -#: utils/adt/varlena.c:6069 +#: utils/adt/varlena.c:6118 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "Argumentposition der Breitenangabe muss mit »$« enden" -#: utils/adt/varlena.c:6114 +#: utils/adt/varlena.c:6163 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "NULL-Werte können nicht als SQL-Bezeichner formatiert werden" -#: utils/adt/varlena.c:6240 +#: utils/adt/varlena.c:6289 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "Unicode-Normalisierung kann nur durchgeführt werden, wenn die Serverkodierung UTF8 ist" -#: utils/adt/varlena.c:6253 +#: utils/adt/varlena.c:6302 #, c-format msgid "invalid normalization form: %s" msgstr "ungültige Normalisierungsform: %s" -#: utils/adt/varlena.c:6456 utils/adt/varlena.c:6491 utils/adt/varlena.c:6526 +#: utils/adt/varlena.c:6505 utils/adt/varlena.c:6540 utils/adt/varlena.c:6575 #, c-format msgid "invalid Unicode code point: %04X" msgstr "ungültiger Unicode-Codepunkt: %04X" -#: utils/adt/varlena.c:6556 +#: utils/adt/varlena.c:6605 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "Unicode-Escapes müssen \\XXXX, \\+XXXXXX, \\uXXXX oder \\UXXXXXXXX sein." @@ -25272,7 +25328,7 @@ msgstr "nicht unterstützte XML-Funktionalität" msgid "This functionality requires the server to be built with libxml support." msgstr "Diese Funktionalität verlangt, dass der Server mit Libxml-Unterstützung gebaut wird." -#: utils/adt/xml.c:253 utils/mb/mbutils.c:627 +#: utils/adt/xml.c:253 utils/mb/mbutils.c:636 #, c-format msgid "invalid encoding name \"%s\"" msgstr "ungültiger Kodierungsname »%s«" @@ -25327,96 +25383,96 @@ msgstr "konnte XML-Fehlerbehandlung nicht einrichten" 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 "Das deutet wahrscheinlich darauf hin, dass die verwendete Version von libxml2 nicht mit den Header-Dateien der Version, mit der PostgreSQL gebaut wurde, kompatibel ist." -#: utils/adt/xml.c:1985 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "Ungültiger Zeichenwert." -#: utils/adt/xml.c:1988 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "Leerzeichen benötigt." -#: utils/adt/xml.c:1991 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone akzeptiert nur »yes« oder »no«." -#: utils/adt/xml.c:1994 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "Fehlerhafte Deklaration: Version fehlt." -#: utils/adt/xml.c:1997 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "Fehlende Kodierung in Textdeklaration." -#: utils/adt/xml.c:2000 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "Beim Parsen der XML-Deklaration: »?>« erwartet." -#: utils/adt/xml.c:2003 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Unbekannter Libxml-Fehlercode: %d." -#: utils/adt/xml.c:2260 +#: utils/adt/xml.c:2253 #, c-format msgid "XML does not support infinite date values." msgstr "XML unterstützt keine unendlichen Datumswerte." -#: utils/adt/xml.c:2282 utils/adt/xml.c:2309 +#: utils/adt/xml.c:2275 utils/adt/xml.c:2302 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML unterstützt keine unendlichen timestamp-Werte." -#: utils/adt/xml.c:2725 +#: utils/adt/xml.c:2718 #, c-format msgid "invalid query" msgstr "ungültige Anfrage" -#: utils/adt/xml.c:2817 +#: utils/adt/xml.c:2810 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "Portal »%s« gibt keine Tupel zurück" -#: utils/adt/xml.c:4069 +#: utils/adt/xml.c:4062 #, c-format msgid "invalid array for XML namespace mapping" msgstr "ungültiges Array for XML-Namensraumabbildung" -#: utils/adt/xml.c:4070 +#: utils/adt/xml.c:4063 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Das Array muss zweidimensional sein und die Länge der zweiten Achse muss gleich 2 sein." -#: utils/adt/xml.c:4094 +#: utils/adt/xml.c:4087 #, c-format msgid "empty XPath expression" msgstr "leerer XPath-Ausdruck" -#: utils/adt/xml.c:4146 +#: utils/adt/xml.c:4139 #, c-format msgid "neither namespace name nor URI may be null" msgstr "weder Namensraumname noch URI dürfen NULL sein" -#: utils/adt/xml.c:4153 +#: utils/adt/xml.c:4146 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "konnte XML-Namensraum mit Namen »%s« und URI »%s« nicht registrieren" -#: utils/adt/xml.c:4510 +#: utils/adt/xml.c:4503 #, c-format msgid "DEFAULT namespace is not supported" msgstr "DEFAULT-Namensraum wird nicht unterstützt" -#: utils/adt/xml.c:4539 +#: utils/adt/xml.c:4532 #, c-format msgid "row path filter must not be empty string" msgstr "Zeilenpfadfilter darf nicht leer sein" -#: utils/adt/xml.c:4573 +#: utils/adt/xml.c:4566 #, c-format msgid "column path filter must not be empty string" msgstr "Spaltenpfadfilter darf nicht leer sein" -#: utils/adt/xml.c:4720 +#: utils/adt/xml.c:4713 #, c-format msgid "more than one value returned by column XPath expression" msgstr "XPath-Ausdruck für Spalte gab mehr als einen Wert zurück" @@ -25452,17 +25508,17 @@ msgstr "in Operatorklasse »%s« für Zugriffsmethode %s fehlt Support-Funktion msgid "cached plan must not change result type" msgstr "gecachter Plan darf den Ergebnistyp nicht ändern" -#: utils/cache/relcache.c:6328 +#: utils/cache/relcache.c:6344 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "konnte Initialisierungsdatei für Relationscache »%s« nicht erzeugen: %m" -#: utils/cache/relcache.c:6330 +#: utils/cache/relcache.c:6346 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Setze trotzdem fort, aber irgendwas stimmt nicht." -#: utils/cache/relcache.c:6652 +#: utils/cache/relcache.c:6668 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "konnte Cache-Datei »%s« nicht löschen: %m" @@ -25648,7 +25704,7 @@ msgstr "Magischer Block hat unerwartete Länge oder unterschiedliches Padding." #: utils/fmgr/dfmgr.c:383 #, c-format msgid "incompatible library \"%s\": magic block mismatch" -msgstr "inkompatible Bibliothek »%s«: magischer Block stimmt überein" +msgstr "inkompatible Bibliothek »%s«: magischer Block stimmt nicht überein" #: utils/fmgr/dfmgr.c:547 #, c-format @@ -26073,48 +26129,48 @@ msgstr "unerwartete Kodierungs-ID %d für ISO-8859-Zeichensatz" msgid "unexpected encoding ID %d for WIN character sets" msgstr "unerwartete Kodierungs-ID %d für WIN-Zeichensatz" -#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 +#: utils/mb/mbutils.c:306 utils/mb/mbutils.c:909 #, c-format msgid "conversion between %s and %s is not supported" msgstr "Umwandlung zwischen %s und %s wird nicht unterstützt" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 -#: utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:411 utils/mb/mbutils.c:439 utils/mb/mbutils.c:824 +#: utils/mb/mbutils.c:851 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Zeichenkette mit %d Bytes ist zu lang für Kodierungsumwandlung." -#: utils/mb/mbutils.c:568 +#: utils/mb/mbutils.c:577 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "ungültiger Quellkodierungsname »%s«" -#: utils/mb/mbutils.c:573 +#: utils/mb/mbutils.c:582 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "ungültiger Zielkodierungsname »%s«" -#: utils/mb/mbutils.c:713 +#: utils/mb/mbutils.c:722 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "ungültiger Byte-Wert für Kodierung »%s«: 0x%02x" -#: utils/mb/mbutils.c:877 +#: utils/mb/mbutils.c:886 #, c-format msgid "invalid Unicode code point" msgstr "ungültiger Unicode-Codepunkt" -#: utils/mb/mbutils.c:1146 +#: utils/mb/mbutils.c:1272 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset fehlgeschlagen" -#: utils/mb/mbutils.c:1667 +#: utils/mb/mbutils.c:1800 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "ungültige Byte-Sequenz für Kodierung »%s«: %s" -#: utils/mb/mbutils.c:1700 +#: utils/mb/mbutils.c:1847 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "Zeichen mit Byte-Folge %s in Kodierung »%s« hat keine Entsprechung in Kodierung »%s«" @@ -28362,15 +28418,15 @@ msgstr "Fehler während der Erzeugung des Speicherkontexts »%s«." msgid "could not attach to dynamic shared area" msgstr "konnte nicht an dynamische Shared Area anbinden" -#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 -#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1120 -#: utils/mmgr/mcxt.c:1156 utils/mmgr/mcxt.c:1208 utils/mmgr/mcxt.c:1243 -#: utils/mmgr/mcxt.c:1278 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:928 utils/mmgr/mcxt.c:966 +#: utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1112 utils/mmgr/mcxt.c:1143 +#: utils/mmgr/mcxt.c:1179 utils/mmgr/mcxt.c:1231 utils/mmgr/mcxt.c:1266 +#: utils/mmgr/mcxt.c:1301 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Fehler bei Anfrage mit Größe %zu im Speicherkontext »%s«." -#: utils/mmgr/mcxt.c:1052 +#: utils/mmgr/mcxt.c:1067 #, c-format msgid "logging memory contexts of PID %d" msgstr "logge Speicherkontexte von PID %d" @@ -28420,24 +28476,24 @@ msgstr "konnte Positionszeiger in temporärer Datei nicht auf Block %ld setzen" msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" msgstr "konnte Block %ld von temporärer Datei nicht lesen: es wurden nur %zu von %zu Bytes gelesen" -#: utils/sort/sharedtuplestore.c:431 utils/sort/sharedtuplestore.c:440 -#: utils/sort/sharedtuplestore.c:463 utils/sort/sharedtuplestore.c:480 -#: utils/sort/sharedtuplestore.c:497 +#: utils/sort/sharedtuplestore.c:432 utils/sort/sharedtuplestore.c:441 +#: utils/sort/sharedtuplestore.c:464 utils/sort/sharedtuplestore.c:481 +#: utils/sort/sharedtuplestore.c:498 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "konnte nicht aus temporärer Datei für Shared-Tuplestore lesen" -#: utils/sort/sharedtuplestore.c:486 +#: utils/sort/sharedtuplestore.c:487 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "unerwarteter Chunk in temporärer Datei für Shared-Tuplestore" -#: utils/sort/sharedtuplestore.c:570 +#: utils/sort/sharedtuplestore.c:571 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "konnte Positionszeiger in temporärer Datei für Shared-Tuplestore nicht auf Block %u setzen" -#: utils/sort/sharedtuplestore.c:577 +#: utils/sort/sharedtuplestore.c:578 #, c-format msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" msgstr "konnte nicht aus temporärer Datei für Shared-Tuplestore lesen: es wurden nur %zu von %zu Bytes gelesen" diff --git a/src/backend/po/es.po b/src/backend/po/es.po index 73891b3d0e6..8b44a8629d1 100644 --- a/src/backend/po/es.po +++ b/src/backend/po/es.po @@ -62,8 +62,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL server 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:29+0000\n" -"PO-Revision-Date: 2025-02-15 12:13+0100\n" +"POT-Creation-Date: 2026-02-06 21:26+0000\n" +"PO-Revision-Date: 2026-02-07 09:09+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -88,17 +88,17 @@ msgstr "no se pudo abrir archivo «%s» para lectura: %m" #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1329 access/transam/xlog.c:3576 -#: access/transam/xlog.c:4817 access/transam/xlog.c:11662 -#: access/transam/xlog.c:11675 access/transam/xlog.c:12130 -#: access/transam/xlog.c:12210 access/transam/xlog.c:12247 -#: access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 +#: access/transam/twophase.c:1329 access/transam/xlog.c:3594 +#: access/transam/xlog.c:4843 access/transam/xlog.c:11771 +#: access/transam/xlog.c:11784 access/transam/xlog.c:12239 +#: access/transam/xlog.c:12319 access/transam/xlog.c:12356 +#: access/transam/xlog.c:12416 access/transam/xlogfuncs.c:703 #: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 #: replication/basebackup.c:2016 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 -#: replication/logical/snapbuild.c:1872 replication/logical/snapbuild.c:1914 -#: replication/logical/snapbuild.c:1941 replication/slot.c:1727 -#: replication/slot.c:1768 replication/walsender.c:545 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 +#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1961 +#: replication/logical/snapbuild.c:1988 replication/slot.c:1794 +#: replication/slot.c:1835 replication/walsender.c:559 #: storage/file/buffile.c:445 storage/file/copydir.c:195 #: utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format @@ -106,11 +106,11 @@ msgid "could not read file \"%s\": %m" msgstr "no se pudo leer el archivo «%s»: %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3581 access/transam/xlog.c:4822 +#: access/transam/xlog.c:3599 access/transam/xlog.c:4848 #: replication/basebackup.c:2020 replication/logical/origin.c:734 -#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 -#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 -#: replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 +#: replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 +#: replication/slot.c:1798 replication/slot.c:1839 replication/walsender.c:564 #: utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -122,16 +122,16 @@ msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:512 access/transam/twophase.c:1341 #: access/transam/twophase.c:1753 access/transam/xlog.c:3445 -#: access/transam/xlog.c:3616 access/transam/xlog.c:3621 -#: access/transam/xlog.c:3946 access/transam/xlog.c:4787 -#: access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 +#: access/transam/xlog.c:3634 access/transam/xlog.c:3639 +#: access/transam/xlog.c:3958 access/transam/xlog.c:4813 +#: access/transam/xlog.c:5741 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 -#: replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 -#: replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 -#: storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 +#: replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 +#: replication/slot.c:1683 replication/slot.c:1846 replication/walsender.c:574 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:735 +#: storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 #: utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" @@ -160,20 +160,20 @@ msgstr "" #: ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 -#: access/transam/xlog.c:3331 access/transam/xlog.c:3487 -#: access/transam/xlog.c:3531 access/transam/xlog.c:3726 -#: access/transam/xlog.c:3811 access/transam/xlog.c:3914 -#: access/transam/xlog.c:4807 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3332 access/transam/xlog.c:3511 +#: access/transam/xlog.c:3549 access/transam/xlog.c:3737 +#: access/transam/xlog.c:3823 access/transam/xlog.c:3926 +#: access/transam/xlog.c:4833 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3612 -#: replication/logical/reorderbuffer.c:4163 -#: replication/logical/reorderbuffer.c:4939 -#: replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1699 replication/walsender.c:518 -#: replication/walsender.c:2563 storage/file/copydir.c:161 -#: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 -#: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 +#: replication/logical/reorderbuffer.c:3743 +#: replication/logical/reorderbuffer.c:4294 +#: replication/logical/reorderbuffer.c:5070 +#: replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 +#: replication/slot.c:1766 replication/walsender.c:532 +#: replication/walsender.c:2581 storage/file/copydir.c:161 +#: storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 +#: storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 #: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 #: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 @@ -183,9 +183,9 @@ msgstr "no se pudo abrir el archivo «%s»: %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 #: access/transam/twophase.c:1726 access/transam/twophase.c:1735 -#: access/transam/xlog.c:11419 access/transam/xlog.c:11457 -#: access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 +#: access/transam/xlog.c:11528 access/transam/xlog.c:11566 +#: access/transam/xlog.c:11979 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5688 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" @@ -196,11 +196,11 @@ msgstr "no se pudo escribir el archivo «%s»: %m" #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 #: access/transam/timeline.c:506 access/transam/twophase.c:1747 -#: access/transam/xlog.c:3438 access/transam/xlog.c:3610 -#: access/transam/xlog.c:4780 access/transam/xlog.c:10902 -#: access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 -#: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: access/transam/xlog.c:3438 access/transam/xlog.c:3628 +#: access/transam/xlog.c:4806 access/transam/xlog.c:11011 +#: access/transam/xlog.c:11052 replication/logical/snapbuild.c:1821 +#: replication/slot.c:1667 replication/slot.c:1776 storage/file/fd.c:727 +#: storage/file/fd.c:3623 storage/smgr/md.c:959 storage/smgr/md.c:1000 #: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" @@ -209,32 +209,32 @@ msgstr "no se pudo sincronizar (fsync) archivo «%s»: %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 #: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 -#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 -#: lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2552 -#: postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 -#: postmaster/postmaster.c:5975 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6721 +#: lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 +#: libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 +#: postmaster/bgworker.c:349 postmaster/bgworker.c:948 +#: postmaster/postmaster.c:2554 postmaster/postmaster.c:4211 +#: postmaster/postmaster.c:5613 postmaster/postmaster.c:5977 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 -#: replication/logical/logical.c:206 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 -#: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 +#: replication/logical/logical.c:206 replication/walsender.c:606 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 +#: storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: tcop/postgres.c:3655 utils/adt/cryptohashfuncs.c:46 +#: tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 #: utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 #: utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 -#: utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 +#: utils/adt/pg_locale.c:451 utils/adt/pg_locale.c:615 utils/adt/regexp.c:223 #: utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 -#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5061 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 +#: utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 utils/misc/guc.c:5061 #: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 -#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 -#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 -#: utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:927 utils/mmgr/mcxt.c:965 +#: utils/mmgr/mcxt.c:1003 utils/mmgr/mcxt.c:1111 utils/mmgr/mcxt.c:1142 +#: utils/mmgr/mcxt.c:1178 utils/mmgr/mcxt.c:1230 utils/mmgr/mcxt.c:1265 +#: utils/mmgr/mcxt.c:1300 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "memoria agotada" @@ -264,7 +264,7 @@ msgstr "no se pudo encontrar un «%s» para ejecutar" msgid "could not change directory to \"%s\": %m" msgstr "no se pudo cambiar al directorio «%s»: %m" -#: ../common/exec.c:299 access/transam/xlog.c:11293 +#: ../common/exec.c:299 access/transam/xlog.c:11402 #: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -280,8 +280,8 @@ msgstr "%s() falló: %m" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 #: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 -#: ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 -#: utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../port/path.c:764 utils/misc/ps_status.c:210 utils/misc/ps_status.c:218 +#: utils/misc/ps_status.c:248 utils/misc/ps_status.c:256 #, c-format msgid "out of memory\n" msgstr "memoria agotada\n" @@ -293,15 +293,15 @@ msgstr "no se puede duplicar un puntero nulo (error interno)\n" #: ../common/file_utils.c:86 ../common/file_utils.c:446 #: ../common/file_utils.c:450 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11395 access/transam/xlog.c:11433 -#: access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11504 access/transam/xlog.c:11542 +#: access/transam/xlog.c:11759 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 #: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 #: commands/tablespace.c:894 postmaster/pgarch.c:696 #: replication/basebackup.c:439 replication/basebackup.c:622 -#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 -#: storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1700 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 +#: storage/file/fd.c:1948 storage/file/fd.c:3148 storage/file/fd.c:3351 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 #: utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 #: guc-file.l:1062 @@ -310,104 +310,104 @@ msgid "could not stat file \"%s\": %m" msgstr "no se pudo hacer stat al archivo «%s»: %m" #: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1520 -#: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 +#: commands/tablespace.c:739 postmaster/postmaster.c:1522 +#: storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" #: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1793 -#: replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 -#: storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 +#: replication/slot.c:672 replication/slot.c:1550 replication/slot.c:1699 +#: storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, 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:1084 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La secuencia de escape «%s» no es válida." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Los caracteres con valor 0x%02x deben ser escapados." -#: ../common/jsonapi.c:1090 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Se esperaba el fin de la entrada, se encontró «%s»." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Se esperaba «,» o «]», se encontró «%s»." -#: ../common/jsonapi.c:1099 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Se esperaba «:», se encontró «%s»." -#: ../common/jsonapi.c:1102 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Se esperaba un valor JSON, se encontró «%s»." -#: ../common/jsonapi.c:1105 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "La cadena de entrada terminó inesperadamente." -#: ../common/jsonapi.c:1107 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Se esperaba una cadena o «}», se encontró «%s»." -#: ../common/jsonapi.c:1110 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Se esperaba «,» o «}», se encontró «%s»." -#: ../common/jsonapi.c:1113 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Se esperaba una cadena, se encontró «%s»." -#: ../common/jsonapi.c:1116 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "El elemento «%s» no es válido." -#: ../common/jsonapi.c:1119 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 no puede ser convertido a text." -#: ../common/jsonapi.c:1121 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." -#: ../common/jsonapi.c:1124 +#: ../common/jsonapi.c:1127 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:1126 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Un «high-surrogate» Unicode no puede venir después de un «high-surrogate»." -#: ../common/jsonapi.c:1128 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:531 jsonpath_scan.l:541 #: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -443,7 +443,7 @@ msgstr "nombre de «fork» no válido" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Los nombres de «fork» válidos son «main», «fsm», «vm» e «init»." -#: ../common/restricted_token.c:64 libpq/auth.c:1519 libpq/auth.c:2551 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu" @@ -515,7 +515,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:2051 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "usuario no existe" @@ -638,7 +638,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "petición para sumarización BRIN de rango para el índice «%s» página %u no fue registrada" #: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11064 access/transam/xlog.c:11601 +#: access/transam/xlog.c:11173 access/transam/xlog.c:11710 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -673,8 +673,8 @@ msgstr "no se pudo abrir la tabla padre del índice «%s»" msgid "index \"%s\" is not valid" msgstr "el índice «%s» no es válido" -#: access/brin/brin_bloom.c:753 access/brin/brin_bloom.c:795 -#: access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 +#: access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 #: statistics/dependencies.c:662 statistics/dependencies.c:715 #: statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 @@ -685,7 +685,7 @@ 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:848 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 +#: access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 #: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" @@ -800,7 +800,7 @@ 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:106 tcop/fastpath.c:453 -#: tcop/postgres.c:1922 +#: tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "código de formato no soportado: %d" @@ -823,57 +823,62 @@ msgstr "el límite de tipos de parámetros de relación definidos por el usuario msgid "RESET must not include values for parameters" msgstr "RESET no debe incluir valores de parámetros" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "espacio de nombre de parámetro «%s» no reconocido" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "nombre de opción «%s» no válido: no debe contener «=»" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12615 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "las tablas declaradas WITH OIDS no están soportadas" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "parámetro «%s» no reconocido" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, 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:1592 +#: access/common/reloptions.c:1601 #, 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:1604 +#: access/common/reloptions.c:1613 #, 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:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, 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:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Los valores aceptables están entre «%d» y «%d»." -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, 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:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Valores aceptables están entre «%f» y «%f»." -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "valor no válido para la opción enum «%s»: %s" @@ -888,7 +893,7 @@ msgstr "el método de compresión lz4 no está soportado" 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/toast_compression.c:34 utils/adt/pg_locale.c:1589 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1592 #: utils/adt/xml.c:234 #, c-format msgid "You need to rebuild PostgreSQL using %s." @@ -930,18 +935,18 @@ msgstr "no se pueden acceder índices temporales de otras sesiones" msgid "failed to re-find tuple within index \"%s\"" msgstr "no se pudo volver a encontrar la tupla dentro del índice «%s»" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "los índices GIN antiguos no soportan recorridos del índice completo ni búsquedas de nulos" -#: access/gin/ginscan.c:432 +#: access/gin/ginscan.c:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Para corregir esto, ejecute REINDEX INDEX \"%s\"." #: access/gin/ginutil.c:145 executor/execExpr.c:2177 -#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 +#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6543 #: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" @@ -983,7 +988,7 @@ msgstr "Esto es causado por una división de página incompleta durante una recu msgid "Please REINDEX it." msgstr "Por favor aplíquele REINDEX." -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "arreglando división incompleta en el índice «%s», bloque %u" @@ -1028,7 +1033,7 @@ msgstr "no se pudo determinar qué ordenamiento usar para el hashing de cadenas" #: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17208 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1004 utils/adt/varchar.c:733 @@ -1083,39 +1088,39 @@ 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:2299 +#: access/heap/heapam.c:2302 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "no se pueden insertar tuplas en un ayudante paralelo" -#: access/heap/heapam.c:2770 +#: access/heap/heapam.c:2773 #, 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:2816 +#: access/heap/heapam.c:2819 #, c-format msgid "attempted to delete invisible tuple" msgstr "se intentó eliminar una tupla invisible" -#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 +#: access/heap/heapam.c:3265 access/heap/heapam.c:6617 access/index/genam.c:816 #, 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:3449 +#: access/heap/heapam.c:3452 #, c-format msgid "attempted to update invisible tuple" msgstr "se intentó actualizar una tupla invisible" -#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 -#: access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4941 access/heap/heapam.c:4979 +#: access/heap/heapam.c:5246 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "no se pudo bloquear un candado en la fila de la relación «%s»" -#: access/heap/heapam.c:6342 commands/trigger.c:3122 -#: executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6371 commands/trigger.c:3152 +#: executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 #, 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" @@ -1137,12 +1142,12 @@ msgstr "no se pudo escribir al archivo «%s», se escribió %d de %d: %m" #: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3545 -#: access/transam/xlog.c:4759 access/transam/xlog.c:11410 -#: access/transam/xlog.c:11448 access/transam/xlog.c:11853 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 -#: postmaster/postmaster.c:5673 replication/logical/origin.c:587 -#: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: access/transam/xlog.c:3354 access/transam/xlog.c:3563 +#: access/transam/xlog.c:4785 access/transam/xlog.c:11519 +#: access/transam/xlog.c:11557 access/transam/xlog.c:11962 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4636 +#: postmaster/postmaster.c:5675 replication/logical/origin.c:587 +#: replication/slot.c:1611 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -1155,11 +1160,11 @@ msgstr "no se pudo truncar el archivo «%s» a %u: %m" #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3426 access/transam/xlog.c:3601 -#: access/transam/xlog.c:4771 postmaster/postmaster.c:4644 -#: postmaster/postmaster.c:4654 replication/logical/origin.c:599 +#: access/transam/xlog.c:3426 access/transam/xlog.c:3619 +#: access/transam/xlog.c:4797 postmaster/postmaster.c:4646 +#: postmaster/postmaster.c:4656 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 -#: replication/logical/snapbuild.c:1750 replication/slot.c:1586 +#: replication/logical/snapbuild.c:1797 replication/slot.c:1647 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 #: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 @@ -1171,11 +1176,11 @@ msgstr "no se pudo escribir a archivo «%s»: %m" #: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4432 -#: replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2111 -#: replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 -#: storage/file/fd.c:3239 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: postmaster/postmaster.c:1098 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 +#: replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 +#: replication/slot.c:1750 storage/file/fd.c:785 storage/file/fd.c:3168 +#: storage/file/fd.c:3230 storage/file/reinit.c:250 storage/ipc/dsm.c:315 #: storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 #: utils/time/snapmgr.c:1606 #, c-format @@ -1302,8 +1307,8 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "%u página marcadas «frozen».\n" msgstr[1] "%u páginas marcadas «frozen».\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 -#: commands/indexcmds.c:4154 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 +#: commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s." @@ -1460,8 +1465,8 @@ msgid "cannot access index \"%s\" while it is being reindexed" msgstr "no se puede acceder al índice «%s» mientras está siendo reindexado" #: access/index/indexam.c:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16894 commands/tablecmds.c:18710 #, c-format msgid "\"%s\" is not an index" msgstr "«%s» no es un índice" @@ -1507,17 +1512,17 @@ msgstr "el índice «%s» contiene una página interna parcialmente muerta" 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:2680 +#: access/nbtree/nbtutils.c:2685 #, 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:2686 +#: access/nbtree/nbtutils.c:2691 #, 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:2690 +#: access/nbtree/nbtutils.c:2695 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1558,8 +1563,8 @@ msgid "\"%s\" is an index" msgstr "«%s» es un índice" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13560 -#: commands/tablecmds.c:16860 +#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 +#: commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "«%s» es un tipo compuesto" @@ -1614,13 +1619,13 @@ msgstr "Asegúrese que el parámetro de configuración «%s» esté definido en 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:1022 +#: access/transam/multixact.c:1106 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "la base de datos no está aceptando órdenes que generen nuevos MultiXactIds para evitar pérdida de datos debido al reciclaje de transacciones en la base de datos «%s»" -#: access/transam/multixact.c:1024 access/transam/multixact.c:1031 -#: access/transam/multixact.c:1055 access/transam/multixact.c:1064 +#: access/transam/multixact.c:1108 access/transam/multixact.c:1115 +#: access/transam/multixact.c:1139 access/transam/multixact.c:1148 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1629,65 +1634,70 @@ 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:1029 +#: access/transam/multixact.c:1113 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "la base de datos no está aceptando órdenes que generen nuevos MultiXactIds para evitar pérdida de datos debido al problema del reciclaje de transacciones en la base con OID %u" -#: access/transam/multixact.c:1050 access/transam/multixact.c:2334 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2421 #, 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:1059 access/transam/multixact.c:2343 +#: access/transam/multixact.c:1143 access/transam/multixact.c:2430 #, 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:1120 +#: access/transam/multixact.c:1207 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "límite de miembros de multixact alcanzado" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1208 #, 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:1126 +#: access/transam/multixact.c:1213 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Ejecute un VACUUM de la base completa en la base de datos con OID %u con vacuum_multixact_freeze_min_age y vacuum_multixact_freeze_table_age reducidos." -#: access/transam/multixact.c:1157 +#: access/transam/multixact.c:1244 #, 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:1162 +#: access/transam/multixact.c:1249 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Ejecute un VACUUM de la base completa en esa base de datos con vacuum_multixact_freeze_min_age y vacuum_multixact_freeze_table_age reducidos." -#: access/transam/multixact.c:1301 +#: access/transam/multixact.c:1388 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "el MultiXactId %u ya no existe -- aparente problema por reciclaje" -#: access/transam/multixact.c:1307 +#: access/transam/multixact.c:1394 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "el MultiXactId %u no se ha creado aún -- aparente problema por reciclaje" -#: access/transam/multixact.c:2339 access/transam/multixact.c:2348 +#: access/transam/multixact.c:1469 +#, c-format +msgid "MultiXact %u has invalid next offset" +msgstr "el MultiXact %u tiene un siguiente offset no válido" + +#: access/transam/multixact.c:2426 access/transam/multixact.c:2435 #: access/transam/varsup.c:151 access/transam/varsup.c:158 #: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format @@ -1698,61 +1708,67 @@ msgstr "" "Para evitar que la base de datos se desactive, ejecute VACUUM en esa base de datos.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2709 #, c-format msgid "MultiXact member wraparound protections are disabled because oldest checkpointed MultiXact %u does not exist on disk" msgstr "las protecciones de reciclaje de miembros de multixact están inhabilitadas porque el multixact más antiguo %u en checkpoint no existe en disco" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2731 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "las protecciones de reciclaje de miembros de multixact están habilitadas" -#: access/transam/multixact.c:3038 +#: access/transam/multixact.c:3125 #, 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:3056 +#: access/transam/multixact.c:3143 #, 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:3370 +#: access/transam/multixact.c:3160 +#, c-format +#| msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" +msgid "cannot truncate up to MultiXact %u because it has invalid offset, skipping truncation" +msgstr "no se puede truncar hasta el MultiXact %u porque tiene un offset no válido, omitiendo el truncado" + +#: access/transam/multixact.c:3498 #, c-format msgid "invalid MultiXactId: %u" msgstr "el MultiXactId no es válido: %u" -#: access/transam/parallel.c:737 access/transam/parallel.c:856 +#: access/transam/parallel.c:744 access/transam/parallel.c:863 #, c-format msgid "parallel worker failed to initialize" msgstr "el ayudante paralelo no pudo iniciar" -#: access/transam/parallel.c:738 access/transam/parallel.c:857 +#: access/transam/parallel.c:745 access/transam/parallel.c:864 #, 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:918 +#: access/transam/parallel.c:925 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster terminó durante una transacción paralela" -#: access/transam/parallel.c:1105 +#: access/transam/parallel.c:1112 #, c-format msgid "lost connection to parallel worker" msgstr "se ha perdido la conexión al ayudante paralelo" -#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 +#: access/transam/parallel.c:1178 access/transam/parallel.c:1180 msgid "parallel worker" msgstr "ayudante paralelo" -#: access/transam/parallel.c:1326 +#: access/transam/parallel.c:1333 #, 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:1331 +#: access/transam/parallel.c:1338 #, 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" @@ -1952,7 +1968,7 @@ msgstr "tamaño no válido en archivo «%s»" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la suma de verificación calculada no coincide con el valor almacenado en el archivo «%s»" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6722 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Falló mientras se emplazaba un procesador de lectura de WAL." @@ -2069,564 +2085,559 @@ msgstr "base de datos con OID %u debe ser limpiada dentro de %u transacciones" 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:1584 +#: access/transam/xact.c:1594 #, 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:2435 +#: access/transam/xact.c:2445 #, 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:2445 +#: access/transam/xact.c:2455 #, 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:3416 +#: access/transam/xact.c:3426 #, 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:3426 +#: access/transam/xact.c:3436 #, 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:3436 +#: access/transam/xact.c:3446 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s no puede ser ejecutado en un pipeline" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3446 +#: access/transam/xact.c:3456 #, 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:3517 access/transam/xact.c:3832 -#: access/transam/xact.c:3911 access/transam/xact.c:4034 -#: access/transam/xact.c:4185 access/transam/xact.c:4254 -#: access/transam/xact.c:4365 +#: access/transam/xact.c:3527 access/transam/xact.c:3842 +#: access/transam/xact.c:3921 access/transam/xact.c:4044 +#: access/transam/xact.c:4195 access/transam/xact.c:4264 +#: access/transam/xact.c:4375 #, 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:3718 +#: access/transam/xact.c:3728 #, c-format msgid "there is already a transaction in progress" msgstr "ya hay una transacción en curso" -#: access/transam/xact.c:3837 access/transam/xact.c:3916 -#: access/transam/xact.c:4039 +#: access/transam/xact.c:3847 access/transam/xact.c:3926 +#: access/transam/xact.c:4049 #, c-format msgid "there is no transaction in progress" msgstr "no hay una transacción en curso" -#: access/transam/xact.c:3927 +#: access/transam/xact.c:3937 #, 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:4050 +#: access/transam/xact.c:4060 #, c-format msgid "cannot abort during a parallel operation" msgstr "no se puede abortar durante una operación paralela" -#: access/transam/xact.c:4149 +#: access/transam/xact.c:4159 #, 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:4236 +#: access/transam/xact.c:4246 #, 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:4246 access/transam/xact.c:4297 -#: access/transam/xact.c:4357 access/transam/xact.c:4406 +#: access/transam/xact.c:4256 access/transam/xact.c:4307 +#: access/transam/xact.c:4367 access/transam/xact.c:4416 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "no existe el «savepoint» «%s»" -#: access/transam/xact.c:4303 access/transam/xact.c:4412 +#: access/transam/xact.c:4313 access/transam/xact.c:4422 #, 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:4345 +#: access/transam/xact.c:4355 #, 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:4473 +#: access/transam/xact.c:4483 #, 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:4541 +#: access/transam/xact.c:4551 #, 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:5188 +#: access/transam/xact.c:5198 #, 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:1839 +#: access/transam/xlog.c:1851 #, 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:2612 +#: access/transam/xlog.c:2622 #, 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:3489 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "This is known to fail occasionally during archive recovery, where it is harmless." -msgstr "Se sabe que esto falla ocasionalmente durante la recuperación desde archivo, donde es inocuo." - -#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 -#: replication/walsender.c:2557 +#: access/transam/xlog.c:4039 access/transam/xlogutils.c:798 +#: replication/walsender.c:2575 #, 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:4289 +#: access/transam/xlog.c:4315 #, c-format msgid "could not rename file \"%s\": %m" msgstr "no se pudo renombrar el archivo «%s»: %m" -#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 +#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "no existe el directorio WAL «%s»" -#: access/transam/xlog.c:4347 +#: access/transam/xlog.c:4373 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "creando el directorio WAL faltante «%s»" -#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4376 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "no se pudo crear el directorio faltante «%s»: %m" -#: access/transam/xlog.c:4472 +#: access/transam/xlog.c:4498 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "ID de timeline %u inesperado en archivo %s, posición %u" -#: access/transam/xlog.c:4610 +#: access/transam/xlog.c:4636 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "el nuevo timeline %u especificado no es hijo del timeline de sistema %u" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4650 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "el nuevo timeline %u bifurcó del timeline del sistema actual %u antes del punto re recuperación actual %X/%X" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4669 #, c-format msgid "new target timeline is %u" msgstr "el nuevo timeline destino es %u" -#: access/transam/xlog.c:4679 +#: access/transam/xlog.c:4705 #, c-format msgid "could not generate secret authorization token" msgstr "no se pudo generar un token de autorización secreto" -#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 -#: access/transam/xlog.c:4871 access/transam/xlog.c:4878 -#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4864 access/transam/xlog.c:4873 #: access/transam/xlog.c:4897 access/transam/xlog.c:4904 -#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 -#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 -#: access/transam/xlog.c:4941 access/transam/xlog.c:4948 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4916 +#: access/transam/xlog.c:4923 access/transam/xlog.c:4930 +#: access/transam/xlog.c:4937 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 access/transam/xlog.c:4958 +#: access/transam/xlog.c:4967 access/transam/xlog.c:4974 #: utils/init/miscinit.c:1635 #, 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:4839 +#: access/transam/xlog.c:4865 #, 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:4843 +#: access/transam/xlog.c:4869 #, 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:4848 +#: access/transam/xlog.c:4874 #, 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:4851 access/transam/xlog.c:4875 -#: access/transam/xlog.c:4882 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4913 #, c-format msgid "It looks like you need to initdb." msgstr "Parece que necesita ejecutar initdb." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4888 #, 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:4872 +#: access/transam/xlog.c:4898 #, 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:4879 +#: access/transam/xlog.c:4905 #, 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:4886 +#: access/transam/xlog.c:4912 #, 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:4891 +#: access/transam/xlog.c:4917 #, 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:4894 access/transam/xlog.c:4901 -#: access/transam/xlog.c:4908 access/transam/xlog.c:4915 -#: access/transam/xlog.c:4922 access/transam/xlog.c:4929 -#: access/transam/xlog.c:4936 access/transam/xlog.c:4944 -#: access/transam/xlog.c:4951 +#: access/transam/xlog.c:4920 access/transam/xlog.c:4927 +#: access/transam/xlog.c:4934 access/transam/xlog.c:4941 +#: access/transam/xlog.c:4948 access/transam/xlog.c:4955 +#: access/transam/xlog.c:4962 access/transam/xlog.c:4970 +#: access/transam/xlog.c:4977 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Parece que necesita recompilar o ejecutar initdb." -#: access/transam/xlog.c:4898 +#: access/transam/xlog.c:4924 #, 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:4905 +#: access/transam/xlog.c:4931 #, 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:4912 +#: access/transam/xlog.c:4938 #, 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:4919 +#: access/transam/xlog.c:4945 #, 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:4926 +#: access/transam/xlog.c:4952 #, 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:4933 +#: access/transam/xlog.c:4959 #, 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:4942 +#: access/transam/xlog.c:4968 #, 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:4949 +#: access/transam/xlog.c:4975 #, 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:4958 +#: access/transam/xlog.c:4984 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d byte" msgstr[1] "El tamaño del segmento de WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero el archivo de control especifica %d bytes" -#: access/transam/xlog.c:4970 +#: access/transam/xlog.c:4996 #, 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:4974 +#: access/transam/xlog.c:5000 #, 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:5408 +#: access/transam/xlog.c:5438 #, 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:5416 +#: access/transam/xlog.c:5446 #, 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:5422 +#: access/transam/xlog.c:5452 #, 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:5483 +#: access/transam/xlog.c:5513 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "el uso del archivo de configuración de recuperación «%s» no está soportado" -#: access/transam/xlog.c:5548 +#: access/transam/xlog.c:5578 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "el modo standby no está soportado en el modo mono-usuario" -#: access/transam/xlog.c:5565 +#: access/transam/xlog.c:5595 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "no se especifica primary_conninfo ni restore_command" -#: access/transam/xlog.c:5566 +#: access/transam/xlog.c:5596 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "El servidor de bases de datos monitoreará el subdirectorio pg_wal con regularidad en búsqueda de archivos almacenados ahí." -#: access/transam/xlog.c:5574 +#: access/transam/xlog.c:5604 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "debe especificarse restore_command cuando el modo standby no está activo" -#: access/transam/xlog.c:5612 +#: access/transam/xlog.c:5642 #, c-format msgid "recovery target timeline %u does not exist" msgstr "no existe el timeline %u especificado como destino de recuperación" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5763 #, c-format msgid "archive recovery complete" msgstr "recuperación completa" -#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 +#: access/transam/xlog.c:5829 access/transam/xlog.c:6105 #, c-format msgid "recovery stopping after reaching consistency" msgstr "deteniendo recuperación al alcanzar un estado consistente" -#: access/transam/xlog.c:5821 +#: access/transam/xlog.c:5850 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación antes de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5940 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "deteniendo recuperación antes de comprometer la transacción %u, hora %s" -#: access/transam/xlog.c:5918 +#: access/transam/xlog.c:5947 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "deteniendo recuperación antes de abortar la transacción %u, hora %s" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:6000 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "deteniendo recuperación en el punto de recuperación «%s», hora %s" -#: access/transam/xlog.c:5989 +#: access/transam/xlog.c:6018 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "deteniendo recuperación después de la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:6056 +#: access/transam/xlog.c:6085 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "deteniendo recuperación de comprometer la transacción %u, hora %s" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6093 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "deteniendo recuperación después de abortar la transacción %u, hora %s" -#: access/transam/xlog.c:6109 +#: access/transam/xlog.c:6138 #, c-format msgid "pausing at the end of recovery" msgstr "pausando al final de la recuperación" -#: access/transam/xlog.c:6110 +#: access/transam/xlog.c:6139 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Ejecute pg_wal_replay_resume() para promover." -#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 +#: access/transam/xlog.c:6142 access/transam/xlog.c:6424 #, c-format msgid "recovery has paused" msgstr "la recuperación está en pausa" -#: access/transam/xlog.c:6114 +#: access/transam/xlog.c:6143 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Ejecute pg_wal_replay_resume() para continuar." -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6415 #, 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/xlog.c:6387 access/transam/xlog.c:6414 -#: access/transam/xlog.c:6444 +#: access/transam/xlog.c:6416 access/transam/xlog.c:6443 +#: access/transam/xlog.c:6473 #, 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/xlog.c:6396 +#: access/transam/xlog.c:6425 #, 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/xlog.c:6397 +#: access/transam/xlog.c:6426 #, 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/xlog.c:6408 +#: access/transam/xlog.c:6437 #, 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/xlog.c:6418 +#: access/transam/xlog.c:6447 #, 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/xlog.c:6442 +#: access/transam/xlog.c:6471 #, 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/xlog.c:6448 +#: access/transam/xlog.c:6477 #, 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/xlog.c:6470 +#: access/transam/xlog.c:6499 #, 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" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6500 #, 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." -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6501 #, 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." -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6570 #, c-format msgid "control file contains invalid checkpoint location" msgstr "el archivo de control contiene una ubicación no válida de punto de control" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6581 #, 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:6558 +#: access/transam/xlog.c:6587 #, 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:6564 +#: access/transam/xlog.c:6593 #, 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:6570 +#: access/transam/xlog.c:6599 #, 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:6572 +#: access/transam/xlog.c:6601 #, 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:6578 +#: access/transam/xlog.c:6607 #, 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:6580 +#: access/transam/xlog.c:6609 #, 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:6586 +#: access/transam/xlog.c:6615 #, 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:6592 +#: access/transam/xlog.c:6621 #, 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:6649 +#: access/transam/xlog.c:6678 #, c-format msgid "entering standby mode" msgstr "entrando al modo standby" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6681 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "comenzando el proceso de recuperación hasta el XID %u" -#: access/transam/xlog.c:6656 +#: access/transam/xlog.c:6685 #, c-format msgid "starting point-in-time recovery to %s" msgstr "comenzando el proceso de recuperación hasta %s" -#: access/transam/xlog.c:6660 +#: access/transam/xlog.c:6689 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "comenzando el proceso de recuperación hasta «%s»" -#: access/transam/xlog.c:6664 +#: access/transam/xlog.c:6693 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%X»" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6697 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "comenzando recuperación a un punto en el tiempo hasta alcanzar un estado consistente" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6700 #, c-format msgid "starting archive recovery" msgstr "comenzando proceso de recuperación" -#: access/transam/xlog.c:6745 +#: access/transam/xlog.c:6774 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "no se pudo encontrar la ubicación de redo referida por el registro de punto de control" # Purposefully deviate from quoting convention here, since argument is a shell command. -#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 +#: access/transam/xlog.c:6775 access/transam/xlog.c:6785 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2637,300 +2648,306 @@ msgstr "" "Si no está restaurando de un respaldo, intente eliminar el archivo \"%s/backup_label\".\n" "Tenga cuidado: eliminar \"%s/backup_label\" resultará en un clúster corrupto si está restaurando de un respaldo." -#: access/transam/xlog.c:6755 +#: access/transam/xlog.c:6784 #, c-format msgid "could not locate required checkpoint record" msgstr "no se pudo localizar el registro del punto de control requerido" -#: access/transam/xlog.c:6784 commands/tablespace.c:665 +#: access/transam/xlog.c:6813 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "no se pudo crear el enlace simbólico «%s»: %m" -#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 +#: access/transam/xlog.c:6845 access/transam/xlog.c:6851 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignorando el archivo «%s» porque no existe un archivo «%s»" -#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 +#: access/transam/xlog.c:6847 access/transam/xlog.c:12495 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "El archivo «%s» fue renombrado a «%s»." -#: access/transam/xlog.c:6824 +#: access/transam/xlog.c:6853 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "No se pudo renombrar el archivo de «%s» a «%s»: %m." -#: access/transam/xlog.c:6875 +#: access/transam/xlog.c:6904 #, c-format msgid "could not locate a valid checkpoint record" msgstr "no se pudo localizar un registro de punto de control válido" -#: access/transam/xlog.c:6913 +#: access/transam/xlog.c:6915 +#, c-format +#| msgid "could not find redo location referenced by checkpoint record" +msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X" +msgstr "no se pudo encontrar la ubicación de redo %X/%08X referida por el registro de punto de control en %X/%08X" + +#: access/transam/xlog.c:6952 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "el timeline solicitado %u no es un hijo de la historia de este servidor" -#: access/transam/xlog.c:6915 +#: access/transam/xlog.c:6954 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "El punto de control más reciente está en %X/%X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%X." -#: access/transam/xlog.c:6929 +#: access/transam/xlog.c:6968 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "el timeline solicitado %u no contiene el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlog.c:6959 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid next transaction ID" msgstr "el siguiente ID de transacción no es válido" -#: access/transam/xlog.c:7059 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo in checkpoint record" msgstr "redo no es válido en el registro de punto de control" -#: access/transam/xlog.c:7070 +#: access/transam/xlog.c:7109 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "registro redo no es válido en el punto de control de apagado" -#: access/transam/xlog.c:7110 +#: access/transam/xlog.c:7149 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "el sistema de bases de datos no fue apagado apropiadamente; se está efectuando la recuperación automática" -#: access/transam/xlog.c:7114 +#: access/transam/xlog.c:7153 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la recuperación comienza en el timeline %u y tiene un timeline de destino %u" -#: access/transam/xlog.c:7161 +#: access/transam/xlog.c:7200 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contiene datos inconsistentes con el archivo de control" -#: access/transam/xlog.c:7162 +#: access/transam/xlog.c:7201 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Esto significa que el respaldo está corrupto y deberá usar otro respaldo para la recuperación." -#: access/transam/xlog.c:7389 +#: access/transam/xlog.c:7428 #, c-format msgid "redo starts at %X/%X" msgstr "redo comienza en %X/%X" -#: access/transam/xlog.c:7614 +#: access/transam/xlog.c:7653 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "el punto de detención de recuperación pedido es antes del punto de recuperación consistente" -#: access/transam/xlog.c:7652 +#: access/transam/xlog.c:7691 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "redo listo en %X/%X utilización del sistema: %s" -#: access/transam/xlog.c:7658 +#: access/transam/xlog.c:7697 #, 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:7667 +#: access/transam/xlog.c:7706 #, c-format msgid "redo is not required" msgstr "no se requiere redo" -#: access/transam/xlog.c:7679 +#: access/transam/xlog.c:7718 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "la recuperación terminó antes de alcanzar el punto configurado como destino de recuperación" -#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 +#: access/transam/xlog.c:7802 access/transam/xlog.c:7806 #, 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:7764 +#: access/transam/xlog.c:7803 #, 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:7768 +#: access/transam/xlog.c:7807 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Un respaldo en línea iniciado con pg_start_backup() debe ser terminado con pg_stop_backup(), y todos los archivos WAL hasta ese punto deben estar disponibles durante la recuperación." -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7810 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL termina antes del punto de recuperación consistente" -#: access/transam/xlog.c:7806 +#: access/transam/xlog.c:7853 #, c-format msgid "selected new timeline ID: %u" msgstr "seleccionado nuevo ID de timeline: %u" -#: access/transam/xlog.c:8274 +#: access/transam/xlog.c:8321 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "elemento de directorio «%s» inesperado encontrado en %s" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8323 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Todas las entradas de directorios en pg_tblspc/ deberían ser enlaces simbólicos." -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8324 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "Elimine esos directorios, o configure allow_in_place_tablespaces a ON transitoriamente para permitir que la recuperación termine." -#: access/transam/xlog.c:8361 +#: access/transam/xlog.c:8408 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "el estado de recuperación consistente fue alcanzado en %X/%X" -#: access/transam/xlog.c:8570 +#: access/transam/xlog.c:8617 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "el enlace de punto de control primario en archivo de control no es válido" -#: access/transam/xlog.c:8574 +#: access/transam/xlog.c:8621 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "el enlace del punto de control en backup_label no es válido" -#: access/transam/xlog.c:8592 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid primary checkpoint record" msgstr "el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8596 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid checkpoint record" msgstr "el registro del punto de control no es válido" -#: access/transam/xlog.c:8607 +#: access/transam/xlog.c:8654 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8611 +#: access/transam/xlog.c:8658 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "el ID de gestor de recursos en el registro del punto de control no es válido" -#: access/transam/xlog.c:8624 +#: access/transam/xlog.c:8671 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "xl_info en el registro del punto de control primario no es válido" -#: access/transam/xlog.c:8628 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "xl_info en el registro del punto de control no es válido" -#: access/transam/xlog.c:8639 +#: access/transam/xlog.c:8686 #, c-format msgid "invalid length of primary checkpoint record" msgstr "la longitud del registro del punto de control primario no es válida" -#: access/transam/xlog.c:8643 +#: access/transam/xlog.c:8690 #, c-format msgid "invalid length of checkpoint record" msgstr "la longitud del registro de punto de control no es válida" -#: access/transam/xlog.c:8824 +#: access/transam/xlog.c:8871 #, c-format msgid "shutting down" msgstr "apagando" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8863 +#: access/transam/xlog.c:8910 #, 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:8875 +#: access/transam/xlog.c:8922 #, 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:8935 +#: access/transam/xlog.c:8982 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "restartpoint completado: se escribió %d buffers (%.1f%%); %d archivo(s) de WAL añadido(s), %d eliminado(s), %d reciclado(s); escritura=%ld.%03d s, sincronización=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimado=%d kB" -#: access/transam/xlog.c:8955 +#: access/transam/xlog.c:9002 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "checkpoint completado: se escribió %d buffers (%.1f%%); %d archivo(s) de WAL añadido(s), %d eliminado(s), %d reciclado(s); escritura=%ld.%03d s, sincronización=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimado=%d kB" -#: access/transam/xlog.c:9406 +#: access/transam/xlog.c:9473 #, 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:9939 +#: access/transam/xlog.c:10046 #, c-format msgid "recovery restart point at %X/%X" msgstr "restartpoint de recuperación en %X/%X" -#: access/transam/xlog.c:9941 +#: access/transam/xlog.c:10048 #, 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:10187 +#: access/transam/xlog.c:10296 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "punto de recuperación «%s» creado en %X/%X" -#: access/transam/xlog.c:10332 +#: access/transam/xlog.c:10441 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "ID de timeline previo %u inesperado (timeline actual %u) en el registro de punto de control" -#: access/transam/xlog.c:10341 +#: access/transam/xlog.c:10450 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "ID de timeline %u inesperado (después de %u) en el registro de punto de control" -#: access/transam/xlog.c:10357 +#: access/transam/xlog.c:10466 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "timeline ID %u inesperado en registro de checkpoint, antes de alcanzar el punto mínimo de recuperación %X/%X en el timeline %u" -#: access/transam/xlog.c:10432 +#: access/transam/xlog.c:10541 #, 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:10489 access/transam/xlog.c:10545 -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10598 access/transam/xlog.c:10654 +#: access/transam/xlog.c:10684 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "ID de timeline %u inesperado (debería ser %u) en el registro de punto de control" -#: access/transam/xlog.c:10733 +#: access/transam/xlog.c:10842 #, 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/xlog.c:10948 +#: access/transam/xlog.c:11057 #, 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:10954 +#: access/transam/xlog.c:11063 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" -#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 +#: access/transam/xlog.c:11174 access/transam/xlog.c:11711 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2938,188 +2955,188 @@ msgstr "no se pudo sincronizar (fdatasync) archivo «%s»: %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Las funciones de control de WAL no pueden ejecutarse durante la recuperación." -#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 +#: access/transam/xlog.c:11183 access/transam/xlog.c:11720 #, 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:11075 access/transam/xlog.c:11612 +#: access/transam/xlog.c:11184 access/transam/xlog.c:11721 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level debe ser definido a «replica» o «logical» al inicio del servidor." -#: access/transam/xlog.c:11080 +#: access/transam/xlog.c:11189 #, 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:11117 access/transam/xlog.c:11401 -#: access/transam/xlog.c:11439 +#: access/transam/xlog.c:11226 access/transam/xlog.c:11510 +#: access/transam/xlog.c:11548 #, c-format msgid "a backup is already in progress" msgstr "ya hay un respaldo en curso" -#: access/transam/xlog.c:11118 +#: access/transam/xlog.c:11227 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Ejecute pg_stop_backup() e intente nuevamente." -#: access/transam/xlog.c:11214 +#: access/transam/xlog.c:11323 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "el WAL generado con full_page_writes=off fue restaurado desde el último restartpoint" -#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 +#: access/transam/xlog.c:11325 access/transam/xlog.c:11916 #, 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." -#: access/transam/xlog.c:11300 replication/basebackup.c:1433 +#: access/transam/xlog.c:11409 replication/basebackup.c:1433 #: utils/adt/misc.c:367 #, 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:11350 commands/tablespace.c:385 +#: access/transam/xlog.c:11459 commands/tablespace.c:385 #: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "tablespaces no están soportados en esta plataforma" -#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 +#: access/transam/xlog.c:11511 access/transam/xlog.c:11549 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Si está seguro que no hay un respaldo en curso, elimine el archivo «%s» e intente nuevamente." -#: access/transam/xlog.c:11627 +#: access/transam/xlog.c:11736 #, c-format msgid "exclusive backup not in progress" msgstr "no hay un respaldo exclusivo en curso" -#: access/transam/xlog.c:11654 +#: access/transam/xlog.c:11763 #, c-format msgid "a backup is not in progress" msgstr "no hay un respaldo en curso" -#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 -#: access/transam/xlog.c:12144 access/transam/xlog.c:12150 -#: access/transam/xlog.c:12198 access/transam/xlog.c:12278 -#: access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11849 access/transam/xlog.c:11862 +#: access/transam/xlog.c:12253 access/transam/xlog.c:12259 +#: access/transam/xlog.c:12307 access/transam/xlog.c:12387 +#: access/transam/xlog.c:12411 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "datos no válidos en archivo «%s»" -#: access/transam/xlog.c:11757 replication/basebackup.c:1287 +#: access/transam/xlog.c:11866 replication/basebackup.c:1287 #, 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:11758 replication/basebackup.c:1288 +#: access/transam/xlog.c:11867 replication/basebackup.c:1288 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "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:11805 +#: access/transam/xlog.c:11914 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "el WAL generado con full_page_writes=off fue restaurado durante el respaldo en línea" -#: access/transam/xlog.c:11925 +#: access/transam/xlog.c:12034 #, 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:11937 +#: access/transam/xlog.c:12046 #, 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:11939 +#: access/transam/xlog.c:12048 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Verifique que su archive_command se esté ejecutando con normalidad. Puede cancelar este respaldo con confianza, pero el respaldo de la base de datos no será utilizable a menos que disponga de todos los segmentos de WAL." -#: access/transam/xlog.c:11946 +#: access/transam/xlog.c:12055 #, c-format msgid "all required WAL segments have been archived" msgstr "todos los segmentos de WAL requeridos han sido archivados" -#: access/transam/xlog.c:11950 +#: access/transam/xlog.c:12059 #, 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:12005 +#: access/transam/xlog.c:12114 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "abortando el backup porque el proceso servidor terminó antes de que pg_stop_backup fuera invocada" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12308 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "El ID de timeline interpretado es %u, pero se esperaba %u." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12327 +#: access/transam/xlog.c:12436 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "redo WAL en %X/%X para %s" -#: access/transam/xlog.c:12375 +#: access/transam/xlog.c:12484 #, c-format msgid "online backup mode was not canceled" msgstr "el modo de respaldo en línea no fue cancelado" -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12485 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "El archivo «%s» no se pudo renombrar a «%s»: %m." -#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 -#: access/transam/xlog.c:12407 +#: access/transam/xlog.c:12494 access/transam/xlog.c:12506 +#: access/transam/xlog.c:12516 #, c-format msgid "online backup mode canceled" msgstr "el modo de respaldo en línea fue cancelado" -#: access/transam/xlog.c:12398 +#: access/transam/xlog.c:12507 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Los archivos «%s» y «%s» fueron renombrados a «%s» y «%s», respectivamente." -#: access/transam/xlog.c:12408 +#: access/transam/xlog.c:12517 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "El archivo «%s» fue renombrado a «%s», pero el archivo «%s» no pudo ser renombrado a «%s»: %m." # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12650 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "no se pudo leer del archivo de segmento %s, posición %u: %m" # XXX why talk about "log segment" instead of "file"? -#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12656 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "no se pudo leer del archivo de segmento %s, posición %u: leídos %d de %zu" -#: access/transam/xlog.c:13112 +#: access/transam/xlog.c:13233 #, c-format msgid "WAL receiver process shutdown requested" msgstr "se recibió una petición de apagado para el proceso receptor de wal" -#: access/transam/xlog.c:13207 +#: access/transam/xlog.c:13345 #, c-format msgid "received promote request" msgstr "se recibió petición de promoción" -#: access/transam/xlog.c:13220 +#: access/transam/xlog.c:13358 #, c-format msgid "promote trigger file found: %s" msgstr "se encontró el archivo disparador de promoción: %s" -#: access/transam/xlog.c:13228 +#: access/transam/xlog.c:13366 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "no se pudo hacer stat al archivo disparador de promoción «%s»: %m" @@ -3183,7 +3200,7 @@ msgstr "¿Quiso usar pg_stop_backup('f')?" #: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 #: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 -#: replication/slotfuncs.c:255 replication/walsender.c:3328 +#: replication/slotfuncs.c:255 replication/walsender.c:3346 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 #: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 #: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 @@ -3201,7 +3218,7 @@ msgstr "se llamó una función que retorna un conjunto en un contexto que no pue #: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 #: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 -#: replication/slotfuncs.c:259 replication/walsender.c:3332 +#: replication/slotfuncs.c:259 replication/walsender.c:3350 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 @@ -3287,122 +3304,122 @@ msgstr "posición de registro no válida en %X/%X" msgid "contrecord is requested by %X/%X" msgstr "contrecord solicitado por %X/%X" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, 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:728 +#: access/transam/xlogreader.c:736 #, 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:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, 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:795 +#: access/transam/xlogreader.c:803 #, 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:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, 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:869 +#: access/transam/xlogreader.c:877 #, 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:875 +#: access/transam/xlogreader.c:883 #, 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:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, 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:1298 +#: access/transam/xlogreader.c:1306 #, 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:1305 +#: access/transam/xlogreader.c:1313 #, 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:1341 +#: access/transam/xlogreader.c:1349 #, 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:1357 +#: access/transam/xlogreader.c:1365 #, 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:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, 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:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" @@ -3412,12 +3429,12 @@ msgstr "imagen comprimida no válida en %X/%X, bloque %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X require un valor potencia de dos entre 1 MB y 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "--%s requiere un valor" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiere un valor" @@ -3566,10 +3583,10 @@ msgid "large object %u does not exist" msgstr "no existe el objeto grande %u" #: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 -#: commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 -#: commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 -#: commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 -#: commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 +#: commands/copy.c:402 commands/copy.c:422 commands/copy.c:432 +#: commands/copy.c:441 commands/copy.c:450 commands/copy.c:460 +#: commands/copy.c:469 commands/copy.c:478 commands/copy.c:496 +#: commands/copy.c:512 commands/copy.c:532 commands/copy.c:549 #: commands/dbcommands.c:158 commands/dbcommands.c:167 #: commands/dbcommands.c:176 commands/dbcommands.c:185 #: commands/dbcommands.c:194 commands/dbcommands.c:203 @@ -3579,12 +3596,12 @@ msgstr "no existe el objeto grande %u" #: commands/dbcommands.c:1550 commands/dbcommands.c:1559 #: commands/dbcommands.c:1568 commands/extension.c:1757 #: commands/extension.c:1767 commands/extension.c:1777 -#: commands/extension.c:3074 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:606 +#: commands/extension.c:3074 commands/foreigncmds.c:550 +#: commands/foreigncmds.c:559 commands/functioncmds.c:606 #: commands/functioncmds.c:772 commands/functioncmds.c:781 #: commands/functioncmds.c:790 commands/functioncmds.c:799 #: commands/functioncmds.c:2097 commands/functioncmds.c:2105 -#: commands/publicationcmds.c:87 commands/publicationcmds.c:130 +#: commands/publicationcmds.c:87 commands/publicationcmds.c:135 #: commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 #: commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 #: commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 @@ -3592,7 +3609,7 @@ msgstr "no existe el objeto grande %u" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 #: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 -#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 +#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -3605,9 +3622,9 @@ msgstr "no existe el objeto grande %u" #: commands/user.c:638 commands/user.c:647 commands/user.c:655 #: commands/user.c:663 parser/parse_utilcmd.c:402 #: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 -#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 -#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 -#: replication/walsender.c:894 replication/walsender.c:904 +#: replication/pgoutput/pgoutput.c:238 replication/pgoutput/pgoutput.c:248 +#: replication/pgoutput/pgoutput.c:258 replication/walsender.c:897 +#: replication/walsender.c:908 replication/walsender.c:918 #, c-format msgid "conflicting or redundant options" msgstr "opciones contradictorias o redundantes" @@ -3623,29 +3640,29 @@ 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:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 -#: commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 -#: commands/tablecmds.c:7147 commands/tablecmds.c:7303 -#: commands/tablecmds.c:7353 commands/tablecmds.c:7427 -#: commands/tablecmds.c:7497 commands/tablecmds.c:7609 -#: commands/tablecmds.c:7703 commands/tablecmds.c:7762 -#: commands/tablecmds.c:7851 commands/tablecmds.c:7880 -#: commands/tablecmds.c:8035 commands/tablecmds.c:8117 -#: commands/tablecmds.c:8273 commands/tablecmds.c:8395 -#: commands/tablecmds.c:11888 commands/tablecmds.c:12080 -#: commands/tablecmds.c:12240 commands/tablecmds.c:13403 -#: commands/tablecmds.c:15950 commands/trigger.c:942 parser/analyze.c:2471 +#: commands/analyze.c:390 commands/copy.c:781 commands/sequence.c:1709 +#: commands/tablecmds.c:7180 commands/tablecmds.c:7336 +#: commands/tablecmds.c:7386 commands/tablecmds.c:7460 +#: commands/tablecmds.c:7530 commands/tablecmds.c:7642 +#: commands/tablecmds.c:7736 commands/tablecmds.c:7795 +#: commands/tablecmds.c:7884 commands/tablecmds.c:7913 +#: commands/tablecmds.c:8068 commands/tablecmds.c:8150 +#: commands/tablecmds.c:8306 commands/tablecmds.c:8428 +#: commands/tablecmds.c:11908 commands/tablecmds.c:12100 +#: commands/tablecmds.c:12260 commands/tablecmds.c:13446 +#: commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 #: parser/parse_relation.c:714 parser/parse_target.c:1077 #: parser/parse_type.c:144 parser/parse_utilcmd.c:3425 -#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2845 +#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 #: utils/adt/ruleutils.c:2732 #, 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:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 -#: commands/tablecmds.c:249 commands/tablecmds.c:16824 utils/adt/acl.c:2053 -#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 -#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 +#: utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 +#: utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" msgstr "«%s» no es una secuencia" @@ -4068,12 +4085,12 @@ msgstr "no existe el esquema con OID %u" msgid "tablespace with OID %u does not exist" msgstr "no existe el tablespace con OID %u" -#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "no existe el conector de datos externos con OID %u" -#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "no existe el servidor foráneo con OID %u" @@ -4129,12 +4146,12 @@ msgstr "no existe la conversión con OID %u" msgid "extension with OID %u does not exist" msgstr "no existe la extensión con OID %u" -#: catalog/aclchk.c:5379 commands/publicationcmds.c:818 +#: catalog/aclchk.c:5379 commands/publicationcmds.c:823 #, c-format msgid "publication with OID %u does not exist" msgstr "no existe la publicación con OID %u" -#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "no existe la suscripción con OID %u" @@ -4235,12 +4252,13 @@ msgstr "no se puede eliminar %s porque otros objetos dependen de él" #: catalog/dependency.c:1204 catalog/dependency.c:1211 #: catalog/dependency.c:1223 commands/tablecmds.c:1301 -#: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 -#: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 -#: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 -#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 -#: utils/misc/guc.c:11643 +#: commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 +#: commands/view.c:506 libpq/auth.c:346 replication/slot.c:181 +#: replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 +#: storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 +#: utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 +#: utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 +#: utils/misc/guc.c:12599 utils/misc/guc.c:12601 #, c-format msgid "%s" msgstr "%s" @@ -4284,7 +4302,7 @@ msgstr "Las modificaciones al catálogo del sistema están actualmente deshabili msgid "tables can have at most %d columns" msgstr "las tablas pueden tener a lo más %d columnas" -#: catalog/heap.c:527 commands/tablecmds.c:7037 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, 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" @@ -4345,105 +4363,105 @@ msgstr "Una relación tiene un tipo asociado del mismo nombre, de modo que debe 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:2469 +#: catalog/heap.c:2529 #, 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:2742 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la restricción «check» «%s» ya existe" -#: catalog/heap.c:2912 catalog/index.c:886 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8769 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8802 #, 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:2919 +#: catalog/heap.c:2974 #, 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:2930 +#: catalog/heap.c:2985 #, 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:2940 +#: catalog/heap.c:2995 #, 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:2945 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "mezclando la restricción «%s» con la definición heredada" -#: catalog/heap.c:3050 +#: catalog/heap.c:3105 #, 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:3052 +#: catalog/heap.c:3107 #, 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:3058 +#: catalog/heap.c:3113 #, 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:3059 +#: catalog/heap.c:3114 #, 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:3114 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "la expresión de generación no es inmutable" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1288 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la columna «%s» es de tipo %s pero la expresión default es de tipo %s" -#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1293 #, 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:3194 +#: catalog/heap.c:3249 #, 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:3492 +#: catalog/heap.c:3547 #, 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:3493 +#: catalog/heap.c:3548 #, 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:3498 +#: catalog/heap.c:3553 #, 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:3499 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La tabla «%s» hace referencia a «%s»." -#: catalog/heap.c:3501 +#: catalog/heap.c:3556 #, 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." @@ -4504,34 +4522,34 @@ msgstr "el valor de OID de índice de pg_class no se definió en modo de actuali 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:3653 +#: catalog/index.c:3660 #, 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:3664 commands/indexcmds.c:3555 +#: catalog/index.c:3671 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "no es posible reindexar un índice no válido en tabla TOAST" -#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 +#: catalog/index.c:3687 commands/indexcmds.c:3469 commands/indexcmds.c:3613 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "no se puede mover la relación de sistema «%s»" -#: catalog/index.c:3824 +#: catalog/index.c:3831 #, c-format msgid "index \"%s\" was reindexed" msgstr "el índice «%s» fue reindexado" -#: catalog/index.c:3961 +#: catalog/index.c:3968 #, 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:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5255 +#: commands/trigger.c:5285 #, 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»" @@ -4562,7 +4580,7 @@ msgstr "no existe la relación «%s.%s»" msgid "relation \"%s\" does not exist" msgstr "no existe la relación «%s»" -#: catalog/namespace.c:501 catalog/namespace.c:3076 commands/extension.c:1541 +#: catalog/namespace.c:501 catalog/namespace.c:3079 commands/extension.c:1541 #: commands/extension.c:1547 #, c-format msgid "no schema has been selected to create in" @@ -4588,86 +4606,86 @@ msgstr "sólo relaciones temporales pueden ser creadas en los esquemas temporale msgid "statistics object \"%s\" does not exist" msgstr "no existe el objeto de estadísticas «%s»" -#: catalog/namespace.c:2391 +#: catalog/namespace.c:2394 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "no existe el analizador de búsqueda en texto «%s»" -#: catalog/namespace.c:2517 +#: catalog/namespace.c:2520 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "no existe el diccionario de búsqueda en texto «%s»" -#: catalog/namespace.c:2644 +#: catalog/namespace.c:2647 #, c-format msgid "text search template \"%s\" does not exist" msgstr "no existe la plantilla de búsqueda en texto «%s»" -#: catalog/namespace.c:2770 commands/tsearchcmds.c:1127 +#: catalog/namespace.c:2773 commands/tsearchcmds.c:1127 #: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "no existe la configuración de búsqueda en texto «%s»" -#: catalog/namespace.c:2883 parser/parse_expr.c:810 parser/parse_target.c:1269 +#: catalog/namespace.c:2886 parser/parse_expr.c:810 parser/parse_target.c:1269 #, 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:2889 parser/parse_expr.c:817 parser/parse_target.c:1276 +#: catalog/namespace.c:2892 parser/parse_expr.c:817 parser/parse_target.c:1276 #: gram.y:15103 gram.y:17077 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: catalog/namespace.c:3019 +#: catalog/namespace.c:3022 #, 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:3025 +#: catalog/namespace.c:3028 #, 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:3098 commands/schemacmds.c:263 commands/schemacmds.c:343 +#: catalog/namespace.c:3101 commands/schemacmds.c:263 commands/schemacmds.c:343 #: commands/tablecmds.c:1246 #, c-format msgid "schema \"%s\" does not exist" msgstr "no existe el esquema «%s»" -#: catalog/namespace.c:3129 +#: catalog/namespace.c:3132 #, 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:3696 +#: catalog/namespace.c:3699 #, 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:3751 +#: catalog/namespace.c:3754 #, c-format msgid "conversion \"%s\" does not exist" msgstr "no existe la conversión «%s»" -#: catalog/namespace.c:4015 +#: catalog/namespace.c:4018 #, 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:4031 +#: catalog/namespace.c:4034 #, c-format msgid "cannot create temporary tables during recovery" msgstr "no se pueden crear tablas temporales durante la recuperación" -#: catalog/namespace.c:4037 +#: catalog/namespace.c:4040 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "no se pueden crear tablas temporales durante una operación paralela" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 +#: catalog/namespace.c:4341 commands/tablespace.c:1211 commands/variable.c:64 +#: tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "La sintaxis de lista no es válida." @@ -4675,25 +4693,25 @@ msgstr "La sintaxis de lista no es válida." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 #: commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 #: commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 -#: commands/tablecmds.c:12016 +#: commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "«%s» no es una tabla" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6169 commands/tablecmds.c:16829 commands/view.c:119 +#: commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "«%s» no es una vista" #: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 -#: commands/tablecmds.c:16834 +#: commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "«%s» no es una vista materializada" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6172 commands/tablecmds.c:16839 +#: commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "«%s» no es una tabla foránea" @@ -4716,7 +4734,7 @@ msgstr "no existe el valor por omisión para la columna «%s» de la relación #: catalog/objectaddress.c:1645 commands/functioncmds.c:139 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 -#: utils/adt/acl.c:4411 +#: utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "no existe el tipo «%s»" @@ -4736,8 +4754,9 @@ msgstr "no existe la función %d (%s, %s) de %s" 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:1861 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:733 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 +#: commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 +#: foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "no existe el servidor «%s»" @@ -5389,7 +5408,7 @@ 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:4501 -#: commands/tablecmds.c:15139 +#: commands/tablecmds.c:15182 #, 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." @@ -5591,8 +5610,8 @@ msgstr "Las tablas temporales o «unlogged» no pueden replicarse." 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:533 commands/publicationcmds.c:458 -#: commands/publicationcmds.c:786 +#: catalog/pg_publication.c:533 commands/publicationcmds.c:463 +#: commands/publicationcmds.c:791 #, c-format msgid "publication \"%s\" does not exist" msgstr "no existe la publicación «%s»" @@ -5666,17 +5685,17 @@ msgid "cannot reassign ownership of objects owned by %s because they are require msgstr "no se puede reasignar la propiedad de objetos de %s porque son requeridos por el sistema" #: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 -#: commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "no existe la suscripción «%s»" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, 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:434 +#: catalog/pg_subscription.c:459 #, 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»." @@ -5684,7 +5703,7 @@ 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:441 +#: catalog/pg_subscription.c:466 #, 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." @@ -5735,13 +5754,13 @@ msgstr "Falla al crear un tipo de multirango para el tipo «%s»." msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Puede especificar manualmente un nombre para el tipo de multirango usando el atributo «multirange_type_name»." -#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1046 #, c-format msgid "invalid page in block %u of relation %s" msgstr "la página no es válida en el bloque %u de la relación %s" #: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 -#: commands/tablecmds.c:16694 +#: commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "«%s» no es una tabla o vista materializada" @@ -5841,12 +5860,12 @@ msgstr "el parámetro «%s» debe ser READ_ONLY, SHAREABLE o READ_WRITE" msgid "event trigger \"%s\" already exists" msgstr "el disparador por eventos «%s» ya existe" -#: commands/alter.c:88 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "el conector de datos externos «%s» ya existe" -#: commands/alter.c:91 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "el servidor «%s» ya existe" @@ -5856,7 +5875,7 @@ msgstr "el servidor «%s» ya existe" msgid "language \"%s\" already exists" msgstr "ya existe el lenguaje «%s»" -#: commands/alter.c:97 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:185 #, c-format msgid "publication \"%s\" already exists" msgstr "la publicación «%s» ya existe" @@ -5933,7 +5952,7 @@ 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:699 +#: commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 #: parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" @@ -5984,27 +6003,27 @@ msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "omitiendo el análisis del árbol de herencia «%s.%s» --- este árbol no contiene tablas hijas analizables" -#: commands/async.c:646 +#: commands/async.c:645 #, 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:651 #, c-format msgid "channel name too long" msgstr "el nombre de canal es demasiado largo" -#: commands/async.c:657 +#: commands/async.c:656 #, c-format msgid "payload string too long" msgstr "la cadena de carga es demasiado larga" -#: commands/async.c:876 +#: commands/async.c:875 #, 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:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "demasiadas notificaciones en la cola NOTIFY" @@ -6044,7 +6063,7 @@ msgstr "no se puede hacer «cluster» a una tabla particionada" msgid "there is no previously clustered index for table \"%s\"" msgstr "no hay un índice de ordenamiento definido para la tabla «%s»" -#: commands/cluster.c:187 commands/tablecmds.c:13858 commands/tablecmds.c:15718 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "no existe el índice «%s» en la tabla «%s»" @@ -6059,7 +6078,7 @@ msgstr "no se puede reordenar un catálogo compartido" msgid "cannot vacuum temporary tables of other sessions" msgstr "no se puede hacer vacuum a tablas temporales de otras sesiones" -#: commands/cluster.c:471 commands/tablecmds.c:15728 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "«%s» no es un índice de la tabla «%s»" @@ -6258,148 +6277,160 @@ msgstr "debe ser superusuario o miembro del rol pg_read_server_files para hacer msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "debe ser superusuario o miembro del rol pg_write_server_files para hacer COPY a un archivo" -#: commands/copy.c:188 +#: commands/copy.c:175 +#, c-format +msgid "generated columns are not supported in COPY FROM WHERE conditions" +msgstr "no se permiten columnas generadas en las condiciones WHERE de COPY FROM" + +#: commands/copy.c:176 commands/tablecmds.c:11928 commands/tablecmds.c:17048 +#: commands/tablecmds.c:17127 commands/trigger.c:653 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:974 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "La columna «%s» es una columna generada." + +#: commands/copy.c:225 #, 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:189 +#: commands/copy.c:226 #, c-format msgid "Use INSERT statements instead." msgstr "Use sentencias INSERT en su lugar." -#: commands/copy.c:377 +#: commands/copy.c:414 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "el formato de COPY «%s» no es reconocido" -#: commands/copy.c:450 commands/copy.c:466 commands/copy.c:481 -#: commands/copy.c:503 +#: commands/copy.c:487 commands/copy.c:503 commands/copy.c:518 +#: commands/copy.c:540 #, 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:518 +#: commands/copy.c:555 #, 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:525 commands/dbcommands.c:254 commands/dbcommands.c:1575 +#: commands/copy.c:562 commands/dbcommands.c:254 commands/dbcommands.c:1575 #, c-format msgid "option \"%s\" not recognized" msgstr "no se reconoce la opción «%s»" -#: commands/copy.c:537 +#: commands/copy.c:574 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "no se puede especificar DELIMITER en modo BINARY" -#: commands/copy.c:542 +#: commands/copy.c:579 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "no se puede especificar NULL en modo BINARY" -#: commands/copy.c:564 +#: commands/copy.c:601 #, 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:571 +#: commands/copy.c:608 #, 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:577 +#: commands/copy.c:614 #, 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:594 +#: commands/copy.c:631 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "el delimitador de COPY no puede ser «%s»" -#: commands/copy.c:600 +#: commands/copy.c:637 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "el «header» de COPY está disponible sólo en modo CSV" -#: commands/copy.c:606 +#: commands/copy.c:643 #, c-format msgid "COPY quote available only in CSV mode" msgstr "el «quote» de COPY está disponible sólo en modo CSV" -#: commands/copy.c:611 +#: commands/copy.c:648 #, 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:616 +#: commands/copy.c:653 #, 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:622 +#: commands/copy.c:659 #, c-format msgid "COPY escape available only in CSV mode" msgstr "escape de COPY disponible sólo en modo CSV" -#: commands/copy.c:627 +#: commands/copy.c:664 #, 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:633 +#: commands/copy.c:670 #, 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:637 +#: commands/copy.c:674 #, 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:643 +#: commands/copy.c:680 #, 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:647 +#: commands/copy.c:684 #, 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:653 +#: commands/copy.c:690 #, 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:658 +#: commands/copy.c:695 #, 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:664 +#: commands/copy.c:701 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "el delimitador de COPY no debe aparecer en la especificación NULL" -#: commands/copy.c:671 +#: commands/copy.c:708 #, 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:732 +#: commands/copy.c:769 #, c-format msgid "column \"%s\" is a generated column" msgstr "la columna «%s» es una columna generada" -#: commands/copy.c:734 +#: commands/copy.c:771 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Las columnas generadas no pueden usarse en COPY." -#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 +#: commands/copy.c:786 commands/indexcmds.c:1842 commands/statscmds.c:265 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 #: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 @@ -6407,7 +6438,7 @@ msgstr "Las columnas generadas no pueden usarse en COPY." msgid "column \"%s\" does not exist" msgstr "no existe la columna «%s»" -#: commands/copy.c:756 commands/tablecmds.c:2370 commands/trigger.c:951 +#: commands/copy.c:793 commands/tablecmds.c:2370 commands/trigger.c:951 #: parser/parse_target.c:1093 parser/parse_target.c:1104 #, c-format msgid "column \"%s\" specified more than once" @@ -6488,7 +6519,7 @@ msgstr "la columna FORCE_NOT_NULL «%s» no es referenciada en COPY" msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "la columna FORCE_NULL «%s» no es referenciada en COPY" -#: commands/copyfrom.c:1343 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1343 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»" @@ -7089,7 +7120,7 @@ msgstr "Use DROP AGGREGATE para eliminar funciones de agregación." #: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 #: commands/tablecmds.c:3750 commands/tablecmds.c:3803 -#: commands/tablecmds.c:16145 tcop/utility.c:1324 +#: commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "no existe la relación «%s», omitiendo" @@ -7119,7 +7150,7 @@ msgstr "no existe el ordenamiento (collation) «%s», omitiendo" msgid "conversion \"%s\" does not exist, skipping" msgstr "no existe la conversión «%s», omitiendo" -#: commands/dropcmds.c:293 commands/statscmds.c:674 +#: commands/dropcmds.c:293 commands/statscmds.c:694 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s», omitiendo" @@ -7214,7 +7245,7 @@ msgstr "la regla «%s» para la relación «%s» no existe, omitiendo" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "no existe el conector de datos externos «%s», omitiendo" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "el servidor «%s» no existe, omitiendo" @@ -7574,102 +7605,102 @@ msgstr "no se puede agregar el esquema «%s» a la extensión «%s» porque el e msgid "file \"%s\" is too large" msgstr "el archivo «%s» es demasiado grande" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "opción «%s» no encontrada" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "la opción «%s» fue especificada más de una vez" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño del conector de datos externos «%s»" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "Debe ser superusuario para cambiar el dueño de un conector de datos externos." -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format 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:711 foreign/foreign.c:711 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "no existe el conector de datos externos «%s»" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "se ha denegado el permiso para crear el conector de datos externos «%s»" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Debe ser superusuario para crear un conector de datos externos." -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "se ha denegado el permiso para cambiar el conector de datos externos «%s»" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Debe ser superusuario para alterar un conector de datos externos." -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "al cambiar el manejador del conector de datos externos, el comportamiento de las tablas foráneas existentes puede cambiar" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "al cambiar el validador del conector de datos externos, las opciones para los objetos dependientes de él pueden volverse no válidas" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "el servidor «%s» ya existe, omitiendo" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "el mapeo de usuario «%s» ya existe para el servidor «%s», omitiendo" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "el mapeo de usuario «%s» ya existe para el servidor «%s»" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s»" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "no existe el mapeo de usuario «%s» para el servidor «%s», omitiendo" -#: commands/foreigncmds.c:1511 foreign/foreign.c:399 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "el conector de datos externos «%s» no tiene manejador" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "el conector de datos externos «%s» no soporta IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "importando la tabla foránea «%s»" @@ -8188,8 +8219,8 @@ msgstr "la columna incluida no permite las opciones NULLS FIRST/LAST" msgid "could not determine which collation to use for index expression" msgstr "no se pudo determinar qué ordenamiento (collation) usar para la expresión de índice" -#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 -#: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17215 commands/typecmds.c:810 +#: parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" @@ -8225,8 +8256,8 @@ msgstr "el método de acceso «%s» no soporta las opciones ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "el método de acceso «%s» no soporta las opciones NULLS FIRST/LAST" -#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 -#: commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17240 +#: commands/tablecmds.c:17246 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "el tipo de dato %s no tiene una clase de operadores por omisión para el método de acceso «%s»" @@ -8252,78 +8283,78 @@ msgstr "la clase de operadores «%s» no acepta el tipo de datos %s" 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:2631 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "opción de REINDEX «%s» no reconocida" -#: commands/indexcmds.c:2855 +#: commands/indexcmds.c:2889 #, 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:2869 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la tabla «%s» no tiene índices para reindexar" -#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 -#: commands/indexcmds.c:3544 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 +#: commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "no se pueden reindexar catálogos de sistema concurrentemente" -#: commands/indexcmds.c:2932 +#: commands/indexcmds.c:2966 #, 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:3020 +#: commands/indexcmds.c:3054 #, 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:3053 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "no se puede mover las relaciones de sistema, omitiendo todas" -#: commands/indexcmds.c:3100 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "al reindexar tabla particionada «%s.%s»" -#: commands/indexcmds.c:3103 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "al reindexar índice particionado «%s.%s»" -#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la tabla «%s.%s» fue reindexada" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "no se puede reindexar el índice no válido «%s.%s» concurrentemente, omitiendo" -#: commands/indexcmds.c:3454 +#: commands/indexcmds.c:3488 #, 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:3609 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "no se puede reindexar este tipo de relación concurrentemente" -#: commands/indexcmds.c:3630 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "no se puede mover relación no compartida al tablespace «%s»" -#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "el índice «%s.%s» fue reindexado" @@ -8636,11 +8667,11 @@ msgstr "la función de estimación de join %s debe retornar tipo %s" 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:151 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:157 #: commands/tablecmds.c:1582 commands/tablecmds.c:2162 #: commands/tablecmds.c:3402 commands/tablecmds.c:6112 -#: commands/tablecmds.c:9048 commands/tablecmds.c:16750 -#: commands/tablecmds.c:16785 commands/trigger.c:313 commands/trigger.c:1289 +#: commands/tablecmds.c:9081 commands/tablecmds.c:16793 +#: commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 #: commands/trigger.c:1398 rewrite/rewriteDefine.c:278 #: rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format @@ -8693,7 +8724,7 @@ 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:2643 utils/adt/xml.c:2813 +#: executor/execCurrent.c:70 utils/adt/xml.c:2637 utils/adt/xml.c:2807 #, c-format msgid "cursor \"%s\" does not exist" msgstr "no existe el cursor «%s»" @@ -8703,7 +8734,7 @@ msgstr "no existe el cursor «%s»" msgid "invalid statement name: must not be empty" msgstr "el nombre de sentencia no es válido: no debe ser vacío" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1483 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "no se pudo determinar el tipo del parámetro $%d" @@ -8748,57 +8779,57 @@ msgstr "no existe la sentencia preparada «%s»" msgid "must be superuser to create custom procedural language" msgstr "debe ser superusuario para crear un lenguaje procedural personalizado" -#: commands/publicationcmds.c:104 +#: commands/publicationcmds.c:109 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "sintaxis de entrada no válida para la opción «publish»" -#: commands/publicationcmds.c:122 +#: commands/publicationcmds.c:127 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "valor de «publish» no reconocido: «%s»" -#: commands/publicationcmds.c:137 +#: commands/publicationcmds.c:142 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "parámetro de publicación no reconocido: «%s»" -#: commands/publicationcmds.c:169 +#: commands/publicationcmds.c:174 #, 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:250 +#: commands/publicationcmds.c:255 #, c-format msgid "wal_level is insufficient to publish logical changes" msgstr "wal_level es insuficiente para publicar cambios lógicos" -#: commands/publicationcmds.c:251 +#: commands/publicationcmds.c:256 #, c-format msgid "Set wal_level to logical before creating subscriptions." msgstr "Cambie wal_level a logical antes de crear suscripciones." -#: commands/publicationcmds.c:376 +#: commands/publicationcmds.c:381 #, 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:378 +#: commands/publicationcmds.c:383 #, 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:707 +#: commands/publicationcmds.c:712 #, 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:750 +#: commands/publicationcmds.c:755 #, 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:752 +#: commands/publicationcmds.c:757 #, 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." @@ -8958,13 +8989,13 @@ msgstr "la secuencia debe estar en el mismo esquema que la tabla a la que está msgid "cannot change ownership of identity sequence" msgstr "no se puede cambiar el dueño de la secuencia de identidad" -#: commands/sequence.c:1725 commands/tablecmds.c:13550 -#: commands/tablecmds.c:16165 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 +#: commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La secuencia «%s» está enlazada a la tabla «%s»." -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "sólo se permite una relación en CREATE STATISTICS" @@ -8974,72 +9005,72 @@ msgstr "sólo se permite una relación en CREATE STATISTICS" msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "la relación «%s» no es una tabla, tabla foránea o vista materializada" -#: commands/statscmds.c:193 +#: commands/statscmds.c:213 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "el objeto de estadísticas «%s» ya existe, omitiendo" -#: commands/statscmds.c:201 +#: commands/statscmds.c:221 #, c-format msgid "statistics object \"%s\" already exists" msgstr "el objeto de estadísticas «%s» ya existe" -#: commands/statscmds.c:212 +#: commands/statscmds.c:232 #, 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:253 commands/statscmds.c:276 commands/statscmds.c:309 +#: commands/statscmds.c:273 commands/statscmds.c:296 commands/statscmds.c:329 #, 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:260 commands/statscmds.c:283 +#: commands/statscmds.c:280 commands/statscmds.c:303 #, 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:326 +#: commands/statscmds.c:346 #, 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:347 +#: commands/statscmds.c:367 #, 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:376 +#: commands/statscmds.c:396 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "tipo de estadísticas «%s» no reconocido" -#: commands/statscmds.c:405 +#: commands/statscmds.c:425 #, c-format msgid "extended statistics require at least 2 columns" msgstr "las estadísticas extendidas requieren al menos 2 columnas" -#: commands/statscmds.c:423 +#: commands/statscmds.c:443 #, c-format msgid "duplicate column name in statistics definition" msgstr "nombre de columna duplicado en definición de estadísticas" -#: commands/statscmds.c:458 +#: commands/statscmds.c:478 #, c-format msgid "duplicate expression in statistics definition" msgstr "expresión duplicada en definición de estadísticas" -#: commands/statscmds.c:639 commands/tablecmds.c:8014 +#: commands/statscmds.c:659 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "el valor de estadísticas %d es demasiado bajo" -#: commands/statscmds.c:647 commands/tablecmds.c:8022 +#: commands/statscmds.c:667 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "bajando el valor de estadísticas a %d" -#: commands/statscmds.c:670 +#: commands/statscmds.c:690 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "no existe el objeto de estadísticas «%s.%s», omitiendo" @@ -9069,7 +9100,7 @@ msgid "must be superuser to create subscriptions" msgstr "debe ser superusuario para crear suscripciones" #: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 -#: replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "no se pudo connectar con el editor (publisher): %s" @@ -9110,63 +9141,63 @@ msgstr "Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)." msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH no está permitido para las suscripciones desactivadas" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "no existe la suscripción «%s», omitiendo" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "eliminando el slot de replicación «%s» en editor (publisher)" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, 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" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "se ha denegado el permiso para cambiar el dueño de la suscripción «%s»" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "El dueño de una suscripción debe ser un superusuario." -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "no se pudo recibir la lista de tablas replicadas desde el editor (publisher): %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, 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" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1581 +#: commands/subscriptioncmds.c:1583 #, c-format 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, y luego use %s para disociarla del slot." -#: commands/subscriptioncmds.c:1612 +#: commands/subscriptioncmds.c:1614 #, 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:1656 +#: commands/subscriptioncmds.c:1658 #, 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:1670 +#: commands/subscriptioncmds.c:1672 #, 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:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "no se puede eliminar todas las publicaciones de una suscripción" @@ -9227,7 +9258,7 @@ msgstr "la vista materializada «%s» no existe, omitiendo" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Use DROP MATERIALIZED VIEW para eliminar una vista materializada." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18688 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18753 #: parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" @@ -9251,8 +9282,8 @@ msgstr "«%s» no es un tipo" msgid "Use DROP TYPE to remove a type." msgstr "Use DROP TYPE para eliminar un tipo." -#: commands/tablecmds.c:277 commands/tablecmds.c:13389 -#: commands/tablecmds.c:15868 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 +#: commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "no existe la tabla foránea «%s»" @@ -9276,7 +9307,7 @@ msgstr "ON COMMIT sólo puede ser usado en tablas temporales" msgid "cannot create temporary table within security-restricted operation" msgstr "no se puede crear una tabla temporal dentro una operación restringida por seguridad" -#: commands/tablecmds.c:738 commands/tablecmds.c:14675 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, 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" @@ -9346,7 +9377,7 @@ msgstr "no se puede truncar la tabla foránea «%s»" msgid "cannot truncate temporary tables of other sessions" msgstr "no se pueden truncar tablas temporales de otras sesiones" -#: commands/tablecmds.c:2427 commands/tablecmds.c:14572 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "no se puede heredar de la tabla particionada «%s»" @@ -9367,12 +9398,12 @@ msgstr "la relación heredada «%s» no es una tabla o tabla foránea" 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:2461 commands/tablecmds.c:14551 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "no se puede heredar de la tabla temporal «%s»" -#: commands/tablecmds.c:2471 commands/tablecmds.c:14559 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "no se puede heredar de una tabla temporal de otra sesión" @@ -9427,7 +9458,7 @@ msgid "inherited column \"%s\" has a generation conflict" msgstr "columna heredada «%s» tiene conflicto de generación" #: commands/tablecmds.c:2682 commands/tablecmds.c:2737 -#: commands/tablecmds.c:12114 parser/parse_utilcmd.c:1260 +#: commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 #: parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 #: parser/parse_utilcmd.c:1857 #, c-format @@ -9711,12 +9742,12 @@ msgstr "no se puede agregar una columna a una tabla tipada" msgid "cannot add column to a partition" msgstr "no se puede agregar una columna a una partición" -#: commands/tablecmds.c:6657 commands/tablecmds.c:14802 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, 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:6663 commands/tablecmds.c:14809 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, 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»" @@ -9731,928 +9762,921 @@ msgstr "mezclando la definición de la columna «%s» en la tabla hija «%s»" 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:6967 +#: commands/tablecmds.c:7000 #, 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:7045 +#: commands/tablecmds.c:7078 #, 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:7052 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "ya existe la columna «%s» en la relación «%s»" -#: commands/tablecmds.c:7118 commands/tablecmds.c:11742 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, 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:7119 commands/tablecmds.c:7436 -#: commands/tablecmds.c:8463 commands/tablecmds.c:11743 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 +#: commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "No especifique la opción ONLY." -#: commands/tablecmds.c:7156 commands/tablecmds.c:7362 -#: commands/tablecmds.c:7504 commands/tablecmds.c:7618 -#: commands/tablecmds.c:7712 commands/tablecmds.c:7771 -#: commands/tablecmds.c:7889 commands/tablecmds.c:8055 -#: commands/tablecmds.c:8125 commands/tablecmds.c:8281 -#: commands/tablecmds.c:11897 commands/tablecmds.c:13412 -#: commands/tablecmds.c:15959 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 +#: commands/tablecmds.c:7537 commands/tablecmds.c:7651 +#: commands/tablecmds.c:7745 commands/tablecmds.c:7804 +#: commands/tablecmds.c:7922 commands/tablecmds.c:8088 +#: commands/tablecmds.c:8158 commands/tablecmds.c:8314 +#: commands/tablecmds.c:11917 commands/tablecmds.c:13455 +#: commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "no se puede alterar columna de sistema «%s»" -#: commands/tablecmds.c:7162 commands/tablecmds.c:7510 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, 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:7205 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la columna «%s» está en la llave primaria" -#: commands/tablecmds.c:7210 +#: commands/tablecmds.c:7243 #, 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:7233 +#: commands/tablecmds.c:7266 #, 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:7433 commands/tablecmds.c:8946 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, 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:7434 +#: commands/tablecmds.c:7467 #, 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:7512 +#: commands/tablecmds.c:7545 #, 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:7517 +#: commands/tablecmds.c:7550 #, 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:7520 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION en su lugar." -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7662 #, 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:7635 +#: commands/tablecmds.c:7668 #, 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:7641 +#: commands/tablecmds.c:7674 #, 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:7718 commands/tablecmds.c:7779 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, 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:7784 +#: commands/tablecmds.c:7817 #, 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:7837 +#: commands/tablecmds.c:7870 #, 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:7859 +#: commands/tablecmds.c:7892 #, 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:7897 +#: commands/tablecmds.c:7930 #, 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:7902 +#: commands/tablecmds.c:7935 #, 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:8002 +#: commands/tablecmds.c:8035 #, 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:8045 +#: commands/tablecmds.c:8078 #, 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:8064 +#: commands/tablecmds.c:8097 #, 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:8069 +#: commands/tablecmds.c:8102 #, 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:8071 +#: commands/tablecmds.c:8104 #, 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:8261 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "tipo de almacenamiento no válido «%s»" -#: commands/tablecmds.c:8293 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "el tipo de datos %s de la columna sólo puede tener almacenamiento PLAIN" -#: commands/tablecmds.c:8338 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "no se pueden eliminar columnas de una tabla tipada" -#: commands/tablecmds.c:8401 +#: commands/tablecmds.c:8434 #, 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:8414 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "no se puede eliminar la columna de sistema «%s»" -#: commands/tablecmds.c:8424 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "no se puede eliminar la columna heredada «%s»" -#: commands/tablecmds.c:8437 +#: commands/tablecmds.c:8470 #, 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:8462 +#: commands/tablecmds.c:8495 #, 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:8666 +#: commands/tablecmds.c:8699 #, 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:8691 +#: commands/tablecmds.c:8724 #, 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:9026 +#: commands/tablecmds.c:9059 #, 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:9032 +#: commands/tablecmds.c:9065 #, 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:9035 +#: commands/tablecmds.c:9068 #, 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:9042 commands/tablecmds.c:9447 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relación referida «%s» no es una tabla" -#: commands/tablecmds.c:9065 +#: commands/tablecmds.c:9098 #, 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:9072 +#: commands/tablecmds.c:9105 #, 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:9078 +#: commands/tablecmds.c:9111 #, 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:9082 +#: commands/tablecmds.c:9115 #, 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:9148 commands/tablecmds.c:9154 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, 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:9170 +#: commands/tablecmds.c:9203 #, 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:9277 +#: commands/tablecmds.c:9310 #, 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:9279 +#: commands/tablecmds.c:9312 #, 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:9642 commands/tablecmds.c:10072 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 #: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, 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:10055 +#: commands/tablecmds.c:10075 #, c-format msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" msgstr "no se puede adjuntar como partición la tabla «%s» porque es referida por la llave foránea «%s»" -#: commands/tablecmds.c:10525 commands/tablecmds.c:10806 -#: commands/tablecmds.c:11699 commands/tablecmds.c:11774 +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 +#: commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, 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:10532 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la restricción «%s» de la relación «%s» no es una restriccion de llave foránea" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:10590 #, 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:10573 +#: commands/tablecmds.c:10593 #, 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:10575 +#: commands/tablecmds.c:10595 #, c-format 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:10814 +#: commands/tablecmds.c:10834 #, 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:10892 +#: commands/tablecmds.c:10912 #, 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:10982 +#: commands/tablecmds.c:11002 #, 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:10988 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "las columnas de sistema no pueden usarse en llaves foráneas" -#: commands/tablecmds.c:10992 +#: commands/tablecmds.c:11012 #, 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:11057 +#: commands/tablecmds.c:11077 #, 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:11074 +#: commands/tablecmds.c:11094 #, 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:11143 +#: commands/tablecmds.c:11163 #, 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:11237 +#: commands/tablecmds.c:11257 #, 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:11242 +#: commands/tablecmds.c:11262 #, 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:11655 +#: commands/tablecmds.c:11675 #, 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:11705 +#: commands/tablecmds.c:11725 #, 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:11881 +#: commands/tablecmds.c:11901 #, 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:11907 +#: commands/tablecmds.c:11927 #, 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:11908 commands/tablecmds.c:17005 -#: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "La columna «%s» es una columna generada." - -#: commands/tablecmds.c:11918 +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "no se puede alterar la columna heredada «%s»" -#: commands/tablecmds.c:11927 +#: commands/tablecmds.c:11947 #, 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:11977 +#: commands/tablecmds.c:11997 #, 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:11980 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "Puede ser necesario agregar un cast explícito." -#: commands/tablecmds.c:11984 +#: commands/tablecmds.c:12004 #, 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:11988 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Puede ser necesario especificar «USING %s::%s»." -#: commands/tablecmds.c:12087 +#: commands/tablecmds.c:12107 #, 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:12115 +#: commands/tablecmds.c:12135 #, 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:12126 +#: commands/tablecmds.c:12146 #, 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:12251 +#: commands/tablecmds.c:12271 #, 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:12289 +#: commands/tablecmds.c:12309 #, 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:12294 +#: commands/tablecmds.c:12314 #, 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:12372 +#: commands/tablecmds.c:12392 #, 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:12373 +#: commands/tablecmds.c:12393 #, 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:12401 +#: commands/tablecmds.c:12421 #, c-format 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:12402 commands/tablecmds.c:12416 -#: commands/tablecmds.c:12435 commands/tablecmds.c:12453 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 +#: commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s depende de la columna «%s»" -#: commands/tablecmds.c:12415 +#: commands/tablecmds.c:12435 #, 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:12434 +#: commands/tablecmds.c:12454 #, 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:12452 +#: commands/tablecmds.c:12472 #, 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:13520 commands/tablecmds.c:13532 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "no se puede cambiar el dueño del índice «%s»" -#: commands/tablecmds.c:13522 commands/tablecmds.c:13534 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Considere cambiar el dueño de la tabla en vez de cambiar el dueño del índice." -#: commands/tablecmds.c:13548 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "no se puede cambiar el dueño de la secuencia «%s»" -#: commands/tablecmds.c:13562 commands/tablecmds.c:16861 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "Considere usar ALTER TYPE." -#: commands/tablecmds.c:13571 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, secuencia o tabla foránea" -#: commands/tablecmds.c:13910 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "no se pueden tener múltiples subórdenes SET TABLESPACE" -#: commands/tablecmds.c:13987 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "«%s» no es una tabla, vista, tabla materializada, índice o tabla TOAST" -#: commands/tablecmds.c:14020 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, 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:14273 +#: commands/tablecmds.c:14316 #, 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:14285 +#: commands/tablecmds.c:14328 #, 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:14377 +#: commands/tablecmds.c:14420 #, 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:14393 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "no se encontraron relaciones coincidentes en el tablespace «%s»" -#: commands/tablecmds.c:14510 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "no se puede cambiar la herencia de una tabla tipada" -#: commands/tablecmds.c:14515 commands/tablecmds.c:15071 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "no puede cambiar la herencia de una partición" -#: commands/tablecmds.c:14520 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "no se puede cambiar la herencia de una tabla particionada" -#: commands/tablecmds.c:14566 +#: commands/tablecmds.c:14609 #, 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:14579 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "no se puede heredar de una partición" -#: commands/tablecmds.c:14601 commands/tablecmds.c:17507 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17560 #, c-format msgid "circular inheritance not allowed" msgstr "la herencia circular no está permitida" -#: commands/tablecmds.c:14602 commands/tablecmds.c:17508 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17561 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "«%s» ya es un hijo de «%s»." -#: commands/tablecmds.c:14615 +#: commands/tablecmds.c:14658 #, 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:14617 +#: commands/tablecmds.c:14660 #, 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:14820 +#: commands/tablecmds.c:14863 #, 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:14829 +#: commands/tablecmds.c:14872 #, 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:14879 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "la columna «%s» en tabla hija tiene una expresión de generación en conflicto" -#: commands/tablecmds.c:14907 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "tabla hija no tiene la columna «%s»" -#: commands/tablecmds.c:14995 +#: commands/tablecmds.c:15038 #, 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:15003 +#: commands/tablecmds.c:15046 #, 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:15014 +#: commands/tablecmds.c:15057 #, 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:15049 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "tabla hija no tiene la restricción «%s»" -#: commands/tablecmds.c:15135 +#: commands/tablecmds.c:15178 #, 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:15164 commands/tablecmds.c:15212 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, 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:15218 +#: commands/tablecmds.c:15261 #, 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:15446 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "las tablas tipadas no pueden heredar" -#: commands/tablecmds.c:15476 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "la tabla no tiene la columna «%s»" -#: commands/tablecmds.c:15487 +#: commands/tablecmds.c:15530 #, 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:15496 +#: commands/tablecmds.c:15539 #, 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:15510 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "tabla tiene la columna extra «%s»" -#: commands/tablecmds.c:15562 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "«%s» no es una tabla tipada" -#: commands/tablecmds.c:15736 +#: commands/tablecmds.c:15779 #, 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:15742 +#: commands/tablecmds.c:15785 #, 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:15748 +#: commands/tablecmds.c:15791 #, 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:15754 +#: commands/tablecmds.c:15797 #, 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:15771 +#: commands/tablecmds.c:15814 #, 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:15778 +#: commands/tablecmds.c:15821 #, 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:16025 +#: commands/tablecmds.c:16068 #, 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:16049 +#: commands/tablecmds.c:16092 #, 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:16051 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Las tablas «unlogged» no pueden replicarse." -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16139 #, 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:16106 +#: commands/tablecmds.c:16149 #, 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:16164 +#: commands/tablecmds.c:16207 #, 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:16269 +#: commands/tablecmds.c:16312 #, 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:16844 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "«%s» no es un tipo compuesto" -#: commands/tablecmds.c:16876 +#: commands/tablecmds.c:16919 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "«%s» no es una tabla, vista, vista materializada, secuencia o tabla foránea" -#: commands/tablecmds.c:16911 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "estrategia de particionamiento «%s» no reconocida" -#: commands/tablecmds.c:16919 +#: commands/tablecmds.c:16962 #, 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:16985 +#: commands/tablecmds.c:17028 #, 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:16993 +#: commands/tablecmds.c:17036 #, 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:17004 commands/tablecmds.c:17094 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17126 #, 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:17077 +#: commands/tablecmds.c:17116 #, 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:17124 +#: commands/tablecmds.c:17177 #, 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:17133 +#: commands/tablecmds.c:17186 #, c-format msgid "cannot use constant expression as partition key" msgstr "no se pueden usar expresiones constantes como llave de particionamiento" -#: commands/tablecmds.c:17154 +#: commands/tablecmds.c:17207 #, 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:17189 +#: commands/tablecmds.c:17242 #, 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:17195 +#: commands/tablecmds.c:17248 #, 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:17447 +#: commands/tablecmds.c:17500 #, c-format msgid "\"%s\" is already a partition" msgstr "«%s» ya es una partición" -#: commands/tablecmds.c:17453 +#: commands/tablecmds.c:17506 #, c-format msgid "cannot attach a typed table as partition" msgstr "no puede adjuntar tabla tipada como partición" -#: commands/tablecmds.c:17469 +#: commands/tablecmds.c:17522 #, c-format msgid "cannot attach inheritance child as partition" msgstr "no puede adjuntar hija de herencia como partición" -#: commands/tablecmds.c:17483 +#: commands/tablecmds.c:17536 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "no puede adjuntar ancestro de herencia como partición" -#: commands/tablecmds.c:17517 +#: commands/tablecmds.c:17570 #, 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:17525 +#: commands/tablecmds.c:17578 #, 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:17533 +#: commands/tablecmds.c:17586 #, 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:17540 +#: commands/tablecmds.c:17593 #, 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:17560 +#: commands/tablecmds.c:17613 #, 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:17563 +#: commands/tablecmds.c:17616 #, 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:17575 +#: commands/tablecmds.c:17628 #, 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:17577 commands/trigger.c:459 +#: commands/tablecmds.c:17630 commands/trigger.c:459 #, 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:17756 +#: commands/tablecmds.c:17809 #, 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:17759 +#: commands/tablecmds.c:17812 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La tabla particionada «%s» contiene índices únicos." -#: commands/tablecmds.c:18083 +#: commands/tablecmds.c:18137 #, 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:18192 +#: commands/tablecmds.c:18249 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "la tabla particionada «%s» fue eliminada concurrentemente" -#: commands/tablecmds.c:18198 +#: commands/tablecmds.c:18255 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "la partición «%s» fue eliminada concurrentemente" -#: commands/tablecmds.c:18722 commands/tablecmds.c:18742 -#: commands/tablecmds.c:18762 commands/tablecmds.c:18781 -#: commands/tablecmds.c:18823 +#: commands/tablecmds.c:18787 commands/tablecmds.c:18807 +#: commands/tablecmds.c:18827 commands/tablecmds.c:18846 +#: commands/tablecmds.c:18888 #, 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:18725 +#: commands/tablecmds.c:18790 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "El índice «%s» ya está adjunto a otro índice." -#: commands/tablecmds.c:18745 +#: commands/tablecmds.c:18810 #, 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:18765 +#: commands/tablecmds.c:18830 #, c-format msgid "The index definitions do not match." msgstr "Las definiciones de los índices no coinciden." -#: commands/tablecmds.c:18784 +#: commands/tablecmds.c:18849 #, 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:18826 +#: commands/tablecmds.c:18891 #, 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:19063 +#: commands/tablecmds.c:19128 #, 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:19070 +#: commands/tablecmds.c:19135 #, c-format msgid "invalid compression method \"%s\"" msgstr "método de compresión «%s» no válido" #: commands/tablespace.c:161 commands/tablespace.c:177 -#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1478 +#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1538 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" @@ -10751,8 +10775,8 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "el directorio «%s» ya está siendo usado como tablespace" #: commands/tablespace.c:768 commands/tablespace.c:781 -#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3169 -#: storage/file/fd.c:3560 +#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 +#: storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "no se pudo eliminar el directorio «%s»: %m" @@ -10983,59 +11007,64 @@ msgstr "no existe el trigger «%s» para la tabla «%s»" msgid "permission denied: \"%s\" is a system trigger" msgstr "permiso denegado: «%s» es un trigger de sistema" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "la función de trigger %u ha retornado un valor null" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 -#: commands/trigger.c:3056 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 +#: commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "un trigger BEFORE STATEMENT no puede retornar un valor" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, 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:2356 +#: commands/trigger.c:2358 #, 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:3123 executor/nodeModifyTable.c:1314 -#: executor/nodeModifyTable.c:1388 executor/nodeModifyTable.c:1969 -#: executor/nodeModifyTable.c:2059 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 +#, c-format +msgid "cannot collect transition tuples from child foreign tables" +msgstr "no se puede recolectar tuplas de transición desde tablas foráneas hijas" + +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 +#: executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 +#: executor/nodeModifyTable.c:2079 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considere usar un disparador AFTER en lugar de un disparador BEFORE para propagar cambios a otros registros." -#: commands/trigger.c:3152 executor/nodeLockRows.c:229 -#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:238 -#: executor/nodeModifyTable.c:1330 executor/nodeModifyTable.c:1986 -#: executor/nodeModifyTable.c:2232 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 +#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 +#: executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 +#: executor/nodeModifyTable.c:2252 #, 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:3160 executor/nodeModifyTable.c:1420 -#: executor/nodeModifyTable.c:2076 executor/nodeModifyTable.c:2256 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 +#: executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2268 #, 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:4254 +#: commands/trigger.c:4284 #, 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" -#: commands/trigger.c:5306 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la restricción «%s» no es postergable" -#: commands/trigger.c:5329 +#: commands/trigger.c:5359 #, c-format msgid "constraint \"%s\" does not exist" msgstr "no existe la restricción «%s»" @@ -11502,7 +11531,7 @@ msgid "permission denied to create role" msgstr "se ha denegado el permiso para crear el rol" #: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 -#: utils/adt/acl.c:5248 utils/adt/acl.c:5254 gram.y:15260 gram.y:15305 +#: utils/adt/acl.c:5265 utils/adt/acl.c:5271 gram.y:15260 gram.y:15305 #, c-format msgid "role name \"%s\" is reserved" msgstr "el nombre de rol «%s» está reservado" @@ -11573,8 +11602,8 @@ msgstr "no se puede usar un especificador especial de rol en DROP ROLE" #: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 #: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 -#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:755 +#: utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 +#: utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "no existe el rol «%s»" @@ -11679,107 +11708,107 @@ msgstr "el rol «%s» ya es un miembro del rol «%s»" msgid "role \"%s\" is not a member of role \"%s\"" msgstr "el rol «%s» no es un miembro del rol «%s»" -#: commands/vacuum.c:133 +#: commands/vacuum.c:134 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "opción de ANALYZE «%s» no reconocida" -#: commands/vacuum.c:171 +#: commands/vacuum.c:172 #, 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:183 +#: commands/vacuum.c:184 #, 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:200 +#: commands/vacuum.c:201 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "opción de VACUUM «%s» no reconocida" -#: commands/vacuum.c:223 +#: commands/vacuum.c:224 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL no puede ser ejecutado en paralelo" -#: commands/vacuum.c:239 +#: commands/vacuum.c:240 #, 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:329 +#: commands/vacuum.c:330 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s no puede ejecutarse desde VACUUM o ANALYZE" -#: commands/vacuum.c:339 +#: commands/vacuum.c:340 #, 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:346 +#: commands/vacuum.c:347 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "se requiere especificar PROCESS_TOAST al hacer VACUUM FULL" -#: commands/vacuum.c:587 +#: commands/vacuum.c:597 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "omitiendo «%s»: sólo un superusuario puede aplicarle VACUUM" -#: commands/vacuum.c:591 +#: commands/vacuum.c:601 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "omitiendo «%s»: sólo un superusuario o el dueño de la base de datos puede aplicarle VACUUM" -#: commands/vacuum.c:595 +#: commands/vacuum.c:605 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "omitiendo «%s»: sólo su dueño o el de la base de datos puede aplicarle VACUUM" -#: commands/vacuum.c:610 +#: commands/vacuum.c:620 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "omitiendo «%s»: sólo un superusuario puede analizarla" -#: commands/vacuum.c:614 +#: commands/vacuum.c:624 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "omitiendo «%s»: sólo un superusuario o el dueño de la base de datos puede analizarla" -#: commands/vacuum.c:618 +#: commands/vacuum.c:628 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "omitiendo «%s»: sólo su dueño o el de la base de datos puede analizarla" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:707 commands/vacuum.c:803 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "omitiendo el vacuum de «%s»: el candado no está disponible" -#: commands/vacuum.c:702 +#: commands/vacuum.c:712 #, 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:718 commands/vacuum.c:798 +#: commands/vacuum.c:728 commands/vacuum.c:808 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "omitiendo analyze de «%s»: el candado no está disponible" -#: commands/vacuum.c:723 +#: commands/vacuum.c:733 #, 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:1041 +#: commands/vacuum.c:1051 #, c-format msgid "oldest xmin is far in the past" msgstr "xmin más antiguo es demasiado antiguo" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1052 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11788,32 +11817,32 @@ msgstr "" "Cierre transaciones abiertas pronto para impedir problemas por reciclaje de contadores.\n" "Puede que además necesite comprometer o abortar transacciones preparadas antiguas, o eliminar slots de replicación añejos." -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1093 #, c-format msgid "oldest multixact is far in the past" msgstr "multixact más antiguo es demasiado antiguo" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1094 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Cierre transacciones con multixact pronto para prevenir problemas por reciclaje del contador." -#: commands/vacuum.c:1769 +#: commands/vacuum.c:1779 #, 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:1770 +#: commands/vacuum.c:1780 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Puede haber sufrido ya problemas de pérdida de datos por reciclaje del contador de transacciones." -#: commands/vacuum.c:1938 +#: commands/vacuum.c:1961 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "omitiendo «%s»: no se puede aplicar VACUUM a objetos que no son tablas o a tablas especiales de sistema" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 #: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." @@ -12023,8 +12052,8 @@ msgstr "no se encontró un valor para parámetro %d" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 #: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 #: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 -#: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 -#: executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, 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" @@ -12034,18 +12063,18 @@ msgstr "el tipo de registro de la tabla no coincide con el tipo de registro de l msgid "Query has too many columns." msgstr "La consulta tiene demasiadas columnas." -#: executor/execExpr.c:644 executor/nodeModifyTable.c:156 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, 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:650 executor/execExprInterp.c:4063 -#: executor/nodeModifyTable.c:139 +#: executor/nodeModifyTable.c:174 #, 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:1098 parser/parse_agg.c:828 +#: executor/execExpr.c:1098 parser/parse_agg.c:881 #, c-format msgid "window function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de ventana deslizante" @@ -12120,7 +12149,7 @@ msgstr "El array con tipo de elemento %s no puede ser incluido en una sentencia #: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 #: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 -#: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 +#: utils/adt/arrayfuncs.c:5944 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" @@ -12137,8 +12166,8 @@ msgstr "los arrays multidimensionales deben tener expresiones de arrays con dime #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 #: utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 #: utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 -#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 -#: utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 +#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6036 +#: utils/adt/arrayfuncs.c:6377 utils/adt/arrayutils.c:88 #: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" @@ -12206,165 +12235,165 @@ msgstr "La llave %s está en conflicto con la llave existente %s." msgid "Key conflicts with existing key." msgstr "La llave está en conflicto con una llave existente." -#: executor/execMain.c:1006 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "no se puede cambiar la secuencia «%s»" -#: executor/execMain.c:1012 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "no se puede cambiar la relación TOAST «%s»" -#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 -#: rewrite/rewriteHandler.c:3986 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3148 +#: rewrite/rewriteHandler.c:4010 #, c-format msgid "cannot insert into view \"%s\"" msgstr "no se puede insertar en la vista «%s»" -#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 -#: rewrite/rewriteHandler.c:3989 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3151 +#: rewrite/rewriteHandler.c:4013 #, 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:1038 rewrite/rewriteHandler.c:3149 -#: rewrite/rewriteHandler.c:3994 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3156 +#: rewrite/rewriteHandler.c:4018 #, c-format msgid "cannot update view \"%s\"" msgstr "no se puede actualizar la vista «%s»" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 -#: rewrite/rewriteHandler.c:3997 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:4021 #, 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:1046 rewrite/rewriteHandler.c:3157 -#: rewrite/rewriteHandler.c:4002 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3164 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "cannot delete from view \"%s\"" msgstr "no se puede eliminar de la vista «%s»" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 -#: rewrite/rewriteHandler.c:4005 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3167 +#: rewrite/rewriteHandler.c:4029 #, 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:1059 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "no se puede cambiar la vista materializada «%s»" -#: executor/execMain.c:1071 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "no se puede insertar en la tabla foránea «%s»" -#: executor/execMain.c:1077 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la tabla foránea «%s» no permite inserciones" -#: executor/execMain.c:1084 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "no se puede actualizar la tabla foránea «%s»" -#: executor/execMain.c:1090 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la tabla foránea «%s» no permite actualizaciones" -#: executor/execMain.c:1097 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "no se puede eliminar desde la tabla foránea «%s»" -#: executor/execMain.c:1103 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la tabla foránea «%s» no permite eliminaciones" -#: executor/execMain.c:1114 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "no se puede cambiar la relación «%s»" -#: executor/execMain.c:1141 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "no se puede bloquear registros de la secuencia «%s»" -#: executor/execMain.c:1148 +#: executor/execMain.c:1168 #, 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:1155 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "no se puede bloquear registros en la vista «%s»" -#: executor/execMain.c:1163 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "no se puede bloquear registros en la vista materializada «%s»" -#: executor/execMain.c:1172 executor/execMain.c:2593 +#: executor/execMain.c:1192 executor/execMain.c:2613 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "no se puede bloquear registros en la tabla foránea «%s»" -#: executor/execMain.c:1178 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "no se puede bloquear registros en la tabla «%s»" -#: executor/execMain.c:1807 +#: executor/execMain.c:1827 #, 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:1809 executor/execMain.c:1892 executor/execMain.c:1942 -#: executor/execMain.c:2051 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 +#: executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "La fila que falla contiene %s." -#: executor/execMain.c:1889 +#: executor/execMain.c:1909 #, 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:1940 +#: executor/execMain.c:1960 #, 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:2049 +#: executor/execMain.c:2069 #, 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:2059 +#: executor/execMain.c:2079 #, 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:2064 +#: executor/execMain.c:2084 #, 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:2071 +#: executor/execMain.c:2091 #, 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:2076 +#: executor/execMain.c:2096 #, 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»" @@ -12394,10 +12423,10 @@ msgstr "actualización simultánea, reintentando" msgid "concurrent delete, retrying" msgstr "eliminacón concurrente, reintentando" -#: executor/execReplication.c:277 parser/parse_cte.c:301 +#: executor/execReplication.c:277 parser/parse_cte.c:302 #: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 #: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 -#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6255 +#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6257 #: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" @@ -12580,7 +12609,7 @@ msgstr "el tipo de retorno %s no es soportado en funciones SQL" msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "EOF inesperado para la cinta %d: se requerían %zu bytes, se leyeron %zu bytes" -#: executor/nodeAgg.c:3979 parser/parse_agg.c:670 parser/parse_agg.c:698 +#: executor/nodeAgg.c:3979 parser/parse_agg.c:677 parser/parse_agg.c:720 #, c-format msgid "aggregate function calls cannot be nested" msgstr "no se pueden anidar llamadas a funciones de agregación" @@ -12632,30 +12661,35 @@ msgstr "FULL JOIN sólo está soportado con condiciones que se pueden usar con m #: executor/nodeModifyTable.c:164 #, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "La consulta entrega un valor para una columna generada en la posición %d." + +#: executor/nodeModifyTable.c:184 +#, c-format msgid "Query has too few columns." msgstr "La consulta tiene muy pocas columnas." -#: executor/nodeModifyTable.c:1313 executor/nodeModifyTable.c:1387 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, 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:1591 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "especificación ON UPDATE no válida" -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:1612 #, 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:2211 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la orden ON CONFLICT DO UPDATE no puede afectar el registro una segunda vez" -#: executor/nodeModifyTable.c:2212 +#: executor/nodeModifyTable.c:2232 #, 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." @@ -12670,8 +12704,8 @@ msgstr "el parámetro TABLESAMPLE no puede ser null" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "el parámetro TABLESAMPLE REPEATABLE no puede ser null" -#: executor/nodeSubplan.c:325 executor/nodeSubplan.c:351 -#: executor/nodeSubplan.c:405 executor/nodeSubplan.c:1174 +#: executor/nodeSubplan.c:306 executor/nodeSubplan.c:332 +#: executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "una subconsulta utilizada como expresión retornó más de un registro" @@ -12777,7 +12811,7 @@ msgstr "no se puede abrir consulta %s como cursor" msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE no está soportado" -#: executor/spi.c:1730 parser/analyze.c:2864 +#: executor/spi.c:1730 parser/analyze.c:2865 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Los cursores declarados SCROLL deben ser READ ONLY." @@ -12818,7 +12852,7 @@ msgstr "no se pudo enviar la tupla a la cola en memoria compartida" msgid "user mapping not found for \"%s\"" msgstr "no se encontró un mapeo para el usuario «%s»" -#: foreign/foreign.c:331 optimizer/plan/createplan.c:7047 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 #: optimizer/util/plancat.c:474 #, c-format msgid "access to non-system foreign table is restricted" @@ -12995,565 +13029,565 @@ msgstr "Prueba (proof) mal formada en client-final-message." msgid "Garbage found at the end of client-final-message." msgstr "Basura encontrada al final de client-final-message." -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, 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:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "la autentificación «trust» falló para el usuario «%s»" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "la autentificación Ident falló para el usuario «%s»" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "la autentificación Peer falló para el usuario «%s»" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "la autentificación password falló para el usuario «%s»" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "la autentificación GSSAPI falló para el usuario «%s»" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "la autentificación SSPI falló para el usuario «%s»" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "la autentificación PAM falló para el usuario «%s»" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "la autentificación BSD falló para el usuario «%s»" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "la autentificación LDAP falló para el usuario «%s»" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "la autentificación por certificado falló para el usuario «%s»" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "la autentificación RADIUS falló para el usuario «%s»" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, 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:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "La conexión coincidió con la línea %d de pg_hba.conf: «%s»" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "identificador de autentificación establecido más de una vez" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "identificador anterior: «%s»; nuevo identificador: «%s»" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, 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:420 +#: libpq/auth.c:428 #, 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:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "la conexión requiere un certificado de cliente válido" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "cifrado GSS" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "cifrado SSL" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "sin cifrado" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, 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:480 +#: libpq/auth.c:488 #, 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:518 +#: libpq/auth.c:526 #, 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:521 +#: libpq/auth.c:529 #, 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:524 +#: libpq/auth.c:532 #, 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:527 +#: libpq/auth.c:535 #, 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:532 +#: libpq/auth.c:540 #, 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:540 +#: libpq/auth.c:548 #, 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:548 +#: libpq/auth.c:556 #, 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:721 +#: libpq/auth.c:729 #, 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:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "el tamaño del paquete de contraseña no es válido" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "el cliente retornó una contraseña vacía" -#: libpq/auth.c:885 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "la autentificación MD5 no está soportada cuando «db_user_namespace» está activo" -#: libpq/auth.c:891 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "no se pudo generar una sal MD5 aleatoria" -#: libpq/auth.c:957 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "se esperaba una respuesta SASL, se obtuvo mensaje de tipo %d" -#: libpq/auth.c:1086 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "no se pudo establecer el ambiente: %m" -#: libpq/auth.c:1122 +#: libpq/auth.c:1130 #, 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:1182 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "falló la aceptación del contexto de seguridad GSS" -#: libpq/auth.c:1223 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "falló la obtención del nombre de usuario GSS" -#: libpq/auth.c:1372 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "no se pudo obtener las credenciales SSPI" -#: libpq/auth.c:1397 +#: libpq/auth.c:1405 #, 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:1475 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "no se pudo aceptar un contexto SSPI" -#: libpq/auth.c:1537 +#: libpq/auth.c:1545 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:1676 libpq/auth.c:1695 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "no se pudo traducir el nombre" -#: libpq/auth.c:1708 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "nombre de «realm» demasiado largo" -#: libpq/auth.c:1723 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "nombre de cuenta traducido demasiado largo" -#: libpq/auth.c:1904 +#: libpq/auth.c:1912 #, 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:1919 +#: libpq/auth.c:1927 #, 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:1931 +#: libpq/auth.c:1939 #, 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:1953 +#: libpq/auth.c:1961 #, 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:1970 +#: libpq/auth.c:1978 #, 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:1980 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "respuesta del servidor Ident en formato no válido: «%s»" -#: libpq/auth.c:2033 +#: libpq/auth.c:2041 #, 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:2037 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "no se pudo recibir credenciales: %m" -#: libpq/auth.c:2049 +#: libpq/auth.c:2057 #, 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:2150 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "se ha recibido un error de la biblioteca PAM: %s" -#: libpq/auth.c:2161 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "conversación PAM no soportada: %d/«%s»" -#: libpq/auth.c:2221 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "no se pudo crear autenticador PAM: %s" -#: libpq/auth.c:2232 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) falló: %s" -#: libpq/auth.c:2264 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) falló: %s" -#: libpq/auth.c:2276 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) falló: %s" -#: libpq/auth.c:2289 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate falló: %s" -#: libpq/auth.c:2302 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt falló: %s" -#: libpq/auth.c:2313 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "no se pudo liberar autenticador PAM: %s" -#: libpq/auth.c:2393 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "no se pudo inicializar LDAP: código de error %d" -#: libpq/auth.c:2430 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "no se pudo extraer el nombre de dominio de ldapbasedn" -#: libpq/auth.c:2438 +#: libpq/auth.c:2446 #, 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:2440 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Defina un nombre de servidor LDAP explícitamente." -#: libpq/auth.c:2492 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "no se pudo inicializar LDAP: %s" -#: libpq/auth.c:2502 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps no está soportado con esta biblioteca LDAP" -#: libpq/auth.c:2510 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "no se pudo inicializar LDAP: %m" -#: libpq/auth.c:2520 +#: libpq/auth.c:2528 #, 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:2560 +#: libpq/auth.c:2568 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "no se pudo cargar la función _ldap_start_tls_sA en wldap32.dll" -#: libpq/auth.c:2561 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP sobre SSL no está soportado en esta plataforma." -#: libpq/auth.c:2577 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "no se pudo iniciar sesión de LDAP TLS: %s" -#: libpq/auth.c:2648 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "servidor LDAP no especificado, y no hay ldapbasedn" -#: libpq/auth.c:2655 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "servidor LDAP no especificado" -#: libpq/auth.c:2717 +#: libpq/auth.c:2725 #, 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:2734 +#: libpq/auth.c:2742 #, 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:2763 +#: libpq/auth.c:2771 #, 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:2777 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "no existe el usuario LDAP «%s»" -#: libpq/auth.c:2778 +#: libpq/auth.c:2786 #, 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:2782 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "el usuario LDAP «%s» no es única" -#: libpq/auth.c:2783 +#: libpq/auth.c:2791 #, 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:2803 +#: libpq/auth.c:2811 #, 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:2824 +#: libpq/auth.c:2832 #, 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:2855 +#: libpq/auth.c:2863 #, 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:2887 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "Diagnóstico LDAP: %s" -#: libpq/auth.c:2925 +#: libpq/auth.c:2933 #, 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:2946 +#: libpq/auth.c:2954 #, 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:2969 +#: libpq/auth.c:2977 #, 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:2974 +#: libpq/auth.c:2982 #, 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:3076 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "servidor RADIUS no especificado" -#: libpq/auth.c:3083 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "secreto RADIUS no especificado" -#: libpq/auth.c:3097 +#: libpq/auth.c:3105 #, 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:3204 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, 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:3218 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "no se pudo generar un vector aleatorio de encriptación" -#: libpq/auth.c:3252 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "no se pudo efectuar cifrado MD5 de la contraseña" -#: libpq/auth.c:3278 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "no se pudo crear el socket RADIUS: %m" -#: libpq/auth.c:3300 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "no se pudo enlazar el socket RADIUS local: %m" -#: libpq/auth.c:3310 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "no se pudo enviar el paquete RADIUS: %m" -#: libpq/auth.c:3343 libpq/auth.c:3369 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, 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:3362 +#: libpq/auth.c:3370 #, 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:3392 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "no se pudo leer la respuesta RADIUS: %m" -#: libpq/auth.c:3405 libpq/auth.c:3409 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, 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:3418 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "la respuesta RADIUS desde %s es demasiado corta: %d" -#: libpq/auth.c:3425 +#: libpq/auth.c:3433 #, 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:3433 +#: libpq/auth.c:3441 #, 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:3458 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "no se pudo realizar cifrado MD5 del paquete recibido" -#: libpq/auth.c:3467 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "la respuesta RADIUS desde %s tiene firma MD5 incorrecta" -#: libpq/auth.c:3485 +#: libpq/auth.c:3493 #, 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»" @@ -13658,44 +13692,39 @@ msgstr "el archivo de la llave privada «%s» tiene acceso para el grupo u otros 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:201 +#: libpq/be-secure-gssapi.c:208 msgid "GSSAPI wrap error" msgstr "error de «wrap» de GSSAPI" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "mensaje saliente GSSAPI no proveería confidencialidad" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "el servidor intentó enviar un paquete GSSAPI demasiado grande (%zu > %zu)" -#: libpq/be-secure-gssapi.c:351 +#: libpq/be-secure-gssapi.c:358 libpq/be-secure-gssapi.c:580 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "paquete GSSAPI demasiado grande enviado por el cliente (%zu > %zu)" -#: libpq/be-secure-gssapi.c:389 +#: libpq/be-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "error de «unwrap» de GSSAPI" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "mensaje GSSAPI entrante no usó confidencialidad" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "paquete GSSAPI demasiado grande enviado por el cliente (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "no se pudo aceptar un contexto de seguridad GSSAPI" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "error de verificación de tamaño GSSAPI" @@ -14446,7 +14475,7 @@ msgstr "no hay conexión de cliente" msgid "could not receive data from client: %m" msgstr "no se pudo recibir datos del cliente: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "terminando la conexión por pérdida de sincronía del protocolo" @@ -14814,14 +14843,14 @@ msgstr "el tipo de nodo extensible «%s» ya existe" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods «%s» no fue registrado" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "la relación «%s» no tiene un tipo compuesto" #: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 #: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 -#: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 +#: parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" @@ -14849,49 +14878,49 @@ 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:1316 parser/analyze.c:1720 parser/analyze.c:1976 -#: parser/analyze.c:3155 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 +#: parser/analyze.c:3156 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s no está permitido con UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "no se pudo implementar GROUP BY" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 -#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 +#: optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Algunos de los tipos sólo soportan hashing, mientras que otros sólo soportan ordenamiento." -#: optimizer/plan/planner.c:4387 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "no se pudo implementar DISTINCT" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "No se pudo implementar PARTITION BY de ventana" -#: optimizer/plan/planner.c:5236 +#: optimizer/plan/planner.c:5266 #, 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:5240 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "no se pudo implementar ORDER BY de ventana" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Las columnas de ordenamiento de ventana debe ser de tipos que se puedan ordenar." -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "demasiadas «range table entries»" @@ -14927,22 +14956,22 @@ msgstr "no se puede abrir la relación «%s»" 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:702 +#: optimizer/util/plancat.c:707 #, 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:719 +#: optimizer/util/plancat.c:724 #, 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:769 +#: optimizer/util/plancat.c:774 #, 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:879 +#: optimizer/util/plancat.c:884 #, 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" @@ -14973,7 +15002,7 @@ 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:1623 parser/analyze.c:3366 +#: parser/analyze.c:1623 parser/analyze.c:3367 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s no puede ser aplicado a VALUES" @@ -15026,455 +15055,465 @@ 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:2814 parser/analyze.c:2822 +#: parser/analyze.c:2815 parser/analyze.c:2823 #, c-format msgid "cannot specify both %s and %s" msgstr "no se puede especificar %s junto con %s" -#: parser/analyze.c:2842 +#: parser/analyze.c:2843 #, 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:2850 +#: parser/analyze.c:2851 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s no está soportado" -#: parser/analyze.c:2853 +#: parser/analyze.c:2854 #, 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:2861 +#: parser/analyze.c:2862 #, 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:2872 +#: parser/analyze.c:2873 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s no es válido" -#: parser/analyze.c:2875 +#: parser/analyze.c:2876 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Los cursores insensitivos deben ser READ ONLY." -#: parser/analyze.c:2941 +#: parser/analyze.c:2942 #, 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:2951 +#: parser/analyze.c:2952 #, 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:2961 +#: parser/analyze.c:2962 #, 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:2973 +#: parser/analyze.c:2974 #, 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:3162 +#: parser/analyze.c:3163 #, 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:3169 +#: parser/analyze.c:3170 #, 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:3176 +#: parser/analyze.c:3177 #, 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:3183 +#: parser/analyze.c:3184 #, 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:3190 +#: parser/analyze.c:3191 #, 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:3197 +#: parser/analyze.c:3198 #, 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:3289 +#: parser/analyze.c:3290 #, 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:3339 +#: parser/analyze.c:3340 #, 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:3348 +#: parser/analyze.c:3349 #, 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:3357 +#: parser/analyze.c:3358 #, 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:3375 +#: parser/analyze.c:3376 #, 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:3384 +#: parser/analyze.c:3385 #, 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:3404 +#: parser/analyze.c:3405 #, 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:208 parser/parse_oper.c:227 +#: parser/parse_agg.c:211 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "no se pudo identificar un operador de ordenamiento para el tipo %s" -#: parser/parse_agg.c:210 +#: parser/parse_agg.c:213 #, 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:268 +#: parser/parse_agg.c:271 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING debe tener menos de 32 argumentos" -#: parser/parse_agg.c:371 +#: parser/parse_agg.c:375 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:373 +#: parser/parse_agg.c:377 msgid "grouping operations are not allowed in JOIN conditions" msgstr "no se permiten las operaciones «grouping» en condiciones JOIN" -#: parser/parse_agg.c:383 +#: parser/parse_agg.c:387 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:385 +#: parser/parse_agg.c:389 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:390 +#: parser/parse_agg.c:394 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:392 +#: parser/parse_agg.c:396 msgid "grouping operations are not allowed in functions in FROM" msgstr "no se permiten operaciones «grouping» en funciones en FROM" -#: parser/parse_agg.c:400 +#: parser/parse_agg.c:404 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:402 +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in policy expressions" msgstr "no se permiten operaciones «grouping» en expresiones de políticas" -#: parser/parse_agg.c:419 +#: parser/parse_agg.c:423 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:421 +#: parser/parse_agg.c:425 msgid "grouping operations are not allowed in window RANGE" msgstr "no se permiten operaciones «grouping» en RANGE de ventana deslizante" -#: parser/parse_agg.c:426 +#: parser/parse_agg.c:430 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:428 +#: parser/parse_agg.c:432 msgid "grouping operations are not allowed in window ROWS" msgstr "no se permiten operaciones «grouping» en ROWS de ventana deslizante" -#: parser/parse_agg.c:433 +#: parser/parse_agg.c:437 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:435 +#: parser/parse_agg.c:439 msgid "grouping operations are not allowed in window GROUPS" msgstr "no se permiten operaciones «grouping» en GROUPS de ventana deslizante" -#: parser/parse_agg.c:469 +#: parser/parse_agg.c:473 msgid "aggregate functions are not allowed in check constraints" msgstr "no se permiten funciones de agregación en restricciones «check»" -#: parser/parse_agg.c:471 +#: parser/parse_agg.c:475 msgid "grouping operations are not allowed in check constraints" msgstr "no se permiten operaciones «grouping» en restricciones «check»" -#: parser/parse_agg.c:478 +#: parser/parse_agg.c:482 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de agregación en expresiones DEFAULT" -#: parser/parse_agg.c:480 +#: parser/parse_agg.c:484 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "no se permiten operaciones «grouping» en expresiones DEFAULT" -#: parser/parse_agg.c:485 +#: parser/parse_agg.c:489 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:487 +#: parser/parse_agg.c:491 msgid "grouping operations are not allowed in index expressions" msgstr "no se permiten operaciones «grouping» en expresiones de índice" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:496 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:494 +#: parser/parse_agg.c:498 msgid "grouping operations are not allowed in index predicates" msgstr "no se permiten operaciones «grouping» en predicados de índice" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:503 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:501 +#: parser/parse_agg.c:505 msgid "grouping operations are not allowed in statistics expressions" msgstr "no se permiten operaciones «grouping» en expresiones de estadísticas" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:510 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:508 +#: parser/parse_agg.c:512 msgid "grouping operations are not allowed in transform expressions" msgstr "no se permiten operaciones «grouping» en expresiones de transformación" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:517 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:515 +#: parser/parse_agg.c:519 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "no se permiten operaciones «grouping» en parámetros a EXECUTE" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:524 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones de agregación en condición WHEN de un disparador" -#: parser/parse_agg.c:522 +#: parser/parse_agg.c:526 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "no se permiten operaciones «grouping» en condiciones WHEN de un disparador" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:531 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:529 +#: parser/parse_agg.c:533 msgid "grouping operations are not allowed in partition bound" msgstr "no se permiten operaciones «grouping» en borde de partición" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:538 msgid "aggregate functions are not allowed in partition key expressions" msgstr "no se permiten funciones de agregación en una expresión de llave de particionaiento" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:540 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:542 +#: parser/parse_agg.c:546 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:544 +#: parser/parse_agg.c:548 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:550 +#: parser/parse_agg.c:554 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:552 +#: parser/parse_agg.c:556 msgid "grouping operations are not allowed in CALL arguments" msgstr "no se permiten operaciones «grouping» en argumentos de CALL" -#: parser/parse_agg.c:558 +#: parser/parse_agg.c:562 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:560 +#: parser/parse_agg.c:564 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:587 parser/parse_clause.c:1834 +#: parser/parse_agg.c:591 parser/parse_clause.c:1834 #, 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:590 +#: parser/parse_agg.c:594 #, c-format msgid "grouping operations are not allowed in %s" msgstr "no se permiten operaciones «grouping» en %s" -#: parser/parse_agg.c:691 +#: parser/parse_agg.c:690 parser/parse_agg.c:727 +#, c-format +msgid "outer-level aggregate cannot use a nested CTE" +msgstr "una función de agregación de nivel externo no puede usar un CTE anidado" + +#: parser/parse_agg.c:691 parser/parse_agg.c:728 +#, c-format +msgid "CTE \"%s\" is below the aggregate's semantic level." +msgstr "El CTE «%s» está debajo del nivel semántico de la función de agregación." + +#: parser/parse_agg.c:713 #, 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:769 +#: parser/parse_agg.c:798 #, 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:770 parser/parse_expr.c:1678 parser/parse_expr.c:2159 +#: parser/parse_agg.c:799 parser/parse_expr.c:1678 parser/parse_expr.c:2167 #: parser/parse_func.c:883 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Puede intentar mover la función que retorna conjuntos a un elemento LATERAL FROM." -#: parser/parse_agg.c:775 +#: parser/parse_agg.c:804 #, 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:854 +#: parser/parse_agg.c:907 msgid "window functions are not allowed in JOIN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones JOIN" -#: parser/parse_agg.c:861 +#: parser/parse_agg.c:914 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:867 +#: parser/parse_agg.c:920 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:880 +#: parser/parse_agg.c:933 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:912 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in check constraints" msgstr "no se permiten funciones de ventana deslizante en restricciones «check»" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in DEFAULT expressions" msgstr "no se permiten funciones de ventana deslizante en expresiones DEFAULT" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:972 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:922 +#: parser/parse_agg.c:975 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:925 +#: parser/parse_agg.c:978 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:928 +#: parser/parse_agg.c:981 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:931 +#: parser/parse_agg.c:984 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:934 +#: parser/parse_agg.c:987 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "no se permiten funciones de ventana deslizante en condiciones WHEN de un disparador" -#: parser/parse_agg.c:937 +#: parser/parse_agg.c:990 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:940 +#: parser/parse_agg.c:993 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:943 +#: parser/parse_agg.c:996 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:946 +#: parser/parse_agg.c:999 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:949 +#: parser/parse_agg.c:1002 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:972 parser/parse_clause.c:1843 +#: parser/parse_agg.c:1025 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "no se permiten funciones de ventana deslizante en %s" -#: parser/parse_agg.c:1006 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1059 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "la ventana «%s» no existe" -#: parser/parse_agg.c:1090 +#: parser/parse_agg.c:1143 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "demasiados conjuntos «grouping» presentes (máximo 4096)" -#: parser/parse_agg.c:1230 +#: parser/parse_agg.c:1283 #, 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:1423 +#: parser/parse_agg.c:1476 #, 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:1426 +#: parser/parse_agg.c:1479 #, 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:1431 +#: parser/parse_agg.c:1484 #, 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:1595 +#: parser/parse_agg.c:1648 #, 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" @@ -15752,7 +15791,7 @@ 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:2060 parser/parse_expr.c:2662 parser/parse_target.c:1008 +#: parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "no se puede convertir el tipo %s a %s" @@ -15947,147 +15986,147 @@ 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:136 +#: parser/parse_cte.c:137 #, 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:307 +#: 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:334 +#: 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:383 +#: 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:389 +#: 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:394 +#: 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:398 +#: 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:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "la consulta WITH no es recursiva" -#: parser/parse_cte.c:450 +#: 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:455 +#: 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:470 +#: 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:477 +#: 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:486 +#: 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:503 +#: 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:510 +#: 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:519 +#: 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:526 +#: 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:534 +#: 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:544 +#: 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:551 +#: 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:635 +#: 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:815 +#: parser/parse_cte.c:868 #, 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:867 +#: parser/parse_cte.c:920 #, 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:875 +#: parser/parse_cte.c:928 #, 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:910 +#: parser/parse_cte.c:963 #, 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:916 +#: parser/parse_cte.c:969 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET no está implementado en una consulta recursiva" -#: parser/parse_cte.c:922 +#: parser/parse_cte.c:975 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT no está implementado en una consulta recursiva" -#: parser/parse_cte.c:928 +#: parser/parse_cte.c:981 #, 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:1007 +#: parser/parse_cte.c:1060 #, 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" @@ -16149,7 +16188,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF requiere que el operador = retorne boolean" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%s no debe retornar un conjunto" @@ -16165,7 +16204,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "el origen para un UPDATE de varias columnas debe ser una expresión sub-SELECT o ROW ()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "no se permiten funciones que retornan conjuntos en %s" @@ -16237,82 +16276,82 @@ msgstr "la subconsulta tiene demasiadas columnas" msgid "subquery has too few columns" msgstr "la subconsulta tiene muy pocas columnas" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, 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:2001 +#: parser/parse_expr.c:2009 #, 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:2015 +#: parser/parse_expr.c:2023 #, 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:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "las expresiones ROW pueden tener a lo más %d entradas" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, 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:2304 +#: parser/parse_expr.c:2312 #, 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:2319 +#: parser/parse_expr.c:2327 #, 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:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "no se puede convertir el resultado de XMLSERIALIZE a %s" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "número desigual de entradas en expresiones de registro" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "no se pueden comparar registros de largo cero" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, 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:2777 +#: parser/parse_expr.c:2785 #, 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:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, 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:2838 +#: parser/parse_expr.c:2846 #, 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:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Hay múltiples candidatos igualmente plausibles." -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiere que el operador = retorne boolean" @@ -17258,22 +17297,22 @@ msgstr "FROM debe especificar exactamente un valor por cada columna de particion 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:4240 +#: parser/parse_utilcmd.c:4242 #, c-format msgid "cannot specify NULL in range bound" msgstr "no se puede especificar NULL en borde de rango" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4290 #, 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:4296 +#: parser/parse_utilcmd.c:4297 #, 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:4339 +#: parser/parse_utilcmd.c:4340 #, 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»" @@ -17379,7 +17418,7 @@ msgid "column %d of the partition key has type \"%s\", but supplied value is of 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:678 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "no se pudo hacer stat al directorio de datos «%s»: %m" @@ -17451,17 +17490,17 @@ msgstr "el bloque de memoria compartida preexistente (clave %lu, ID %lu) aún es 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:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "no se pudo crear semáforos: %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, 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:129 +#: port/sysv_sema.c:144 #, 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" @@ -17471,7 +17510,7 @@ msgstr "" "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:159 +#: port/sysv_sema.c:174 #, 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." @@ -17611,27 +17650,27 @@ msgstr "no se pudo lanzar el proceso «autovacuum worker»: %m" msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: eliminando tabla temporal huérfana «%s.%s.%s»" -#: postmaster/autovacuum.c:2548 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "vacuum automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2551 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "análisis automático de la tabla «%s.%s.%s»" -#: postmaster/autovacuum.c:2744 +#: postmaster/autovacuum.c:2754 #, 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:3430 +#: postmaster/autovacuum.c:3440 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum no fue iniciado debido a un error de configuración" -#: postmaster/autovacuum.c:3431 +#: postmaster/autovacuum.c:3441 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Active la opción «track_counts»." @@ -17661,7 +17700,7 @@ msgstr "proceso ayudante «%s»: intervalo de reinicio no válido" 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:723 tcop/postgres.c:3229 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminando el proceso ayudante «%s» debido a una orden del administrador" @@ -17694,7 +17733,7 @@ msgstr[1] "Hasta %d procesos ayudantes pueden registrarse con la configuración msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considere incrementar el parámetro de configuración «max_worker_processes»." -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -17702,17 +17741,17 @@ msgstr[0] "los puntos de control están ocurriendo con demasiada frecuencia (cad msgstr[1] "los puntos de control están ocurriendo con demasiada frecuencia (cada %d segundos)" # FIXME a %s would be nice here -#: postmaster/checkpointer.c:432 +#: 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:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "falló la petición de punto de control" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, 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." @@ -17753,7 +17792,7 @@ msgstr "La orden fallida era: «%s»" msgid "archive command was terminated by exception 0x%X" msgstr "la orden de archivado fue terminada por una excepción 0x%X" -#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3761 #, 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." @@ -17945,103 +17984,103 @@ msgstr "el flujo de WAL (max_wal_senders > 0) requiere wal_level «replica» o 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:1052 +#: postmaster/postmaster.c:1054 #, 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:1128 +#: postmaster/postmaster.c:1130 #, c-format msgid "ending log output to stderr" msgstr "terminando la salida de registro a stderr" -#: postmaster/postmaster.c:1129 +#: postmaster/postmaster.c:1131 #, 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:1140 +#: postmaster/postmaster.c:1142 #, c-format msgid "starting %s" msgstr "iniciando %s" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 +#: postmaster/postmaster.c:1163 postmaster/postmaster.c:1262 #: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "la sintaxis de lista no es válida para el parámetro «%s»" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1194 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "no se pudo crear el socket de escucha para «%s»" -#: postmaster/postmaster.c:1198 +#: postmaster/postmaster.c:1200 #, c-format msgid "could not create any TCP/IP sockets" msgstr "no se pudo crear ningún socket TCP/IP" -#: postmaster/postmaster.c:1230 +#: postmaster/postmaster.c:1232 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() falló: código de error %ld" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1284 #, 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:1288 +#: postmaster/postmaster.c:1290 #, c-format msgid "could not create any Unix-domain sockets" msgstr "no se pudo crear ningún socket de dominio Unix" -#: postmaster/postmaster.c:1300 +#: postmaster/postmaster.c:1302 #, c-format msgid "no socket created for listening" msgstr "no se creó el socket de atención" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1333 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: no se pudo cambiar los permisos del archivo de PID externo «%s»: %s\n" -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1337 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: no pudo escribir en el archivo externo de PID «%s»: %s\n" -#: postmaster/postmaster.c:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1370 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "no se pudo cargar pg_hba.conf" -#: postmaster/postmaster.c:1396 +#: postmaster/postmaster.c:1398 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster se volvió multi-hilo durante la partida" -#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 +#: postmaster/postmaster.c:1399 postmaster/postmaster.c:5150 #, 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:1492 +#: postmaster/postmaster.c:1494 #, 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:1499 +#: postmaster/postmaster.c:1501 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: no se pudo localizar el ejecutable postgres correspondiente" -#: postmaster/postmaster.c:1522 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1524 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Esto puede indicar una instalación de PostgreSQL incompleta, o que el archivo «%s» ha sido movido de la ubicación adecuada." -#: postmaster/postmaster.c:1549 +#: postmaster/postmaster.c:1551 #, c-format msgid "" "%s: could not find the database system\n" @@ -18052,476 +18091,476 @@ msgstr "" "Se esperaba encontrar en el directorio PGDATA «%s»,\n" "pero no se pudo abrir el archivo «%s»: %s\n" -#: postmaster/postmaster.c:1726 +#: postmaster/postmaster.c:1728 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() falló en postmaster: %m" -#: postmaster/postmaster.c:1862 +#: postmaster/postmaster.c:1864 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "enviando SIGKILL a procesos hijos recalcitrantes" -#: postmaster/postmaster.c:1883 +#: postmaster/postmaster.c:1885 #, 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:1986 postmaster/postmaster.c:2014 +#: postmaster/postmaster.c:1988 postmaster/postmaster.c:2016 #, c-format msgid "incomplete startup packet" msgstr "el paquete de inicio está incompleto" -#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2000 postmaster/postmaster.c:2033 #, c-format msgid "invalid length of startup packet" msgstr "el de paquete de inicio tiene largo incorrecto" -#: postmaster/postmaster.c:2060 +#: postmaster/postmaster.c:2062 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación SSL: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "received unencrypted data after SSL request" msgstr "se recibieron datos no cifrados después de petición SSL" -#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2081 postmaster/postmaster.c:2125 #, 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." -#: postmaster/postmaster.c:2104 +#: postmaster/postmaster.c:2106 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "no se pudo enviar la respuesta de negociación GSSAPI: %m" -#: postmaster/postmaster.c:2122 +#: postmaster/postmaster.c:2124 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "se recibieron datos no cifrados después de petición de cifrado GSSAPI" -#: postmaster/postmaster.c:2146 +#: postmaster/postmaster.c:2148 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "el protocolo %u.%u no está soportado: servidor soporta %u.0 hasta %u.%u" -#: postmaster/postmaster.c:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: postmaster/postmaster.c:2212 utils/misc/guc.c:7138 utils/misc/guc.c:7174 #: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 #: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "valor no válido para el parámetro «%s»: «%s»" -#: postmaster/postmaster.c:2213 +#: postmaster/postmaster.c:2215 #, 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:2258 +#: postmaster/postmaster.c:2260 #, 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:2275 +#: postmaster/postmaster.c:2277 #, 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:2339 +#: postmaster/postmaster.c:2341 #, c-format msgid "the database system is starting up" msgstr "el sistema de base de datos está iniciándose" -#: postmaster/postmaster.c:2345 +#: postmaster/postmaster.c:2347 #, 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:2346 +#: postmaster/postmaster.c:2348 #, 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:2350 +#: postmaster/postmaster.c:2352 #, c-format msgid "the database system is not accepting connections" msgstr "el sistema de bases de datos no está aceptando conexiones" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2353 #, c-format msgid "Hot standby mode is disabled." msgstr "El modo hot standby está desactivado." -#: postmaster/postmaster.c:2356 +#: postmaster/postmaster.c:2358 #, c-format msgid "the database system is shutting down" msgstr "el sistema de base de datos está apagándose" -#: postmaster/postmaster.c:2361 +#: postmaster/postmaster.c:2363 #, 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:2366 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2368 storage/ipc/procarray.c:499 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "lo siento, ya tenemos demasiados clientes" -#: postmaster/postmaster.c:2456 +#: postmaster/postmaster.c:2458 #, 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:2468 +#: postmaster/postmaster.c:2470 #, 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:2721 +#: postmaster/postmaster.c:2723 #, 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:2747 postmaster/postmaster.c:2751 +#: postmaster/postmaster.c:2749 postmaster/postmaster.c:2753 #, c-format msgid "%s was not reloaded" msgstr "%s no fue vuelto a cargar" -#: postmaster/postmaster.c:2761 +#: postmaster/postmaster.c:2763 #, c-format msgid "SSL configuration was not reloaded" msgstr "la configuración SSL no fue vuelta a cargar" -#: postmaster/postmaster.c:2817 +#: postmaster/postmaster.c:2819 #, c-format msgid "received smart shutdown request" msgstr "se recibió petición de apagado inteligente" -#: postmaster/postmaster.c:2863 +#: postmaster/postmaster.c:2865 #, c-format msgid "received fast shutdown request" msgstr "se recibió petición de apagado rápido" -#: postmaster/postmaster.c:2881 +#: postmaster/postmaster.c:2883 #, c-format msgid "aborting any active transactions" msgstr "abortando transacciones activas" -#: postmaster/postmaster.c:2905 +#: postmaster/postmaster.c:2907 #, c-format msgid "received immediate shutdown request" msgstr "se recibió petición de apagado inmediato" -#: postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:2984 #, c-format msgid "shutdown at recovery target" msgstr "apagándose al alcanzar el destino de recuperación" -#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3002 postmaster/postmaster.c:3038 msgid "startup process" msgstr "proceso de inicio" -#: postmaster/postmaster.c:3003 +#: postmaster/postmaster.c:3005 #, 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:3078 +#: postmaster/postmaster.c:3080 #, 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:3099 +#: postmaster/postmaster.c:3101 msgid "background writer process" msgstr "proceso background writer" -#: postmaster/postmaster.c:3153 +#: postmaster/postmaster.c:3155 msgid "checkpointer process" msgstr "proceso checkpointer" -#: postmaster/postmaster.c:3169 +#: postmaster/postmaster.c:3171 msgid "WAL writer process" msgstr "proceso escritor de WAL" -#: postmaster/postmaster.c:3184 +#: postmaster/postmaster.c:3186 msgid "WAL receiver process" msgstr "proceso receptor de WAL" -#: postmaster/postmaster.c:3199 +#: postmaster/postmaster.c:3201 msgid "autovacuum launcher process" msgstr "proceso lanzador de autovacuum" -#: postmaster/postmaster.c:3217 +#: postmaster/postmaster.c:3219 msgid "archiver process" msgstr "proceso de archivado" -#: postmaster/postmaster.c:3232 +#: postmaster/postmaster.c:3234 msgid "statistics collector process" msgstr "recolector de estadísticas" -#: postmaster/postmaster.c:3246 +#: postmaster/postmaster.c:3248 msgid "system logger process" msgstr "proceso de log" -#: postmaster/postmaster.c:3310 +#: postmaster/postmaster.c:3312 #, c-format msgid "background worker \"%s\"" msgstr "proceso ayudante «%s»" -#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 -#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 +#: postmaster/postmaster.c:3396 postmaster/postmaster.c:3416 +#: postmaster/postmaster.c:3423 postmaster/postmaster.c:3441 msgid "server process" msgstr "proceso de servidor" -#: postmaster/postmaster.c:3493 +#: postmaster/postmaster.c:3495 #, 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:3746 +#: postmaster/postmaster.c:3748 #, 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:3748 postmaster/postmaster.c:3760 -#: postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 +#: postmaster/postmaster.c:3750 postmaster/postmaster.c:3762 +#: postmaster/postmaster.c:3772 postmaster/postmaster.c:3783 #, 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:3757 +#: postmaster/postmaster.c:3759 #, 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:3767 +#: postmaster/postmaster.c:3769 #, 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:3779 +#: postmaster/postmaster.c:3781 #, 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:3993 +#: postmaster/postmaster.c:3995 #, c-format msgid "abnormal database system shutdown" msgstr "apagado anormal del sistema de bases de datos" -#: postmaster/postmaster.c:4031 +#: postmaster/postmaster.c:4033 #, c-format msgid "shutting down due to startup process failure" msgstr "apagando debido a una falla en el procesamiento de inicio" -#: postmaster/postmaster.c:4037 +#: postmaster/postmaster.c:4039 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "apagando debido a que restart_after_crash está desactivado" -#: postmaster/postmaster.c:4049 +#: postmaster/postmaster.c:4051 #, c-format msgid "all server processes terminated; reinitializing" msgstr "todos los procesos fueron terminados; reinicializando" -#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 -#: postmaster/postmaster.c:5966 +#: postmaster/postmaster.c:4225 postmaster/postmaster.c:5577 +#: postmaster/postmaster.c:5968 #, c-format msgid "could not generate random cancel key" msgstr "no se pudo generar una llave de cancelación aleatoria" -#: postmaster/postmaster.c:4277 +#: postmaster/postmaster.c:4279 #, 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:4319 +#: postmaster/postmaster.c:4321 msgid "could not fork new process for connection: " msgstr "no se pudo lanzar el nuevo proceso para la conexión: " -#: postmaster/postmaster.c:4425 +#: postmaster/postmaster.c:4427 #, c-format msgid "connection received: host=%s port=%s" msgstr "conexión recibida: host=%s port=%s" -#: postmaster/postmaster.c:4430 +#: postmaster/postmaster.c:4432 #, c-format msgid "connection received: host=%s" msgstr "conexión recibida: host=%s" -#: postmaster/postmaster.c:4673 +#: postmaster/postmaster.c:4675 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "no se pudo lanzar el proceso servidor «%s»: %m" -#: postmaster/postmaster.c:4731 +#: postmaster/postmaster.c:4733 #, 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:4740 +#: postmaster/postmaster.c:4742 #, 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:4767 +#: postmaster/postmaster.c:4769 #, c-format msgid "subprocess command line too long" msgstr "orden de subproceso demasiado larga" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4787 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "llamada a CreateProcess() falló: %m (código de error %lu)" -#: postmaster/postmaster.c:4812 +#: postmaster/postmaster.c:4814 #, 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:4816 +#: postmaster/postmaster.c:4818 #, 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:4838 +#: postmaster/postmaster.c:4840 #, 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:4839 +#: postmaster/postmaster.c:4841 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Esto podría deberse a ASLR o un software antivirus." -#: postmaster/postmaster.c:5021 +#: postmaster/postmaster.c:5023 #, 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:5147 +#: postmaster/postmaster.c:5149 #, c-format msgid "postmaster became multithreaded" msgstr "postmaster se volvió multi-hilo" -#: postmaster/postmaster.c:5235 +#: postmaster/postmaster.c:5237 #, 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:5499 +#: postmaster/postmaster.c:5501 #, c-format msgid "could not fork startup process: %m" msgstr "no se pudo lanzar el proceso de inicio: %m" -#: postmaster/postmaster.c:5503 +#: postmaster/postmaster.c:5505 #, c-format msgid "could not fork archiver process: %m" msgstr "no se pudo lanzar el proceso de archivado: %m" -#: postmaster/postmaster.c:5507 +#: postmaster/postmaster.c:5509 #, c-format msgid "could not fork background writer process: %m" msgstr "no se pudo lanzar el background writer: %m" -#: postmaster/postmaster.c:5511 +#: postmaster/postmaster.c:5513 #, c-format msgid "could not fork checkpointer process: %m" msgstr "no se pudo lanzar el checkpointer: %m" -#: postmaster/postmaster.c:5515 +#: postmaster/postmaster.c:5517 #, c-format msgid "could not fork WAL writer process: %m" msgstr "no se pudo lanzar el proceso escritor de WAL: %m" -#: postmaster/postmaster.c:5519 +#: postmaster/postmaster.c:5521 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "no se pudo lanzar el proceso receptor de WAL: %m" -#: postmaster/postmaster.c:5523 +#: postmaster/postmaster.c:5525 #, c-format msgid "could not fork process: %m" msgstr "no se pudo lanzar el proceso: %m" -#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 +#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 #, 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:5731 postmaster/postmaster.c:5754 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "invalid processing mode in background worker" msgstr "modo de procesamiento no válido en proceso ayudante" -#: postmaster/postmaster.c:5839 +#: postmaster/postmaster.c:5841 #, c-format msgid "could not fork worker process: %m" msgstr "no se pudo lanzar el proceso ayudante: %m" -#: postmaster/postmaster.c:5952 +#: postmaster/postmaster.c:5954 #, c-format msgid "no slot available for new worker process" msgstr "no hay slot disponible para un nuevo proceso ayudante" -#: postmaster/postmaster.c:6286 +#: postmaster/postmaster.c:6288 #, 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:6318 +#: postmaster/postmaster.c:6320 #, 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:6347 +#: postmaster/postmaster.c:6349 #, 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:6354 +#: postmaster/postmaster.c:6356 #, 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:6363 +#: postmaster/postmaster.c:6365 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "no se pudo eliminar el archivo «%s»: %s\n" -#: postmaster/postmaster.c:6380 +#: postmaster/postmaster.c:6382 #, 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:6389 +#: postmaster/postmaster.c:6391 #, 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:6396 +#: postmaster/postmaster.c:6398 #, 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:6558 +#: postmaster/postmaster.c:6560 #, c-format msgid "could not read exit code for process\n" msgstr "no se pudo leer el código de salida del proceso\n" -#: postmaster/postmaster.c:6600 +#: postmaster/postmaster.c:6602 #, c-format msgid "could not post child completion status\n" msgstr "no se pudo publicar el estado de completitud del proceso hijo\n" @@ -18774,7 +18813,7 @@ 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:570 -#: replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "resultado inesperado después de CommandComplete: %s" @@ -18789,43 +18828,43 @@ msgstr "no se pudo recibir el archivo de historia de timeline del servidor prima 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:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:824 -#: replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 +#: replication/libpqwalreceiver/libpqwalreceiver.c:821 +#: replication/libpqwalreceiver/libpqwalreceiver.c:828 #, 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:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, 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:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "no se pudo create el slot de replicación «%s»: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "respuesta no válida a consulta" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Se esperaban %d campos, se obtuvieron %d campos." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, 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:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "consulta vacía" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "modo pipeline inesperado" @@ -18880,12 +18919,12 @@ msgstr "decodificación lógica requiere una conexión a una base de datos" msgid "logical decoding cannot be used while in recovery" msgstr "la decodificación lógica no puede ejecutarse durante la recuperación" -#: replication/logical/logical.c:350 replication/logical/logical.c:502 +#: replication/logical/logical.c:350 replication/logical/logical.c:504 #, 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:355 replication/logical/logical.c:507 +#: replication/logical/logical.c:355 replication/logical/logical.c:509 #, 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" @@ -18895,41 +18934,41 @@ msgstr "el slot de replicación «%s» no fue creado en esta base de datos" 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:552 +#: replication/logical/logical.c:554 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "iniciando la decodificación lógica para el slot «%s»" -#: replication/logical/logical.c:554 +#: replication/logical/logical.c:556 #, 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:699 +#: replication/logical/logical.c:701 #, 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:705 +#: replication/logical/logical.c:707 #, 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:876 replication/logical/logical.c:921 -#: replication/logical/logical.c:966 replication/logical/logical.c:1012 +#: replication/logical/logical.c:878 replication/logical/logical.c:923 +#: replication/logical/logical.c:968 replication/logical/logical.c:1014 #, 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:1244 replication/logical/logical.c:1293 -#: replication/logical/logical.c:1334 replication/logical/logical.c:1420 -#: replication/logical/logical.c:1469 +#: replication/logical/logical.c:1246 replication/logical/logical.c:1295 +#: replication/logical/logical.c:1336 replication/logical/logical.c:1422 +#: replication/logical/logical.c:1471 #, c-format msgid "logical streaming requires a %s callback" msgstr "el flujo lógico requiere una función callback %s" -#: replication/logical/logical.c:1379 +#: replication/logical/logical.c:1381 #, 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" @@ -19041,7 +19080,7 @@ msgid "could not find free replication state slot for replication origin with OI msgstr "no se pudo encontrar un slot libre para el estado del origen de replicación con OID %u" #: replication/logical/origin.c:941 replication/logical/origin.c:1128 -#: replication/slot.c:1867 +#: replication/slot.c:1934 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Aumente max_replication_slots y reintente." @@ -19094,30 +19133,30 @@ msgstr "la relación de destino de replicación lógica «%s.%s» usa columnas d 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:3842 +#: replication/logical/reorderbuffer.c:3973 #, 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:4188 -#: replication/logical/reorderbuffer.c:4213 +#: replication/logical/reorderbuffer.c:4319 +#: replication/logical/reorderbuffer.c:4344 #, 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:4192 -#: replication/logical/reorderbuffer.c:4217 +#: replication/logical/reorderbuffer.c:4323 +#: replication/logical/reorderbuffer.c:4348 #, 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:4467 +#: replication/logical/reorderbuffer.c:4598 #, 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:4966 +#: replication/logical/reorderbuffer.c:5097 #, 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" @@ -19135,59 +19174,59 @@ 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:1374 replication/logical/snapbuild.c:1486 -#: replication/logical/snapbuild.c:2017 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 +#: replication/logical/snapbuild.c:2068 #, 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:1376 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "No hay transacciones en ejecución." -#: replication/logical/snapbuild.c:1437 +#: replication/logical/snapbuild.c:1484 #, 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:1439 replication/logical/snapbuild.c:1463 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, 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:1461 +#: replication/logical/snapbuild.c:1508 #, 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:1488 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "Ya no hay transacciones antiguas en ejecución." # FIXME "snapbuild"? -#: replication/logical/snapbuild.c:1885 +#: replication/logical/snapbuild.c:1932 #, 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:1891 +#: replication/logical/snapbuild.c:1938 #, 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:1962 +#: replication/logical/snapbuild.c:2009 #, 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:2019 +#: replication/logical/snapbuild.c:2070 #, 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:2091 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "no se pudo interpretar el nombre de archivo «%s»" @@ -19197,32 +19236,27 @@ msgstr "no se pudo interpretar el nombre de archivo «%s»" 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:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "no se pudo obtener información de la tabla «%s.%s» del editor (publisher): %s" -#: replication/logical/tablesync.c:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "la tabla \"%s.%s\" no fue encontrada en el editor (publisher)" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, 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:1069 +#: replication/logical/tablesync.c:1104 #, 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" -#: replication/logical/tablesync.c:1110 -#, c-format -msgid "replication origin \"%s\" already exists" -msgstr "el origen de replicación «%s» ya existe" - -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1142 #, 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" @@ -19282,27 +19316,27 @@ msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s msgid "could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes" msgstr "no se pudo leer el archivo subxact de transacción en flujo «%s»: leídos sólo %zu de %zu bytes" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción %u no se iniciará porque la suscripción fue eliminada durante el inicio" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» no se iniciará porque la suscripción fue inhabilitada durante el inicio" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "el ayudante de sincronización de tabla de replicación lógica para la suscripción «%s», tabla «%s» ha iniciado" -#: replication/logical/worker.c:3170 +#: replication/logical/worker.c:3177 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "el ayudante «apply» de replicación lógica para la suscripción «%s» ha iniciado" -#: replication/logical/worker.c:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "la suscripción no tiene un slot de replicación establecido" @@ -19317,152 +19351,151 @@ msgstr "proto_version no válido" msgid "proto_version \"%s\" out of range" msgstr "proto_version «%s» fuera de rango" -#: replication/pgoutput/pgoutput.c:227 +#: replication/pgoutput/pgoutput.c:231 #, c-format msgid "invalid publication_names syntax" msgstr "sintaxis de publication_names no válida" -#: replication/pgoutput/pgoutput.c:324 +#: replication/pgoutput/pgoutput.c:328 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o inferior" -#: replication/pgoutput/pgoutput.c:330 +#: replication/pgoutput/pgoutput.c:334 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "el cliente envió proto_version=%d pero sólo soportamos el protocolo %d o superior" -#: replication/pgoutput/pgoutput.c:336 +#: replication/pgoutput/pgoutput.c:340 #, c-format msgid "publication_names parameter missing" msgstr "parámetro publication_names faltante" -#: replication/pgoutput/pgoutput.c:349 +#: replication/pgoutput/pgoutput.c:353 #, 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:354 +#: replication/pgoutput/pgoutput.c:358 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "se solicitó flujo, pero no está soportado por plugin de salida" -#: replication/slot.c:180 +#: replication/slot.c:212 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "el nombre de slot de replicación «%s» es demasiado corto" -#: replication/slot.c:189 +#: replication/slot.c:220 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "el nombre de slot de replicación «%s» es demasiado largo" -#: replication/slot.c:202 +#: replication/slot.c:232 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "el nombre de slot de replicación «%s» contiene caracteres no válidos" -#: replication/slot.c:204 -#, c-format +#: replication/slot.c:233 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:258 +#: replication/slot.c:287 #, c-format msgid "replication slot \"%s\" already exists" msgstr "el slot de replicación «%s» ya existe" -#: replication/slot.c:268 +#: replication/slot.c:297 #, c-format msgid "all replication slots are in use" msgstr "todos los slots de replicación están en uso" -#: replication/slot.c:269 +#: replication/slot.c:298 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Libere uno o incremente max_replication_slots." -#: replication/slot.c:402 replication/slotfuncs.c:761 +#: replication/slot.c:431 replication/slotfuncs.c:761 #: utils/adt/pgstatfuncs.c:2228 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "no existe el slot de replicación «%s»" -#: replication/slot.c:448 replication/slot.c:1025 +#: replication/slot.c:477 replication/slot.c:1083 #, 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:676 replication/slot.c:1419 replication/slot.c:1802 +#: replication/slot.c:705 replication/slot.c:1479 replication/slot.c:1869 #, c-format msgid "could not remove directory \"%s\"" msgstr "no se pudo eliminar el directorio «%s»" -#: replication/slot.c:1060 +#: replication/slot.c:1118 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "los slots de replicación sólo pueden usarse si max_replication_slots > 0" # FIXME see logical.c:81 -#: replication/slot.c:1065 +#: replication/slot.c:1123 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "los slots de replicación sólo pueden usarse si wal_level >= replica" -#: replication/slot.c:1250 +#: replication/slot.c:1310 #, 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:1288 +#: replication/slot.c:1348 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "invalidando el slot «%s» porque su restart_lsn %X/%X excede max_slot_wal_keep_size" -#: replication/slot.c:1740 +#: replication/slot.c:1807 #, 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:1747 +#: replication/slot.c:1814 #, 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:1754 +#: replication/slot.c:1821 #, 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:1790 +#: replication/slot.c:1857 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "suma de verificación no coincidenete en archivo de slot de replicación «%s»: es %u, debería ser %u" # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1824 +#: replication/slot.c:1891 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" -#: replication/slot.c:1826 +#: replication/slot.c:1893 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Cambie wal_level a logical o superior." # FIXME see slot.c:779. See also postmaster.c:835 -#: replication/slot.c:1830 +#: replication/slot.c:1897 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "existe el slot de replicación lógica «%s», pero wal_level < logical" # <> hello vim -#: replication/slot.c:1832 +#: replication/slot.c:1899 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Cambie wal_level a replica o superior." -#: replication/slot.c:1866 +#: replication/slot.c:1933 #, c-format msgid "too many replication slots active before shutdown" msgstr "demasiados slots de replicacion activos antes del apagado" @@ -19517,37 +19550,37 @@ msgstr "no se puede copiar el slot de replicación lógica no terminado «%s»" 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:268 +#: replication/syncrep.c:311 #, 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:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, 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:285 +#: replication/syncrep.c:328 #, 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:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "el standby «%s» es ahora un standby sincrónico con prioridad %u" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, 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:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "falló la interpretación de synchronous_standby_names" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, 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" @@ -19612,7 +19645,7 @@ msgstr "terminando el proceso walreceiver debido a que se agotó el tiempo de es 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:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "no se pudo cerrar archivo de segmento %s: %m" @@ -19622,129 +19655,129 @@ msgstr "no se pudo cerrar archivo de segmento %s: %m" 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:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "no se pudo escribir al segmento de log %s en la posición %u, largo %lu: %m" -#: replication/walsender.c:525 storage/smgr/md.c:1336 +#: replication/walsender.c:539 storage/smgr/md.c:1339 #, 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:529 +#: replication/walsender.c:543 #, 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:580 +#: replication/walsender.c:594 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM no se ha ejecutado antes de START_REPLICATION" -#: replication/walsender.c:609 +#: replication/walsender.c:623 #, 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:678 +#: replication/walsender.c:692 #, 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:681 +#: replication/walsender.c:695 #, 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:725 +#: replication/walsender.c:739 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "el punto de inicio solicitado %X/%X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:975 +#: replication/walsender.c:989 #, 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:985 +#: replication/walsender.c:999 #, 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:991 +#: replication/walsender.c:1005 #, 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:997 +#: replication/walsender.c:1011 #, 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:1003 +#: replication/walsender.c:1017 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s no está permitido en una subtransacción" -#: replication/walsender.c:1146 +#: replication/walsender.c:1160 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "no se puede leer del slot de replicación lógica «%s»" -#: replication/walsender.c:1148 +#: replication/walsender.c:1162 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Este slot ha sido invalidado porque excedió el máximo del tamaño de reserva." -#: replication/walsender.c:1158 +#: replication/walsender.c:1172 #, c-format msgid "terminating walsender process after promotion" msgstr "terminando el proceso walsender luego de la promoción" -#: replication/walsender.c:1552 +#: replication/walsender.c:1566 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "no puede ejecutar nuevas órdenes mientras el «WAL sender» está en modo de apagarse" -#: replication/walsender.c:1587 +#: replication/walsender.c:1601 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "no puede ejecutar órdenes SQL en el «WAL sender» para replicación física" -#: replication/walsender.c:1620 +#: replication/walsender.c:1634 #, c-format msgid "received replication command: %s" msgstr "se recibió orden de replicación: %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1081 -#: tcop/postgres.c:1440 tcop/postgres.c:1713 tcop/postgres.c:2194 -#: tcop/postgres.c:2627 tcop/postgres.c:2706 +#: replication/walsender.c:1642 tcop/fastpath.c:208 tcop/postgres.c:1046 +#: tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 +#: tcop/postgres.c:2592 tcop/postgres.c:2671 #, 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:1763 replication/walsender.c:1798 +#: replication/walsender.c:1777 replication/walsender.c:1812 #, c-format msgid "unexpected EOF on standby connection" msgstr "se encontró fin de archivo inesperado en la conexión standby" -#: replication/walsender.c:1786 +#: replication/walsender.c:1800 #, c-format msgid "invalid standby message type \"%c\"" msgstr "el tipo «%c» de mensaje del standby no es válido" -#: replication/walsender.c:1875 +#: replication/walsender.c:1889 #, c-format msgid "unexpected message type \"%c\"" msgstr "mensaje de tipo «%c» inesperado" -#: replication/walsender.c:2288 +#: replication/walsender.c:2306 #, 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" @@ -19970,200 +20003,200 @@ msgstr "no se permite cambiar el nombre de una regla ON SELECT" 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:610 +#: rewrite/rewriteHandler.c:613 #, c-format msgid "INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH" msgstr "las acciones de reglas INSERT...SELECT no están soportadas para consultas que tengan sentencias que modifiquen datos en WITH" -#: rewrite/rewriteHandler.c:663 +#: rewrite/rewriteHandler.c:666 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "no se puede usar RETURNING en múltiples reglas" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:898 rewrite/rewriteHandler.c:937 #, 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:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:966 #, 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:899 +#: rewrite/rewriteHandler.c:902 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Use OVERRIDING SYSTEM VALUE para controlar manualmente." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: rewrite/rewriteHandler.c:964 rewrite/rewriteHandler.c:972 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "la columna «%s» sólo puede actualizarse a DEFAULT" -#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 +#: rewrite/rewriteHandler.c:1107 rewrite/rewriteHandler.c:1125 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "hay múltiples asignaciones a la misma columna «%s»" -#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:1726 rewrite/rewriteHandler.c:3181 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "el acceso a la vista «%s» que no son de sistema está restringido" -#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 +#: rewrite/rewriteHandler.c:2158 rewrite/rewriteHandler.c:4084 #, 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:2256 +#: rewrite/rewriteHandler.c:2263 #, 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:2586 +#: rewrite/rewriteHandler.c:2593 msgid "Junk view columns are not updatable." msgstr "Las columnas «basura» de vistas no son actualizables." -#: rewrite/rewriteHandler.c:2591 +#: rewrite/rewriteHandler.c:2598 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:2594 +#: rewrite/rewriteHandler.c:2601 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:2597 +#: rewrite/rewriteHandler.c:2604 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:2658 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Las vistas que contienen DISTINCT no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2661 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Las vistas que contienen GROUP BY no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing HAVING are not automatically updatable." msgstr "Las vistas que contienen HAVING no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2674 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:2670 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing WITH are not automatically updatable." msgstr "Las vistas que contienen WITH no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2680 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:2685 +#: rewrite/rewriteHandler.c:2692 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 +#: rewrite/rewriteHandler.c:2695 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:2691 +#: rewrite/rewriteHandler.c:2698 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:2698 rewrite/rewriteHandler.c:2702 -#: rewrite/rewriteHandler.c:2710 +#: rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2709 +#: rewrite/rewriteHandler.c:2717 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:2713 +#: rewrite/rewriteHandler.c:2720 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Las vistas que contienen TABLESAMPLE no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:2737 +#: rewrite/rewriteHandler.c:2744 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:3234 +#: rewrite/rewriteHandler.c:3241 #, 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:3242 +#: rewrite/rewriteHandler.c:3249 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "no se puede actualizar la columna «%s» vista «%s»" -#: rewrite/rewriteHandler.c:3724 +#: rewrite/rewriteHandler.c:3747 #, 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:3735 +#: rewrite/rewriteHandler.c:3758 #, 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:3749 +#: rewrite/rewriteHandler.c:3772 #, 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:3753 +#: rewrite/rewriteHandler.c:3776 #, 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:3758 +#: rewrite/rewriteHandler.c:3781 #, 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:3988 rewrite/rewriteHandler.c:3996 -#: rewrite/rewriteHandler.c:4004 +#: rewrite/rewriteHandler.c:4012 rewrite/rewriteHandler.c:4020 +#: rewrite/rewriteHandler.c:4028 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Las vistas con reglas DO INSTEAD condicionales no son automáticamente actualizables." -#: rewrite/rewriteHandler.c:4109 +#: rewrite/rewriteHandler.c:4134 #, 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:4111 +#: rewrite/rewriteHandler.c:4136 #, 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:4116 +#: rewrite/rewriteHandler.c:4141 #, 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:4118 +#: rewrite/rewriteHandler.c:4143 #, 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:4123 +#: rewrite/rewriteHandler.c:4148 #, 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:4125 +#: rewrite/rewriteHandler.c:4150 #, 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:4143 +#: rewrite/rewriteHandler.c:4168 #, 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:4200 +#: rewrite/rewriteHandler.c:4225 #, 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" @@ -20224,47 +20257,47 @@ msgstr "el objeto de estadísticas «%s.%s» no pudo ser calculado para la relac 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:598 storage/buffer/bufmgr.c:765 +#: storage/buffer/bufmgr.c:605 storage/buffer/bufmgr.c:772 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "no se pueden acceder tablas temporales de otras sesiones" -#: storage/buffer/bufmgr.c:843 +#: storage/buffer/bufmgr.c:850 #, 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:930 +#: storage/buffer/bufmgr.c:937 #, 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:932 +#: storage/buffer/bufmgr.c:939 #, 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:1031 +#: storage/buffer/bufmgr.c:1038 #, 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:4533 +#: storage/buffer/bufmgr.c:4600 #, c-format msgid "could not write block %u of %s" msgstr "no se pudo escribir el bloque %u de %s" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4602 #, 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:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4623 storage/buffer/bufmgr.c:4642 #, c-format msgid "writing block %u of relation %s" msgstr "escribiendo el bloque %u de la relación %s" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4946 #, c-format msgid "snapshot too old" msgstr "snapshot demasiado antiguo" @@ -20294,113 +20327,113 @@ msgstr "no se pudo determinar el tamaño del archivo temporal «%s» del BufFile msgid "could not delete shared fileset \"%s\": %m" msgstr "no se pudo borrar el conjunto de archivos compartidos «%s»: %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:874 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "no se pudo truncar el archivo «%s»: %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "no se pudo sincronizar (flush) datos «sucios»: %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, 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:597 +#: storage/file/fd.c:594 #, 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:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "no se pudo enlazar (link) el archivo «%s» a «%s»: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit falló: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, 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:1028 +#: storage/file/fd.c:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "El sistema permite %d, se requieren al menos %d." -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 -#: storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 +#: storage/file/fd.c:2668 #, 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:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "archivo temporal: ruta «%s», tamaño %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "no se pudo crear el directorio temporal «%s»: %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "no se pudo crear el subdirectorio temporal «%s»: %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "no se pudo crear el archivo temporal «%s»: %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "no se pudo abrir el archivo temporal «%s»: %m" -#: storage/file/fd.c:1859 +#: storage/file/fd.c:1850 #, 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:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "no se pudo borrar el archivo «%s»: %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, 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:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, 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:2496 +#: storage/file/fd.c:2487 #, 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:2653 +#: storage/file/fd.c:2644 #, 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:3183 +#: storage/file/fd.c:3174 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "archivo inesperado en directorio de archivos temporales: «%s»" -#: storage/file/fd.c:3312 +#: storage/file/fd.c:3303 #, 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" @@ -20604,12 +20637,12 @@ msgstr "la recuperación aún está esperando después de %ld.%03d ms: %s" 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:883 tcop/postgres.c:3358 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, 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:884 tcop/postgres.c:2512 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transacción del usuario causó un «deadlock» con la recuperación." @@ -20682,103 +20715,103 @@ msgstr "se ha detectado un deadlock" msgid "See server log for query details." msgstr "Vea el registro del servidor para obtener detalles de las consultas." -#: storage/lmgr/lmgr.c:825 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "mientras se actualizaba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:828 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "mientras se borraba la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:831 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "mientras se bloqueaba la tupla (%u,%u) de la relación «%s»" -#: storage/lmgr/lmgr.c:834 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "mientras se bloqueaba la versión actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:837 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "mientras se insertaba la tupla de índice (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la unicidad de la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:843 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba la tupla actualizada (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "mientras se verificaba una restricción de exclusión en la tupla (%u,%u) en la relación «%s»" -#: storage/lmgr/lmgr.c:1139 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "relación %u de la base de datos %u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1151 #, 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:1151 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid de la base de datos %u" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1162 #, 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:1163 +#: storage/lmgr/lmgr.c:1169 #, 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:1171 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "transacción %u" -#: storage/lmgr/lmgr.c:1176 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "transacción virtual %d/%u" -#: storage/lmgr/lmgr.c:1182 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "token especulativo %u de la transacción %u" -#: storage/lmgr/lmgr.c:1188 +#: storage/lmgr/lmgr.c:1194 #, 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:1196 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "candado de usuario [%u,%u,%u]" # XXX is this a good translation? -#: storage/lmgr/lmgr.c:1203 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "candado consultivo [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "tipo de locktag %d no reconocido" @@ -20967,22 +21000,22 @@ msgstr "no se pudo escribir el bloque %u en el archivo «%s»: %m" msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "no se pudo escribir el bloque %u en el archivo «%s»: se escribieron sólo %d de %d bytes" -#: storage/smgr/md.c:842 +#: storage/smgr/md.c:845 #, 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:897 +#: storage/smgr/md.c:900 #, 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:1301 +#: storage/smgr/md.c:1304 #, 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:1315 +#: storage/smgr/md.c:1318 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "no se pudo abrir el archivo «%s» (bloque buscado %u): %m" @@ -20997,8 +21030,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:312 tcop/postgres.c:1308 tcop/postgres.c:1566 -#: tcop/postgres.c:2037 tcop/postgres.c:2293 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 +#: tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "duración: %s ms" @@ -21028,295 +21061,295 @@ msgstr "el tamaño de argumento %d no es válido en el mensaje de llamada a func msgid "incorrect binary data format in function argument %d" msgstr "el formato de datos binarios es incorrecto en argumento %d a función" -#: tcop/postgres.c:449 tcop/postgres.c:4836 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "el tipo de mensaje de frontend %d no es válido" -#: tcop/postgres.c:1018 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "sentencia: %s" -#: tcop/postgres.c:1313 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "duración: %s ms sentencia: %s" -#: tcop/postgres.c:1419 +#: tcop/postgres.c:1384 #, 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:1571 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "duración: %s ms parse: %s: %s" -#: tcop/postgres.c:1638 tcop/postgres.c:2608 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "no existe una sentencia preparada sin nombre" -#: tcop/postgres.c:1690 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "el mensaje de enlace (bind) tiene %d formatos de parámetro pero %d parámetros" -#: tcop/postgres.c:1696 +#: tcop/postgres.c:1661 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "el mensaje de enlace (bind) entrega %d parámetros, pero la sentencia preparada «%s» requiere %d" -#: tcop/postgres.c:1915 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "el formato de datos binarios es incorrecto en el parámetro de enlace %d" -#: tcop/postgres.c:2042 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "duración: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:2093 tcop/postgres.c:2692 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "no existe el portal «%s»" -#: tcop/postgres.c:2173 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2175 tcop/postgres.c:2301 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "ejecutar fetch desde" -#: tcop/postgres.c:2176 tcop/postgres.c:2302 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "ejecutar" -#: tcop/postgres.c:2298 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "duración: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2444 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2469 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "parámetros: %s" -#: tcop/postgres.c:2484 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "razón para abortar: conflicto en la recuperación" -#: tcop/postgres.c:2500 +#: tcop/postgres.c:2465 #, 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:2503 +#: tcop/postgres.c:2468 #, 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:2506 +#: tcop/postgres.c:2471 #, 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:2509 +#: tcop/postgres.c:2474 #, 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:2515 +#: tcop/postgres.c:2480 #, 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:2554 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "portal «%s» parámetro $%d = %s" -#: tcop/postgres.c:2557 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "portal «%s» parámetro $%d" -#: tcop/postgres.c:2563 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "portal sin nombre, parámetro %d = %s" -#: tcop/postgres.c:2566 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "portal sin nombre, parámetro %d" -#: tcop/postgres.c:2912 +#: tcop/postgres.c:2877 #, 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:2918 +#: tcop/postgres.c:2883 #, 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:2919 +#: tcop/postgres.c:2884 #, 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:2923 tcop/postgres.c:3284 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, 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:2930 +#: tcop/postgres.c:2895 #, 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:3016 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "excepción de coma flotante" -#: tcop/postgres.c:3017 +#: tcop/postgres.c:2982 #, 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:3188 +#: tcop/postgres.c:3153 #, 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:3192 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "terminando el proceso autovacuum debido a una orden del administrador" -#: tcop/postgres.c:3196 +#: tcop/postgres.c:3161 #, 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:3213 tcop/postgres.c:3223 tcop/postgres.c:3282 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, 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:3234 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "terminando la conexión debido a una orden del administrador" -#: tcop/postgres.c:3265 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "se ha perdido la conexión al cliente" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "cancelando la sentencia debido a que se agotó el tiempo de espera de candados (locks)" -#: tcop/postgres.c:3342 +#: tcop/postgres.c:3307 #, 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:3349 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "cancelando tarea de autovacuum" -#: tcop/postgres.c:3372 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "cancelando la sentencia debido a una petición del usuario" -#: tcop/postgres.c:3386 +#: tcop/postgres.c:3351 #, 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:3397 +#: tcop/postgres.c:3362 #, 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:3526 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "límite de profundidad de stack alcanzado" -#: tcop/postgres.c:3527 +#: tcop/postgres.c:3492 #, 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:3590 +#: tcop/postgres.c:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "«max_stack_depth» no debe exceder %ldkB." -#: tcop/postgres.c:3592 +#: tcop/postgres.c:3557 #, 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:4013 +#: tcop/postgres.c:3978 #, 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:4014 tcop/postgres.c:4020 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Pruebe «%s --help» para mayor información." -#: tcop/postgres.c:4018 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: argumento de línea de órdenes no válido: %s" -#: tcop/postgres.c:4081 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: no se ha especificado base de datos ni usuario" -#: tcop/postgres.c:4738 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "subtipo %d de mensaje CLOSE no válido" -#: tcop/postgres.c:4773 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "subtipo %d de mensaje DESCRIBE no válido" -#: tcop/postgres.c:4857 +#: tcop/postgres.c:4822 #, 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:4861 +#: tcop/postgres.c:4826 #, 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:5038 +#: tcop/postgres.c:5003 #, 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" @@ -21326,12 +21359,12 @@ 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 enlace (bind) tiene %d formatos de resultado pero la consulta tiene %d columnas" -#: tcop/pquery.c:939 tcop/pquery.c:1698 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "el cursor sólo se puede desplazar hacia adelante" -#: tcop/pquery.c:940 tcop/pquery.c:1699 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Declárelo con SCROLL para permitirle desplazar hacia atrás." @@ -21371,6 +21404,11 @@ msgstr "no se puede ejecutar %s dentro de un proceso en segundo plano" msgid "must be superuser to do CHECKPOINT" msgstr "debe ser superusuario para ejecutar CHECKPOINT" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS sólo puede aceptar nombres de relación en la cláusula FROM" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -21494,75 +21532,75 @@ msgstr "parámetro no reconocido de tesauro: «%s»" msgid "missing Dictionary parameter" msgstr "falta un paramétro Dictionary" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 -#: tsearch/spell.c:1063 +#: tsearch/spell.c:382 tsearch/spell.c:399 tsearch/spell.c:408 +#: tsearch/spell.c:1065 #, c-format msgid "invalid affix flag \"%s\"" msgstr "marca de afijo «%s» no válida" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:386 tsearch/spell.c:1069 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "la marca de afijo «%s» fuera de rango" -#: tsearch/spell.c:415 +#: tsearch/spell.c:416 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "caracteres no válidos en la marca de afijo «%s»" -#: tsearch/spell.c:435 +#: tsearch/spell.c:436 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "marca de afijo «%s» no válida con el valor de marca «long»" -#: tsearch/spell.c:525 +#: tsearch/spell.c:526 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "no se pudo abrir el archivo de diccionario «%s»: %m" -#: tsearch/spell.c:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:765 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "la expresión regular no es válida: %s" -#: tsearch/spell.c:983 tsearch/spell.c:1000 tsearch/spell.c:1017 -#: tsearch/spell.c:1034 tsearch/spell.c:1099 gram.y:16630 gram.y:16647 +#: tsearch/spell.c:984 tsearch/spell.c:1001 tsearch/spell.c:1018 +#: tsearch/spell.c:1035 tsearch/spell.c:1101 gram.y:16630 gram.y:16647 #, c-format msgid "syntax error" msgstr "error de sintaxis" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 -#: tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1193 tsearch/spell.c:1205 tsearch/spell.c:1765 +#: tsearch/spell.c:1770 tsearch/spell.c:1775 #, c-format msgid "invalid affix alias \"%s\"" msgstr "alias de afijo «%s» no válido" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1246 tsearch/spell.c:1317 tsearch/spell.c:1466 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "no se pudo abrir el archivo de afijos «%s»: %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1300 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "el diccionario Ispell sólo permite los valores «default», «long» y «num»" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1344 #, c-format msgid "invalid number of flag vector aliases" msgstr "número no válido de alias de opciones" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1367 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "el número de aliases excede el número especificado %d" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1582 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "el archivo de «affix» contiene órdenes en estilos antiguo y nuevo" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "la cadena es demasiado larga para tsvector (%d bytes, máximo %d bytes)" @@ -21629,112 +21667,112 @@ msgstr "ShortWord debería ser >= 0" msgid "MaxFragments should be >= 0" msgstr "MaxFragments debería ser >= 0" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "el identificador es demasiado largo" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 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:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "palabra clave no reconocida: «%s»" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, 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:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "falta un nombre" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, 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:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "falta un signo «=»" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, 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:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "debe venir un nombre después del signo «/»" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "usando el cedente por omisión con ID %u" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "el array ACL contiene tipo de datos incorrecto" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "los array de ACL debe ser unidimensional" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, c-format msgid "ACL arrays must not contain null values" msgstr "los arrays de ACL no pueden contener valores nulos" -#: utils/adt/acl.c:563 +#: utils/adt/acl.c:580 #, 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:1198 +#: utils/adt/acl.c:1215 #, 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:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "existen privilegios dependientes" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Use CASCADE para revocarlos también." -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert ya no está soportado" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove ya no está soportado" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "tipo de privilegio no reconocido: «%s»" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "no existe la función «%s»" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "debe ser miembro del rol «%s»" @@ -21760,7 +21798,7 @@ msgstr "el tipo de entrada no es un array" #: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 #: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 #: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 -#: utils/adt/int8.c:1299 utils/adt/numeric.c:1783 utils/adt/numeric.c:4246 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 #: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 #: utils/adt/varlena.c:3422 #, c-format @@ -21896,7 +21934,7 @@ msgid "Junk after closing right brace." msgstr "Basura después de la llave derecha de cierre." #: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 -#: utils/adt/arrayfuncs.c:5938 +#: utils/adt/arrayfuncs.c:5940 #, c-format msgid "invalid number of dimensions: %d" msgstr "número incorrecto de dimensiones: %d" @@ -21935,8 +21973,8 @@ msgstr "no está implementada la obtención de segmentos de arrays de largo fijo #: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 #: utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 -#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5924 -#: utils/adt/arrayfuncs.c:5950 utils/adt/arrayfuncs.c:5961 +#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5926 +#: utils/adt/arrayfuncs.c:5952 utils/adt/arrayfuncs.c:5963 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 #: utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 @@ -21986,8 +22024,8 @@ msgstr "los arrays con elementos null no son permitidos en este contexto" msgid "cannot compare arrays of different element types" msgstr "no se pueden comparar arrays con elementos de distintos tipos" -#: utils/adt/arrayfuncs.c:4034 utils/adt/multirangetypes.c:2742 -#: utils/adt/multirangetypes.c:2814 utils/adt/rangetypes.c:1343 +#: utils/adt/arrayfuncs.c:4034 utils/adt/multirangetypes.c:2743 +#: utils/adt/multirangetypes.c:2815 utils/adt/rangetypes.c:1343 #: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" @@ -22018,42 +22056,42 @@ msgstr "no se pueden acumular arrays vacíos" msgid "cannot accumulate arrays of different dimensionality" msgstr "no se pueden acumular arrays de distinta dimensionalidad" -#: utils/adt/arrayfuncs.c:5822 utils/adt/arrayfuncs.c:5862 +#: utils/adt/arrayfuncs.c:5824 utils/adt/arrayfuncs.c:5864 #, 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:5925 utils/adt/arrayfuncs.c:5951 +#: utils/adt/arrayfuncs.c:5927 utils/adt/arrayfuncs.c:5953 #, c-format msgid "Dimension array must be one dimensional." msgstr "El array de dimensiones debe ser unidimensional." -#: utils/adt/arrayfuncs.c:5930 utils/adt/arrayfuncs.c:5956 +#: utils/adt/arrayfuncs.c:5932 utils/adt/arrayfuncs.c:5958 #, c-format msgid "dimension values cannot be null" msgstr "los valores de dimensión no pueden ser null" -#: utils/adt/arrayfuncs.c:5962 +#: utils/adt/arrayfuncs.c:5964 #, 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:6240 +#: utils/adt/arrayfuncs.c:6242 #, 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:6517 +#: utils/adt/arrayfuncs.c:6519 #, c-format msgid "thresholds must be one-dimensional array" msgstr "los umbrales deben ser un array unidimensional" -#: utils/adt/arrayfuncs.c:6522 +#: utils/adt/arrayfuncs.c:6524 #, c-format msgid "thresholds array must not contain NULLs" msgstr "el array de umbrales no debe contener nulos" -#: utils/adt/arrayfuncs.c:6755 +#: utils/adt/arrayfuncs.c:6757 #, 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" @@ -22105,8 +22143,8 @@ msgstr "la conversión de codificación de %s a ASCII no está soportada" #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 #: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 -#: utils/adt/numeric.c:720 utils/adt/numeric.c:6901 utils/adt/numeric.c:6925 -#: utils/adt/numeric.c:6949 utils/adt/numeric.c:7907 utils/adt/numutils.c:116 +#: utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 +#: utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 utils/adt/numutils.c:116 #: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 #: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 #: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 @@ -22127,9 +22165,9 @@ msgstr "money fuera de rango" #: utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 #: utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 #: utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 -#: utils/adt/numeric.c:3046 utils/adt/numeric.c:3069 utils/adt/numeric.c:3154 -#: utils/adt/numeric.c:3172 utils/adt/numeric.c:3268 utils/adt/numeric.c:8456 -#: utils/adt/numeric.c:8746 utils/adt/numeric.c:10392 +#: utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 +#: utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 utils/adt/numeric.c:8457 +#: utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 #: utils/adt/timestamp.c:3317 #, c-format msgid "division by zero" @@ -22172,7 +22210,7 @@ msgid "date out of range: \"%s\"" msgstr "fecha fuera de rango: «%s»" #: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 -#: utils/adt/xml.c:2259 +#: utils/adt/xml.c:2253 #, c-format msgid "date out of range" msgstr "fecha fuera de rango" @@ -22234,8 +22272,8 @@ msgstr "las unidades de «date» «%s» no son reconocidas" #: utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 #: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 #: utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 -#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2281 -#: utils/adt/xml.c:2288 utils/adt/xml.c:2308 utils/adt/xml.c:2315 +#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2275 +#: utils/adt/xml.c:2282 utils/adt/xml.c:2302 utils/adt/xml.c:2309 #, c-format msgid "timestamp out of range" msgstr "timestamp fuera de rango" @@ -22252,7 +22290,7 @@ msgstr "valor en campo de hora fuera de rango: %d:%02d:%02g" #: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 #: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 -#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2450 +#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2451 #: utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 #: utils/adt/timestamp.c:3450 #, c-format @@ -22445,34 +22483,34 @@ msgstr "«%s» está fuera de rango para el tipo double precision" #: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 #: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 #: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 -#: utils/adt/int8.c:1320 utils/adt/numeric.c:4358 utils/adt/numeric.c:4363 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "smallint fuera de rango" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3564 utils/adt/numeric.c:9339 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, 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:1526 utils/adt/numeric.c:3839 utils/adt/numeric.c:3951 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, c-format msgid "zero raised to a negative power is undefined" msgstr "cero elevado a una potencia negativa es indefinido" -#: utils/adt/float.c:1530 utils/adt/numeric.c:3843 utils/adt/numeric.c:10244 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, 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:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3751 -#: utils/adt/numeric.c:10017 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 +#: utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "no se puede calcular logaritmo de cero" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3689 -#: utils/adt/numeric.c:3746 utils/adt/numeric.c:10021 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 +#: utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "no se puede calcular logaritmo de un número negativo" @@ -22491,22 +22529,22 @@ msgstr "la entrada está fuera de rango" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "parámetro setseed %g fuera del rango permitido [-1,1]" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1723 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "count debe ser mayor que cero" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1734 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, 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:4041 utils/adt/numeric.c:1739 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "los límites inferior y superior deben ser finitos" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1753 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "el límite superior no puede ser igual al límite inferior" @@ -22916,7 +22954,7 @@ msgstr "el tamaño de paso no puede ser cero" #: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 #: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 #: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 -#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4317 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 #: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" @@ -23034,23 +23072,23 @@ msgstr "no se puede convertir un objeto jsonb a tipo %s" msgid "cannot cast jsonb array or object to type %s" msgstr "no se puede convertir un array u objeto jsonb a tipo %s" -#: utils/adt/jsonb_util.c:751 +#: utils/adt/jsonb_util.c:748 #, 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:792 +#: utils/adt/jsonb_util.c:789 #, 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:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "el tamaño total de los elementos del array jsonb excede el máximo de %u bytes" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 -#: utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 +#: utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "el tamaño total de los elementos del objeto jsonb excede el máximo de %u bytes" @@ -23458,12 +23496,12 @@ 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:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:701 #, c-format msgid "invalid escape string" msgstr "cadena de escape no válida" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:702 #, c-format msgid "Escape string must be empty or one character." msgstr "La cadena de escape debe ser vacía o un carácter." @@ -23590,22 +23628,22 @@ msgstr "Se esperaba inicio de rango." msgid "Expected comma or end of multirange." msgstr "Se esperaba una coma o el final del multirango." -#: utils/adt/multirangetypes.c:975 +#: utils/adt/multirangetypes.c:976 #, 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:1001 +#: utils/adt/multirangetypes.c:1002 #, c-format msgid "multirange values cannot contain null members" msgstr "valores de multirango no pueden contener miembros nulos" -#: utils/adt/multirangetypes.c:1349 +#: utils/adt/multirangetypes.c:1350 #, c-format msgid "range_agg must be called with a range" msgstr "range_agg debe ser ejecutado con un rango" -#: utils/adt/multirangetypes.c:1420 +#: utils/adt/multirangetypes.c:1421 #, c-format msgid "range_intersect_agg must be called with a multirange" msgstr "range_intersect_agg debe ser ejecutado con un multirango" @@ -23744,46 +23782,46 @@ msgstr "el tamaño de paso no puede ser NaN" msgid "step size cannot be infinity" msgstr "el tamaño de paso no puede ser infinito" -#: utils/adt/numeric.c:3504 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "el factorial de un número negativo es indefinido" -#: utils/adt/numeric.c:3514 utils/adt/numeric.c:6964 utils/adt/numeric.c:7437 -#: utils/adt/numeric.c:9814 utils/adt/numeric.c:10302 utils/adt/numeric.c:10428 -#: utils/adt/numeric.c:10502 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 +#: utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 +#: utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "el valor excede el formato numeric" -#: utils/adt/numeric.c:4224 utils/adt/numeric.c:4304 utils/adt/numeric.c:4345 -#: utils/adt/numeric.c:4539 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 +#: utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "no se puede convertir NaN a %s" -#: utils/adt/numeric.c:4228 utils/adt/numeric.c:4308 utils/adt/numeric.c:4349 -#: utils/adt/numeric.c:4543 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 +#: utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "no se puede convertir infinito a %s" -#: utils/adt/numeric.c:4552 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn fuera de rango" -#: utils/adt/numeric.c:7521 utils/adt/numeric.c:7568 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "desbordamiento de campo numeric" -#: utils/adt/numeric.c:7522 +#: utils/adt/numeric.c:7523 #, 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:7569 +#: utils/adt/numeric.c:7570 #, 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." @@ -23824,99 +23862,99 @@ msgstr "el carácter nulo no está permitido" msgid "percentile value %g is not between 0 and 1" msgstr "el valor de percentil %g no está entre 0 y 1" -#: utils/adt/pg_locale.c:1228 +#: utils/adt/pg_locale.c:1229 #, c-format msgid "Apply system library package updates." msgstr "Aplique actualizaciones de paquetes de bibliotecas del sistema." -#: utils/adt/pg_locale.c:1442 +#: utils/adt/pg_locale.c:1445 #, 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:1445 +#: utils/adt/pg_locale.c:1448 #, 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:1547 +#: utils/adt/pg_locale.c:1550 #, 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:1556 +#: utils/adt/pg_locale.c:1559 #, 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:1568 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "los ordenamientos (collation) con valores collate y ctype diferentes no están soportados por ICU" -#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1940 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1664 +#: utils/adt/pg_locale.c:1943 #, 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:1588 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "ICU no está soportado en este servidor" -#: utils/adt/pg_locale.c:1609 +#: utils/adt/pg_locale.c:1612 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "la extensión «%s» no tiene versión actual, pero se especificó una versión" -#: utils/adt/pg_locale.c:1616 +#: utils/adt/pg_locale.c:1619 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "el ordenamiento (collation) «%s» tiene una discordancia de versión" -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1621 #, 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:1621 +#: utils/adt/pg_locale.c:1624 #, 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:1692 +#: utils/adt/pg_locale.c:1695 #, c-format msgid "could not load locale \"%s\"" msgstr "no se pudo cargar la configuración regional «%s»" -#: utils/adt/pg_locale.c:1717 +#: utils/adt/pg_locale.c:1720 #, 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:1755 +#: utils/adt/pg_locale.c:1758 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "la codificación «%s» no estæ soportada por ICU" -#: utils/adt/pg_locale.c:1762 +#: utils/adt/pg_locale.c:1765 #, 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:1793 utils/adt/pg_locale.c:1802 -#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 +#: utils/adt/pg_locale.c:1796 utils/adt/pg_locale.c:1805 +#: utils/adt/pg_locale.c:1834 utils/adt/pg_locale.c:1844 #, c-format msgid "%s failed: %s" msgstr "%s falló: %s" -#: utils/adt/pg_locale.c:2113 +#: utils/adt/pg_locale.c:2116 #, 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:2114 +#: utils/adt/pg_locale.c:2117 #, 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." @@ -24026,7 +24064,7 @@ msgstr "Demasiadas comas." msgid "Junk after right parenthesis or bracket." msgstr "Basura después del paréntesis o corchete derecho." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1612 utils/adt/varlena.c:4549 #, c-format msgid "regular expression failed: %s" msgstr "la expresión regular falló: %s" @@ -24036,23 +24074,23 @@ msgstr "la expresión regular falló: %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "opción de expresión regular no válida: «%.*s»" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:848 #, 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:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1050 utils/adt/regexp.c:1432 utils/adt/regexp.c:1487 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s no soporta la opción «global»" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1052 #, c-format msgid "Use the regexp_matches function instead." msgstr "En su lugar, utilice la función regexp_matches." -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1234 #, c-format msgid "too many regular expression matches" msgstr "demasiadas coincidencias de la expresión regular" @@ -24078,7 +24116,7 @@ msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Use NONE para denotar el argumento faltante de un operador unario." #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 +#: utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "demasiados argumentos" @@ -24495,12 +24533,12 @@ msgstr "los arrays de pesos no deben contener valores nulos" msgid "weight out of range" msgstr "peso fuera de rango" -#: utils/adt/tsvector.c:215 +#: utils/adt/tsvector.c:212 #, 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:222 +#: utils/adt/tsvector.c:219 #, 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)" @@ -24798,7 +24836,7 @@ msgstr "característica XML no soportada" msgid "This functionality requires the server to be built with libxml support." msgstr "Esta funcionalidad requiere que el servidor haya sido construido con soporte libxml." -#: utils/adt/xml.c:253 utils/mb/mbutils.c:627 +#: utils/adt/xml.c:253 utils/mb/mbutils.c:628 #, c-format msgid "invalid encoding name \"%s\"" msgstr "nombre de codificación «%s» no válido" @@ -24853,96 +24891,96 @@ msgstr "no se pudo instalar un gestor de errores XML" 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:1985 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "Valor de carácter no válido." -#: utils/adt/xml.c:1988 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "Se requiere un espacio." -#: utils/adt/xml.c:1991 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone acepta sólo 'yes' y 'no'." -#: utils/adt/xml.c:1994 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "Declaración mal formada: falta la versión." -#: utils/adt/xml.c:1997 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "Falta especificación de codificación en declaración de texto." -#: utils/adt/xml.c:2000 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "Procesando declaración XML: se esperaba '?>'." -#: utils/adt/xml.c:2003 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Código de error libxml no reconocido: %d." -#: utils/adt/xml.c:2260 +#: utils/adt/xml.c:2254 #, c-format msgid "XML does not support infinite date values." msgstr "XML no soporta valores infinitos de fecha." -#: utils/adt/xml.c:2282 utils/adt/xml.c:2309 +#: utils/adt/xml.c:2276 utils/adt/xml.c:2303 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML no soporta valores infinitos de timestamp." -#: utils/adt/xml.c:2725 +#: utils/adt/xml.c:2719 #, c-format msgid "invalid query" msgstr "consulta no válido" -#: utils/adt/xml.c:2817 +#: utils/adt/xml.c:2811 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "el portal «%s» no retorna tuplas" -#: utils/adt/xml.c:4069 +#: utils/adt/xml.c:4063 #, 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:4070 +#: utils/adt/xml.c:4064 #, 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:4094 +#: utils/adt/xml.c:4088 #, c-format msgid "empty XPath expression" msgstr "expresion XPath vacía" -#: utils/adt/xml.c:4146 +#: utils/adt/xml.c:4140 #, 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:4153 +#: utils/adt/xml.c:4147 #, 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:4510 +#: utils/adt/xml.c:4504 #, c-format msgid "DEFAULT namespace is not supported" msgstr "el espacio de nombres DEFAULT no está soportado" -#: utils/adt/xml.c:4539 +#: utils/adt/xml.c:4533 #, 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:4573 +#: utils/adt/xml.c:4567 #, 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:4720 +#: utils/adt/xml.c:4714 #, 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" @@ -24978,17 +25016,17 @@ msgstr "falta la función de soporte %3$d para el tipo %4$s de la clase de opera msgid "cached plan must not change result type" msgstr "el plan almacenado no debe cambiar el tipo de resultado" -#: utils/cache/relcache.c:6328 +#: utils/cache/relcache.c:6344 #, 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:6330 +#: utils/cache/relcache.c:6346 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Prosiguiendo de todas maneras, pero hay algo mal." -#: utils/cache/relcache.c:6652 +#: utils/cache/relcache.c:6668 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "no se pudo eliminar el archivo de cache «%s»: %m" @@ -25599,48 +25637,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:297 utils/mb/mbutils.c:900 +#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 #, 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:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 -#: utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 +#: utils/mb/mbutils.c:843 #, 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:568 +#: utils/mb/mbutils.c:569 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "la codificación de origen «%s» no es válida" -#: utils/mb/mbutils.c:573 +#: utils/mb/mbutils.c:574 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "la codificación de destino «%s» no es válida" -#: utils/mb/mbutils.c:713 +#: utils/mb/mbutils.c:714 #, 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:877 +#: utils/mb/mbutils.c:878 #, c-format msgid "invalid Unicode code point" msgstr "punto de código Unicode no válido" -#: utils/mb/mbutils.c:1146 +#: utils/mb/mbutils.c:1147 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset falló" -#: utils/mb/mbutils.c:1667 +#: utils/mb/mbutils.c:1668 #, 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:1700 +#: utils/mb/mbutils.c:1709 #, 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»" @@ -27891,15 +27929,15 @@ msgstr "Falla al crear el contexto de memoria «%s»." msgid "could not attach to dynamic shared area" msgstr "no se pudo adjuntar al segmento de memoria compartida dinámica" -#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 -#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1120 -#: utils/mmgr/mcxt.c:1156 utils/mmgr/mcxt.c:1208 utils/mmgr/mcxt.c:1243 -#: utils/mmgr/mcxt.c:1278 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:928 utils/mmgr/mcxt.c:966 +#: utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1112 utils/mmgr/mcxt.c:1143 +#: utils/mmgr/mcxt.c:1179 utils/mmgr/mcxt.c:1231 utils/mmgr/mcxt.c:1266 +#: utils/mmgr/mcxt.c:1301 #, 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:1052 +#: utils/mmgr/mcxt.c:1067 #, c-format msgid "logging memory contexts of PID %d" msgstr "registrando contextos de memoria del PID %d" @@ -27949,24 +27987,24 @@ msgstr "no se pudo posicionar (seek) en el bloque %ld del archivo temporal" msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" msgstr "no se pudo leer el bloque %ld del archivo temporal: se leyeron sólo %zu de %zu bytes" -#: utils/sort/sharedtuplestore.c:431 utils/sort/sharedtuplestore.c:440 -#: utils/sort/sharedtuplestore.c:463 utils/sort/sharedtuplestore.c:480 -#: utils/sort/sharedtuplestore.c:497 +#: utils/sort/sharedtuplestore.c:432 utils/sort/sharedtuplestore.c:441 +#: utils/sort/sharedtuplestore.c:464 utils/sort/sharedtuplestore.c:481 +#: utils/sort/sharedtuplestore.c:498 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "no se pudo leer desde el archivo temporal del tuplestore compartido" -#: utils/sort/sharedtuplestore.c:486 +#: utils/sort/sharedtuplestore.c:487 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "trozo inesperado en archivo temporal del tuplestore compartido" -#: utils/sort/sharedtuplestore.c:570 +#: utils/sort/sharedtuplestore.c:571 #, 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" -#: utils/sort/sharedtuplestore.c:577 +#: utils/sort/sharedtuplestore.c:578 #, c-format msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" msgstr "no se pudo leer el archivo temporal del tuplestore compartido: se leyeron sólo %zu de %zu bytes" @@ -28600,3 +28638,7 @@ msgstr "uso no estandar de escape en un literal de cadena" #, c-format msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Use la sintaxis de escape para cadenas, por ej. E'\\r\\n'." + +#, c-format +#~ msgid "replication origin \"%s\" already exists" +#~ msgstr "el origen de replicación «%s» ya existe" diff --git a/src/backend/po/fr.po b/src/backend/po/fr.po index 4ee7e99a661..7f0ffa72f1b 100644 --- a/src/backend/po/fr.po +++ b/src/backend/po/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-05 00:00+0000\n" -"PO-Revision-Date: 2025-02-05 09:04+0100\n" +"POT-Creation-Date: 2025-09-19 19:45+0000\n" +"PO-Revision-Date: 2025-09-20 10:59+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.7\n" #: ../common/config_info.c:134 ../common/config_info.c:142 ../common/config_info.c:150 ../common/config_info.c:158 ../common/config_info.c:166 ../common/config_info.c:174 ../common/config_info.c:182 ../common/config_info.c:190 msgid "not recorded" @@ -28,19 +28,19 @@ msgstr "non enregistré" msgid "could not open file \"%s\" for reading: %m" msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m" -#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3576 access/transam/xlog.c:4817 access/transam/xlog.c:11662 access/transam/xlog.c:11675 access/transam/xlog.c:12130 access/transam/xlog.c:12210 access/transam/xlog.c:12247 access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 replication/logical/snapbuild.c:1872 -#: replication/logical/snapbuild.c:1914 replication/logical/snapbuild.c:1941 replication/slot.c:1727 replication/slot.c:1768 replication/walsender.c:545 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 +#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3593 access/transam/xlog.c:4842 access/transam/xlog.c:11736 access/transam/xlog.c:11749 access/transam/xlog.c:12204 access/transam/xlog.c:12284 access/transam/xlog.c:12321 access/transam/xlog.c:12381 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 replication/logical/snapbuild.c:1919 +#: replication/logical/snapbuild.c:1961 replication/logical/snapbuild.c:1988 replication/slot.c:1727 replication/slot.c:1768 replication/walsender.c:545 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format msgid "could not read file \"%s\": %m" msgstr "n'a pas pu lire le fichier « %s » : %m" -#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3581 access/transam/xlog.c:4822 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 +#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3598 access/transam/xlog.c:4847 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" -#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3616 access/transam/xlog.c:3621 access/transam/xlog.c:3946 access/transam/xlog.c:4787 access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 utils/cache/relmapper.c:898 +#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3444 access/transam/xlog.c:3633 access/transam/xlog.c:3638 access/transam/xlog.c:3957 access/transam/xlog.c:4812 access/transam/xlog.c:5740 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:735 storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" msgstr "n'a pas pu fermer le fichier « %s » : %m" @@ -63,26 +63,26 @@ msgstr "" "résultats ci-dessous sont incorrects, et l'installation de PostgreSQL\n" "est incompatible avec ce répertoire des données." -#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3487 access/transam/xlog.c:3531 access/transam/xlog.c:3726 access/transam/xlog.c:3811 access/transam/xlog.c:3914 access/transam/xlog.c:4807 access/transam/xlogutils.c:803 postmaster/syslogger.c:1488 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3612 -#: replication/logical/reorderbuffer.c:4163 replication/logical/reorderbuffer.c:4939 replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2563 storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 +#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3510 access/transam/xlog.c:3548 access/transam/xlog.c:3736 access/transam/xlog.c:3822 access/transam/xlog.c:3925 access/transam/xlog.c:4832 access/transam/xlogutils.c:803 postmaster/syslogger.c:1488 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3743 +#: replication/logical/reorderbuffer.c:4294 replication/logical/reorderbuffer.c:5070 replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2567 storage/file/copydir.c:161 storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier « %s » : %m" -#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11419 access/transam/xlog.c:11457 access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 +#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11493 access/transam/xlog.c:11531 access/transam/xlog.c:11944 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" msgstr "impossible d'écrire le fichier « %s » : %m" -#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3610 access/transam/xlog.c:4780 access/transam/xlog.c:10902 access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 storage/sync/sync.c:454 utils/cache/relmapper.c:891 +#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1747 access/transam/xlog.c:3437 access/transam/xlog.c:3627 access/transam/xlog.c:4805 access/transam/xlog.c:10976 access/transam/xlog.c:11017 replication/logical/snapbuild.c:1821 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:727 storage/file/fd.c:3623 storage/smgr/md.c:956 storage/smgr/md.c:997 storage/sync/sync.c:454 utils/cache/relmapper.c:891 #: utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier « %s » : %m" -#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 postmaster/postmaster.c:2552 postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 postmaster/postmaster.c:5975 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 tcop/postgres.c:3655 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 utils/mb/mbutils.c:814 -#: utils/mb/mbutils.c:841 utils/misc/guc.c:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6720 lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 postmaster/bgworker.c:349 postmaster/bgworker.c:948 postmaster/postmaster.c:2552 postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 postmaster/postmaster.c:5975 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 +#: replication/walsender.c:592 storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 +#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "mémoire épuisée" @@ -112,7 +112,7 @@ msgstr "n'a pas pu trouver un « %s » à exécuter" msgid "could not change directory to \"%s\": %m" msgstr "n'a pas pu modifier le répertoire par « %s » : %m" -#: ../common/exec.c:299 access/transam/xlog.c:11293 replication/basebackup.c:1428 utils/adt/misc.c:362 +#: ../common/exec.c:299 access/transam/xlog.c:11367 replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "n'a pas pu lire le lien symbolique « %s » : %m" @@ -132,105 +132,105 @@ msgstr "mémoire épuisée\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" -#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11395 access/transam/xlog.c:11433 access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1062 postmaster/pgarch.c:696 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 storage/file/fd.c:3157 -#: storage/file/fd.c:3360 utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 +#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11469 access/transam/xlog.c:11507 access/transam/xlog.c:11724 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1062 postmaster/pgarch.c:696 replication/basebackup.c:439 replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1700 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 storage/file/fd.c:1948 storage/file/fd.c:3148 +#: storage/file/fd.c:3351 utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 #, c-format msgid "could not stat file \"%s\": %m" msgstr "n'a pas pu tester le fichier « %s » : %m" -#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1520 storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1520 storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" -#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "n'a pas pu lire le répertoire « %s » : %m" -#: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1793 replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, 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:1084 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La séquence d'échappement « \\%s » est invalide." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1090 #, 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:1090 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Attendait une fin de l'entrée, mais a trouvé « %s »." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Élément de tableau ou « ] » attendu, mais « %s » trouvé." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "« , » ou « ] » attendu, mais « %s » trouvé." -#: ../common/jsonapi.c:1099 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "« : » attendu, mais « %s » trouvé." -#: ../common/jsonapi.c:1102 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Valeur JSON attendue, mais « %s » trouvé." -#: ../common/jsonapi.c:1105 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "La chaîne en entrée se ferme de manière inattendue." -#: ../common/jsonapi.c:1107 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Chaîne ou « } » attendu, mais « %s » trouvé." -#: ../common/jsonapi.c:1110 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "« , » ou « } » attendu, mais « %s » trouvé." -#: ../common/jsonapi.c:1113 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Chaîne attendue, mais « %s » trouvé." -#: ../common/jsonapi.c:1116 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "Le jeton « %s » n'est pas valide." -#: ../common/jsonapi.c:1119 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 ne peut pas être converti en texte." -#: ../common/jsonapi.c:1121 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "« \\u » doit être suivi par quatre chiffres hexadécimaux." -#: ../common/jsonapi.c:1124 +#: ../common/jsonapi.c:1127 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:1126 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Une substitution unicode haute ne doit pas suivre une substitution haute." -#: ../common/jsonapi.c:1128 jsonpath_scan.l:531 jsonpath_scan.l:541 jsonpath_scan.l:583 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:531 jsonpath_scan.l:541 jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Une substitution unicode basse ne doit pas suivre une substitution haute." @@ -265,7 +265,7 @@ msgstr "nom du fork invalide" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Les noms de fork valides sont « main », « fsm », « vm » et « init »." -#: ../common/restricted_token.c:64 libpq/auth.c:1519 libpq/auth.c:2551 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, 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" @@ -338,7 +338,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s" -#: ../common/username.c:45 libpq/auth.c:2051 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "l'utilisateur n'existe pas" @@ -464,7 +464,7 @@ msgstr "n'a pas pu vérifier l'appartenance du jeton d'accès : code d'erreur %l msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "requête de résumé d'intervalle BRIN pour la page « %s » de l'index « %u » n'a pas été enregistrée" -#: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11064 access/transam/xlog.c:11601 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 +#: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11138 access/transam/xlog.c:11675 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "restauration en cours" @@ -494,12 +494,12 @@ msgstr "n'a pas pu ouvrir la table parent de l'index « %s »" msgid "index \"%s\" is not valid" msgstr "l'index « %s » n'est pas valide" -#: access/brin/brin_bloom.c:753 access/brin/brin_bloom.c:795 access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 statistics/dependencies.c:662 statistics/dependencies.c:715 statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 statistics/dependencies.c:662 statistics/dependencies.c:715 statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 #, c-format msgid "cannot accept a value of type %s" msgstr "ne peut pas accepter une valeur de type %s" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 access/spgist/spgdoinsert.c:2275 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "la taille de la ligne index, %zu, dépasse le maximum, %zu, pour l'index « %s »" @@ -613,7 +613,7 @@ msgstr "le nombre de colonnes indexées (%d) dépasse la limite (%d)" msgid "index row requires %zu bytes, maximum size is %zu" msgstr "la ligne index requiert %zu octets, la taille maximum est %zu" -#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1922 +#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "code de format non supporté : %d" @@ -636,57 +636,62 @@ msgstr "limite dépassée des types de paramètres de la relation définie par l msgid "RESET must not include values for parameters" msgstr "RESET ne doit pas inclure de valeurs pour les paramètres" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "espace de nom du paramètre « %s » non reconnu" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "nom de l'option « %s » invalide : ne doit pas contenir « = »" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12604 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "les tables avec WITH OIDS ne sont pas supportées" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "paramètre « %s » non reconnu" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "le paramètre « %s » est spécifié plus d'une fois" -#: access/common/reloptions.c:1592 +#: access/common/reloptions.c:1601 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "valeur invalide pour l'option booléenne « %s » : %s" -#: access/common/reloptions.c:1604 +#: access/common/reloptions.c:1613 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "valeur invalide pour l'option de type integer « %s » : %s" -#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "valeur %s en dehors des limites pour l'option « %s »" -#: access/common/reloptions.c:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Les valeurs valides sont entre « %d » et « %d »." -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "valeur invalide pour l'option de type float « %s » : %s" -#: access/common/reloptions.c:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Les valeurs valides sont entre « %f » et « %f »." -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "valeur invalide pour l'option enum « %s » : %s" @@ -741,19 +746,19 @@ msgstr "ne peut pas accéder aux index temporaires d'autres sessions" msgid "failed to re-find tuple within index \"%s\"" msgstr "échec pour retrouver la ligne dans l'index « %s »" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "" "les anciens index GIN ne supportent pas les parcours complets d'index et les\n" "recherches de valeurs NULL" -#: access/gin/ginscan.c:432 +#: access/gin/ginscan.c:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Pour corriger ceci, faites un REINDEX INDEX « %s »." -#: access/gin/ginutil.c:145 executor/execExpr.c:2177 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 utils/adt/rowtypes.c:957 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6543 utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "n'a pas pu identifier une fonction de comparaison pour le type %s" @@ -792,7 +797,7 @@ msgstr "" msgid "Please REINDEX it." msgstr "Merci d'exécuter REINDEX sur cet objet." -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "correction d'une division non terminée dans l'index « %s », bloc %u" @@ -839,7 +844,7 @@ msgstr "" msgid "could not determine which collation to use for string hashing" msgstr "n'a pas pu déterminer le collationnement à utiliser pour le hachage de chaîne" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1971 commands/tablecmds.c:17155 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1517 +#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1971 commands/tablecmds.c:17198 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1517 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Utilisez la clause COLLATE pour configurer explicitement le collationnement." @@ -921,7 +926,7 @@ msgstr "tentative de mettre à jour une ligne invisible" msgid "could not obtain lock on row in relation \"%s\"" msgstr "n'a pas pu obtenir un verrou sur la relation « %s »" -#: access/heap/heapam.c:6342 commands/trigger.c:3122 executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6342 commands/trigger.c:3152 executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "la ligne à mettre à jour était déjà modifiée par une opération déclenchée par la commande courante" @@ -941,7 +946,7 @@ msgstr "la ligne est trop grande : taille %zu, taille maximale %zu" msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "n'a pas pu écrire le fichier « %s », a écrit %d de %d : %m" -#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3354 access/transam/xlog.c:3545 access/transam/xlog.c:4759 access/transam/xlog.c:11410 access/transam/xlog.c:11448 access/transam/xlog.c:11853 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 postmaster/postmaster.c:5673 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1261 +#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3353 access/transam/xlog.c:3562 access/transam/xlog.c:4784 access/transam/xlog.c:11484 access/transam/xlog.c:11522 access/transam/xlog.c:11927 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 postmaster/postmaster.c:5673 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" msgstr "n'a pas pu créer le fichier « %s » : %m" @@ -951,13 +956,13 @@ msgstr "n'a pas pu créer le fichier « %s » : %m" msgid "could not truncate file \"%s\" to %u: %m" msgstr "n'a pas pu tronquer le fichier « %s » en %u : %m" -#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3426 access/transam/xlog.c:3601 access/transam/xlog.c:4771 postmaster/postmaster.c:4644 postmaster/postmaster.c:4654 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1750 replication/slot.c:1586 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 +#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3425 access/transam/xlog.c:3618 access/transam/xlog.c:4796 postmaster/postmaster.c:4644 postmaster/postmaster.c:4654 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1797 replication/slot.c:1586 storage/file/buffile.c:506 storage/file/copydir.c:207 utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 #: utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" msgstr "n'a pas pu écrire dans le fichier « %s » : %m" -#: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4432 replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2111 replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 storage/file/fd.c:3239 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 utils/time/snapmgr.c:1606 +#: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 replication/slot.c:1683 storage/file/fd.c:785 storage/file/fd.c:3168 storage/file/fd.c:3230 storage/file/reinit.c:250 storage/ipc/dsm.c:315 storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 utils/time/snapmgr.c:1606 #, c-format msgid "could not remove file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" @@ -1084,7 +1089,7 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "%u page gelée.\n" msgstr[1] "%u pages gelées.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 commands/indexcmds.c:4154 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s." @@ -1240,7 +1245,7 @@ msgstr "transaction annulée lors du parcours du catalogue système" msgid "cannot access index \"%s\" while it is being reindexed" msgstr "ne peut pas accéder à l'index « %s » car il est en cours de réindexation" -#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16894 commands/tablecmds.c:18696 #, c-format msgid "\"%s\" is not an index" msgstr "« %s » n'est pas un index" @@ -1285,17 +1290,17 @@ msgstr "l'index « %s » contient une page interne à moitié morte" msgid "This can be caused by an interrupted VACUUM in version 9.3 or older, before upgrade. Please REINDEX it." msgstr "Ceci peut être dû à un VACUUM interrompu en version 9.3 ou antérieure, avant la mise à jour. Merci d'utiliser REINDEX." -#: access/nbtree/nbtutils.c:2680 +#: access/nbtree/nbtutils.c:2686 #, c-format msgid "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" msgstr "la taille de la ligne d'index, %zu, dépasse le maximum pour un btree de version %u, soit %zu, pour l'index « %s »" -#: access/nbtree/nbtutils.c:2686 +#: access/nbtree/nbtutils.c:2692 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "La ligne d'index référence le tuple (%u,%u) dans la relation « %s »." -#: access/nbtree/nbtutils.c:2690 +#: access/nbtree/nbtutils.c:2696 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1340,7 +1345,7 @@ msgstr "" msgid "\"%s\" is an index" msgstr "« %s » est un index" -#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13560 commands/tablecmds.c:16860 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "« %s » est un type composite" @@ -1736,7 +1741,7 @@ msgstr "taille invalide stockée dans le fichier « %s »" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "la somme de contrôle CRC calculée ne correspond par à la valeur enregistrée dans le fichier « %s »" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6721 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Échec lors de l'allocation d'un processeur de lecture de journaux de transactions." @@ -1973,79 +1978,74 @@ msgstr "ne peut pas valider de sous-transactions pendant une opération parallè msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "ne peut pas avoir plus de 2^32-1 sous-transactions dans une transaction" -#: access/transam/xlog.c:1839 +#: access/transam/xlog.c:1850 #, c-format msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X" msgstr "demande pour vider après la fin du WAL généré ; demande %X/%X, position actuelle %X/%X" -#: access/transam/xlog.c:2612 +#: access/transam/xlog.c:2621 #, c-format msgid "could not write to log file %s at offset %u, length %zu: %m" msgstr "n'a pas pu écrire le fichier de transactions %s au décalage %u, longueur %zu : %m" -#: access/transam/xlog.c:3489 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "This is known to fail occasionally during archive recovery, where it is harmless." -msgstr "Ceci est connu pour échouer de temps en temps lors d'une restauration d'archive. C'est sans danger." - -#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 replication/walsender.c:2557 +#: access/transam/xlog.c:4038 access/transam/xlogutils.c:798 replication/walsender.c:2561 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "le segment demandé du journal de transaction, %s, a déjà été supprimé" -#: access/transam/xlog.c:4289 +#: access/transam/xlog.c:4314 #, c-format msgid "could not rename file \"%s\": %m" msgstr "n'a pas pu renommer le fichier « %s » : %m" -#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 +#: access/transam/xlog.c:4356 access/transam/xlog.c:4366 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "le répertoire « %s » requis pour les journaux de transactions n'existe pas" -#: access/transam/xlog.c:4347 +#: access/transam/xlog.c:4372 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "création du répertoire manquant pour les journaux de transactions « %s »" -#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4375 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "n'a pas pu créer le répertoire « %s » manquant : %m" -#: access/transam/xlog.c:4472 +#: access/transam/xlog.c:4497 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "identifiant timeline %u inattendu dans le journal de transactions %s, décalage %u" -#: access/transam/xlog.c:4610 +#: access/transam/xlog.c:4635 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "la nouvelle timeline %u n'est pas une enfant de la timeline %u du système" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4649 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "" "la nouvelle timeline %u a été créée à partir de la timeline de la base de données système %u\n" "avant le point de restauration courant %X/%X" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4668 #, c-format msgid "new target timeline is %u" msgstr "la nouvelle timeline cible est %u" -#: access/transam/xlog.c:4679 +#: access/transam/xlog.c:4704 #, c-format msgid "could not generate secret authorization token" msgstr "n'a pas pu générer le jeton secret d'autorisation" -#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 access/transam/xlog.c:4871 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4890 access/transam/xlog.c:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4918 access/transam/xlog.c:4925 access/transam/xlog.c:4932 access/transam/xlog.c:4941 access/transam/xlog.c:4948 utils/init/miscinit.c:1635 +#: access/transam/xlog.c:4863 access/transam/xlog.c:4872 access/transam/xlog.c:4896 access/transam/xlog.c:4903 access/transam/xlog.c:4910 access/transam/xlog.c:4915 access/transam/xlog.c:4922 access/transam/xlog.c:4929 access/transam/xlog.c:4936 access/transam/xlog.c:4943 access/transam/xlog.c:4950 access/transam/xlog.c:4957 access/transam/xlog.c:4966 access/transam/xlog.c:4973 utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "les fichiers de la base de données sont incompatibles avec le serveur" -#: access/transam/xlog.c:4839 +#: access/transam/xlog.c:4864 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), but the server was compiled with PG_CONTROL_VERSION %d (0x%08x)." msgstr "" @@ -2053,149 +2053,149 @@ msgstr "" "%d (0x%08x) alors que le serveur a été compilé avec un PG_CONTROL_VERSION à\n" "%d (0x%08x)." -#: access/transam/xlog.c:4843 +#: access/transam/xlog.c:4868 #, c-format msgid "This could be a problem of mismatched byte ordering. It looks like you need to initdb." msgstr "" "Ceci peut être un problème d'incohérence dans l'ordre des octets.\n" "Il se peut que vous ayez besoin d'initdb." -#: access/transam/xlog.c:4848 +#: access/transam/xlog.c:4873 #, c-format msgid "The database cluster was initialized with PG_CONTROL_VERSION %d, but the server was compiled with PG_CONTROL_VERSION %d." msgstr "" "Le cluster de base de données a été initialisé avec un PG_CONTROL_VERSION à\n" "%d alors que le serveur a été compilé avec un PG_CONTROL_VERSION à %d." -#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4876 access/transam/xlog.c:4900 access/transam/xlog.c:4907 access/transam/xlog.c:4912 #, c-format msgid "It looks like you need to initdb." msgstr "Il semble que vous avez besoin d'initdb." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4887 #, c-format msgid "incorrect checksum in control file" msgstr "somme de contrôle incorrecte dans le fichier de contrôle" -#: access/transam/xlog.c:4872 +#: access/transam/xlog.c:4897 #, c-format msgid "The database cluster was initialized with CATALOG_VERSION_NO %d, but the server was compiled with CATALOG_VERSION_NO %d." msgstr "" "Le cluster de base de données a été initialisé avec un CATALOG_VERSION_NO à\n" "%d alors que le serveur a été compilé avec un CATALOG_VERSION_NO à %d." -#: access/transam/xlog.c:4879 +#: access/transam/xlog.c:4904 #, c-format msgid "The database cluster was initialized with MAXALIGN %d, but the server was compiled with MAXALIGN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un MAXALIGN à %d alors\n" "que le serveur a été compilé avec un MAXALIGN à %d." -#: access/transam/xlog.c:4886 +#: access/transam/xlog.c:4911 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "" "Le cluster de bases de données semble utiliser un format différent pour les\n" "nombres à virgule flottante de celui de l'exécutable serveur." -#: access/transam/xlog.c:4891 +#: access/transam/xlog.c:4916 #, c-format msgid "The database cluster was initialized with BLCKSZ %d, but the server was compiled with BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un BLCKSZ à %d alors que\n" "le serveur a été compilé avec un BLCKSZ à %d." -#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 access/transam/xlog.c:4908 access/transam/xlog.c:4915 access/transam/xlog.c:4922 access/transam/xlog.c:4929 access/transam/xlog.c:4936 access/transam/xlog.c:4944 access/transam/xlog.c:4951 +#: access/transam/xlog.c:4919 access/transam/xlog.c:4926 access/transam/xlog.c:4933 access/transam/xlog.c:4940 access/transam/xlog.c:4947 access/transam/xlog.c:4954 access/transam/xlog.c:4961 access/transam/xlog.c:4969 access/transam/xlog.c:4976 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Il semble que vous avez besoin de recompiler ou de relancer initdb." -#: access/transam/xlog.c:4898 +#: access/transam/xlog.c:4923 #, c-format msgid "The database cluster was initialized with RELSEG_SIZE %d, but the server was compiled with RELSEG_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un RELSEG_SIZE à %d\n" "alors que le serveur a été compilé avec un RELSEG_SIZE à %d." -#: access/transam/xlog.c:4905 +#: access/transam/xlog.c:4930 #, c-format msgid "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was compiled with XLOG_BLCKSZ %d." msgstr "" "Le cluster de base de données a été initialisé avec un XLOG_BLCKSZ à %d\n" "alors que le serveur a été compilé avec un XLOG_BLCKSZ à %d." -#: access/transam/xlog.c:4912 +#: access/transam/xlog.c:4937 #, c-format msgid "The database cluster was initialized with NAMEDATALEN %d, but the server was compiled with NAMEDATALEN %d." msgstr "" "Le cluster de bases de données a été initialisé avec un NAMEDATALEN à %d\n" "alors que le serveur a été compilé avec un NAMEDATALEN à %d." -#: access/transam/xlog.c:4919 +#: access/transam/xlog.c:4944 #, c-format msgid "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server was compiled with INDEX_MAX_KEYS %d." msgstr "" "Le groupe de bases de données a été initialisé avec un INDEX_MAX_KEYS à %d\n" "alors que le serveur a été compilé avec un INDEX_MAX_KEYS à %d." -#: access/transam/xlog.c:4926 +#: access/transam/xlog.c:4951 #, c-format msgid "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the server was compiled with TOAST_MAX_CHUNK_SIZE %d." msgstr "" "Le cluster de bases de données a été initialisé avec un TOAST_MAX_CHUNK_SIZE\n" "à %d alors que le serveur a été compilé avec un TOAST_MAX_CHUNK_SIZE à %d." -#: access/transam/xlog.c:4933 +#: access/transam/xlog.c:4958 #, c-format msgid "The database cluster was initialized with LOBLKSIZE %d, but the server was compiled with LOBLKSIZE %d." msgstr "" "Le cluster de base de données a été initialisé avec un LOBLKSIZE à %d alors que\n" "le serveur a été compilé avec un LOBLKSIZE à %d." -#: access/transam/xlog.c:4942 +#: access/transam/xlog.c:4967 #, c-format msgid "The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé sans USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé avec USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4949 +#: access/transam/xlog.c:4974 #, c-format msgid "The database cluster was initialized with USE_FLOAT8_BYVAL but the server was compiled without USE_FLOAT8_BYVAL." msgstr "" "Le cluster de base de données a été initialisé avec USE_FLOAT8_BYVAL\n" "alors que le serveur a été compilé sans USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4958 +#: access/transam/xlog.c:4983 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octet" msgstr[1] "La taille du segment WAL doit être une puissance de deux comprise entre 1 Mo et 1 Go, mais le fichier de contrôle indique %d octets" -#: access/transam/xlog.c:4970 +#: access/transam/xlog.c:4995 #, c-format msgid "\"min_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« min_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:4974 +#: access/transam/xlog.c:4999 #, c-format msgid "\"max_wal_size\" must be at least twice \"wal_segment_size\"" msgstr "« max_wal_size » doit être au moins le double de « wal_segment_size »" -#: access/transam/xlog.c:5408 +#: access/transam/xlog.c:5437 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "n'a pas pu écrire le « bootstrap » du journal des transactions : %m" -#: access/transam/xlog.c:5416 +#: access/transam/xlog.c:5445 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "" "n'a pas pu synchroniser sur disque (fsync) le « bootstrap » du journal des\n" "transactions : %m" -#: access/transam/xlog.c:5422 +#: access/transam/xlog.c:5451 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" @@ -2203,255 +2203,255 @@ msgstr "n'a pas pu fermer le « bootstrap » du journal des transactions : %m" # /* # * Check for old recovery API file: recovery.conf # */ -#: access/transam/xlog.c:5483 +#: access/transam/xlog.c:5512 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "utiliser le fichier de commande de la restauration « %s » n'est plus supporté" -#: access/transam/xlog.c:5548 +#: access/transam/xlog.c:5577 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "le mode de restauration n'est pas supporté pour les serveurs mono-utilisateur" -#: access/transam/xlog.c:5565 +#: access/transam/xlog.c:5594 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "ni primary_conninfo ni restore_command n'est spécifié" -#: access/transam/xlog.c:5566 +#: access/transam/xlog.c:5595 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "" "Le serveur de la base de données va régulièrement interroger le sous-répertoire\n" "pg_wal pour vérifier les fichiers placés ici." -#: access/transam/xlog.c:5574 +#: access/transam/xlog.c:5603 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "doit spécifier une restore_command quand le mode standby n'est pas activé" -#: access/transam/xlog.c:5612 +#: access/transam/xlog.c:5641 #, c-format msgid "recovery target timeline %u does not exist" msgstr "le timeline cible, %u, de la restauration n'existe pas" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5762 #, c-format msgid "archive recovery complete" msgstr "restauration de l'archive terminée" -#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 +#: access/transam/xlog.c:5828 access/transam/xlog.c:6104 #, c-format msgid "recovery stopping after reaching consistency" msgstr "arrêt de la restauration après avoir atteint le point de cohérence" -#: access/transam/xlog.c:5821 +#: access/transam/xlog.c:5849 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration avant l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5939 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "arrêt de la restauration avant validation de la transaction %u, %s" -#: access/transam/xlog.c:5918 +#: access/transam/xlog.c:5946 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "arrêt de la restauration avant annulation de la transaction %u, %s" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:5999 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "restauration en arrêt au point de restauration « %s », heure %s" -#: access/transam/xlog.c:5989 +#: access/transam/xlog.c:6017 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "arrêt de la restauration après l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6056 +#: access/transam/xlog.c:6084 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "arrêt de la restauration après validation de la transaction %u, %s" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6092 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "arrêt de la restauration après annulation de la transaction %u, %s" -#: access/transam/xlog.c:6109 +#: access/transam/xlog.c:6137 #, c-format msgid "pausing at the end of recovery" msgstr "pause à la fin de la restauration" -#: access/transam/xlog.c:6110 +#: access/transam/xlog.c:6138 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Exécuter pg_wal_replay_resume() pour promouvoir." -#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 +#: access/transam/xlog.c:6141 access/transam/xlog.c:6423 #, c-format msgid "recovery has paused" msgstr "restauration en pause" -#: access/transam/xlog.c:6114 +#: access/transam/xlog.c:6142 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Exécuter pg_wal_replay_resume() pour continuer." -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6414 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "le hot standby n'est pas possible à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 access/transam/xlog.c:6444 +#: access/transam/xlog.c:6415 access/transam/xlog.c:6442 access/transam/xlog.c:6472 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "%s = %d est un paramétrage plus bas que celui du serveur primaire, où sa valeur était %d." -#: access/transam/xlog.c:6396 +#: access/transam/xlog.c:6424 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Si la restauration sort de la pause, le serveur sera arrêté." -#: access/transam/xlog.c:6397 +#: access/transam/xlog.c:6425 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Vous pouvez alors redémarrer le serveur après avoir réaliser les modifications nécessaires sur la configuration." -#: access/transam/xlog.c:6408 +#: access/transam/xlog.c:6436 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "la promotion n'est pas possible à cause d'une configuration insuffisante des paramètres" -#: access/transam/xlog.c:6418 +#: access/transam/xlog.c:6446 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Redémarre le serveur après avoir effectuer les changements nécessaires de configuration." -#: access/transam/xlog.c:6442 +#: access/transam/xlog.c:6470 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "restauration annulée à cause d'un paramétrage insuffisant" -#: access/transam/xlog.c:6448 +#: access/transam/xlog.c:6476 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Vous pouvez redémarrer le serveur après avoir réalisé les modifications nécessaires sur la configuration." -#: access/transam/xlog.c:6470 +#: access/transam/xlog.c:6498 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "le journal de transactions a été généré avec le paramètre wal_level=minimal, ne peut pas continuer la restauration" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6499 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Ceci peut arriver si vous configurez temporairement wal_level à minimal sur le serveur." -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6500 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "Utilisez la sauvegarde prise lors que la configuration de wal_level était au-dessus du niveau minimal." -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6569 #, c-format msgid "control file contains invalid checkpoint location" msgstr "le fichier de contrôle contient un emplacement de checkpoint invalide" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6580 #, c-format msgid "database system was shut down at %s" msgstr "le système de bases de données a été arrêté à %s" -#: access/transam/xlog.c:6558 +#: access/transam/xlog.c:6586 #, c-format msgid "database system was shut down in recovery at %s" msgstr "le système de bases de données a été arrêté pendant la restauration à %s" -#: access/transam/xlog.c:6564 +#: access/transam/xlog.c:6592 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6570 +#: access/transam/xlog.c:6598 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "le système de bases de données a été interrompu lors d'une restauration à %s" -#: access/transam/xlog.c:6572 +#: access/transam/xlog.c:6600 #, c-format msgid "This probably means that some data is corrupted and you will have to use the last backup for recovery." msgstr "" "Ceci signifie probablement que des données ont été corrompues et que vous\n" "devrez utiliser la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:6578 +#: access/transam/xlog.c:6606 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "le système de bases de données a été interrompu lors d'une récupération à %s\n" "(moment de la journalisation)" -#: access/transam/xlog.c:6580 +#: access/transam/xlog.c:6608 #, c-format msgid "If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target." msgstr "" "Si c'est arrivé plus d'une fois, des données ont pu être corrompues et vous\n" "pourriez avoir besoin de choisir une cible de récupération antérieure." -#: access/transam/xlog.c:6586 +#: access/transam/xlog.c:6614 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "le système de bases de données a été interrompu ; dernier lancement connu à %s" -#: access/transam/xlog.c:6592 +#: access/transam/xlog.c:6620 #, c-format msgid "control file contains invalid database cluster state" msgstr "le fichier de contrôle contient un état invalide de l'instance" -#: access/transam/xlog.c:6649 +#: access/transam/xlog.c:6677 #, c-format msgid "entering standby mode" msgstr "entre en mode standby" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6680 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "début de la restauration de l'archive au XID %u" -#: access/transam/xlog.c:6656 +#: access/transam/xlog.c:6684 #, c-format msgid "starting point-in-time recovery to %s" msgstr "début de la restauration de l'archive à %s" -#: access/transam/xlog.c:6660 +#: access/transam/xlog.c:6688 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "début de la restauration PITR à « %s »" -#: access/transam/xlog.c:6664 +#: access/transam/xlog.c:6692 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "début de la restauration PITR à l'emplacement WAL (LSN) « %X/%X »" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6696 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "début de la restauration de l'archive jusqu'au point de cohérence le plus proche" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6699 #, c-format msgid "starting archive recovery" msgstr "début de la restauration de l'archive" -#: access/transam/xlog.c:6745 +#: access/transam/xlog.c:6773 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "n'a pas pu localiser l'enregistrement redo référencé par le point de vérification" -#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 +#: access/transam/xlog.c:6774 access/transam/xlog.c:6784 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2462,133 +2462,133 @@ msgstr "" "Si vous ne restaurez pas depuis une sauvegarde, essayez de supprimer « %s/backup_label ».\n" "Attention : supprimer « %s/backup_label » lors d'une restauration de sauvegarde entraînera la corruption de l'instance." -#: access/transam/xlog.c:6755 +#: access/transam/xlog.c:6783 #, c-format msgid "could not locate required checkpoint record" msgstr "n'a pas pu localiser l'enregistrement d'un point de vérification requis" -#: access/transam/xlog.c:6784 commands/tablespace.c:665 +#: access/transam/xlog.c:6812 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "n'a pas pu créer le lien symbolique « %s » : %m" -#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 +#: access/transam/xlog.c:6844 access/transam/xlog.c:6850 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ignore le fichier « %s » car le fichier « %s » n'existe pas" -#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 +#: access/transam/xlog.c:6846 access/transam/xlog.c:12460 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Le fichier « %s » a été renommé en « %s »." -#: access/transam/xlog.c:6824 +#: access/transam/xlog.c:6852 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "N'a pas pu renommer le fichier « %s » en « %s » : %m." -#: access/transam/xlog.c:6875 +#: access/transam/xlog.c:6903 #, c-format msgid "could not locate a valid checkpoint record" msgstr "n'a pas pu localiser un enregistrement d'un point de vérification valide" -#: access/transam/xlog.c:6913 +#: access/transam/xlog.c:6941 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "la timeline requise %u n'est pas un fils de l'historique de ce serveur" -#: access/transam/xlog.c:6915 +#: access/transam/xlog.c:6943 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Le dernier checkpoint est à %X/%X sur la timeline %u, mais dans l'historique de la timeline demandée, le serveur est sorti de cette timeline à %X/%X." -#: access/transam/xlog.c:6929 +#: access/transam/xlog.c:6957 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "la timeline requise, %u, ne contient pas le point de restauration minimum (%X/%X) sur la timeline %u" -#: access/transam/xlog.c:6959 +#: access/transam/xlog.c:6987 #, c-format msgid "invalid next transaction ID" msgstr "prochain ID de transaction invalide" -#: access/transam/xlog.c:7059 +#: access/transam/xlog.c:7087 #, c-format msgid "invalid redo in checkpoint record" msgstr "ré-exécution invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:7070 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "enregistrement de ré-exécution invalide dans le point de vérification d'arrêt" -#: access/transam/xlog.c:7110 +#: access/transam/xlog.c:7138 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "" "le système de bases de données n'a pas été arrêté proprement ; restauration\n" "automatique en cours" -#: access/transam/xlog.c:7114 +#: access/transam/xlog.c:7142 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "la restauration après crash commence par la timeline %u et a la timeline %u en cible" -#: access/transam/xlog.c:7161 +#: access/transam/xlog.c:7189 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label contient des données incohérentes avec le fichier de contrôle" -#: access/transam/xlog.c:7162 +#: access/transam/xlog.c:7190 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "" "Ceci signifie que la sauvegarde a été corrompue et que vous devrez utiliser\n" "la dernière sauvegarde pour la restauration." -#: access/transam/xlog.c:7389 +#: access/transam/xlog.c:7417 #, c-format msgid "redo starts at %X/%X" msgstr "la ré-exécution commence à %X/%X" -#: access/transam/xlog.c:7614 +#: access/transam/xlog.c:7642 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "le point d'arrêt de la restauration demandée se trouve avant le point\n" "cohérent de restauration" -#: access/transam/xlog.c:7652 +#: access/transam/xlog.c:7680 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "rejeu exécuté à %X/%X utilisation système : %s" -#: access/transam/xlog.c:7658 +#: access/transam/xlog.c:7686 #, c-format msgid "last completed transaction was at log time %s" msgstr "la dernière transaction a eu lieu à %s (moment de la journalisation)" -#: access/transam/xlog.c:7667 +#: access/transam/xlog.c:7695 #, c-format msgid "redo is not required" msgstr "la ré-exécution n'est pas nécessaire" -#: access/transam/xlog.c:7679 +#: access/transam/xlog.c:7707 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "la restauration s'est terminée avant d'avoir atteint la cible configurée pour la restauration" -#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 +#: access/transam/xlog.c:7791 access/transam/xlog.c:7795 #, c-format msgid "WAL ends before end of online backup" msgstr "le journal de transactions se termine avant la fin de la sauvegarde de base" -#: access/transam/xlog.c:7764 +#: access/transam/xlog.c:7792 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Tous les journaux de transactions générés pendant la sauvegarde en ligne doivent être disponibles pour la restauration." -#: access/transam/xlog.c:7768 +#: access/transam/xlog.c:7796 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "" @@ -2596,207 +2596,207 @@ msgstr "" "pg_stop_backup() et tous les journaux de transactions générés entre les deux\n" "doivent être disponibles pour la restauration." -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7799 #, c-format msgid "WAL ends before consistent recovery point" msgstr "Le journal de transaction se termine avant un point de restauration cohérent" -#: access/transam/xlog.c:7806 +#: access/transam/xlog.c:7842 #, c-format msgid "selected new timeline ID: %u" msgstr "identifiant d'un timeline nouvellement sélectionné : %u" -#: access/transam/xlog.c:8274 +#: access/transam/xlog.c:8310 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "entrée « %s » du répertoire inattendu trouvé dans %s" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8312 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Toutes les entrées du répertoire pg_tblspc devraient être des liens symboliques." -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8313 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "Supprimer ces répertoires, ou configurer allow_in_place_tablespaces à ON pour que la restauration se termine." -#: access/transam/xlog.c:8361 +#: access/transam/xlog.c:8397 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "état de restauration cohérent atteint à %X/%X" -#: access/transam/xlog.c:8570 +#: access/transam/xlog.c:8606 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "lien du point de vérification primaire invalide dans le fichier de contrôle" -#: access/transam/xlog.c:8574 +#: access/transam/xlog.c:8610 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "lien du point de vérification invalide dans le fichier backup_label" -#: access/transam/xlog.c:8592 +#: access/transam/xlog.c:8628 #, c-format msgid "invalid primary checkpoint record" msgstr "enregistrement du point de vérification primaire invalide" -#: access/transam/xlog.c:8596 +#: access/transam/xlog.c:8632 #, c-format msgid "invalid checkpoint record" msgstr "enregistrement du point de vérification invalide" -#: access/transam/xlog.c:8607 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "identifiant du gestionnaire de ressource invalide dans l'enregistrement primaire du point de vérification" -#: access/transam/xlog.c:8611 +#: access/transam/xlog.c:8647 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "identifiant du gestionnaire de ressource invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:8624 +#: access/transam/xlog.c:8660 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "xl_info invalide dans l'enregistrement du point de vérification primaire" -#: access/transam/xlog.c:8628 +#: access/transam/xlog.c:8664 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "xl_info invalide dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:8639 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid length of primary checkpoint record" msgstr "longueur invalide de l'enregistrement primaire du point de vérification" -#: access/transam/xlog.c:8643 +#: access/transam/xlog.c:8679 #, c-format msgid "invalid length of checkpoint record" msgstr "longueur invalide de l'enregistrement du point de vérification" -#: access/transam/xlog.c:8824 +#: access/transam/xlog.c:8860 #, c-format msgid "shutting down" msgstr "arrêt en cours" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8863 +#: access/transam/xlog.c:8899 #, c-format msgid "restartpoint starting:%s%s%s%s%s%s%s%s" msgstr "début du restartpoint :%s%s%s%s%s%s%s%s" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8875 +#: access/transam/xlog.c:8911 #, c-format msgid "checkpoint starting:%s%s%s%s%s%s%s%s" msgstr "début du checkpoint :%s%s%s%s%s%s%s%s" -#: access/transam/xlog.c:8935 +#: access/transam/xlog.c:8971 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "restartpoint terminé : a écrit %d tampons (%.1f%%); %d fichiers WAL ajoutés, %d supprimés, %d recyclés ; écriture=%ld.%03d s, synchronisation=%ld.%03d s, total=%ld.%03d s; fichiers synchronisés=%d, plus long=%ld.%03d s, moyenne=%ld.%03d s; distance=%d kB, estimation=%d kB" -#: access/transam/xlog.c:8955 +#: access/transam/xlog.c:8991 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "checkpoint terminé : a écrit %d tampons (%.1f%%); %d fichiers WAL ajoutés, %d supprimés, %d recyclés ; écriture=%ld.%03d s, synchronisation=%ld.%03d s, total=%ld.%03d s; fichiers synchronisés=%d, plus long=%ld.%03d s, moyenne=%ld.%03d s; distance=%d kB, estimation=%d kB" -#: access/transam/xlog.c:9406 +#: access/transam/xlog.c:9452 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "" "activité en cours du journal de transactions alors que le système de bases\n" "de données est en cours d'arrêt" -#: access/transam/xlog.c:9939 +#: access/transam/xlog.c:10011 #, c-format msgid "recovery restart point at %X/%X" msgstr "la ré-exécution en restauration commence à %X/%X" -#: access/transam/xlog.c:9941 +#: access/transam/xlog.c:10013 #, c-format msgid "Last completed transaction was at log time %s." msgstr "La dernière transaction a eu lieu à %s (moment de la journalisation)." -#: access/transam/xlog.c:10187 +#: access/transam/xlog.c:10261 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "point de restauration « %s » créé à %X/%X" -#: access/transam/xlog.c:10332 +#: access/transam/xlog.c:10406 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "identifiant de timeline précédent %u inattendu (identifiant de la timeline courante %u) dans l'enregistrement du point de vérification" -#: access/transam/xlog.c:10341 +#: access/transam/xlog.c:10415 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "" "identifiant timeline %u inattendu (après %u) dans l'enregistrement du point\n" "de vérification" -#: access/transam/xlog.c:10357 +#: access/transam/xlog.c:10431 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "identifiant timeline %u inattendu dans l'enregistrement du checkpoint, avant d'atteindre le point de restauration minimum %X/%X sur la timeline %u" -#: access/transam/xlog.c:10432 +#: access/transam/xlog.c:10506 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "la sauvegarde en ligne a été annulée, la restauration ne peut pas continuer" -#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 access/transam/xlog.c:10575 +#: access/transam/xlog.c:10563 access/transam/xlog.c:10619 access/transam/xlog.c:10649 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "identifiant timeline %u inattendu (devrait être %u) dans l'enregistrement du\n" "point de vérification" -#: access/transam/xlog.c:10733 +#: access/transam/xlog.c:10807 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "ignore avec succès le contrecord manquant à %X/%X, surchargé à %s" -#: access/transam/xlog.c:10948 +#: access/transam/xlog.c:11022 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fsync) le fichier %s : %m" -#: access/transam/xlog.c:10954 +#: access/transam/xlog.c:11028 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "n'a pas pu synchroniser sur disque (fdatasync) le fichier « %s » : %m" -#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 +#: access/transam/xlog.c:11139 access/transam/xlog.c:11676 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "les fonctions de contrôle des journaux de transactions ne peuvent pas être exécutées lors de la restauration." -#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 +#: access/transam/xlog.c:11148 access/transam/xlog.c:11685 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "Le niveau de journalisation n'est pas suffisant pour faire une sauvegarde en ligne" -#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 access/transam/xlogfuncs.c:308 +#: access/transam/xlog.c:11149 access/transam/xlog.c:11686 access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "" "wal_level doit être configuré à « replica » ou « logical »\n" "au démarrage du serveur." -#: access/transam/xlog.c:11080 +#: access/transam/xlog.c:11154 #, c-format msgid "backup label too long (max %d bytes)" msgstr "label de sauvegarde trop long (%d octets maximum)" -#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 access/transam/xlog.c:11439 +#: access/transam/xlog.c:11191 access/transam/xlog.c:11475 access/transam/xlog.c:11513 #, c-format msgid "a backup is already in progress" msgstr "une sauvegarde est déjà en cours" -#: access/transam/xlog.c:11118 +#: access/transam/xlog.c:11192 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Exécutez pg_stop_backup() et tentez de nouveau." @@ -2806,157 +2806,157 @@ msgstr "Exécutez pg_stop_backup() et tentez de nouveau." # * (i.e., since last restartpoint used as backup starting # * checkpoint) contain full-page writes. # */ -#: access/transam/xlog.c:11214 +#: access/transam/xlog.c:11288 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "Un journal de transaction généré avec full_page_writes=off a été rejoué depuis le dernier point de reprise (restartpoint)" -#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 +#: access/transam/xlog.c:11290 access/transam/xlog.c:11881 #, c-format msgid "This means that the backup being taken on the standby is corrupt and should not be used. Enable full_page_writes and run CHECKPOINT on the primary, and then try an online backup again." msgstr "Cela signifie que la sauvegarde en cours de réalisation sur le secondaire est corrompue et ne devrait pas être utilisée. Activez full_page_writes et lancez CHECKPOINT sur le primaire, puis recommencez la sauvegarde." -#: access/transam/xlog.c:11300 replication/basebackup.c:1433 utils/adt/misc.c:367 +#: access/transam/xlog.c:11374 replication/basebackup.c:1433 utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "la cible du lien symbolique « %s » est trop longue" -#: access/transam/xlog.c:11350 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 +#: access/transam/xlog.c:11424 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "les tablespaces ne sont pas supportés sur cette plateforme" -#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 +#: access/transam/xlog.c:11476 access/transam/xlog.c:11514 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "" "Si vous êtes certain qu'aucune sauvegarde n'est en cours, supprimez le\n" "fichier « %s » et recommencez de nouveau." -#: access/transam/xlog.c:11627 +#: access/transam/xlog.c:11701 #, c-format msgid "exclusive backup not in progress" msgstr "une sauvegarde exclusive n'est pas en cours" -#: access/transam/xlog.c:11654 +#: access/transam/xlog.c:11728 #, c-format msgid "a backup is not in progress" msgstr "aucune sauvegarde n'est en cours" -#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 access/transam/xlog.c:12144 access/transam/xlog.c:12150 access/transam/xlog.c:12198 access/transam/xlog.c:12278 access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11814 access/transam/xlog.c:11827 access/transam/xlog.c:12218 access/transam/xlog.c:12224 access/transam/xlog.c:12272 access/transam/xlog.c:12352 access/transam/xlog.c:12376 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "données invalides dans le fichier « %s »" -#: access/transam/xlog.c:11757 replication/basebackup.c:1287 +#: access/transam/xlog.c:11831 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "le standby a été promu lors de la sauvegarde en ligne" -#: access/transam/xlog.c:11758 replication/basebackup.c:1288 +#: access/transam/xlog.c:11832 replication/basebackup.c:1288 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "" "Cela signifie que la sauvegarde en cours de réalisation est corrompue et ne\n" "doit pas être utilisée. Recommencez la sauvegarde." -#: access/transam/xlog.c:11805 +#: access/transam/xlog.c:11879 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "Un journal de transaction généré avec full_page_writes=off a été rejoué pendant la sauvegarde en ligne" -#: access/transam/xlog.c:11925 +#: access/transam/xlog.c:11999 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "backup de base terminé, en attente de l'archivage des journaux de transactions nécessaires" -#: access/transam/xlog.c:11937 +#: access/transam/xlog.c:12011 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "toujours en attente de la fin de l'archivage de tous les segments de journaux de transactions requis (%d secondes passées)" -#: access/transam/xlog.c:11939 +#: access/transam/xlog.c:12013 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Vérifiez que votre archive_command s'exécute correctement. Vous pouvez annuler cette sauvegarde sans souci, mais elle ne sera pas utilisable sans tous les segments WAL." -#: access/transam/xlog.c:11946 +#: access/transam/xlog.c:12020 #, c-format msgid "all required WAL segments have been archived" msgstr "tous les journaux de transactions requis ont été archivés" -#: access/transam/xlog.c:11950 +#: access/transam/xlog.c:12024 #, c-format msgid "WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup" msgstr "L'archivage des journaux de transactions n'est pas activé ; vous devez vous assurer que tous les des journaux de transactions requis sont copiés par d'autres moyens pour terminer la sauvegarde" -#: access/transam/xlog.c:12005 +#: access/transam/xlog.c:12079 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "annulation de la sauvegarde due à la déconnexion du processus serveur avant que pg_stop_backup ne soit appelé" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12273 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "L'identifiant de timeline parsé est %u, mais %u était attendu." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12327 +#: access/transam/xlog.c:12401 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "rejeu des WAL à %X/%X pour %s" -#: access/transam/xlog.c:12375 +#: access/transam/xlog.c:12449 #, c-format msgid "online backup mode was not canceled" msgstr "le mode de sauvegarde en ligne n'a pas été annulé" -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12450 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Le fichier « %s » n'a pas pu être renommé en « %s » : %m." -#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 access/transam/xlog.c:12407 +#: access/transam/xlog.c:12459 access/transam/xlog.c:12471 access/transam/xlog.c:12481 #, c-format msgid "online backup mode canceled" msgstr "mode de sauvegarde en ligne annulé" -#: access/transam/xlog.c:12398 +#: access/transam/xlog.c:12472 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Les fichiers « %s » et « %s » sont renommés respectivement « %s » et « %s »." -#: access/transam/xlog.c:12408 +#: access/transam/xlog.c:12482 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Le fichier « %s » a été renommé en « %s », mais le fichier « %s » n'a pas pu être renommé en « %s » : %m." -#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12615 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "n'a pas pu lire le journal de transactions %s, décalage %u : %m" -#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12621 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "n'a pas pu lire à partir du segment %s du journal de transactions, décalage %u: lu %d sur %zu" -#: access/transam/xlog.c:13112 +#: access/transam/xlog.c:13188 #, c-format msgid "WAL receiver process shutdown requested" msgstr "le processus wal receiver a reçu une demande d'arrêt" -#: access/transam/xlog.c:13207 +#: access/transam/xlog.c:13294 #, c-format msgid "received promote request" msgstr "a reçu une demande de promotion" -#: access/transam/xlog.c:13220 +#: access/transam/xlog.c:13307 #, c-format msgid "promote trigger file found: %s" msgstr "fichier trigger de promotion trouvé : %s" -#: access/transam/xlog.c:13228 +#: access/transam/xlog.c:13315 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "n'a pas pu récupérer les propriétés du fichier trigger pour la promotion « %s » : %m" @@ -3014,13 +3014,13 @@ msgstr "une sauvegarde non exclusive est en cours" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Souhaitiez-vous utiliser pg_stop_backup('f') ?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3328 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 replication/walsender.c:3332 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 #: utils/adt/jsonfuncs.c:3814 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "la fonction renvoyant un ensemble a été appelée dans un contexte qui n'accepte pas un ensemble" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3332 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3336 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3100,124 +3100,124 @@ msgstr "décalage invalide de l'enregistrement %X/%X" msgid "contrecord is requested by %X/%X" msgstr "« contrecord » est requis par %X/%X" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "longueur invalide de l'enregistrement à %X/%X : voulait %u, a eu %u" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "il n'existe pas de drapeau contrecord à %X/%X" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%X" -#: access/transam/xlogreader.c:728 +#: access/transam/xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X" -#: access/transam/xlogreader.c:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X" -#: access/transam/xlogreader.c:795 +#: access/transam/xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "somme de contrôle des données du gestionnaire de ressources incorrecte à\n" "l'enregistrement %X/%X" -#: access/transam/xlogreader.c:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "numéro magique invalide %04X dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "bits d'information %04X invalides dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "Le fichier WAL provient d'une instance différente : l'identifiant système de la base dans le fichier WAL est %llu, alors que l'identifiant système de la base dans pg_control est %llu" -#: access/transam/xlogreader.c:869 +#: access/transam/xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Le fichier WAL provient d'une instance différente : taille invalide du segment dans l'en-tête de page" -#: access/transam/xlogreader.c:875 +#: access/transam/xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "Le fichier WAL provient d'une instance différente : XLOG_BLCKSZ incorrect dans l'en-tête de page" -#: access/transam/xlogreader.c:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, segment %u" -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment %s, décalage %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u désordonné à %X/%X" -#: access/transam/xlogreader.c:1298 +#: access/transam/xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X" -#: access/transam/xlogreader.c:1305 +#: access/transam/xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X" -#: access/transam/xlogreader.c:1341 +#: access/transam/xlogreader.c:1349 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%X" -#: access/transam/xlogreader.c:1357 +#: access/transam/xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%X" -#: access/transam/xlogreader.c:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X" -#: access/transam/xlogreader.c:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u invalide à %X/%X" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "enregistrement de longueur invalide à %X/%X" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "image compressée invalide à %X/%X, bloc %d" @@ -3227,12 +3227,12 @@ msgstr "image compressée invalide à %X/%X, bloc %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X nécessite une puissance de deux entre 1 MB et 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "--%s requiert une valeur" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "-c %s requiert une valeur" @@ -3378,8 +3378,8 @@ msgid "large object %u does not exist" msgstr "le « Large Object » %u n'existe pas" #: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 commands/dbcommands.c:158 commands/dbcommands.c:167 commands/dbcommands.c:176 commands/dbcommands.c:185 commands/dbcommands.c:194 commands/dbcommands.c:203 commands/dbcommands.c:212 commands/dbcommands.c:221 commands/dbcommands.c:230 commands/dbcommands.c:239 commands/dbcommands.c:261 commands/dbcommands.c:1541 commands/dbcommands.c:1550 commands/dbcommands.c:1559 -#: commands/dbcommands.c:1568 commands/extension.c:1757 commands/extension.c:1767 commands/extension.c:1777 commands/extension.c:3074 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:606 commands/functioncmds.c:772 commands/functioncmds.c:781 commands/functioncmds.c:790 commands/functioncmds.c:799 commands/functioncmds.c:2097 commands/functioncmds.c:2105 commands/publicationcmds.c:87 commands/publicationcmds.c:130 commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 -#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 +#: commands/dbcommands.c:1568 commands/extension.c:1757 commands/extension.c:1767 commands/extension.c:1777 commands/extension.c:3074 commands/foreigncmds.c:550 commands/foreigncmds.c:559 commands/functioncmds.c:606 commands/functioncmds.c:772 commands/functioncmds.c:781 commands/functioncmds.c:790 commands/functioncmds.c:799 commands/functioncmds.c:2097 commands/functioncmds.c:2105 commands/publicationcmds.c:87 commands/publicationcmds.c:130 commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 #: commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:402 replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 replication/walsender.c:894 replication/walsender.c:904 #, c-format msgid "conflicting or redundant options" @@ -3395,13 +3395,13 @@ msgstr "les droits par défaut ne peuvent pas être configurés pour les colonne msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "ne peut pas utiliser la clause IN SCHEMA lors de l'utilisation de GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 commands/tablecmds.c:7147 commands/tablecmds.c:7303 commands/tablecmds.c:7353 commands/tablecmds.c:7427 commands/tablecmds.c:7497 commands/tablecmds.c:7609 commands/tablecmds.c:7703 commands/tablecmds.c:7762 commands/tablecmds.c:7851 commands/tablecmds.c:7880 commands/tablecmds.c:8035 commands/tablecmds.c:8117 commands/tablecmds.c:8273 commands/tablecmds.c:8395 commands/tablecmds.c:11888 commands/tablecmds.c:12080 commands/tablecmds.c:12240 commands/tablecmds.c:13403 commands/tablecmds.c:15950 commands/trigger.c:942 parser/analyze.c:2471 -#: parser/parse_relation.c:714 parser/parse_target.c:1077 parser/parse_type.c:144 parser/parse_utilcmd.c:3425 parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2732 +#: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 commands/tablecmds.c:7180 commands/tablecmds.c:7336 commands/tablecmds.c:7386 commands/tablecmds.c:7460 commands/tablecmds.c:7530 commands/tablecmds.c:7642 commands/tablecmds.c:7736 commands/tablecmds.c:7795 commands/tablecmds.c:7884 commands/tablecmds.c:7913 commands/tablecmds.c:8068 commands/tablecmds.c:8150 commands/tablecmds.c:8306 commands/tablecmds.c:8428 commands/tablecmds.c:11908 commands/tablecmds.c:12100 commands/tablecmds.c:12260 commands/tablecmds.c:13446 commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 +#: parser/parse_relation.c:714 parser/parse_target.c:1077 parser/parse_type.c:144 parser/parse_utilcmd.c:3425 parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 utils/adt/ruleutils.c:2732 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 commands/tablecmds.c:249 commands/tablecmds.c:16824 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" msgstr "« %s » n'est pas une séquence" @@ -3821,12 +3821,12 @@ msgstr "le schéma d'OID %u n'existe pas" msgid "tablespace with OID %u does not exist" msgstr "le tablespace d'OID %u n'existe pas" -#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "le wrapper de données distantes d'OID %u n'existe pas" -#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "le serveur distant d'OID %u n'existe pas" @@ -3886,7 +3886,7 @@ msgstr "l'extension d'OID %u n'existe pas" msgid "publication with OID %u does not exist" msgstr "la publication d'OID %u n'existe pas" -#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "la souscription d'OID %u n'existe pas" @@ -3985,7 +3985,7 @@ msgstr[1] "" msgid "cannot drop %s because other objects depend on it" msgstr "n'a pas pu supprimer %s car d'autres objets en dépendent" -#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 +#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:346 replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 #, c-format msgid "%s" msgstr "%s" @@ -4028,7 +4028,7 @@ msgstr "Les modifications du catalogue système sont actuellement interdites." msgid "tables can have at most %d columns" msgstr "les tables peuvent avoir au plus %d colonnes" -#: catalog/heap.c:527 commands/tablecmds.c:7037 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "le nom de la colonne « %s » entre en conflit avec le nom d'une colonne système" @@ -4085,104 +4085,104 @@ msgstr "Une relation a un type associé du même nom, donc vous devez utiliser u msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "OID du heap de pg_class non configuré en mode de mise à jour binaire" -#: catalog/heap.c:2469 +#: catalog/heap.c:2529 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "ne peut pas ajouter une contrainte NO INHERIT pour la table partitionnée « %s »" -#: catalog/heap.c:2742 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "la contrainte de vérification « %s » existe déjà" -#: catalog/heap.c:2912 catalog/index.c:886 catalog/pg_constraint.c:670 commands/tablecmds.c:8769 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 commands/tablecmds.c:8802 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "la contrainte « %s » de la relation « %s » existe déjà" -#: catalog/heap.c:2919 +#: catalog/heap.c:2974 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec la constrainte non héritée sur la relation « %s »" -#: catalog/heap.c:2930 +#: catalog/heap.c:2985 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte héritée sur la relation « %s »" -#: catalog/heap.c:2940 +#: catalog/heap.c:2995 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la relation « %s »" -#: catalog/heap.c:2945 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "assemblage de la contrainte « %s » avec une définition héritée" -#: catalog/heap.c:3050 +#: catalog/heap.c:3105 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "ne peut pas utiliser la colonne générée « %s » dans une expression de génération de colonne" -#: catalog/heap.c:3052 +#: catalog/heap.c:3107 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Une colonne générée ne peut référencer une autre colonne générée." -#: catalog/heap.c:3058 +#: catalog/heap.c:3113 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "ne peut pas utiliser une variable de ligne dans l'expression de génération d'une colonne" -#: catalog/heap.c:3059 +#: catalog/heap.c:3114 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Ceci ferait que la colonne générée dépendrait de sa propre valeur." -#: catalog/heap.c:3114 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "l'expression de génération n'est pas immuable" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1285 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "la colonne « %s » est de type %s alors que l'expression par défaut est de type %s" -#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Vous devez réécrire l'expression ou lui appliquer une transformation de type." -#: catalog/heap.c:3194 +#: catalog/heap.c:3249 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "seule la table « %s » peut être référencée dans la contrainte de vérification" -#: catalog/heap.c:3492 +#: catalog/heap.c:3547 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "combinaison ON COMMIT et clé étrangère non supportée" -#: catalog/heap.c:3493 +#: catalog/heap.c:3548 #, c-format msgid "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT setting." msgstr "" "La table « %s » référence « %s » mais elles n'ont pas la même valeur pour le\n" "paramètre ON COMMIT." -#: catalog/heap.c:3498 +#: catalog/heap.c:3553 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "ne peut pas tronquer une table référencée dans une contrainte de clé étrangère" -#: catalog/heap.c:3499 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "La table « %s » référence « %s »." -#: catalog/heap.c:3501 +#: catalog/heap.c:3556 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Tronquez la table « %s » en même temps, ou utilisez TRUNCATE ... CASCADE." @@ -4249,12 +4249,12 @@ msgstr "DROP INDEX CONCURRENTLY doit être la première action dans une transact msgid "cannot reindex temporary tables of other sessions" msgstr "ne peut pas ré-indexer les tables temporaires des autres sessions" -#: catalog/index.c:3664 commands/indexcmds.c:3555 +#: catalog/index.c:3664 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "ne peut pas réindexer un index invalide sur une table TOAST" -#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 commands/tablecmds.c:3282 +#: catalog/index.c:3680 commands/indexcmds.c:3469 commands/indexcmds.c:3613 commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "ne peut pas déplacer la colonne système « %s »" @@ -4269,7 +4269,7 @@ msgstr "l'index « %s » a été réindexée" msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "ne peut pas réindexer l'index invalide « %s.%s » sur une table TOAST, ignoré" -#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5251 +#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5285 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "les références entre bases de données ne sont pas implémentées : « %s.%s.%s »" @@ -4399,27 +4399,27 @@ msgstr "ne peut pas créer des tables temporaires lors de la restauration" msgid "cannot create temporary tables during a parallel operation" msgstr "ne peut pas créer de tables temporaires pendant une opération parallèle" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 +#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "La syntaxe de la liste est invalide." -#: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 commands/tablecmds.c:12016 +#: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "« %s » n'est pas une table" -#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 commands/tablecmds.c:6169 commands/tablecmds.c:16829 commands/view.c:119 +#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "« %s » n'est pas une vue" -#: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 commands/tablecmds.c:16834 +#: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "« %s » n'est pas une vue matérialisée" -#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 commands/tablecmds.c:6172 commands/tablecmds.c:16839 +#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "« %s » n'est pas une table distante" @@ -4439,7 +4439,7 @@ msgstr "le nom de la colonne doit être qualifié" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "la valeur par défaut de la colonne « %s » de la relation « %s » n'existe pas" -#: catalog/objectaddress.c:1645 commands/functioncmds.c:139 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:139 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "le type « %s » n'existe pas" @@ -4459,7 +4459,7 @@ msgstr "la fonction %d (%s, %s) de %s n'existe pas" msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "la correspondance pour l'utilisateur « %s » sur le serveur « %s » n'existe pas" -#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:733 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "le serveur « %s » n'existe pas" @@ -5104,7 +5104,7 @@ msgstr "ne peut pas détacher la partition « %s »" msgid "The partition is being detached concurrently or has an unfinished detach." msgstr "La partition est en cours de détachement ou à un détachement non terminé." -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 commands/tablecmds.c:15139 +#: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 commands/tablecmds.c:15182 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Utiliser ALTER TABLE ... DETACH PARTITION ... FINALIZE pour terminer l'opération de détachement en attente." @@ -5384,17 +5384,17 @@ msgstr "" "ne peut pas réaffecter les objets appartenant à %s car ils sont nécessaires au\n" "système de bases de données" -#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "la souscription « %s » n'existe pas" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "n'a pas pu supprimer la correspondance des relations pour la souscription « %s »" -#: catalog/pg_subscription.c:434 +#: catalog/pg_subscription.c:459 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "La synchronization de la table « %s » est en cours et est dans l'état « %c »." @@ -5402,7 +5402,7 @@ msgstr "La synchronization de la table « %s » est en cours et est dans l'état #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:441 +#: catalog/pg_subscription.c:466 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Utiliser %s pour activer la souscription si elle n'est pas déjà activée ou utiliser %s pour supprimer la souscription." @@ -5457,7 +5457,7 @@ msgstr "Vous pouvez spécifier manuellement un nom de type multirange en utilisa msgid "invalid page in block %u of relation %s" msgstr "page invalide dans le bloc %u de la relation %s" -#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 commands/tablecmds.c:16694 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "« %s » n'est ni une table ni une vue matérialisée" @@ -5557,12 +5557,12 @@ msgstr "le paramètre « %s » doit être READ_ONLY, SHAREABLE, ou READ_WRITE" msgid "event trigger \"%s\" already exists" msgstr "le trigger sur événement « %s » existe déjà" -#: commands/alter.c:88 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "le wrapper de données distantes « %s » existe déjà" -#: commands/alter.c:91 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "le serveur « %s » existe déjà" @@ -5647,7 +5647,7 @@ msgstr "la méthode d'accès « %s » n'existe pas" msgid "handler function is not specified" msgstr "la fonction handler n'est pas spécifiée" -#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:699 parser/parse_clause.c:940 +#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" msgstr "la fonction %s doit renvoyer le type %s" @@ -5765,7 +5765,7 @@ msgstr "ne peut pas exécuter CLUSTER sur une table partitionnée" msgid "there is no previously clustered index for table \"%s\"" msgstr "il n'y a pas d'index CLUSTER précédent pour la table « %s »" -#: commands/cluster.c:187 commands/tablecmds.c:13858 commands/tablecmds.c:15718 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "l'index « %s » pour la table « %s » n'existe pas" @@ -5780,7 +5780,7 @@ msgstr "ne peut pas exécuter CLUSTER sur un catalogue partagé" msgid "cannot vacuum temporary tables of other sessions" msgstr "ne peut pas exécuter VACUUM sur les tables temporaires des autres sessions" -#: commands/cluster.c:471 commands/tablecmds.c:15728 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "« %s » n'est pas un index de la table « %s »" @@ -6813,7 +6813,7 @@ msgstr "« %s » est une fonction d'agrégat" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Utiliser DROP AGGREGATE pour supprimer les fonctions d'agrégat." -#: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 commands/tablecmds.c:3750 commands/tablecmds.c:3803 commands/tablecmds.c:16145 tcop/utility.c:1324 +#: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 commands/tablecmds.c:3750 commands/tablecmds.c:3803 commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "la relation « %s » n'existe pas, poursuite du traitement" @@ -6944,7 +6944,7 @@ msgstr "la règle « %s » de la relation « %s » n'existe pas, poursuite du tr msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "le wrapper de données distantes « %s » n'existe pas, poursuite du traitement" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "le serveur « %s » n'existe pas, poursuite du traitement" @@ -7310,108 +7310,108 @@ msgstr "" msgid "file \"%s\" is too large" msgstr "le fichier « %s » est trop gros" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "option « %s » non trouvé" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "option « %s » fournie plus d'une fois" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "droit refusé pour modifier le propriétaire du wrapper de données distantes « %s »" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "" "Doit être super-utilisateur pour modifier le propriétaire du wrapper de\n" "données distantes." -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Le propriétaire du wrapper de données distantes doit être un super-utilisateur." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:711 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "le wrapper de données distantes « %s » n'existe pas" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "droit refusé pour la création du wrapper de données distantes « %s »" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Doit être super-utilisateur pour créer un wrapper de données distantes." -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "droit refusé pour modifier le wrapper de données distantes « %s »" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Doit être super-utilisateur pour modifier un wrapper de données distantes." -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "" "la modification du validateur de wrapper de données distantes peut modifier\n" "le comportement des tables distantes existantes" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "" "la modification du validateur du wrapper de données distantes peut faire en\n" "sorte que les options des objets dépendants deviennent invalides" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "le serveur « %s » existe déjà, poursuite du traitement" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "la correspondance d'utilisateur « %s » existe déjà pour le serveur « %s », poursuite du traitement" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "la correspondance d'utilisateur « %s » existe déjà pour le serveur « %s »" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "la correspondance d'utilisateur « %s » n'existe pas pour le serveur « %s »" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "la correspondance d'utilisateur « %s » n'existe pas pour le serveur « %s », poursuite du traitement" -#: commands/foreigncmds.c:1511 foreign/foreign.c:399 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "le wrapper de données distantes « %s » n'a pas de gestionnaire" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "le wrapper de données distantes « %s » ne supporte pas IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "import de la table distante « %s »" @@ -7934,7 +7934,7 @@ msgstr "une colonne incluse ne supporte pas d'options NULLS FIRST/LAST" msgid "could not determine which collation to use for index expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression d'index" -#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17205 commands/typecmds.c:810 parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" msgstr "les collationnements ne sont pas supportés par le type %s" @@ -7971,7 +7971,7 @@ msgstr "la méthode d'accès « %s » ne supporte pas les options ASC/DESC" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "la méthode d'accès « %s » ne supporte pas les options NULLS FIRST/LAST" -#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17230 commands/tablecmds.c:17236 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" @@ -8002,77 +8002,77 @@ msgstr "" "il existe de nombreuses classes d'opérateur par défaut pour le type de\n" "données %s" -#: commands/indexcmds.c:2631 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "option de REINDEX « %s » non reconnue" -#: commands/indexcmds.c:2855 +#: commands/indexcmds.c:2889 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "la table « %s » n'a pas d'index qui puisse être réindexé concuremment" -#: commands/indexcmds.c:2869 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "la table « %s » n'a pas d'index à réindexer" -#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 commands/indexcmds.c:3544 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "ne peut pas réindexer les catalogues système de manière concurrente" -#: commands/indexcmds.c:2932 +#: commands/indexcmds.c:2966 #, c-format msgid "can only reindex the currently open database" msgstr "peut seulement réindexer la base de données en cours" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3054 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "ne peut pas réindexer les catalogues système de manière concurrente, ignore tout" -#: commands/indexcmds.c:3053 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "ne peut pas déplacer les relations systèmes, toutes ignorées" -#: commands/indexcmds.c:3100 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "lors de la réindexation de la table partitionnée « %s.%s »" -#: commands/indexcmds.c:3103 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "lors de la réindexation de l'index partitionné « %s.%s »" -#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "la table « %s.%s » a été réindexée" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "ne peut pas réindexer l'index invalide « %s.%s » de manière concurrente, ignoré" -#: commands/indexcmds.c:3454 +#: commands/indexcmds.c:3488 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "ne peut pas réindexer l'index de contrainte d'exclusion « %s.%s » de manière concurrente, ignoré" -#: commands/indexcmds.c:3609 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "ne peut pas réindexer ce type de relation de manière concurrente" -#: commands/indexcmds.c:3630 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "ne peut pas déplacer la relation non partagée dans le tablespace « %s »" -#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "l'index « %s.%s » a été réindexé" @@ -8394,7 +8394,7 @@ msgstr "" msgid "operator attribute \"%s\" cannot be changed" msgstr "l'attribut « %s » de l'opérateur ne peut pas être changé" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 commands/tablecmds.c:1582 commands/tablecmds.c:2162 commands/tablecmds.c:3402 commands/tablecmds.c:6112 commands/tablecmds.c:9048 commands/tablecmds.c:16750 commands/tablecmds.c:16785 commands/trigger.c:313 commands/trigger.c:1289 commands/trigger.c:1398 rewrite/rewriteDefine.c:278 rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 commands/tablecmds.c:1582 commands/tablecmds.c:2162 commands/tablecmds.c:3402 commands/tablecmds.c:6112 commands/tablecmds.c:9081 commands/tablecmds.c:16793 commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 commands/trigger.c:1398 rewrite/rewriteDefine.c:278 rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "droit refusé : « %s » est un catalogue système" @@ -8444,7 +8444,7 @@ msgstr "nom de curseur invalide : il ne doit pas être vide" msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "ne peut pas créer un curseur WITH HOLD à l'intérieur d'une opération restreinte pour sécurité" -#: commands/portalcmds.c:189 commands/portalcmds.c:242 executor/execCurrent.c:70 utils/adt/xml.c:2643 utils/adt/xml.c:2813 +#: commands/portalcmds.c:189 commands/portalcmds.c:242 executor/execCurrent.c:70 utils/adt/xml.c:2637 utils/adt/xml.c:2807 #, c-format msgid "cursor \"%s\" does not exist" msgstr "le curseur « %s » n'existe pas" @@ -8454,7 +8454,7 @@ msgstr "le curseur « %s » n'existe pas" msgid "invalid statement name: must not be empty" msgstr "nom de l'instruction invalide : ne doit pas être vide" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1483 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "n'a pas pu déterminer le type de données du paramètre $%d" @@ -8713,12 +8713,12 @@ msgstr "la séquence doit être dans le même schéma que la table avec laquelle msgid "cannot change ownership of identity sequence" msgstr "ne peut pas modifier le propriétaire de la séquence d'identité" -#: commands/sequence.c:1725 commands/tablecmds.c:13550 commands/tablecmds.c:16165 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "La séquence « %s » est liée à la table « %s »." -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "seule une relation seule est acceptée dans CREATE STATISTICS" @@ -8783,12 +8783,12 @@ msgstr "nom de colonne dupliqué dans la définition des statistiques" msgid "duplicate expression in statistics definition" msgstr "expression dupliquée dans la définition des statistiques" -#: commands/statscmds.c:639 commands/tablecmds.c:8014 +#: commands/statscmds.c:639 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "la cible statistique %d est trop basse" -#: commands/statscmds.c:647 commands/tablecmds.c:8022 +#: commands/statscmds.c:647 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "abaissement de la cible statistique à %d" @@ -8820,7 +8820,7 @@ msgstr "la souscription avec %s doit aussi configurer %s" msgid "must be superuser to create subscriptions" msgstr "doit être super-utilisateur pour créer des souscriptions" -#: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "n'a pas pu se connecter au publieur : %s" @@ -8861,63 +8861,63 @@ msgstr "Utilisez ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = fals msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH n'est pas autorisé pour les souscriptions désactivées" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "la souscription « %s » n'existe pas, poursuite du traitement" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "slot de réplication « %s » supprimé sur le publieur" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "n'a pas pu supprimer le slot de réplication « %s » sur le publieur : %s" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "droit refusé pour modifier le propriétaire de la souscription « %s »" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Le propriétaire d'une souscription doit être un super-utilisateur." -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "n'a pas pu recevoir la liste des tables répliquées à partir du publieur : %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "n'a pas pu se connecter au publieur lors de la tentative de suppression du slot de réplication « %s » : %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1581 +#: commands/subscriptioncmds.c:1583 #, c-format msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." msgstr "Utilisez %s pour désactiver l'abonnement, puis utilisez %s pour le dissocier du slot" -#: commands/subscriptioncmds.c:1612 +#: commands/subscriptioncmds.c:1614 #, c-format msgid "publication name \"%s\" used more than once" msgstr "nom de publication « %s » utilisé plus d'une fois" -#: commands/subscriptioncmds.c:1656 +#: commands/subscriptioncmds.c:1658 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "la publication « %s » est déjà dans la souscription « %s »" -#: commands/subscriptioncmds.c:1670 +#: commands/subscriptioncmds.c:1672 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "la publication « %s » n'est pas dans la souscription « %s »" -#: commands/subscriptioncmds.c:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "ne peut pas supprimer toutes les publications d'une souscription" @@ -8978,7 +8978,7 @@ msgstr "la vue matérialisée « %s » n'existe pas, poursuite du traitement" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Utilisez DROP MATERIALIZED VIEW pour supprimer une vue matérialisée." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18688 parser/parse_utilcmd.c:2265 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18739 parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" msgstr "l'index « %s » n'existe pas" @@ -9001,7 +9001,7 @@ msgstr "« %s » n'est pas un type" msgid "Use DROP TYPE to remove a type." msgstr "Utilisez DROP TYPE pour supprimer un type." -#: commands/tablecmds.c:277 commands/tablecmds.c:13389 commands/tablecmds.c:15868 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "la table distante « %s » n'existe pas" @@ -9027,7 +9027,7 @@ msgstr "" "ne peut pas créer une table temporaire à l'intérieur d'une fonction\n" "restreinte pour sécurité" -#: commands/tablecmds.c:738 commands/tablecmds.c:14675 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "la relation « %s » serait héritée plus d'une fois" @@ -9097,7 +9097,7 @@ msgstr "ne peut pas tronquer la table distante « %s »" msgid "cannot truncate temporary tables of other sessions" msgstr "ne peut pas tronquer les tables temporaires des autres sessions" -#: commands/tablecmds.c:2427 commands/tablecmds.c:14572 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "ne peut pas hériter de la table partitionnée « %s »" @@ -9117,12 +9117,12 @@ msgstr "la relation héritée « %s » n'est ni une table ni une table distante" msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas créer une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:2461 commands/tablecmds.c:14551 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "ne peut pas hériter à partir d'une relation temporaire « %s »" -#: commands/tablecmds.c:2471 commands/tablecmds.c:14559 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "ne peut pas hériter de la table temporaire d'une autre session" @@ -9167,7 +9167,7 @@ msgstr "la colonne « %s » a un conflit sur la méthode de compression" msgid "inherited column \"%s\" has a generation conflict" msgstr "la colonne héritée « %s » a un conflit de génération" -#: commands/tablecmds.c:2682 commands/tablecmds.c:2737 commands/tablecmds.c:12114 parser/parse_utilcmd.c:1260 parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 parser/parse_utilcmd.c:1857 +#: commands/tablecmds.c:2682 commands/tablecmds.c:2737 commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 parser/parse_utilcmd.c:1857 #, c-format msgid "cannot convert whole-row table reference" msgstr "ne peut pas convertir une référence de ligne complète de table" @@ -9457,12 +9457,12 @@ msgstr "ne peut pas ajouter une colonne à une table typée" msgid "cannot add column to a partition" msgstr "ne peut pas ajouter une colonne à une partition" -#: commands/tablecmds.c:6657 commands/tablecmds.c:14802 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "la table fille « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:6663 commands/tablecmds.c:14809 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "la table fille « %s » a un collationnement différent pour la colonne « %s »" @@ -9477,922 +9477,922 @@ msgstr "assemblage de la définition de la colonne « %s » pour le fils « %s msgid "cannot recursively add identity column to table that has child tables" msgstr "ne peut pas ajouter récursivement la colonne identité à une table qui a des tables filles" -#: commands/tablecmds.c:6967 +#: commands/tablecmds.c:7000 #, c-format msgid "column must be added to child tables too" msgstr "la colonne doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:7045 +#: commands/tablecmds.c:7078 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "la colonne « %s » de la relation « %s » existe déjà, poursuite du traitement" -#: commands/tablecmds.c:7052 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "la colonne « %s » de la relation « %s » existe déjà" -#: commands/tablecmds.c:7118 commands/tablecmds.c:11742 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une contrainte uniquement d'une table partitionnée quand des partitions existent" -#: commands/tablecmds.c:7119 commands/tablecmds.c:7436 commands/tablecmds.c:8463 commands/tablecmds.c:11743 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Ne spécifiez pas le mot clé ONLY." -#: commands/tablecmds.c:7156 commands/tablecmds.c:7362 commands/tablecmds.c:7504 commands/tablecmds.c:7618 commands/tablecmds.c:7712 commands/tablecmds.c:7771 commands/tablecmds.c:7889 commands/tablecmds.c:8055 commands/tablecmds.c:8125 commands/tablecmds.c:8281 commands/tablecmds.c:11897 commands/tablecmds.c:13412 commands/tablecmds.c:15959 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 commands/tablecmds.c:7537 commands/tablecmds.c:7651 commands/tablecmds.c:7745 commands/tablecmds.c:7804 commands/tablecmds.c:7922 commands/tablecmds.c:8088 commands/tablecmds.c:8158 commands/tablecmds.c:8314 commands/tablecmds.c:11917 commands/tablecmds.c:13455 commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "n'a pas pu modifier la colonne système « %s »" -#: commands/tablecmds.c:7162 commands/tablecmds.c:7510 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:7205 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "la colonne « %s » est dans une clé primaire" -#: commands/tablecmds.c:7210 +#: commands/tablecmds.c:7243 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "la colonne « %s » est dans un index utilisé comme identité de réplicat" -#: commands/tablecmds.c:7233 +#: commands/tablecmds.c:7266 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "la colonne « %s » est marquée NOT NULL dans la table parent" -#: commands/tablecmds.c:7433 commands/tablecmds.c:8946 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, c-format msgid "constraint must be added to child tables too" msgstr "la contrainte doit aussi être ajoutée aux tables filles" -#: commands/tablecmds.c:7434 +#: commands/tablecmds.c:7467 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "la colonne « %s » de la relation « %s » n'est pas déjà NOT NULL." -#: commands/tablecmds.c:7512 +#: commands/tablecmds.c:7545 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7517 +#: commands/tablecmds.c:7550 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "la colonne « %s » de la relation « %s » est une colonne générée" -#: commands/tablecmds.c:7520 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Utilisez à la place ALTER TABLE ... ALTER COLUMN ... DROP EXTENSION." -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7662 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "la colonne « %s » de la relation « %s » doit être déclarée NOT NULL avant que la colonne identité puisse être ajoutée" -#: commands/tablecmds.c:7635 +#: commands/tablecmds.c:7668 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "la colonne « %s » de la relation « %s » est déjà une colonne d'identité" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:7674 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "la colonne « %s » de la relation « %s » a déjà une valeur par défaut" -#: commands/tablecmds.c:7718 commands/tablecmds.c:7779 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité" -#: commands/tablecmds.c:7784 +#: commands/tablecmds.c:7817 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne d'identité, poursuite du traitement" -#: commands/tablecmds.c:7837 +#: commands/tablecmds.c:7870 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION doit aussi être appliqué aux tables filles" -#: commands/tablecmds.c:7859 +#: commands/tablecmds.c:7892 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "ne peut pas supprimer l'expression de génération à partir d'une colonne héritée" -#: commands/tablecmds.c:7897 +#: commands/tablecmds.c:7930 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée" -#: commands/tablecmds.c:7902 +#: commands/tablecmds.c:7935 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "la colonne « %s » de la relation « %s » n'est pas une colonne générée stockée, ignoré" -#: commands/tablecmds.c:8002 +#: commands/tablecmds.c:8035 #, c-format msgid "cannot refer to non-index column by number" msgstr "impossible de référencer une colonne non liée à une table par un nombre" -#: commands/tablecmds.c:8045 +#: commands/tablecmds.c:8078 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "la colonne numéro %d de la relation « %s » n'existe pas" -#: commands/tablecmds.c:8064 +#: commands/tablecmds.c:8097 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne incluse « %s » de l'index « %s »" -#: commands/tablecmds.c:8069 +#: commands/tablecmds.c:8102 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "ne peut modifier les statistiques sur la colonne « %s » de l'index « %s », qui n'est pas une expression" -#: commands/tablecmds.c:8071 +#: commands/tablecmds.c:8104 #, c-format msgid "Alter statistics on table column instead." msgstr "Modifiez les statistiques sur la colonne de la table à la place." -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "type de stockage « %s » invalide" -#: commands/tablecmds.c:8293 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "le type de données %s de la colonne peut seulement avoir un stockage PLAIN" -#: commands/tablecmds.c:8338 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "ne peut pas supprimer une colonne à une table typée" -#: commands/tablecmds.c:8401 +#: commands/tablecmds.c:8434 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la colonne « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:8414 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "ne peut pas supprimer la colonne système « %s »" -#: commands/tablecmds.c:8424 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "ne peut pas supprimer la colonne héritée « %s »" -#: commands/tablecmds.c:8437 +#: commands/tablecmds.c:8470 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut supprimer la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:8462 +#: commands/tablecmds.c:8495 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "ne peut pas supprimer une colonne sur une seule partition quand plusieurs partitions existent" -#: commands/tablecmds.c:8666 +#: commands/tablecmds.c:8699 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX n'est pas supporté sur les tables partitionnées" -#: commands/tablecmds.c:8691 +#: commands/tablecmds.c:8724 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX renommera l'index « %s » en « %s »" -#: commands/tablecmds.c:9026 +#: commands/tablecmds.c:9059 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas utiliser ONLY pour une clé étrangère sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:9032 +#: commands/tablecmds.c:9065 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "ne peut pas ajouter de clé étrangère NOT VALID sur la table partitionnée « %s » référençant la relation « %s »" -#: commands/tablecmds.c:9035 +#: commands/tablecmds.c:9068 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Cette fonctionnalité n'est pas encore implémentée sur les tables partitionnées." -#: commands/tablecmds.c:9042 commands/tablecmds.c:9447 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "la relation référencée « %s » n'est pas une table" -#: commands/tablecmds.c:9065 +#: commands/tablecmds.c:9098 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "les contraintes sur les tables permanentes peuvent seulement référencer des tables permanentes" -#: commands/tablecmds.c:9072 +#: commands/tablecmds.c:9105 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "les contraintes sur les tables non tracées peuvent seulement référencer des tables permanentes ou non tracées" -#: commands/tablecmds.c:9078 +#: commands/tablecmds.c:9111 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "les contraintes sur des tables temporaires ne peuvent référencer que des\n" "tables temporaires" -#: commands/tablecmds.c:9082 +#: commands/tablecmds.c:9115 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "" "les contraintes sur des tables temporaires doivent référencer les tables\n" "temporaires de cette session" -#: commands/tablecmds.c:9148 commands/tablecmds.c:9154 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "action %s invalide pour une clé étrangère contenant une colonne générée" -#: commands/tablecmds.c:9170 +#: commands/tablecmds.c:9203 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "nombre de colonnes de référence et référencées pour la clé étrangère en désaccord" -#: commands/tablecmds.c:9277 +#: commands/tablecmds.c:9310 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "la contrainte de clé étrangère « %s » ne peut pas être implémentée" -#: commands/tablecmds.c:9279 +#: commands/tablecmds.c:9312 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Les colonnes clés « %s » et « %s » sont de types incompatibles : %s et %s." -#: commands/tablecmds.c:9642 commands/tablecmds.c:10072 parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "les clés étrangères ne sont pas supportées par les tables distantes" -#: commands/tablecmds.c:10055 +#: commands/tablecmds.c:10075 #, c-format msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" msgstr "ne peut pas attacher la table « %s » comme une partition parce qu'elle est référencée par la clé étrangère « %s »" -#: commands/tablecmds.c:10525 commands/tablecmds.c:10806 commands/tablecmds.c:11699 commands/tablecmds.c:11774 +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "la contrainte « %s » de la relation « %s » n'existe pas" -#: commands/tablecmds.c:10532 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:10590 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "ne peut pas modifier la contrainte « %s » de la relation « %s »" -#: commands/tablecmds.c:10573 +#: commands/tablecmds.c:10593 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "La contrainte « %s » est dérivée de la contrainte « %s » de la relation « %s »" -#: commands/tablecmds.c:10575 +#: commands/tablecmds.c:10595 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Vous pouvez modifier la contrainte dont elle dérive à la place." -#: commands/tablecmds.c:10814 +#: commands/tablecmds.c:10834 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "la contrainte « %s » de la relation « %s » n'est pas une clé étrangère ou une contrainte de vérification" -#: commands/tablecmds.c:10892 +#: commands/tablecmds.c:10912 #, c-format msgid "constraint must be validated on child tables too" msgstr "la contrainte doit aussi être validée sur les tables enfants" -#: commands/tablecmds.c:10982 +#: commands/tablecmds.c:11002 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "la colonne « %s » référencée dans la contrainte de clé étrangère n'existe pas" -#: commands/tablecmds.c:10988 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "les colonnes systèmes ne peuvent pas être utilisées dans des clés étrangères" -#: commands/tablecmds.c:10992 +#: commands/tablecmds.c:11012 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "ne peut pas avoir plus de %d clés dans une clé étrangère" -#: commands/tablecmds.c:11057 +#: commands/tablecmds.c:11077 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "ne peut pas utiliser une clé primaire déferrable pour la table « %s » référencée" -#: commands/tablecmds.c:11074 +#: commands/tablecmds.c:11094 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "il n'y a pas de clé primaire pour la table « %s » référencée" -#: commands/tablecmds.c:11143 +#: commands/tablecmds.c:11163 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "la liste de colonnes référencées dans la clé étrangère ne doit pas contenir de duplicats" -#: commands/tablecmds.c:11237 +#: commands/tablecmds.c:11257 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "ne peut pas utiliser une contrainte unique déferrable pour la table\n" "référencée « %s »" -#: commands/tablecmds.c:11242 +#: commands/tablecmds.c:11262 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "il n'existe aucune contrainte unique correspondant aux clés données pour la table « %s » référencée" -#: commands/tablecmds.c:11655 +#: commands/tablecmds.c:11675 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "ne peut pas supprimer la contrainte héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:11705 +#: commands/tablecmds.c:11725 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "la contrainte « %s » de la relation « %s » n'existe pas, ignore" -#: commands/tablecmds.c:11881 +#: commands/tablecmds.c:11901 #, c-format msgid "cannot alter column type of typed table" msgstr "ne peut pas modifier le type d'une colonne appartenant à une table typée" -#: commands/tablecmds.c:11907 +#: commands/tablecmds.c:11927 #, c-format msgid "cannot specify USING when altering type of generated column" msgstr "ne peut pas indiquer USING lors de la modification du type d'une colonne générée" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 commands/tablecmds.c:17095 commands/trigger.c:653 rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 +#: commands/tablecmds.c:11928 commands/tablecmds.c:17048 commands/tablecmds.c:17138 commands/trigger.c:653 rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 #, c-format msgid "Column \"%s\" is a generated column." msgstr "la colonne « %s » est une colonne générée." -#: commands/tablecmds.c:11918 +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s »" -#: commands/tablecmds.c:11927 +#: commands/tablecmds.c:11947 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "ne peut pas modifier la colonne « %s » car elle fait partie de la clé de partitionnement de la relation « %s »" -#: commands/tablecmds.c:11977 +#: commands/tablecmds.c:11997 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "le résultat de la clause USING pour la colonne « %s » ne peut pas être converti automatiquement vers le type %s" -#: commands/tablecmds.c:11980 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "Vous pouvez avoir besoin d'ajouter une conversion explicite." -#: commands/tablecmds.c:11984 +#: commands/tablecmds.c:12004 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "la colonne « %s » ne peut pas être convertie vers le type %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11988 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Vous pouvez avoir besoin de spécifier \"USING %s::%s\"." -#: commands/tablecmds.c:12087 +#: commands/tablecmds.c:12107 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "ne peut pas modifier la colonne héritée « %s » de la relation « %s »" -#: commands/tablecmds.c:12115 +#: commands/tablecmds.c:12135 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "l'expression USING contient une référence de table de ligne complète." -#: commands/tablecmds.c:12126 +#: commands/tablecmds.c:12146 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "le type de colonne héritée « %s » doit aussi être renommée pour les tables filles" -#: commands/tablecmds.c:12251 +#: commands/tablecmds.c:12271 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "ne peut pas modifier la colonne « %s » deux fois" -#: commands/tablecmds.c:12289 +#: commands/tablecmds.c:12309 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "l'expression de génération de la colonne « %s » ne peut pas être convertie vers le type %s automatiquement" -#: commands/tablecmds.c:12294 +#: commands/tablecmds.c:12314 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "la valeur par défaut de la colonne « %s » ne peut pas être convertie vers le\n" "type %s automatiquement" -#: commands/tablecmds.c:12372 +#: commands/tablecmds.c:12392 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "ne peut pas modifier le type d'une colonne utilisée dans colonne générée" -#: commands/tablecmds.c:12373 +#: commands/tablecmds.c:12393 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "La colonne « %s » est utilisée par la colonne générée « %s »" -#: commands/tablecmds.c:12401 +#: commands/tablecmds.c:12421 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "ne peut pas modifier le type d'une colonne utilisée par une fonction ou une procédure" -#: commands/tablecmds.c:12402 commands/tablecmds.c:12416 commands/tablecmds.c:12435 commands/tablecmds.c:12453 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s dépend de la colonne « %s »" -#: commands/tablecmds.c:12415 +#: commands/tablecmds.c:12435 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ne peut pas modifier le type d'une colonne utilisée dans une vue ou une règle" -#: commands/tablecmds.c:12434 +#: commands/tablecmds.c:12454 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'un trigger" -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:12472 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ne peut pas modifier le type d'une colonne utilisée dans la définition d'une politique" -#: commands/tablecmds.c:13520 commands/tablecmds.c:13532 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "ne peut pas modifier le propriétaire de l'index « %s »" -#: commands/tablecmds.c:13522 commands/tablecmds.c:13534 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Modifier à la place le propriétaire de la table concernée par l'index." -#: commands/tablecmds.c:13548 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "ne peut pas modifier le propriétaire de la séquence « %s »" -#: commands/tablecmds.c:13562 commands/tablecmds.c:16861 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "Utilisez ALTER TYPE à la place." -#: commands/tablecmds.c:13571 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une séquence, ni une table distante" -#: commands/tablecmds.c:13910 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "ne peut pas avoir de nombreuses sous-commandes SET TABLESPACE" -#: commands/tablecmds.c:13987 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni un index, ni une table TOAST" -#: commands/tablecmds.c:14020 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION est uniquement accepté pour les vues dont la mise à jour est automatique" -#: commands/tablecmds.c:14273 +#: commands/tablecmds.c:14316 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "seuls les tables, index et vues matérialisées existent dans les tablespaces" -#: commands/tablecmds.c:14285 +#: commands/tablecmds.c:14328 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "ne peut pas déplacer les relations dans ou à partir du tablespace pg_global" -#: commands/tablecmds.c:14377 +#: commands/tablecmds.c:14420 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "annulation car le verrou sur la relation « %s.%s » n'est pas disponible" -#: commands/tablecmds.c:14393 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "aucune relation correspondante trouvée dans le tablespace « %s »" -#: commands/tablecmds.c:14510 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "ne peut pas modifier l'héritage d'une table typée" -#: commands/tablecmds.c:14515 commands/tablecmds.c:15071 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "ne peut pas modifier l'héritage d'une partition" -#: commands/tablecmds.c:14520 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "ne peut pas modifier l'héritage d'une table partitionnée" -#: commands/tablecmds.c:14566 +#: commands/tablecmds.c:14609 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "ne peut pas hériter à partir d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:14579 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "ne peut pas hériter d'une partition" -#: commands/tablecmds.c:14601 commands/tablecmds.c:17507 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17550 #, c-format msgid "circular inheritance not allowed" msgstr "héritage circulaire interdit" -#: commands/tablecmds.c:14602 commands/tablecmds.c:17508 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17551 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "« %s » est déjà un enfant de « %s »." -#: commands/tablecmds.c:14615 +#: commands/tablecmds.c:14658 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "le trigger « %s » empêche la table « %s » de devenir une fille dans l'héritage" -#: commands/tablecmds.c:14617 +#: commands/tablecmds.c:14660 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "les triggers ROW avec des tables de transition ne sont pas supportés dans les hiérarchies d'héritage." -#: commands/tablecmds.c:14820 +#: commands/tablecmds.c:14863 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "la colonne « %s » de la table enfant doit être marquée comme NOT NULL" -#: commands/tablecmds.c:14829 +#: commands/tablecmds.c:14872 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "la colonne « %s » de la table enfant doit être une colonne générée" -#: commands/tablecmds.c:14879 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "la colonne « %s » de la table enfant a une expression de génération en conflit" -#: commands/tablecmds.c:14907 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "la table enfant n'a pas de colonne « %s »" -#: commands/tablecmds.c:14995 +#: commands/tablecmds.c:15038 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "la table fille « %s » a un type différent pour la contrainte de vérification « %s »" -#: commands/tablecmds.c:15003 +#: commands/tablecmds.c:15046 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte non héritée sur la table fille « %s »" -#: commands/tablecmds.c:15014 +#: commands/tablecmds.c:15057 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "la contrainte « %s » entre en conflit avec une contrainte NOT VALID sur la table fille « %s »" -#: commands/tablecmds.c:15049 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "la table enfant n'a pas de contrainte « %s »" -#: commands/tablecmds.c:15135 +#: commands/tablecmds.c:15178 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "la partition « %s » déjà en attente de détachement de la table partitionnée « %s.%s »" -#: commands/tablecmds.c:15164 commands/tablecmds.c:15212 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "la relation « %s » n'est pas une partition de la relation « %s »" -#: commands/tablecmds.c:15218 +#: commands/tablecmds.c:15261 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "la relation « %s » n'est pas un parent de la relation « %s »" -#: commands/tablecmds.c:15446 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "les tables avec type ne peuvent pas hériter d'autres tables" -#: commands/tablecmds.c:15476 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "la colonne « %s » manque à la table" -#: commands/tablecmds.c:15487 +#: commands/tablecmds.c:15530 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "la table a une colonne « %s » alors que le type impose « %s »" -#: commands/tablecmds.c:15496 +#: commands/tablecmds.c:15539 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "la table « %s » a un type différent pour la colonne « %s »" -#: commands/tablecmds.c:15510 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "la table a une colonne supplémentaire « %s »" -#: commands/tablecmds.c:15562 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "« %s » n'est pas une table typée" -#: commands/tablecmds.c:15736 +#: commands/tablecmds.c:15779 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index non unique « %s » comme identité de réplicat" -#: commands/tablecmds.c:15742 +#: commands/tablecmds.c:15785 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index « %s » immédiat comme identité de réplicat" -#: commands/tablecmds.c:15748 +#: commands/tablecmds.c:15791 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "ne peut pas utiliser un index par expression « %s » comme identité de réplicat" -#: commands/tablecmds.c:15754 +#: commands/tablecmds.c:15797 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "ne peut pas utiliser l'index partiel « %s » comme identité de réplicat" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:15814 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne %d est une colonne système" -#: commands/tablecmds.c:15778 +#: commands/tablecmds.c:15821 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "l'index « %s » ne peut pas être utilisé comme identité de réplicat car la colonne « %s » peut être NULL" -#: commands/tablecmds.c:16025 +#: commands/tablecmds.c:16068 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "ne peut pas modifier le statut de journalisation de la table « %s » parce qu'elle est temporaire" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:16092 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "ne peut pas modifier la table « %s » en non journalisée car elle fait partie d'une publication" -#: commands/tablecmds.c:16051 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Les relations non journalisées ne peuvent pas être répliquées." -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16139 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en journalisé car elle référence la table non journalisée « %s »" -#: commands/tablecmds.c:16106 +#: commands/tablecmds.c:16149 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "n'a pas pu passer la table « %s » en non journalisé car elle référence la table journalisée « %s »" -#: commands/tablecmds.c:16164 +#: commands/tablecmds.c:16207 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "ne peut pas déplacer une séquence OWNED BY dans un autre schéma" -#: commands/tablecmds.c:16269 +#: commands/tablecmds.c:16312 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "la relation « %s » existe déjà dans le schéma « %s »" -#: commands/tablecmds.c:16844 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "« %s » n'est pas un type composite" -#: commands/tablecmds.c:16876 +#: commands/tablecmds.c:16919 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "« %s » n'est ni une table, ni une vue, ni une vue matérialisée, ni une séquence, ni une table distante" -#: commands/tablecmds.c:16911 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "stratégie de partitionnement « %s » non reconnue" -#: commands/tablecmds.c:16919 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "ne peut pas utiliser la stratégie de partitionnement « list » avec plus d'une colonne" -#: commands/tablecmds.c:16985 +#: commands/tablecmds.c:17028 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "la colonne « %s » nommée dans la clé de partitionnement n'existe pas" -#: commands/tablecmds.c:16993 +#: commands/tablecmds.c:17036 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "ne peut pas utiliser la colonne système « %s » comme clé de partitionnement" -#: commands/tablecmds.c:17004 commands/tablecmds.c:17094 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17137 #, c-format msgid "cannot use generated column in partition key" msgstr "ne peut pas utiliser une colonne générée dans une clé de partitionnement" -#: commands/tablecmds.c:17077 +#: commands/tablecmds.c:17120 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "les expressions de la clé de partitionnement ne peuvent pas contenir des références aux colonnes systèmes" -#: commands/tablecmds.c:17124 +#: commands/tablecmds.c:17167 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "les fonctions dans une expression de clé de partitionnement doivent être marquées comme\n" "IMMUTABLE" -#: commands/tablecmds.c:17133 +#: commands/tablecmds.c:17176 #, c-format msgid "cannot use constant expression as partition key" msgstr "ne peut pas utiliser une expression constante comme clé de partitionnement" -#: commands/tablecmds.c:17154 +#: commands/tablecmds.c:17197 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "n'a pas pu déterminer le collationnement à utiliser pour l'expression de partitionnement" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17232 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur hash ou définir une\n" "classe d'opérateur hash par défaut pour le type de données." -#: commands/tablecmds.c:17195 +#: commands/tablecmds.c:17238 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "" "Vous devez spécifier une classe d'opérateur btree ou définir une\n" "classe d'opérateur btree par défaut pour le type de données." -#: commands/tablecmds.c:17447 +#: commands/tablecmds.c:17490 #, c-format msgid "\"%s\" is already a partition" msgstr "« %s » est déjà une partition" -#: commands/tablecmds.c:17453 +#: commands/tablecmds.c:17496 #, c-format msgid "cannot attach a typed table as partition" msgstr "ne peut pas attacher une table typée à une partition" -#: commands/tablecmds.c:17469 +#: commands/tablecmds.c:17512 #, c-format msgid "cannot attach inheritance child as partition" msgstr "ne peut pas ajouter la table en héritage comme une partition" -#: commands/tablecmds.c:17483 +#: commands/tablecmds.c:17526 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "ne peut pas attacher le parent d'héritage comme partition" -#: commands/tablecmds.c:17517 +#: commands/tablecmds.c:17560 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "ne peut pas attacher une relation temporaire comme partition de la relation permanente « %s »" -#: commands/tablecmds.c:17525 +#: commands/tablecmds.c:17568 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "ne peut pas attacher une relation permanente comme partition de la relation temporaire « %s »" -#: commands/tablecmds.c:17533 +#: commands/tablecmds.c:17576 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "ne peut pas attacher comme partition d'une relation temporaire d'une autre session" -#: commands/tablecmds.c:17540 +#: commands/tablecmds.c:17583 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "ne peut pas attacher une relation temporaire d'une autre session comme partition" -#: commands/tablecmds.c:17560 +#: commands/tablecmds.c:17603 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "la table « %s » contient la colonne « %s » introuvable dans le parent « %s »" -#: commands/tablecmds.c:17563 +#: commands/tablecmds.c:17606 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "La nouvelle partition pourrait seulement contenir les colonnes présentes dans le parent." -#: commands/tablecmds.c:17575 +#: commands/tablecmds.c:17618 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "le trigger « %s » empêche la table « %s » de devenir une partition" -#: commands/tablecmds.c:17577 commands/trigger.c:459 +#: commands/tablecmds.c:17620 commands/trigger.c:459 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "les triggers ROW avec des tables de transition ne sont pas supportés sur les partitions" -#: commands/tablecmds.c:17756 +#: commands/tablecmds.c:17799 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "ne peut pas attacher la table distante « %s » comme partition de la table partitionnée « %s »" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:17802 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "La table partitionnée « %s » contient des index uniques." -#: commands/tablecmds.c:18083 +#: commands/tablecmds.c:18126 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "ne peut pas détacher les partitions en parallèle quand une partition par défaut existe" -#: commands/tablecmds.c:18192 +#: commands/tablecmds.c:18235 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "la table partitionnée « %s » a été supprimée de manière concurrente" -#: commands/tablecmds.c:18198 +#: commands/tablecmds.c:18241 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "la partition « %s » a été supprimée de façon concurrente" -#: commands/tablecmds.c:18722 commands/tablecmds.c:18742 commands/tablecmds.c:18762 commands/tablecmds.c:18781 commands/tablecmds.c:18823 +#: commands/tablecmds.c:18773 commands/tablecmds.c:18793 commands/tablecmds.c:18813 commands/tablecmds.c:18832 commands/tablecmds.c:18874 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "ne peut pas attacher l'index « %s » comme une partition de l'index « %s »" -#: commands/tablecmds.c:18725 +#: commands/tablecmds.c:18776 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "L'index « %s » est déjà attaché à un autre index." -#: commands/tablecmds.c:18745 +#: commands/tablecmds.c:18796 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "L'index « %s » n'est un index sur aucune des partitions de la table « %s »." -#: commands/tablecmds.c:18765 +#: commands/tablecmds.c:18816 #, c-format msgid "The index definitions do not match." msgstr "La définition de l'index correspond pas." -#: commands/tablecmds.c:18784 +#: commands/tablecmds.c:18835 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "L'index « %s » appartient à une contrainte dans la table « %s » mais aucune contrainte n'existe pour l'index « %s »." -#: commands/tablecmds.c:18826 +#: commands/tablecmds.c:18877 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Un autre index est déjà attaché pour la partition « %s »." -#: commands/tablecmds.c:19063 +#: commands/tablecmds.c:19114 #, c-format msgid "column data type %s does not support compression" msgstr "le type de données %s ne supporte pas la compression" -#: commands/tablecmds.c:19070 +#: commands/tablecmds.c:19121 #, c-format msgid "invalid compression method \"%s\"" msgstr "méthode de compression « %s » invalide" @@ -10492,7 +10492,7 @@ msgstr "n'a pas pu configurer les droits du répertoire « %s » : %m" msgid "directory \"%s\" already in use as a tablespace" msgstr "répertoire « %s » déjà utilisé comme tablespace" -#: commands/tablespace.c:768 commands/tablespace.c:781 commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3169 storage/file/fd.c:3560 +#: commands/tablespace.c:768 commands/tablespace.c:781 commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "n'a pas pu supprimer le répertoire « %s » : %m" @@ -10724,52 +10724,57 @@ msgstr "le trigger « %s » de la table « %s » n'existe pas" msgid "permission denied: \"%s\" is a system trigger" msgstr "droit refusé : « %s » est un trigger système" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "la fonction trigger %u a renvoyé la valeur NULL" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 commands/trigger.c:3056 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "un trigger BEFORE STATEMENT ne peut pas renvoyer une valeur" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "le déplacement de la ligne vers une autre partition par un trigger BEFORE FOR EACH ROW n'est pas supporté" -#: commands/trigger.c:2356 +#: commands/trigger.c:2358 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Avant d'exécuter le trigger « %s », la ligne devait aller dans la partition « %s.%s »." -#: commands/trigger.c:3123 executor/nodeModifyTable.c:1314 executor/nodeModifyTable.c:1388 executor/nodeModifyTable.c:1969 executor/nodeModifyTable.c:2059 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 +#, c-format +msgid "cannot collect transition tuples from child foreign tables" +msgstr "ne peut pas récupérer les lignes de transactions à partir des tables distantes enfants" + +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 executor/nodeModifyTable.c:2079 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Considérez l'utilisation d'un trigger AFTER au lieu d'un trigger BEFORE pour propager les changements sur les autres lignes." -#: commands/trigger.c:3152 executor/nodeLockRows.c:229 executor/nodeLockRows.c:238 executor/nodeModifyTable.c:238 executor/nodeModifyTable.c:1330 executor/nodeModifyTable.c:1986 executor/nodeModifyTable.c:2232 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 executor/nodeModifyTable.c:2252 #, c-format msgid "could not serialize access due to concurrent update" msgstr "n'a pas pu sérialiser un accès à cause d'une mise à jour en parallèle" -#: commands/trigger.c:3160 executor/nodeModifyTable.c:1420 executor/nodeModifyTable.c:2076 executor/nodeModifyTable.c:2256 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2276 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "n'a pas pu sérialiser un accès à cause d'une suppression en parallèle" -#: commands/trigger.c:4254 +#: commands/trigger.c:4284 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "ne peut pas déclencher un trigger déferré à l'intérieur d'une opération restreinte pour sécurité" -#: commands/trigger.c:5302 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "la contrainte « %s » n'est pas DEFERRABLE" -#: commands/trigger.c:5325 +#: commands/trigger.c:5359 #, c-format msgid "constraint \"%s\" does not exist" msgstr "la contrainte « %s » n'existe pas" @@ -11248,7 +11253,7 @@ msgstr "doit être super-utilisateur pour créer des utilisateurs avec l'attribu msgid "permission denied to create role" msgstr "droit refusé pour créer un rôle" -#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15260 gram.y:15305 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15260 gram.y:15305 utils/adt/acl.c:5265 utils/adt/acl.c:5271 #, c-format msgid "role name \"%s\" is reserved" msgstr "le nom du rôle « %s » est réservé" @@ -11317,7 +11322,7 @@ msgstr "droit refusé pour supprimer le rôle" msgid "cannot use special role specifier in DROP ROLE" msgstr "ne peut pas être le spécificateur de rôle spécial dans DROP ROLE" -#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 utils/adt/acl.c:5198 utils/init/miscinit.c:755 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "le rôle « %s » n'existe pas" @@ -11467,70 +11472,70 @@ msgstr "l'option DISABLE_PAGE_SKIPPING de la commande VACUUM ne pas être utilis msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "PROCESS_TOAST requis avec VACUUM FULL" -#: commands/vacuum.c:587 +#: commands/vacuum.c:596 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "ignore « %s » --- seul le super-utilisateur peut exécuter un VACUUM" -#: commands/vacuum.c:591 +#: commands/vacuum.c:600 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "" "ignore « %s » --- seul le super-utilisateur ou le propriétaire de la base de données\n" "peuvent exécuter un VACUUM" -#: commands/vacuum.c:595 +#: commands/vacuum.c:604 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "" "ignore « %s » --- seul le propriétaire de la table ou de la base de données\n" "peut exécuter un VACUUM" -#: commands/vacuum.c:610 +#: commands/vacuum.c:619 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "ignore « %s » --- seul le super-utilisateur peut l'analyser" -#: commands/vacuum.c:614 +#: commands/vacuum.c:623 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "ignore « %s » --- seul le super-utilisateur ou le propriétaire de la base de\n" "données peut l'analyser" -#: commands/vacuum.c:618 +#: commands/vacuum.c:627 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "" "ignore « %s » --- seul le propriétaire de la table ou de la base de données\n" "peut l'analyser" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:706 commands/vacuum.c:802 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "ignore le vacuum de « %s » --- verrou non disponible" -#: commands/vacuum.c:702 +#: commands/vacuum.c:711 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "ignore le vacuum de « %s » --- la relation n'existe plus" -#: commands/vacuum.c:718 commands/vacuum.c:798 +#: commands/vacuum.c:727 commands/vacuum.c:807 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "ignore l'analyse de « %s » --- verrou non disponible" -#: commands/vacuum.c:723 +#: commands/vacuum.c:732 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "ignore l'analyse de « %s » --- la relation n'existe plus" -#: commands/vacuum.c:1041 +#: commands/vacuum.c:1050 #, c-format msgid "oldest xmin is far in the past" msgstr "le plus ancien xmin est loin dans le passé" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1051 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11539,40 +11544,40 @@ msgstr "" "Fermer les transactions dès que possible pour éviter des problèmes de rebouclage d'identifiants de transaction.\n" "Vous pouvez avoir besoin de valider ou d'annuler les anciennes transactions préparées, ou de supprimer les slots de réplication trop anciens." -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1092 #, c-format msgid "oldest multixact is far in the past" msgstr "le plus ancien multixact est loin dans le passé" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1093 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "" "Fermez les transactions ouvertes avec multixacts rapidement pour éviter des problèmes de\n" "réinitialisation." -#: commands/vacuum.c:1769 +#: commands/vacuum.c:1778 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "certaines bases de données n'ont pas eu droit à l'opération de maintenance\n" "VACUUM depuis plus de 2 milliards de transactions" -#: commands/vacuum.c:1770 +#: commands/vacuum.c:1779 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" "Vous pouvez avoir déjà souffert de pertes de données suite à une\n" "réinitialisation de l'identifiant des transactions." -#: commands/vacuum.c:1938 +#: commands/vacuum.c:1954 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "ignore « %s » --- n'a pas pu exécuter un VACUUM sur les objets autres que\n" "des tables et les tables systèmes" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 utils/misc/guc.c:11777 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Mot clé non reconnu : « %s »." @@ -11787,7 +11792,7 @@ msgstr "le type de paramètre %d (%s) ne correspond pas à celui préparé dans msgid "no value found for parameter %d" msgstr "aucune valeur trouvée pour le paramètre %d" -#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 executor/nodeModifyTable.c:163 +#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, c-format msgid "table row type and query-specified row type do not match" msgstr "le type de ligne de la table et celui spécifié par la requête ne correspondent pas" @@ -11797,19 +11802,19 @@ msgstr "le type de ligne de la table et celui spécifié par la requête ne corr msgid "Query has too many columns." msgstr "La requête a trop de colonnes." -#: executor/execExpr.c:644 executor/nodeModifyTable.c:156 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" "La requête fournit une valeur pour une colonne supprimée à la position\n" "ordinale %d." -#: executor/execExpr.c:650 executor/execExprInterp.c:4063 executor/nodeModifyTable.c:139 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 executor/nodeModifyTable.c:174 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "La table a le type %s à la position ordinale %d alors que la requête attend %s." -#: executor/execExpr.c:1098 parser/parse_agg.c:828 +#: executor/execExpr.c:1098 parser/parse_agg.c:854 #, c-format msgid "window function calls cannot be nested" msgstr "les appels à la fonction window ne peuvent pas être imbriqués" @@ -11876,7 +11881,7 @@ msgstr "ne peut pas fusionner les tableaux incompatibles" msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Le tableau avec le type d'élément %s ne peut pas être inclus dans la construction ARRAY avec le type d'élément %s." -#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5944 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "le nombre de dimensions du tableau (%d) dépasse le maximum autorisé (%d)" @@ -11888,7 +11893,7 @@ msgstr "" "les tableaux multidimensionnels doivent avoir des expressions de tableaux\n" "avec les dimensions correspondantes" -#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6036 utils/adt/arrayfuncs.c:6377 utils/adt/arrayutils.c:88 utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "la taille du tableau dépasse le maximum permis (%d)" @@ -11957,157 +11962,157 @@ msgstr "La clé %s est en conflit avec la clé existante %s." msgid "Key conflicts with existing key." msgstr "La clé est en conflit avec une clé existante." -#: executor/execMain.c:1006 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "ne peut pas modifier la séquence « %s »" -#: executor/execMain.c:1012 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "ne peut pas modifier la relation TOAST « %s »" -#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 rewrite/rewriteHandler.c:3986 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3145 rewrite/rewriteHandler.c:3990 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ne peut pas insérer dans la vue « %s »" -#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 rewrite/rewriteHandler.c:3989 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3148 rewrite/rewriteHandler.c:3993 #, c-format msgid "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule." msgstr "Pour activer l'insertion dans la vue, fournissez un trigger INSTEAD OF INSERT ou une règle ON INSERT DO INSTEAD sans condition." -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 rewrite/rewriteHandler.c:3994 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3153 rewrite/rewriteHandler.c:3998 #, c-format msgid "cannot update view \"%s\"" msgstr "ne peut pas mettre à jour la vue « %s »" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 rewrite/rewriteHandler.c:3997 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3156 rewrite/rewriteHandler.c:4001 #, c-format msgid "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule." msgstr "Pour activer la mise à jour dans la vue, fournissez un trigger INSTEAD OF UPDATE ou une règle ON UPDATE DO INSTEAD sans condition." -#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 rewrite/rewriteHandler.c:4002 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3161 rewrite/rewriteHandler.c:4006 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ne peut pas supprimer à partir de la vue « %s »" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 rewrite/rewriteHandler.c:4005 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3164 rewrite/rewriteHandler.c:4009 #, c-format msgid "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule." msgstr "Pour activer la suppression dans la vue, fournissez un trigger INSTEAD OF DELETE ou une règle ON DELETE DO INSTEAD sans condition." -#: executor/execMain.c:1059 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "ne peut pas modifier la vue matérialisée « %s »" -#: executor/execMain.c:1071 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "ne peut pas insérer dans la table distante « %s »" -#: executor/execMain.c:1077 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "la table distante « %s » n'autorise pas les insertions" -#: executor/execMain.c:1084 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "ne peut pas modifier la table distante « %s »" -#: executor/execMain.c:1090 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "la table distante « %s » n'autorise pas les modifications" -#: executor/execMain.c:1097 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "ne peut pas supprimer à partir de la table distante « %s »" -#: executor/execMain.c:1103 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "la table distante « %s » n'autorise pas les suppressions" -#: executor/execMain.c:1114 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "ne peut pas modifier la relation « %s »" -#: executor/execMain.c:1141 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la séquence « %s »" -#: executor/execMain.c:1148 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la relation TOAST « %s »" -#: executor/execMain.c:1155 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la vue « %s »" -#: executor/execMain.c:1163 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "ne peut pas verrouiller les lignes dans la vue matérialisée « %s »" -#: executor/execMain.c:1172 executor/execMain.c:2591 executor/nodeLockRows.c:136 +#: executor/execMain.c:1192 executor/execMain.c:2613 executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "ne peut pas verrouiller la table distante « %s »" -#: executor/execMain.c:1178 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "n'a pas pu verrouiller les lignes dans la relation « %s »" -#: executor/execMain.c:1807 +#: executor/execMain.c:1827 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "la nouvelle ligne de la relation « %s » viole la contrainte de partitionnement" -#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 executor/execMain.c:2051 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "La ligne en échec contient %s." -#: executor/execMain.c:1889 +#: executor/execMain.c:1909 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "une valeur NULL viole la contrainte NOT NULL de la colonne « %s » dans la relation « %s »" -#: executor/execMain.c:1940 +#: executor/execMain.c:1960 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "la nouvelle ligne de la relation « %s » viole la contrainte de vérification « %s »" -#: executor/execMain.c:2049 +#: executor/execMain.c:2069 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "la nouvelle ligne viole la contrainte de vérification pour la vue « %s »" -#: executor/execMain.c:2059 +#: executor/execMain.c:2079 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne « %s » pour la table « %s »" -#: executor/execMain.c:2064 +#: executor/execMain.c:2084 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne pour la table « %s »" -#: executor/execMain.c:2071 +#: executor/execMain.c:2091 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne « %s » (expression USING) pour la table « %s »" -#: executor/execMain.c:2076 +#: executor/execMain.c:2096 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "la nouvelle ligne viole la politique de sécurité au niveau ligne (expression USING) pour la table « %s »" @@ -12137,7 +12142,7 @@ msgstr "mise à jour concurrente, nouvelle tentative" msgid "concurrent delete, retrying" msgstr "suppression concurrente, nouvelle tentative" -#: executor/execReplication.c:277 parser/parse_cte.c:301 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6255 utils/adt/rowtypes.c:1203 +#: executor/execReplication.c:277 parser/parse_cte.c:302 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6257 utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "n'a pas pu identifier un opérateur d'égalité pour le type %s" @@ -12372,30 +12377,35 @@ msgstr "FULL JOIN est supporté seulement avec les conditions de jointures MERGE #: executor/nodeModifyTable.c:164 #, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "La requête fournit une valeur pour une colonne générée à la position ordinale %d." + +#: executor/nodeModifyTable.c:184 +#, c-format msgid "Query has too few columns." msgstr "La requête n'a pas assez de colonnes." -#: executor/nodeModifyTable.c:1313 executor/nodeModifyTable.c:1387 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "la ligne à supprimer était déjà modifiée par une opération déclenchée par la commande courante" -#: executor/nodeModifyTable.c:1591 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "spécification ON UPDATE invalide" -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:1612 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "La ligne résultante apparaîtrait dans une partition différente de la ligne originale." -#: executor/nodeModifyTable.c:2211 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "la commande ON CONFLICT DO UPDATE ne peut pas affecter une ligne la deuxième fois" -#: executor/nodeModifyTable.c:2212 +#: executor/nodeModifyTable.c:2232 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "S'assure qu'aucune ligne proposée à l'insertion dans la même commande n'a de valeurs contraintes dupliquées." @@ -12410,7 +12420,7 @@ msgstr "le paramètre de TABLESAMPLE ne peut pas être NULL" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "le paramètre TABLESAMPLE REPEATABLE ne peut pas être NULL" -#: executor/nodeSubplan.c:325 executor/nodeSubplan.c:351 executor/nodeSubplan.c:405 executor/nodeSubplan.c:1174 +#: executor/nodeSubplan.c:306 executor/nodeSubplan.c:332 executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "plus d'une ligne renvoyée par une sous-requête utilisée comme une expression" @@ -12557,7 +12567,7 @@ msgstr "n'a pas pu envoyer la ligne dans la queue en mémoire partagée" msgid "user mapping not found for \"%s\"" msgstr "correspondance utilisateur non trouvée pour « %s »" -#: foreign/foreign.c:331 optimizer/plan/createplan.c:7047 optimizer/util/plancat.c:474 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 optimizer/util/plancat.c:474 #, c-format msgid "access to non-system foreign table is restricted" msgstr "l'accès à la table externe non système est restreint" @@ -12870,7 +12880,7 @@ msgstr "WITH TIES ne peut pas être indiqué sans clause ORDER BY" msgid "improper use of \"*\"" msgstr "mauvaise utilisation de « * »" -#: gram.y:16630 gram.y:16647 tsearch/spell.c:983 tsearch/spell.c:1000 tsearch/spell.c:1017 tsearch/spell.c:1034 tsearch/spell.c:1099 +#: gram.y:16630 gram.y:16647 tsearch/spell.c:984 tsearch/spell.c:1001 tsearch/spell.c:1018 tsearch/spell.c:1035 tsearch/spell.c:1101 #, c-format msgid "syntax error" msgstr "erreur de syntaxe" @@ -13209,117 +13219,117 @@ msgstr "Preuve malformée dans le client-final-message." msgid "Garbage found at the end of client-final-message." msgstr "Problème trouvé à la fin de client-final-message." -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "authentification échouée pour l'utilisateur « %s » : hôte rejeté" -#: libpq/auth.c:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "authentification « trust » échouée pour l'utilisateur « %s »" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Échec de l'authentification Ident pour l'utilisateur « %s »" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "authentification peer échouée pour l'utilisateur « %s »" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "authentification par mot de passe échouée pour l'utilisateur « %s »" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "authentification GSSAPI échouée pour l'utilisateur « %s »" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "authentification SSPI échouée pour l'utilisateur « %s »" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "authentification PAM échouée pour l'utilisateur « %s »" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "authentification BSD échouée pour l'utilisateur « %s »" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "authentification LDAP échouée pour l'utilisateur « %s »" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "authentification par le certificat échouée pour l'utilisateur « %s »" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "authentification RADIUS échouée pour l'utilisateur « %s »" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "authentification échouée pour l'utilisateur « %s » : méthode d'authentification invalide" -#: libpq/auth.c:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "La connexion correspond à la ligne %d du pg_hba.conf : « %s »" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "identifiant d'authentification configuré plus d'une fois" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "identifiant précédent : « %s » ; nouvel identifiant : « %s »" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "connexion authentifiée : identité=\"%s\" méthode=%s (%s:%d)" -#: libpq/auth.c:420 +#: libpq/auth.c:428 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "" "les certificats cert peuvent seulement être vérifiés si un emplacement de\n" "certificat racine est disponible" -#: libpq/auth.c:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "la connexion requiert un certificat client valide" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "chiffrement GSS" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "chiffrement SSL" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "aucun chiffrement" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "" @@ -13327,40 +13337,40 @@ msgstr "" "utilisateur « %s », %s" #. translator: last %s describes encryption state -#: libpq/auth.c:480 +#: libpq/auth.c:488 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "pg_hba.conf rejette la connexion pour l'hôte « %s », utilisateur « %s », base\n" "de données « %s », %s" -#: libpq/auth.c:518 +#: libpq/auth.c:526 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "Adresse IP du client résolue en « %s », la recherche inverse correspond bien." -#: libpq/auth.c:521 +#: libpq/auth.c:529 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "Adresse IP du client résolue en « %s », la recherche inverse n'est pas vérifiée." -#: libpq/auth.c:524 +#: libpq/auth.c:532 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "Adresse IP du client résolue en « %s », la recherche inverse ne correspond pas." -#: libpq/auth.c:527 +#: libpq/auth.c:535 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "N'a pas pu traduire le nom d'hôte « %s » du client en adresse IP : %s." -#: libpq/auth.c:532 +#: libpq/auth.c:540 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "N'a pas pu résoudre l'adresse IP du client à partir du nom d'hôte : %s." #. translator: last %s describes encryption state -#: libpq/auth.c:540 +#: libpq/auth.c:548 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "" @@ -13368,424 +13378,424 @@ msgstr "" "l'hôte « %s », utilisateur « %s », %s" #. translator: last %s describes encryption state -#: libpq/auth.c:548 +#: libpq/auth.c:556 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "" "aucune entrée dans pg_hba.conf pour l'hôte « %s », utilisateur « %s »,\n" "base de données « %s », %s" -#: libpq/auth.c:721 +#: libpq/auth.c:729 #, c-format msgid "expected password response, got message type %d" msgstr "en attente du mot de passe, a reçu un type de message %d" -#: libpq/auth.c:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "taille du paquet du mot de passe invalide" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "mot de passe vide renvoyé par le client" -#: libpq/auth.c:885 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "l'authentification MD5 n'est pas supportée quand « db_user_namespace » est activé" -#: libpq/auth.c:891 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "n'a pas pu générer le sel MD5 aléatoire" -#: libpq/auth.c:957 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "attendait une réponse SASL, a reçu le type de message %d" -#: libpq/auth.c:1086 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "n'a pas pu configurer l'environnement : %m" -#: libpq/auth.c:1122 +#: libpq/auth.c:1130 #, c-format msgid "expected GSS response, got message type %d" msgstr "en attente d'une réponse GSS, a reçu un message de type %d" -#: libpq/auth.c:1182 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "échec de l'acceptation du contexte de sécurité GSS" -#: libpq/auth.c:1223 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "échec lors de la récupération du nom de l'utilisateur avec GSS" -#: libpq/auth.c:1372 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "n'a pas pu obtenir les pièces d'identité SSPI" -#: libpq/auth.c:1397 +#: libpq/auth.c:1405 #, c-format msgid "expected SSPI response, got message type %d" msgstr "en attente d'une réponse SSPI, a reçu un message de type %d" -#: libpq/auth.c:1475 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "n'a pas pu accepter le contexte de sécurité SSPI" -#: libpq/auth.c:1537 +#: libpq/auth.c:1545 msgid "could not get token from SSPI security context" msgstr "n'a pas pu obtenir le jeton du contexte de sécurité SSPI" -#: libpq/auth.c:1676 libpq/auth.c:1695 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "n'a pas pu traduit le nom" -#: libpq/auth.c:1708 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "nom du royaume trop long" -#: libpq/auth.c:1723 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "traduction du nom de compte trop longue" -#: libpq/auth.c:1904 +#: libpq/auth.c:1912 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "n'a pas pu créer le socket pour la connexion Ident : %m" -#: libpq/auth.c:1919 +#: libpq/auth.c:1927 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "n'a pas pu se lier à l'adresse locale « %s » : %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1939 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "n'a pas pu se connecter au serveur Ident à l'adresse « %s », port %s : %m" -#: libpq/auth.c:1953 +#: libpq/auth.c:1961 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "n'a pas pu envoyer la requête au serveur Ident à l'adresse « %s », port %s : %m" -#: libpq/auth.c:1970 +#: libpq/auth.c:1978 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "n'a pas pu recevoir la réponse du serveur Ident à l'adresse « %s », port %s :\n" "%m" -#: libpq/auth.c:1980 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "réponse mal formatée du serveur Ident : « %s »" -#: libpq/auth.c:2033 +#: libpq/auth.c:2041 #, c-format msgid "peer authentication is not supported on this platform" msgstr "la méthode d'authentification «peer n'est pas supportée sur cette plateforme" -#: libpq/auth.c:2037 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "n'a pas pu obtenir l'authentification de l'autre : %m" -#: libpq/auth.c:2049 +#: libpq/auth.c:2057 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "n'a pas pu rechercher l'identifiant %ld de l'utilisateur local : %s" -#: libpq/auth.c:2150 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "erreur provenant de la couche PAM : %s" -#: libpq/auth.c:2161 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "conversation PAM %d/\"%s\" non supportée" -#: libpq/auth.c:2221 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "n'a pas pu créer l'authenticateur PAM : %s" -#: libpq/auth.c:2232 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) a échoué : %s" -#: libpq/auth.c:2264 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) a échoué : %s" -#: libpq/auth.c:2276 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) a échoué : %s" -#: libpq/auth.c:2289 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate a échoué : %s" -#: libpq/auth.c:2302 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt a échoué : %s" -#: libpq/auth.c:2313 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "n'a pas pu fermer l'authenticateur PAM : %s" -#: libpq/auth.c:2393 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "n'a pas pu initialiser LDAP : code d'erreur %d" -#: libpq/auth.c:2430 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "n'a pas pu extraire le nom de domaine depuis ldapbasedn" -#: libpq/auth.c:2438 +#: libpq/auth.c:2446 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "l'authentification LDAP n'a pu trouver les enregistrement DNS SRV pour « %s »" -#: libpq/auth.c:2440 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Définit un nom de serveur LDAP explicitement." -#: libpq/auth.c:2492 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "n'a pas pu initialiser LDAP : %s" -#: libpq/auth.c:2502 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps non supporté avec cette bibliothèque LDAP" -#: libpq/auth.c:2510 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "n'a pas pu initialiser LDAP : %m" -#: libpq/auth.c:2520 +#: libpq/auth.c:2528 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "n'a pas pu initialiser la version du protocole LDAP : %s" -#: libpq/auth.c:2560 +#: libpq/auth.c:2568 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "n'a pas pu charger la fonction _ldap_start_tls_sA de wldap32.dll" -#: libpq/auth.c:2561 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP via SSL n'est pas supporté sur cette plateforme." -#: libpq/auth.c:2577 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "n'a pas pu démarrer la session TLS LDAP : %s" -#: libpq/auth.c:2648 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "serveur LDAP non précisé, et il n'y a pas de ldapbasedn" -#: libpq/auth.c:2655 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "serveur LDAP non précisé" -#: libpq/auth.c:2717 +#: libpq/auth.c:2725 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "caractère invalide dans le nom de l'utilisateur pour l'authentification LDAP" -#: libpq/auth.c:2734 +#: libpq/auth.c:2742 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "n'a pas pu réaliser le lien LDAP initiale pour ldapbinddn « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2763 +#: libpq/auth.c:2771 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "n'a pas pu rechercher dans LDAP pour filtrer « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2777 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "l'utilisateur LDAP « %s » n'existe pas" -#: libpq/auth.c:2778 +#: libpq/auth.c:2786 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "la recherche LDAP pour le filtre « %s » sur le serveur « %s » n'a renvoyé aucun enregistrement." -#: libpq/auth.c:2782 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "l'utilisateur LDAP « %s » n'est pas unique" -#: libpq/auth.c:2783 +#: libpq/auth.c:2791 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "la recherche LDAP pour le filtre « %s » sur le serveur « %s » a renvoyé %d enregistrement." msgstr[1] "la recherche LDAP pour le filtre « %s » sur le serveur « %s » a renvoyé %d enregistrements." -#: libpq/auth.c:2803 +#: libpq/auth.c:2811 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "" "n'a pas pu obtenir le dn pour la première entrée correspondante « %s » sur\n" "le serveur « %s » : %s" -#: libpq/auth.c:2824 +#: libpq/auth.c:2832 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "" "n'a pas pu exécuter le unbind après la recherche de l'utilisateur « %s »\n" "sur le serveur « %s »" -#: libpq/auth.c:2855 +#: libpq/auth.c:2863 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "échec de connexion LDAP pour l'utilisateur « %s » sur le serveur « %s » : %s" -#: libpq/auth.c:2887 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "diagnostique LDAP: %s" -#: libpq/auth.c:2925 +#: libpq/auth.c:2933 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "" "l'authentification par le certificat a échoué pour l'utilisateur « %s » :\n" "le certificat du client ne contient aucun nom d'utilisateur" -#: libpq/auth.c:2946 +#: libpq/auth.c:2954 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "authentification par certificat échouée pour l'utilisateur « %s » : incapable de récupérer le DN sujet" -#: libpq/auth.c:2969 +#: libpq/auth.c:2977 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "la validation du certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de DN" -#: libpq/auth.c:2974 +#: libpq/auth.c:2982 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "l'authentification par certificat (clientcert=verify-full) a échoué pour l'utilisateur « %s » : incohérence de CN" -#: libpq/auth.c:3076 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "serveur RADIUS non précisé" -#: libpq/auth.c:3083 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "secret RADIUS non précisé" -#: libpq/auth.c:3097 +#: libpq/auth.c:3105 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "l'authentification RADIUS ne supporte pas les mots de passe de plus de %d caractères" -#: libpq/auth.c:3204 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "n'a pas pu traduire le nom du serveur RADIUS « %s » en une adresse : %s" -#: libpq/auth.c:3218 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "n'a pas pu générer le vecteur de chiffrement aléatoire" -#: libpq/auth.c:3252 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "n'a pas pu réaliser le chiffrement MD5 du mot de passe" -#: libpq/auth.c:3278 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "n'a pas pu créer le socket RADIUS : %m" -#: libpq/auth.c:3300 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "n'a pas pu se lier à la socket RADIUS : %m" -#: libpq/auth.c:3310 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "n'a pas pu transmettre le paquet RADIUS : %m" -#: libpq/auth.c:3343 libpq/auth.c:3369 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "dépassement du délai pour la réponse du RADIUS à partir de %s" -#: libpq/auth.c:3362 +#: libpq/auth.c:3370 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "n'a pas pu vérifier le statut sur la socket RADIUS : %m" -#: libpq/auth.c:3392 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "n'a pas pu lire la réponse RADIUS : %m" -#: libpq/auth.c:3405 libpq/auth.c:3409 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "la réponse RADIUS de %s a été envoyée à partir d'un mauvais port : %d" -#: libpq/auth.c:3418 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "réponse RADIUS de %s trop courte : %d" -#: libpq/auth.c:3425 +#: libpq/auth.c:3433 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "la réponse RADIUS de %s a une longueur corrompue : %d (longueur réelle %d)" -#: libpq/auth.c:3433 +#: libpq/auth.c:3441 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "la réponse RADIUS de %s correspond à une demande différente : %d (devrait être %d)" -#: libpq/auth.c:3458 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "n'a pas pu réaliser le chiffrement MD5 du paquet reçu" -#: libpq/auth.c:3467 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "la réponse RADIUS de %s a une signature MD5 invalide" -#: libpq/auth.c:3485 +#: libpq/auth.c:3493 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "la réponse RADIUS de %s a un code invalide (%d) pour l'utilisateur « %s »" @@ -13889,44 +13899,39 @@ msgstr "" "Le fichier doit avoir les permissions u=rw (0600) ou moins si le propriétaire est le même que la base de données,\n" "ou les permissions u=rw,g=r (0640) ou moins si le propriétaire est root." -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:208 msgid "GSSAPI wrap error" msgstr "erreur d'empaquetage GSSAPI" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "le message sortant GSSAPI n'utiliserait pas la confidentialité" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "le serveur a tenté d'envoyer un paquet GSSAPI surdimensionné (%zu > %zu)" -#: libpq/be-secure-gssapi.c:351 +#: libpq/be-secure-gssapi.c:358 libpq/be-secure-gssapi.c:580 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "paquet GSSAPI surdimensionné envoyé par le client (%zu > %zu)" -#: libpq/be-secure-gssapi.c:389 +#: libpq/be-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "erreur de dépaquetage GSSAPI" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "le message entrant GSSAPI n'a pas utilisé la confidentialité" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "paquet GSSAPI surdimensionné envoyé par le client (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "n'a pas pu accepter le contexte de sécurité GSSAPI" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "erreur de vérification de la taille GSSAPI" @@ -14675,7 +14680,7 @@ msgstr "il n'y a pas de connexion client" msgid "could not receive data from client: %m" msgstr "n'a pas pu recevoir les données du client : %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "arrêt de la connexion à cause d'une perte de synchronisation du protocole" @@ -15053,12 +15058,12 @@ msgstr "le type de nœud extensible « %s » existe déjà" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\" n'a pas été enregistré" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "la relation « %s » n'a pas un type composite" -#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" msgstr "n'a pas pu trouver de type tableau pour le type de données %s" @@ -15087,51 +15092,51 @@ msgid "%s cannot be applied to the nullable side of an outer join" msgstr "%s ne peut être appliqué sur le côté possiblement NULL d'une jointure externe" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: optimizer/plan/planner.c:1316 parser/analyze.c:1720 parser/analyze.c:1976 parser/analyze.c:3155 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 parser/analyze.c:3155 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s n'est pas autorisé avec UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "n'a pas pu implanter GROUP BY" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "" "Certains des types de données supportent seulement le hachage,\n" "alors que les autres supportent seulement le tri." -#: optimizer/plan/planner.c:4387 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "n'a pas pu implanter DISTINCT" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "n'a pas pu implanter PARTITION BY de window" -#: optimizer/plan/planner.c:5236 +#: optimizer/plan/planner.c:5266 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "" "Les colonnes de partitionnement de window doivent être d'un type de données\n" "triables." -#: optimizer/plan/planner.c:5240 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "n'a pas pu implanter ORDER BY dans le window" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Les colonnes de tri de la window doivent être d'un type de données triable." -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "trop d'enregistrements dans la table range" @@ -15606,7 +15611,7 @@ msgstr "un aggrégat de niveau externe ne peut pas contenir de variable de nivea msgid "aggregate function calls cannot contain set-returning function calls" msgstr "les appels à la fonction d'agrégat ne peuvent pas contenir des appels à des fonctions retournant des ensembles" -#: parser/parse_agg.c:770 parser/parse_expr.c:1678 parser/parse_expr.c:2159 parser/parse_func.c:883 +#: parser/parse_agg.c:770 parser/parse_expr.c:1678 parser/parse_expr.c:2167 parser/parse_func.c:883 #, c-format msgid "You might be able to move the set-returning function into a LATERAL FROM item." msgstr "Vous devriez être capable de déplacer la fonction SETOF dans un élément LATERAL FROM." @@ -15616,113 +15621,113 @@ msgstr "Vous devriez être capable de déplacer la fonction SETOF dans un élém msgid "aggregate function calls cannot contain window function calls" msgstr "les appels à la fonction d'agrégat ne peuvent pas contenir des appels à une fonction de fenêtrage" -#: parser/parse_agg.c:854 +#: parser/parse_agg.c:880 msgid "window functions are not allowed in JOIN conditions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les conditions de jointure" -#: parser/parse_agg.c:861 +#: parser/parse_agg.c:887 msgid "window functions are not allowed in functions in FROM" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les fonctions contenues dans la clause FROM" -#: parser/parse_agg.c:867 +#: parser/parse_agg.c:893 msgid "window functions are not allowed in policy expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions de politique" -#: parser/parse_agg.c:880 +#: parser/parse_agg.c:906 msgid "window functions are not allowed in window definitions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les définitions de fenêtres" -#: parser/parse_agg.c:912 +#: parser/parse_agg.c:938 msgid "window functions are not allowed in check constraints" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les contraintes CHECK" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:942 msgid "window functions are not allowed in DEFAULT expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions par défaut" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:945 msgid "window functions are not allowed in index expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions d'index" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:948 msgid "window functions are not allowed in statistics expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les expressions statistiques" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:951 msgid "window functions are not allowed in index predicates" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les prédicats d'index" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:954 msgid "window functions are not allowed in transform expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions de transformation" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:957 msgid "window functions are not allowed in EXECUTE parameters" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les paramètres d'EXECUTE" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:960 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les conditions WHEN des triggers" -#: parser/parse_agg.c:937 +#: parser/parse_agg.c:963 msgid "window functions are not allowed in partition bound" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les limites de partition" -#: parser/parse_agg.c:940 +#: parser/parse_agg.c:966 msgid "window functions are not allowed in partition key expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les expressions de clé de partitionnement" -#: parser/parse_agg.c:943 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in CALL arguments" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans les arguments de CALL" -#: parser/parse_agg.c:946 +#: parser/parse_agg.c:972 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les conditions WHERE d'un COPY FROM" -#: parser/parse_agg.c:949 +#: parser/parse_agg.c:975 msgid "window functions are not allowed in column generation expressions" msgstr "les fonctions de fenêtrage ne sont pas autorisées dans les expressions de génération de colonne" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_agg.c:972 parser/parse_clause.c:1843 +#: parser/parse_agg.c:998 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "les fonctions de fenêtrage ne sont pas autorisés dans %s" -#: parser/parse_agg.c:1006 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1032 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "le window « %s » n'existe pas" -#: parser/parse_agg.c:1090 +#: parser/parse_agg.c:1116 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "trop d'ensembles de regroupement présents (4096 maximum)" -#: parser/parse_agg.c:1230 +#: parser/parse_agg.c:1256 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "les fonctions d'agrégat ne sont pas autorisées dans le terme récursif d'une requête récursive" -#: parser/parse_agg.c:1423 +#: parser/parse_agg.c:1449 #, c-format msgid "column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function" msgstr "la colonne « %s.%s » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat" -#: parser/parse_agg.c:1426 +#: parser/parse_agg.c:1452 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Les arguments directs d'un agégat par ensemble ordonné doivent seulement utiliser des colonnes groupées." -#: parser/parse_agg.c:1431 +#: parser/parse_agg.c:1457 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "" "la sous-requête utilise une colonne « %s.%s » non groupée dans la requête\n" "externe" -#: parser/parse_agg.c:1595 +#: parser/parse_agg.c:1621 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "les arguments de la clause GROUPING doivent être des expressions de regroupement du niveau associé de la requête" @@ -16012,7 +16017,7 @@ msgstr "RANGE avec offset PRECEDING/FOLLOWING a de multiples interprétations po msgid "Cast the offset value to the exact intended type." msgstr "Transtypez la valeur d'offset vers exactement le type attendu." -#: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 parser/parse_expr.c:2060 parser/parse_expr.c:2662 parser/parse_target.c:1008 +#: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "ne peut pas convertir le type %s en %s" @@ -16209,151 +16214,151 @@ msgstr "" "la référence récursive à la requête « %s » ne doit pas apparaître à\n" "l'intérieur d'EXCEPT" -#: parser/parse_cte.c:136 +#: parser/parse_cte.c:137 #, c-format msgid "WITH query name \"%s\" specified more than once" msgstr "le nom de la requête WITH « %s » est spécifié plus d'une fois" -#: parser/parse_cte.c:307 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "n'a pas pu identifier un opérateur d'inégalité pour le type %s" -#: parser/parse_cte.c:334 +#: parser/parse_cte.c:335 #, c-format msgid "WITH clause containing a data-modifying statement must be at the top level" msgstr "la clause WITH contenant une instruction de modification de données doit être au plus haut niveau" -#: parser/parse_cte.c:383 +#: 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 "" "dans la requête récursive « %s », la colonne %d a le type %s dans le terme non\n" "récursif mais le type global %s" -#: parser/parse_cte.c:389 +#: parser/parse_cte.c:390 #, c-format msgid "Cast the output of the non-recursive term to the correct type." msgstr "Convertissez la sortie du terme non récursif dans le bon type." -#: parser/parse_cte.c:394 +#: 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 "requête récursive « %s » : la colonne %d a le collationnement « %s » dans un terme non récursifet un collationnement « %s » global" -#: parser/parse_cte.c:398 +#: parser/parse_cte.c:399 #, c-format msgid "Use the COLLATE clause to set the collation of the non-recursive term." msgstr "Utilisez la clause COLLATE pour configurer le collationnement du terme non récursif." -#: parser/parse_cte.c:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "la requête WITH n'est pas récursive" -#: parser/parse_cte.c:450 +#: 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 "avec une clause SEARCH ou CYCLE, le côté gauche de l'UNION doit être un SELECT" -#: parser/parse_cte.c:455 +#: 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 "avec une clause SEARCH ou CYCLE, le côté droit de l'UNION doit être un SELECT" -#: parser/parse_cte.c:470 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "colonne de recherche « %s » non présente dans la liste des colonnes de la requête WITH" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "la colonne de recherche « %s » est spécifiée plus d'une fois" -#: parser/parse_cte.c:486 +#: parser/parse_cte.c:487 #, c-format msgid "search sequence column name \"%s\" already used in WITH query column list" msgstr "nom de colonne « %s » de la séquence de recherche déjà utilisé dans la liste des colonnes de la requête WITH" -#: parser/parse_cte.c:503 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "la colonne cycle « %s » n'est pas dans la liste de colonne de la requête WITH" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "la colonne cycle « %s » est spécifiée plus d'une fois" -#: parser/parse_cte.c:519 +#: parser/parse_cte.c:520 #, c-format msgid "cycle mark column name \"%s\" already used in WITH query column list" msgstr "nom de colonne « %s » de marque du cycle déjà utilisé dans la liste des colonnes de la requête WITH" -#: parser/parse_cte.c:526 +#: parser/parse_cte.c:527 #, c-format msgid "cycle path column name \"%s\" already used in WITH query column list" msgstr "nom de colonne « %s » de chemin du cycle déjà utilisé dans la liste des colonnes de la requête WITH" -#: parser/parse_cte.c:534 +#: parser/parse_cte.c:535 #, c-format msgid "cycle mark column name and cycle path column name are the same" msgstr "le nom de colonne de marque du cycle est identique au nom de colonne de chemin du cycle" -#: parser/parse_cte.c:544 +#: parser/parse_cte.c:545 #, c-format msgid "search sequence column name and cycle mark column name are the same" msgstr "le nom de la colonne de séquence de recherche est identique au nom de la colonne de marque du cycle" -#: parser/parse_cte.c:551 +#: parser/parse_cte.c:552 #, c-format msgid "search sequence column name and cycle path column name are the same" msgstr "le nom de la colonne de séquence de recherche est identique au nom de la colonne de chemin du cycle" -#: parser/parse_cte.c:635 +#: parser/parse_cte.c:636 #, c-format msgid "WITH query \"%s\" has %d columns available but %d columns specified" msgstr "la requête WITH « %s » a %d colonnes disponibles mais %d colonnes spécifiées" -#: parser/parse_cte.c:815 +#: parser/parse_cte.c:868 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "la récursion mutuelle entre des éléments WITH n'est pas implantée" -#: parser/parse_cte.c:867 +#: parser/parse_cte.c:920 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "la requête récursive « %s » ne doit pas contenir des instructions de modification de données" -#: parser/parse_cte.c:875 +#: parser/parse_cte.c:928 #, c-format msgid "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] recursive-term" msgstr "" "la requête récursive « %s » n'a pas la forme terme-non-récursive UNION [ALL]\n" "terme-récursive" -#: parser/parse_cte.c:910 +#: parser/parse_cte.c:963 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY dans une requête récursive n'est pas implanté" -#: parser/parse_cte.c:916 +#: parser/parse_cte.c:969 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET dans une requête récursive n'est pas implémenté" -#: parser/parse_cte.c:922 +#: parser/parse_cte.c:975 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT dans une requête récursive n'est pas implémenté" -#: parser/parse_cte.c:928 +#: parser/parse_cte.c:981 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE dans une requête récursive n'est pas implémenté" -#: parser/parse_cte.c:1007 +#: parser/parse_cte.c:1060 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "la référence récursive à la requête « %s » ne doit pas apparaître plus d'une fois" @@ -16412,7 +16417,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF requiert que l'opérateur = retourne une valeur de type booléen" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%s ne doit pas renvoyer un ensemble" @@ -16428,7 +16433,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "la source d'un élément UPDATE multi-colonnes doit être un sous-SELECT ou une expression ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "les fonctions renvoyant un ensemble ne sont pas autorisées dans %s" @@ -16500,86 +16505,86 @@ msgstr "la sous-requête a trop de colonnes" msgid "subquery has too few columns" msgstr "la sous-requête n'a pas assez de colonnes" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, c-format msgid "cannot determine type of empty array" msgstr "ne peut pas déterminer le type d'un tableau vide" -#: parser/parse_expr.c:2001 +#: parser/parse_expr.c:2009 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Convertit explicitement vers le type désiré, par exemple ARRAY[]::integer[]." -#: parser/parse_expr.c:2015 +#: parser/parse_expr.c:2023 #, c-format msgid "could not find element type for data type %s" msgstr "n'a pas pu trouver le type d'élément pour le type de données %s" -#: parser/parse_expr.c:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "les expressions ROW peuvent avoir au plus %d entrées" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "la valeur d'un attribut XML sans nom doit être une référence de colonne" -#: parser/parse_expr.c:2304 +#: parser/parse_expr.c:2312 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "la valeur d'un élément XML sans nom doit être une référence de colonne" -#: parser/parse_expr.c:2319 +#: parser/parse_expr.c:2327 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "le nom de l'attribut XML « %s » apparaît plus d'une fois" -#: parser/parse_expr.c:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "ne peut pas convertir le résultat XMLSERIALIZE en %s" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "nombre différent d'entrées dans les expressions de ligne" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "n'a pas pu comparer des lignes de taille zéro" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "l'opérateur de comparaison de ligne doit renvoyer le type booléen, et non le\n" "type %s" -#: parser/parse_expr.c:2777 +#: parser/parse_expr.c:2785 #, c-format msgid "row comparison operator must not return a set" msgstr "l'opérateur de comparaison de ligne ne doit pas renvoyer un ensemble" -#: parser/parse_expr.c:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "n'a pas pu déterminer l'interprétation de l'opérateur de comparaison de ligne %s" -#: parser/parse_expr.c:2838 +#: parser/parse_expr.c:2846 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "" "Les opérateurs de comparaison de lignes doivent être associés à des familles\n" "d'opérateurs btree." -#: parser/parse_expr.c:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Il existe de nombreus candidats également plausibles." -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM requiert que l'opérateur = retourne une valeur de type booléen" @@ -17667,7 +17672,7 @@ msgstr "la colonne %d de la clé de partitionnement a pour type %s, mais la vale msgid "column %d of the partition key has type \"%s\", but supplied value is of type \"%s\"" msgstr "la colonne %d de la clé de partitionnement a pour type « %s », mais la valeur fournie a pour type « %s »" -#: port/pg_sema.c:209 port/pg_shmem.c:678 port/posix_sema.c:209 port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/pg_sema.c:209 port/pg_shmem.c:678 port/posix_sema.c:209 port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "n'a pas pu lire les informations sur le répertoire des données « %s » : %m" @@ -17747,17 +17752,17 @@ msgstr "" msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Terminez les anciens processus serveurs associés avec le répertoire de données « %s »." -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "n'a pas pu créer des sémaphores : %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "L'appel système qui a échoué était semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:129 +#: port/sysv_sema.c:144 #, 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" @@ -17772,7 +17777,7 @@ msgstr "" "La documentation de PostgreSQL contient plus d'informations sur la\n" "configuration de votre système avec PostgreSQL." -#: port/sysv_sema.c:159 +#: port/sysv_sema.c:174 #, 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 "" @@ -17915,27 +17920,27 @@ msgstr "n'a pas pu exécuter le processus autovacuum worker : %m" msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum : suppression de la table temporaire orpheline « %s.%s.%s »" -#: postmaster/autovacuum.c:2548 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "VACUUM automatique de la table « %s.%s.%s »" -#: postmaster/autovacuum.c:2551 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "ANALYZE automatique de la table « %s.%s.%s »" -#: postmaster/autovacuum.c:2744 +#: postmaster/autovacuum.c:2751 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "traitement de l'enregistrement de travail pour la relation « %s.%s.%s »" -#: postmaster/autovacuum.c:3430 +#: postmaster/autovacuum.c:3437 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum non démarré à cause d'une mauvaise configuration" -#: postmaster/autovacuum.c:3431 +#: postmaster/autovacuum.c:3438 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Activez l'option « track_counts »." @@ -17965,7 +17970,7 @@ msgstr "processus en tâche de fond « %s »: intervalle de redémarrage invalid msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "processus en tâche de fond « %s »: les processus parallélisés ne sont peut-être pas être configurés pour redémarrer" -#: postmaster/bgworker.c:723 tcop/postgres.c:3229 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "arrêt du processus en tâche de fond « %s » suite à la demande de l'administrateur" @@ -17997,7 +18002,7 @@ msgstr[1] "Un maximum de %d processus en tâche de fond peuvent être enregistr msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Considérez l'augmentation du paramètre « max_worker_processes »." -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -18008,17 +18013,17 @@ msgstr[1] "" "les points de vérification (checkpoints) arrivent trop fréquemment\n" "(toutes les %d secondes)" -#: postmaster/checkpointer.c:432 +#: postmaster/checkpointer.c:435 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Considérez l'augmentation du paramètre « max_wal_size »." -#: postmaster/checkpointer.c:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "échec de la demande de point de vérification" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, c-format msgid "Consult recent messages in the server log for details." msgstr "" @@ -19111,7 +19116,7 @@ msgstr "erreur lors de l'arrêt de la copie en flux : %s" msgid "error reading result of streaming command: %s" msgstr "erreur lors de la lecture de la commande de flux : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:570 replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:570 replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "résultat inattendu après CommandComplete : %s" @@ -19126,41 +19131,41 @@ msgstr "n'a pas pu recevoir le fichier historique à partir du serveur principal msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Attendait 1 ligne avec 2 champs, a obtenu %d lignes avec %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 replication/libpqwalreceiver/libpqwalreceiver.c:824 replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 replication/libpqwalreceiver/libpqwalreceiver.c:821 replication/libpqwalreceiver/libpqwalreceiver.c:828 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "n'a pas pu recevoir des données du flux de WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, c-format msgid "could not send data to WAL stream: %s" msgstr "n'a pas pu transmettre les données au flux WAL : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "n'a pas pu créer le slot de réplication « %s » : %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "réponse à la requête invalide" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Attendait %d champs, a obtenu %d champs." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, c-format msgid "the query interface requires a database connection" msgstr "l'interface de la requête requiert une connexion à une base" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "requête vide" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "mode pipeline inattendu" @@ -19423,29 +19428,29 @@ msgstr "la relation cible « %s.%s » de réplication logique utilise des colonn msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "la relation cible de la réplication logique « %s.%s » n'existe pas" -#: replication/logical/reorderbuffer.c:3842 +#: replication/logical/reorderbuffer.c:3973 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "n'a pas pu écrire dans le fichier pour le XID %u : %m" -#: replication/logical/reorderbuffer.c:4188 replication/logical/reorderbuffer.c:4213 +#: replication/logical/reorderbuffer.c:4319 replication/logical/reorderbuffer.c:4344 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "n'a pas pu lire le fichier « reorderbuffer spill » : %m" -#: replication/logical/reorderbuffer.c:4192 replication/logical/reorderbuffer.c:4217 +#: replication/logical/reorderbuffer.c:4323 replication/logical/reorderbuffer.c:4348 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "" "n'a pas pu lire à partir du fichier « reorderbuffer spill » : a lu seulement %d octets\n" "sur %u" -#: replication/logical/reorderbuffer.c:4467 +#: replication/logical/reorderbuffer.c:4598 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "n'a pas pu supprimer le fichier « %s » pendant la suppression de pg_replslot/%s/xid* : %m" -#: replication/logical/reorderbuffer.c:4966 +#: replication/logical/reorderbuffer.c:5097 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "n'a pas pu lire à partir du fichier « %s » : lu %d octets au lieu de %d octets" @@ -19462,59 +19467,59 @@ msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs msgstr[0] "snapshot exporté pour le décodage logique : « %s » avec %u identifiant de transaction" msgstr[1] "snapshot exporté pour le décodage logique : « %s » avec %u identifiants de transaction" -#: replication/logical/snapbuild.c:1374 replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:2017 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 replication/logical/snapbuild.c:2068 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "le décodage logique a trouvé le point de cohérence à %X/%X" -#: replication/logical/snapbuild.c:1376 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "Il n'existe pas de transactions en cours." -#: replication/logical/snapbuild.c:1437 +#: replication/logical/snapbuild.c:1484 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "le décodage logique a trouvé le point de démarrage à %X/%X" -#: replication/logical/snapbuild.c:1439 replication/logical/snapbuild.c:1463 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "En attente de transactions (approximativement %d) plus anciennes que %u pour terminer." -#: replication/logical/snapbuild.c:1461 +#: replication/logical/snapbuild.c:1508 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "le décodage logique a trouvé le point de cohérence initial à %X/%X" -#: replication/logical/snapbuild.c:1488 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "Il n'existe plus d'anciennes transactions." -#: replication/logical/snapbuild.c:1885 +#: replication/logical/snapbuild.c:1932 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "le fichier d'état snapbuild « %s » a le nombre magique: %u au lieu de %u" -#: replication/logical/snapbuild.c:1891 +#: replication/logical/snapbuild.c:1938 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "le fichier d'état snapbuild « %s » a une version non supportée : %u au lieu de %u" -#: replication/logical/snapbuild.c:1962 +#: replication/logical/snapbuild.c:2009 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" "différence de somme de contrôle pour lefichier d'état snapbuild %s :\n" "est %u, devrait être %u" -#: replication/logical/snapbuild.c:2019 +#: replication/logical/snapbuild.c:2070 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Le décodage logique commencera en utilisant un snapshot sauvegardé." -#: replication/logical/snapbuild.c:2091 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "n'a pas pu analyser le mode du fichier « %s »" @@ -19524,32 +19529,32 @@ msgstr "n'a pas pu analyser le mode du fichier « %s »" msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "le worker de synchronisation de table en réplication logique pour la souscription « %s », table « %s », a terminé" -#: replication/logical/tablesync.c:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "n'a pas pu récupérer l'information sur la table « %s.%s » à partir du publieur : %s" -#: replication/logical/tablesync.c:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "table « %s.%s » non trouvée sur le publieur" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "n'a pas pu lancer la copie initiale du contenu de la table « %s.%s » : %s" -#: replication/logical/tablesync.c:1069 +#: replication/logical/tablesync.c:1090 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "la copie de table n'a pas pu démarrer la transaction sur le publieur : %s" -#: replication/logical/tablesync.c:1110 +#: replication/logical/tablesync.c:1131 #, c-format msgid "replication origin \"%s\" already exists" msgstr "l'origine de réplication « %s » existe déjà" -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1144 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "la copie de table n'a pas pu finir la transaction sur le publieur : %s" @@ -19609,27 +19614,27 @@ msgstr "le processus apply de réplication logique pour la souscription « %s » msgid "could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes" msgstr "n'a pas pu lire à partir du fichier subxact de transaction en flux « %s » : a lu seulement %zu octets sur %zu" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "le processus apply de réplication logique pour la souscription %u ne démarrera pas car la souscription a été désactivée au démarrage" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "le processus apply de réplication logique pour la souscription « %s » ne démarrera pas car la souscription a été désactivée au démarrage" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "le processus de synchronisation des tables en réplication logique pour la souscription « %s », table « %s » a démarré" -#: replication/logical/worker.c:3170 +#: replication/logical/worker.c:3177 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "le processus apply de réplication logique pour la souscription « %s » a démarré" -#: replication/logical/worker.c:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "la souscription n'a aucun ensemble de slot de réplication" @@ -19839,41 +19844,41 @@ msgstr "ne peut pas copier le slot de réplication logique non terminé « %s » msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Ré-essayez quand la valeur de confirmed_flush_lsn pour le slot de réplication source est valide." -#: replication/syncrep.c:268 +#: replication/syncrep.c:311 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "" "annulation de l'attente pour la réplication synchrone et arrêt des connexions\n" "suite à la demande de l'administrateur" -#: replication/syncrep.c:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "" "La transaction a déjà enregistré les données localement, mais il se peut que\n" "cela n'ait pas été répliqué sur le serveur en standby." -#: replication/syncrep.c:285 +#: replication/syncrep.c:328 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "annulation de l'attente pour la réplication synchrone à la demande de l'utilisateur" -#: replication/syncrep.c:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "le serveur « %s » en standby est maintenant un serveur standby synchrone de priorité %u" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "le serveur standby « %s » est maintenant un candidat dans le quorum des standbys synchrones" -#: replication/syncrep.c:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "l'analyseur du paramètre synchronous_standby_names a échoué" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "le nombre de standbys synchrones (%d) doit être supérieur à zéro" @@ -19942,7 +19947,7 @@ msgstr "arrêt du processus walreceiver suite à l'expiration du délai de répl msgid "primary server contains no more WAL on requested timeline %u" msgstr "le serveur principal ne contient plus de WAL sur la timeline %u demandée" -#: replication/walreceiver.c:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "n'a pas pu fermer le journal de transactions %s : %m" @@ -19952,7 +19957,7 @@ msgstr "n'a pas pu fermer le journal de transactions %s : %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "récupération du fichier historique pour la timeline %u à partir du serveur principal" -#: replication/walreceiver.c:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "n'a pas pu écrire le journal de transactions %s au décalage %u, longueur %lu : %m" @@ -20052,7 +20057,7 @@ msgstr "ne peut pas exécuter des commandes SQL dans le walsender pour la répli msgid "received replication command: %s" msgstr "commande de réplication reçu : %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1081 tcop/postgres.c:1440 tcop/postgres.c:1713 tcop/postgres.c:2194 tcop/postgres.c:2627 tcop/postgres.c:2706 +#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1046 tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 tcop/postgres.c:2592 tcop/postgres.c:2671 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "" @@ -20074,7 +20079,7 @@ msgstr "type de message « %c » invalide pour le serveur en standby" msgid "unexpected message type \"%c\"" msgstr "type de message « %c » inattendu" -#: replication/walsender.c:2288 +#: replication/walsender.c:2292 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "arrêt du processus walreceiver suite à l'expiration du délai de réplication" @@ -20340,171 +20345,171 @@ msgstr "la colonne « %s » peut seulement être mise à jour en DEFAULT" msgid "multiple assignments to same column \"%s\"" msgstr "affectations multiples pour la même colonne « %s »" -#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3178 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "l'accès à la vue non système « %s » est restreint" -#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 +#: rewrite/rewriteHandler.c:2155 rewrite/rewriteHandler.c:4064 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "récursion infinie détectée dans les règles de la relation « %s »" -#: rewrite/rewriteHandler.c:2256 +#: rewrite/rewriteHandler.c:2260 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "récursion infinie détectée dans la politique pour la relation « %s »" -#: rewrite/rewriteHandler.c:2586 +#: rewrite/rewriteHandler.c:2590 msgid "Junk view columns are not updatable." msgstr "Les colonnes « junk » des vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2591 +#: rewrite/rewriteHandler.c:2595 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Les colonnes des vues qui ne font pas référence à des colonnes de la relation de base ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2594 +#: rewrite/rewriteHandler.c:2598 msgid "View columns that refer to system columns are not updatable." msgstr "Les colonnes des vues qui font référence à des colonnes systèmes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2601 msgid "View columns that return whole-row references are not updatable." msgstr "Les colonnes de vue qui font références à des lignes complètes ne sont pas automatiquement modifiables." -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2662 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Les vues contenant DISTINCT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2661 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Les vues contenant GROUP BY ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing HAVING are not automatically updatable." msgstr "Les vues contenant HAVING ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Les vues contenant UNION, INTERSECT ou EXCEPT ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2670 +#: rewrite/rewriteHandler.c:2674 msgid "Views containing WITH are not automatically updatable." msgstr "Les vues contenant WITH ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Les vues contenant LIMIT ou OFFSET ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2685 +#: rewrite/rewriteHandler.c:2689 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions d'agrégat ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2688 +#: rewrite/rewriteHandler.c:2692 msgid "Views that return window functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions de fenêtrage ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2695 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Les vues qui renvoient des fonctions à plusieurs lignes ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 rewrite/rewriteHandler.c:2710 +#: rewrite/rewriteHandler.c:2702 rewrite/rewriteHandler.c:2706 rewrite/rewriteHandler.c:2714 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Les vues qui lisent plusieurs tables ou vues ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2713 +#: rewrite/rewriteHandler.c:2717 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Les vues contenant TABLESAMPLE ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:2737 +#: rewrite/rewriteHandler.c:2741 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Les vues qui possèdent des colonnes non modifiables ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:3234 +#: rewrite/rewriteHandler.c:3238 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ne peut pas insérer dans la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:3242 +#: rewrite/rewriteHandler.c:3246 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ne peut pas mettre à jour la colonne « %s » de la vue « %s »" -#: rewrite/rewriteHandler.c:3724 +#: rewrite/rewriteHandler.c:3728 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3735 +#: rewrite/rewriteHandler.c:3739 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "les règles DO INSTEAD NOTHING ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3749 +#: rewrite/rewriteHandler.c:3753 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD conditionnelles ne sont pas supportées par les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3753 +#: rewrite/rewriteHandler.c:3757 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "les règles DO ALSO ne sont pas supportées par les instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3758 +#: rewrite/rewriteHandler.c:3762 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "" "les règles DO INSTEAD multi-instructions ne sont pas supportées pour les\n" "instructions de modification de données dans WITH" -#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 rewrite/rewriteHandler.c:4004 +#: rewrite/rewriteHandler.c:3992 rewrite/rewriteHandler.c:4000 rewrite/rewriteHandler.c:4008 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Les vues contenant des règles DO INSTEAD conditionnelles ne sont pas automatiquement disponibles en écriture." -#: rewrite/rewriteHandler.c:4109 +#: rewrite/rewriteHandler.c:4113 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter INSERT RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:4111 +#: rewrite/rewriteHandler.c:4115 #, c-format msgid "You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON INSERT DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:4116 +#: rewrite/rewriteHandler.c:4120 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter UPDATE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:4118 +#: rewrite/rewriteHandler.c:4122 #, c-format msgid "You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON UPDATE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:4123 +#: rewrite/rewriteHandler.c:4127 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "ne peut pas exécuter DELETE RETURNING sur la relation « %s »" -#: rewrite/rewriteHandler.c:4125 +#: rewrite/rewriteHandler.c:4129 #, c-format msgid "You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause." msgstr "" "Vous avez besoin d'une règle ON DELETE DO INSTEAD sans condition avec une\n" "clause RETURNING." -#: rewrite/rewriteHandler.c:4143 +#: rewrite/rewriteHandler.c:4147 #, c-format msgid "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or UPDATE rules" msgstr "INSERT avec une clause ON CONFLICT ne peut pas être utilisée avec une table qui a des règles pour INSERT ou UPDATE" -#: rewrite/rewriteHandler.c:4200 +#: rewrite/rewriteHandler.c:4204 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH ne peut pas être utilisé dans une requête réécrite par des règles en plusieurs requêtes" @@ -20702,22 +20707,22 @@ msgstr "" msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "page invalide dans le bloc %u de la relation %s ; remplacement de la page par des zéros" -#: storage/buffer/bufmgr.c:4533 +#: storage/buffer/bufmgr.c:4534 #, c-format msgid "could not write block %u of %s" msgstr "n'a pas pu écrire le bloc %u de %s" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4536 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Échecs multiples --- l'erreur d'écriture pourrait être permanente." -#: storage/buffer/bufmgr.c:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4557 storage/buffer/bufmgr.c:4576 #, c-format msgid "writing block %u of relation %s" msgstr "écriture du bloc %u de la relation %s" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4880 #, c-format msgid "snapshot too old" msgstr "snapshot trop ancien" @@ -20752,107 +20757,107 @@ msgstr "n'a pas pu supprimer l'ensemble de fichiers partagés « %s » : %m" msgid "could not truncate file \"%s\": %m" msgstr "n'a pas pu tronquer le fichier « %s » : %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "n'a pas pu vider les données modifiées : %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, c-format msgid "could not determine dirty data size: %m" msgstr "n'a pas pu déterminer la taille des données modifiées : %m" -#: storage/file/fd.c:597 +#: storage/file/fd.c:594 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "n'a pas exécuter munmap() durant la synchronisation des données : %m" -#: storage/file/fd.c:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "n'a pas pu lier le fichier « %s » à « %s » : %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "échec de getrlimit : %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "nombre de descripteurs de fichier insuffisant pour lancer le processus serveur" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "Le système autorise %d, nous avons besoin d'au moins %d." -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 storage/file/fd.c:2668 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "plus de descripteurs de fichiers : %m; quittez et ré-essayez" -#: storage/file/fd.c:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "fichier temporaire : chemin « %s », taille %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "ne peut pas créer le répertoire temporaire « %s » : %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "ne peut pas créer le sous-répertoire temporaire « %s » : %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "n'a pas pu créer le fichier temporaire « %s » : %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %m" -#: storage/file/fd.c:1859 +#: storage/file/fd.c:1850 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier temporaire « %s » : %m" -#: storage/file/fd.c:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "n'a pas pu supprimer le fichier « %s » : %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "la taille du fichier temporaire dépasse temp_file_limit (%d Ko)" -#: storage/file/fd.c:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "dépassement de maxAllocatedDescs (%d) lors de la tentative d'ouverture du fichier « %s »" -#: storage/file/fd.c:2496 +#: storage/file/fd.c:2487 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "dépassement de maxAllocatedDescs (%d) lors de la tentative d'exécution de la commande « %s »" -#: storage/file/fd.c:2653 +#: storage/file/fd.c:2644 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "dépassement de maxAllocatedDescs (%d) lors de la tentative d'ouverture du répertoire « %s »" -#: storage/file/fd.c:3183 +#: storage/file/fd.c:3174 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "fichier non attendu dans le répertoire des fichiers temporaires : « %s »" -#: storage/file/fd.c:3312 +#: storage/file/fd.c:3303 #, 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" @@ -21045,12 +21050,12 @@ msgstr "restauration toujours en attente après %ld.%03d ms : %s" msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "la restauration a fini d'attendre après %ld.%03d ms : %s" -#: storage/ipc/standby.c:883 tcop/postgres.c:3358 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "annulation de la requête à cause d'un conflit avec la restauration" -#: storage/ipc/standby.c:884 tcop/postgres.c:2512 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "La transaction de l'utilisateur causait un verrou mortel lors de la restauration." @@ -21123,102 +21128,102 @@ msgstr "interblocage (deadlock) détecté" msgid "See server log for query details." msgstr "Voir les journaux applicatifs du serveur pour les détails sur la requête." -#: storage/lmgr/lmgr.c:825 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "lors de la mise à jour de la ligne (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:828 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "lors de la suppression de la ligne (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:831 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "lors du verrouillage de la ligne (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:834 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "lors du verrou de la version mise à jour (%u, %u) de la ligne de la relation « %s »" -#: storage/lmgr/lmgr.c:837 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "lors de l'insertion de l'enregistrement (%u, %u) de l'index dans la relation « %s »" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "lors de la vérification de l'unicité de l'enregistrement (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:843 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "lors de la re-vérification de l'enregistrement mis à jour (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "lors de la vérification de la contrainte d'exclusion sur l'enregistrement (%u,%u) dans la relation « %s »" -#: storage/lmgr/lmgr.c:1139 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1151 #, c-format msgid "extension of relation %u of database %u" msgstr "extension de la relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1151 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid de la base %u" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "page %u of relation %u of database %u" msgstr "page %u de la relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1163 +#: storage/lmgr/lmgr.c:1169 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "ligne (%u,%u) de la relation %u de la base de données %u" -#: storage/lmgr/lmgr.c:1171 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "transaction %u" -#: storage/lmgr/lmgr.c:1176 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "transaction virtuelle %d/%u" -#: storage/lmgr/lmgr.c:1182 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "jeton spéculatif %u de la transaction %u" -#: storage/lmgr/lmgr.c:1188 +#: storage/lmgr/lmgr.c:1194 #, c-format msgid "object %u of class %u of database %u" msgstr "objet %u de la classe %u de la base de données %u" -#: storage/lmgr/lmgr.c:1196 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "verrou utilisateur [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1203 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "verrou informatif [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "type locktag non reconnu %d" @@ -21445,7 +21450,7 @@ msgstr "ne peut pas appeler la fonction « %s » via l'interface fastpath" msgid "fastpath function call: \"%s\" (OID %u)" msgstr "appel de fonction fastpath : « %s » (OID %u)" -#: tcop/fastpath.c:312 tcop/postgres.c:1308 tcop/postgres.c:1566 tcop/postgres.c:2037 tcop/postgres.c:2293 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "durée : %s ms" @@ -21479,152 +21484,152 @@ msgstr "taille de l'argument %d invalide dans le message d'appel de la fonction" msgid "incorrect binary data format in function argument %d" msgstr "format des données binaires incorrect dans l'argument de la fonction %d" -#: tcop/postgres.c:449 tcop/postgres.c:4836 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "type %d du message de l'interface invalide" -#: tcop/postgres.c:1018 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "instruction : %s" -#: tcop/postgres.c:1313 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "durée : %s ms, instruction : %s" -#: tcop/postgres.c:1419 +#: tcop/postgres.c:1384 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "ne peut pas insérer les commandes multiples dans une instruction préparée" -#: tcop/postgres.c:1571 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "durée : %s ms, analyse %s : %s" -#: tcop/postgres.c:1638 tcop/postgres.c:2608 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "l'instruction préparée non nommée n'existe pas" -#: tcop/postgres.c:1690 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "le message bind a %d formats de paramètres mais %d paramètres" -#: tcop/postgres.c:1696 +#: tcop/postgres.c:1661 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "le message bind fournit %d paramètres, mais l'instruction préparée « %s » en requiert %d" -#: tcop/postgres.c:1915 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "format des données binaires incorrect dans le paramètre bind %d" -#: tcop/postgres.c:2042 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "durée : %s ms, lien %s%s%s : %s" -#: tcop/postgres.c:2093 tcop/postgres.c:2692 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "le portail « %s » n'existe pas" -#: tcop/postgres.c:2173 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2175 tcop/postgres.c:2301 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "exécute fetch à partir de" -#: tcop/postgres.c:2176 tcop/postgres.c:2302 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "exécute" -#: tcop/postgres.c:2298 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "durée : %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2444 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "préparation : %s" -#: tcop/postgres.c:2469 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "paramètres : %s" -#: tcop/postgres.c:2484 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "raison de l'annulation : conflit de restauration" -#: tcop/postgres.c:2500 +#: tcop/postgres.c:2465 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "L'utilisateur conservait des blocs disques en mémoire partagée depuis trop longtemps." -#: tcop/postgres.c:2503 +#: tcop/postgres.c:2468 #, c-format msgid "User was holding a relation lock for too long." msgstr "L'utilisateur conservait un verrou sur une relation depuis trop longtemps." -#: tcop/postgres.c:2506 +#: tcop/postgres.c:2471 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "L'utilisateur utilisait ou pouvait utiliser un tablespace qui doit être supprimé." -#: tcop/postgres.c:2509 +#: tcop/postgres.c:2474 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "La requête de l'utilisateur pourrait avoir eu besoin de voir des versions de\n" "lignes qui doivent être supprimées." -#: tcop/postgres.c:2515 +#: tcop/postgres.c:2480 #, c-format msgid "User was connected to a database that must be dropped." msgstr "L'utilisateur était connecté à une base de donnée qui doit être supprimée." -#: tcop/postgres.c:2554 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "portail « %s » paramètre $%d = %s" -#: tcop/postgres.c:2557 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "portail « %s » paramètre $%d" -#: tcop/postgres.c:2563 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "paramètre de portail non nommé $%d = %s" -#: tcop/postgres.c:2566 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "paramètre de portail non nommé $%d" -#: tcop/postgres.c:2912 +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "arrêt des connexions suite à un signal SIGQUIT inattendu" -#: tcop/postgres.c:2918 +#: tcop/postgres.c:2883 #, c-format msgid "terminating connection because of crash of another server process" msgstr "arrêt de la connexion à cause de l'arrêt brutal d'un autre processus serveur" -#: tcop/postgres.c:2919 +#: tcop/postgres.c:2884 #, 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 "" @@ -21632,94 +21637,94 @@ msgstr "" "courante et de quitter car un autre processus serveur a quitté anormalement\n" "et qu'il existe probablement de la mémoire partagée corrompue." -#: tcop/postgres.c:2923 tcop/postgres.c:3284 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "" "Dans un moment, vous devriez être capable de vous reconnecter à la base de\n" "données et de relancer votre commande." -#: tcop/postgres.c:2930 +#: tcop/postgres.c:2895 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "arrêt des connexions suite à la commande d'arrêt immédiat" -#: tcop/postgres.c:3016 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "exception due à une virgule flottante" -#: tcop/postgres.c:3017 +#: tcop/postgres.c:2982 #, c-format msgid "An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero." msgstr "Une opération invalide sur les virgules flottantes a été signalée. Ceci signifie probablement un résultat en dehors de l'échelle ou une opération invalide telle qu'une division par zéro." -#: tcop/postgres.c:3188 +#: tcop/postgres.c:3153 #, c-format msgid "canceling authentication due to timeout" msgstr "annulation de l'authentification à cause du délai écoulé" -#: tcop/postgres.c:3192 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "arrêt du processus autovacuum suite à la demande de l'administrateur" -#: tcop/postgres.c:3196 +#: tcop/postgres.c:3161 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "arrêt des processus workers de réplication logique suite à la demande de l'administrateur" -#: tcop/postgres.c:3213 tcop/postgres.c:3223 tcop/postgres.c:3282 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "arrêt de la connexion à cause d'un conflit avec la restauration" -#: tcop/postgres.c:3234 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "arrêt des connexions suite à la demande de l'administrateur" -#: tcop/postgres.c:3265 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "connexion au client perdue" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "annulation de la requête à cause du délai écoulé pour l'obtention des verrous" -#: tcop/postgres.c:3342 +#: tcop/postgres.c:3307 #, c-format msgid "canceling statement due to statement timeout" msgstr "annulation de la requête à cause du délai écoulé pour l'exécution de l'instruction" -#: tcop/postgres.c:3349 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "annulation de la tâche d'autovacuum" -#: tcop/postgres.c:3372 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "annulation de la requête à la demande de l'utilisateur" -#: tcop/postgres.c:3386 +#: tcop/postgres.c:3351 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité en transaction" -#: tcop/postgres.c:3397 +#: tcop/postgres.c:3362 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "arrêt des connexions suite à l'expiration du délai d'inactivité de la session" -#: tcop/postgres.c:3526 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "dépassement de limite (en profondeur) de la pile" -#: tcop/postgres.c:3527 +#: tcop/postgres.c:3492 #, c-format msgid "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), after ensuring the platform's stack depth limit is adequate." msgstr "" @@ -21727,59 +21732,59 @@ msgstr "" "être assuré que la limite de profondeur de la pile de la plateforme est\n" "adéquate." -#: tcop/postgres.c:3590 +#: tcop/postgres.c:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "« max_stack_depth » ne doit pas dépasser %ld ko." -#: tcop/postgres.c:3592 +#: tcop/postgres.c:3557 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "" "Augmenter la limite de profondeur de la pile sur votre plateforme via\n" "« ulimit -s » ou l'équivalent local." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:3978 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "argument invalide en ligne de commande pour le processus serveur : %s" -#: tcop/postgres.c:4014 tcop/postgres.c:4020 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Essayez « %s --help » pour plus d'informations." -#: tcop/postgres.c:4018 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s : argument invalide en ligne de commande : %s" -#: tcop/postgres.c:4081 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s : ni base de données ni utilisateur spécifié" -#: tcop/postgres.c:4738 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "sous-type %d du message CLOSE invalide" -#: tcop/postgres.c:4773 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "sous-type %d du message DESCRIBE invalide" -#: tcop/postgres.c:4857 +#: tcop/postgres.c:4822 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "appels à la fonction fastpath non supportés dans une connexion de réplication" -#: tcop/postgres.c:4861 +#: tcop/postgres.c:4826 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "protocole étendu de requêtes non supporté dans une connexion de réplication" -#: tcop/postgres.c:5038 +#: tcop/postgres.c:5003 #, c-format msgid "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s host=%s%s%s" msgstr "" @@ -21791,12 +21796,12 @@ msgstr "" msgid "bind message has %d result formats but query has %d columns" msgstr "le message bind a %d formats de résultat mais la requête a %d colonnes" -#: tcop/pquery.c:939 tcop/pquery.c:1698 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "le curseur peut seulement parcourir en avant" -#: tcop/pquery.c:940 tcop/pquery.c:1699 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Déclarez-le avec l'option SCROLL pour activer le parcours inverse." @@ -21838,6 +21843,11 @@ msgstr "ne peut pas exécuter %s dans un processus en tâche de fond" msgid "must be superuser to do CHECKPOINT" msgstr "doit être super-utilisateur pour exécuter un point de vérification (CHECKPOINT)" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS accepte seulement les noms de relation dans la clause FROM" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -21962,67 +21972,67 @@ msgstr "paramètre Thesaurus non reconnu : « %s »" msgid "missing Dictionary parameter" msgstr "paramètre Dictionary manquant" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 tsearch/spell.c:1063 +#: tsearch/spell.c:382 tsearch/spell.c:399 tsearch/spell.c:408 tsearch/spell.c:1065 #, c-format msgid "invalid affix flag \"%s\"" msgstr "drapeau d'affixe invalide « %s »" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:386 tsearch/spell.c:1069 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "le drapeau d'affixe « %s » est en dehors des limites" -#: tsearch/spell.c:415 +#: tsearch/spell.c:416 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "données invalides dans le drapeau d'affixe « %s »" -#: tsearch/spell.c:435 +#: tsearch/spell.c:436 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "drapeau d'affixe invalide « %s » avec la valeur de drapeau « long »" -#: tsearch/spell.c:525 +#: tsearch/spell.c:526 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier dictionnaire « %s » : %m" -#: tsearch/spell.c:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:765 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "expression rationnelle invalide : %s" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1193 tsearch/spell.c:1205 tsearch/spell.c:1765 tsearch/spell.c:1770 tsearch/spell.c:1775 #, c-format msgid "invalid affix alias \"%s\"" msgstr "alias d'affixe invalide « %s »" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1246 tsearch/spell.c:1317 tsearch/spell.c:1466 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier affixe « %s » : %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1300 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "le dictionnaire Ispell supporte seulement les valeurs de drapeau « default », « long » et « num »" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1344 #, c-format msgid "invalid number of flag vector aliases" msgstr "nombre d'alias de vecteur de drapeau invalide" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1367 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "le nombre d'alias excède le nombre %d spécifié" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1582 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "le fichier d'affixes contient des commandes ancien et nouveau style" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "la chaîne est trop longue (%d octets, max %d octets)" @@ -22087,112 +22097,112 @@ msgstr "ShortWord devrait être positif ou nul" msgid "MaxFragments should be >= 0" msgstr "MaxFragments devrait être positif ou nul" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "identifiant trop long" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "L'identifiant doit faire moins de %d caractères." -#: utils/adt/acl.c:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "mot clé non reconnu : « %s »" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "le mot clé ACL doit être soit « group » soit « user »." -#: utils/adt/acl.c:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "nom manquant" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "Un nom doit suivre le mot clé « group » ou « user »." -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "signe « = » manquant" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "mode caractère invalide : doit faire partie de « %s »" -#: utils/adt/acl.c:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "un nom doit suivre le signe « / »" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "par défaut, le « donneur de droits » devient l'utilisateur d'identifiant %u" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "le tableau d'ACL contient un type de données incorrect" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "les tableaux d'ACL ne doivent avoir qu'une seule dimension" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, c-format msgid "ACL arrays must not contain null values" msgstr "les tableaux d'ACL ne doivent pas contenir de valeurs NULL" -#: utils/adt/acl.c:563 +#: utils/adt/acl.c:580 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "données superflues à la fin de la spécification de l'ACL" -#: utils/adt/acl.c:1198 +#: utils/adt/acl.c:1215 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "les options grant ne peuvent pas être rendues à votre propre donateur" -#: utils/adt/acl.c:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "des privilèges dépendants existent" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Utilisez CASCADE pour les révoquer aussi." -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert n'est plus supporté" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove n'est plus supporté" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "type de droit non reconnu : « %s »" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "la fonction « %s » n'existe pas" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "doit être un membre du rôle « %s »" @@ -22207,7 +22217,7 @@ msgstr "n'a pas pu déterminer le type de données date en entrée" msgid "input data type is not an array" msgstr "le type de données en entrée n'est pas un tableau" -#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1783 utils/adt/numeric.c:4246 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 utils/adt/varlena.c:3422 +#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 utils/adt/varlena.c:3422 #, c-format msgid "integer out of range" msgstr "entier en dehors des limites" @@ -22322,7 +22332,7 @@ msgstr "Les tableaux multidimensionnels doivent avoir des sous-tableaux avec les msgid "Junk after closing right brace." msgstr "Problème après la parenthèse droite fermante." -#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 utils/adt/arrayfuncs.c:5938 +#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 utils/adt/arrayfuncs.c:5940 #, c-format msgid "invalid number of dimensions: %d" msgstr "nombre de dimensions invalide : %d" @@ -22357,7 +22367,7 @@ msgstr "aucune fonction de sortie binaire disponible pour le type %s" msgid "slices of fixed-length arrays not implemented" msgstr "les morceaux des tableaux à longueur fixe ne sont pas implémentés" -#: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5924 utils/adt/arrayfuncs.c:5950 utils/adt/arrayfuncs.c:5961 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 +#: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5926 utils/adt/arrayfuncs.c:5952 utils/adt/arrayfuncs.c:5963 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 #, c-format msgid "wrong number of array subscripts" msgstr "mauvais nombre d'indices du tableau" @@ -22434,42 +22444,42 @@ msgstr "ne peut pas concaténer des tableaux vides" msgid "cannot accumulate arrays of different dimensionality" msgstr "ne peut pas accumuler des tableaux de dimensions différentes" -#: utils/adt/arrayfuncs.c:5822 utils/adt/arrayfuncs.c:5862 +#: utils/adt/arrayfuncs.c:5824 utils/adt/arrayfuncs.c:5864 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "la dimension ou la limite basse du tableau ne peut pas être NULL" -#: utils/adt/arrayfuncs.c:5925 utils/adt/arrayfuncs.c:5951 +#: utils/adt/arrayfuncs.c:5927 utils/adt/arrayfuncs.c:5953 #, c-format msgid "Dimension array must be one dimensional." msgstr "Le tableau doit avoir une seule dimension." -#: utils/adt/arrayfuncs.c:5930 utils/adt/arrayfuncs.c:5956 +#: utils/adt/arrayfuncs.c:5932 utils/adt/arrayfuncs.c:5958 #, c-format msgid "dimension values cannot be null" msgstr "les valeurs de dimension ne peuvent pas être NULL" -#: utils/adt/arrayfuncs.c:5962 +#: utils/adt/arrayfuncs.c:5964 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "La limite basse du tableau a une taille différentes des dimensions du tableau." -#: utils/adt/arrayfuncs.c:6240 +#: utils/adt/arrayfuncs.c:6242 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "la suppression d'éléments de tableaux multidimensionnels n'est pas supportée" -#: utils/adt/arrayfuncs.c:6517 +#: utils/adt/arrayfuncs.c:6519 #, c-format msgid "thresholds must be one-dimensional array" msgstr "les limites doivent être un tableau à une dimension" -#: utils/adt/arrayfuncs.c:6522 +#: utils/adt/arrayfuncs.c:6524 #, c-format msgid "thresholds array must not contain NULLs" msgstr "le tableau de limites ne doit pas contenir de valeurs NULL" -#: utils/adt/arrayfuncs.c:6755 +#: utils/adt/arrayfuncs.c:6757 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "le nombre d'éléments à couper doit être compris entre 0 et %d" @@ -22511,7 +22521,7 @@ msgstr "la conversion de l'encodage de %s vers l'ASCII n'est pas supportée" #. translator: first %s is inet or cidr #: utils/adt/bool.c:153 utils/adt/cash.c:354 utils/adt/datetime.c:3802 utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1389 utils/adt/geo_ops.c:1424 utils/adt/geo_ops.c:1432 utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4675 utils/adt/geo_ops.c:4682 utils/adt/int8.c:126 utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 utils/adt/mac8.c:166 utils/adt/mac8.c:184 -#: utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 utils/adt/numeric.c:720 utils/adt/numeric.c:6901 utils/adt/numeric.c:6925 utils/adt/numeric.c:6949 utils/adt/numeric.c:7907 utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:355 +#: utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:355 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "syntaxe en entrée invalide pour le type %s : « %s »" @@ -22521,7 +22531,7 @@ msgstr "syntaxe en entrée invalide pour le type %s : « %s »" msgid "money out of range" msgstr "money en dehors des limites" -#: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 utils/adt/numeric.c:3046 utils/adt/numeric.c:3069 utils/adt/numeric.c:3154 utils/adt/numeric.c:3172 utils/adt/numeric.c:3268 utils/adt/numeric.c:8456 utils/adt/numeric.c:8746 utils/adt/numeric.c:10392 utils/adt/timestamp.c:3317 +#: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 utils/adt/numeric.c:8457 utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 utils/adt/timestamp.c:3317 #, c-format msgid "division by zero" msgstr "division par zéro" @@ -22556,7 +22566,7 @@ msgstr "la précision de TIME(%d)%s a été réduite au maximum autorisée, %d" msgid "date out of range: \"%s\"" msgstr "date en dehors des limites : « %s »" -#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 utils/adt/xml.c:2259 +#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 utils/adt/xml.c:2253 #, c-format msgid "date out of range" msgstr "date en dehors des limites" @@ -22593,7 +22603,7 @@ msgstr "unités de date « %s » non reconnues" #: utils/adt/date.c:1318 utils/adt/date.c:1364 utils/adt/date.c:1920 utils/adt/date.c:1951 utils/adt/date.c:1980 utils/adt/date.c:2844 utils/adt/datetime.c:405 utils/adt/datetime.c:1700 utils/adt/formatting.c:4109 utils/adt/formatting.c:4141 utils/adt/formatting.c:4221 utils/adt/formatting.c:4343 utils/adt/json.c:418 utils/adt/json.c:457 utils/adt/timestamp.c:224 utils/adt/timestamp.c:256 utils/adt/timestamp.c:698 utils/adt/timestamp.c:707 utils/adt/timestamp.c:785 utils/adt/timestamp.c:818 utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2865 utils/adt/timestamp.c:2884 utils/adt/timestamp.c:2897 utils/adt/timestamp.c:2908 utils/adt/timestamp.c:2914 utils/adt/timestamp.c:2920 #: utils/adt/timestamp.c:2925 utils/adt/timestamp.c:2980 utils/adt/timestamp.c:2985 utils/adt/timestamp.c:3006 utils/adt/timestamp.c:3019 utils/adt/timestamp.c:3033 utils/adt/timestamp.c:3041 utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 utils/adt/timestamp.c:3739 utils/adt/timestamp.c:3864 utils/adt/timestamp.c:3935 utils/adt/timestamp.c:3971 utils/adt/timestamp.c:4061 utils/adt/timestamp.c:4135 utils/adt/timestamp.c:4171 utils/adt/timestamp.c:4274 utils/adt/timestamp.c:4776 utils/adt/timestamp.c:5050 utils/adt/timestamp.c:5509 utils/adt/timestamp.c:5523 utils/adt/timestamp.c:5528 utils/adt/timestamp.c:5542 utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 -#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2281 utils/adt/xml.c:2288 utils/adt/xml.c:2308 utils/adt/xml.c:2315 +#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2275 utils/adt/xml.c:2282 utils/adt/xml.c:2302 utils/adt/xml.c:2309 #, c-format msgid "timestamp out of range" msgstr "timestamp en dehors des limites" @@ -22608,7 +22618,7 @@ msgstr "heure en dehors des limites" msgid "time field value out of range: %d:%02d:%02g" msgstr "valeur du champ time en dehors des limites : %d:%02d:%02g" -#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2450 utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 utils/adt/timestamp.c:3450 +#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2451 utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 utils/adt/timestamp.c:3450 #, c-format msgid "invalid preceding or following size in window function" msgstr "taille précédente ou suivante invalide dans la fonction de fenêtrage" @@ -22783,32 +22793,32 @@ msgstr "« %s » est en dehors des limites du type real" msgid "\"%s\" is out of range for type double precision" msgstr "« %s » est en dehors des limites du type double precision" -#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 utils/adt/int8.c:1320 utils/adt/numeric.c:4358 utils/adt/numeric.c:4363 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "smallint en dehors des limites" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3564 utils/adt/numeric.c:9339 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, c-format msgid "cannot take square root of a negative number" msgstr "ne peut pas calculer la racine carré d'un nombre négatif" -#: utils/adt/float.c:1526 utils/adt/numeric.c:3839 utils/adt/numeric.c:3951 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, c-format msgid "zero raised to a negative power is undefined" msgstr "zéro à une puissance négative est indéfini" -#: utils/adt/float.c:1530 utils/adt/numeric.c:3843 utils/adt/numeric.c:10244 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "un nombre négatif élevé à une puissance non entière donne un résultat complexe" -#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3751 utils/adt/numeric.c:10017 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "ne peut pas calculer le logarithme de zéro" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3689 utils/adt/numeric.c:3746 utils/adt/numeric.c:10021 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "ne peut pas calculer le logarithme sur un nombre négatif" @@ -22823,22 +22833,22 @@ msgstr "l'entrée est en dehors des limites" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "le paramètre setseed %g est en dehors de la fenêtre permise [-1,1]" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1723 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "le total doit être supérieur à zéro" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1734 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "la limite inférieure et supérieure de l'opérande ne peuvent pas être NaN" -#: utils/adt/float.c:4041 utils/adt/numeric.c:1739 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "les limites basse et haute doivent être finies" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1753 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "la limite inférieure ne peut pas être plus égale à la limite supérieure" @@ -23232,7 +23242,7 @@ msgstr "oidvector a trop d'éléments" msgid "step size cannot equal zero" msgstr "la taille du pas ne peut pas valoir zéro" -#: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4317 utils/adt/varbit.c:1676 +#: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" msgstr "bigint en dehors des limites" @@ -23348,22 +23358,22 @@ msgstr "ne peut pas convertir l'objet jsonb vers le type %s" msgid "cannot cast jsonb array or object to type %s" msgstr "ne peut pas convertir le tableau ou l'objet jsonb vers le type %s" -#: utils/adt/jsonb_util.c:751 +#: utils/adt/jsonb_util.c:748 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "le nombre de paires d'objets jsonb dépasse le maximum autorisé (%zu)" -#: utils/adt/jsonb_util.c:792 +#: utils/adt/jsonb_util.c:789 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "le nombre d'éléments du tableau jsonb dépasse le maximum autorisé (%zu)" -#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "la taille totale des éléments du tableau jsonb dépasse le maximum de %u octets" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "la taille totale des éléments de l'objet JSON dépasse le maximum de %u octets" @@ -23760,12 +23770,12 @@ msgstr "les collationnements non déterministes ne sont pas supportés pour ILIK msgid "LIKE pattern must not end with escape character" msgstr "le motif LIKE ne doit pas se terminer avec un caractère d'échappement" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:701 #, c-format msgid "invalid escape string" msgstr "chaîne d'échappement invalide" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:702 #, c-format msgid "Escape string must be empty or one character." msgstr "La chaîne d'échappement doit être vide ou ne contenir qu'un caractère." @@ -24046,42 +24056,42 @@ msgstr "la taille du pas ne peut pas être NaN" msgid "step size cannot be infinity" msgstr "la taille du pas ne peut pas être infinity" -#: utils/adt/numeric.c:3504 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "la factorielle d'un nombre négatif est indéfini" -#: utils/adt/numeric.c:3514 utils/adt/numeric.c:6964 utils/adt/numeric.c:7437 utils/adt/numeric.c:9814 utils/adt/numeric.c:10302 utils/adt/numeric.c:10428 utils/adt/numeric.c:10502 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "la valeur dépasse le format numeric" -#: utils/adt/numeric.c:4224 utils/adt/numeric.c:4304 utils/adt/numeric.c:4345 utils/adt/numeric.c:4539 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "ne peut pas convertir NaN en %s" -#: utils/adt/numeric.c:4228 utils/adt/numeric.c:4308 utils/adt/numeric.c:4349 utils/adt/numeric.c:4543 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "ne peut pas convertir infinity en %s" -#: utils/adt/numeric.c:4552 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn hors des limites" -#: utils/adt/numeric.c:7521 utils/adt/numeric.c:7568 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "champ numérique en dehors des limites" -#: utils/adt/numeric.c:7522 +#: utils/adt/numeric.c:7523 #, c-format msgid "A field with precision %d, scale %d must round to an absolute value less than %s%d." msgstr "Un champ de précision %d et d'échelle %d doit être arrondi à une valeur absolue inférieure à %s%d." -#: utils/adt/numeric.c:7569 +#: utils/adt/numeric.c:7570 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "Un champ de précision %d et d'échelle %d ne peut pas contenir une valeur infinie." @@ -24322,7 +24332,7 @@ msgstr "Trop de virgules." msgid "Junk after right parenthesis or bracket." msgstr "Problème après la parenthèse droite ou le crochet droit." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1612 utils/adt/varlena.c:4549 #, c-format msgid "regular expression failed: %s" msgstr "l'expression rationnelle a échoué : %s" @@ -24332,23 +24342,23 @@ msgstr "l'expression rationnelle a échoué : %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "option d'expression rationnelle invalide : « %.*s »" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:848 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "une expression régulière SQL ne peut contenir plus de deux guillemets doubles comme séparateur d'échappement" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1050 utils/adt/regexp.c:1432 utils/adt/regexp.c:1487 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s ne supporte pas l'option « global »" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1052 #, c-format msgid "Use the regexp_matches function instead." msgstr "Utilisez la fonction regexp_matches à la place." -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1234 #, c-format msgid "too many regular expression matches" msgstr "trop de correspondances pour l'expression rationnelle" @@ -24363,7 +24373,7 @@ msgstr "il existe plus d'une fonction nommée « %s »" msgid "more than one operator named %s" msgstr "il existe plus d'un opérateur nommé%s" -#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "trop d'arguments" @@ -24765,12 +24775,12 @@ msgstr "le tableau de poids ne doit pas contenir de valeurs NULL" msgid "weight out of range" msgstr "poids en dehors des limites" -#: utils/adt/tsvector.c:215 +#: utils/adt/tsvector.c:212 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "le mot est trop long (%ld octets, max %ld octets)" -#: utils/adt/tsvector.c:222 +#: utils/adt/tsvector.c:219 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "la chaîne est trop longue pour tsvector (%ld octets, max %ld octets)" @@ -25127,98 +25137,98 @@ msgstr "" "n'est pas compatible avec les fichiers d'en-tête de libxml2 avec lesquels\n" "PostgreSQL a été construit." -#: utils/adt/xml.c:1985 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "Valeur invalide pour le caractère." -#: utils/adt/xml.c:1988 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "Espace requis." -#: utils/adt/xml.c:1991 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "la version autonome accepte seulement 'yes' et 'no'." -#: utils/adt/xml.c:1994 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "Déclaration mal formée : version manquante." -#: utils/adt/xml.c:1997 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "Encodage manquant dans la déclaration du texte." -#: utils/adt/xml.c:2000 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "Analyse de la déclaration XML : « ?> » attendu." -#: utils/adt/xml.c:2003 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Code d'erreur libxml non reconnu : %d." -#: utils/adt/xml.c:2260 +#: utils/adt/xml.c:2254 #, c-format msgid "XML does not support infinite date values." msgstr "XML ne supporte pas les valeurs infinies de date." -#: utils/adt/xml.c:2282 utils/adt/xml.c:2309 +#: utils/adt/xml.c:2276 utils/adt/xml.c:2303 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML ne supporte pas les valeurs infinies de timestamp." -#: utils/adt/xml.c:2725 +#: utils/adt/xml.c:2719 #, c-format msgid "invalid query" msgstr "requête invalide" -#: utils/adt/xml.c:2817 +#: utils/adt/xml.c:2811 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "le portail « %s » ne renvoie pas de lignes" -#: utils/adt/xml.c:4069 +#: utils/adt/xml.c:4063 #, c-format msgid "invalid array for XML namespace mapping" msgstr "tableau invalide pour la correspondance de l'espace de nom XML" -#: utils/adt/xml.c:4070 +#: utils/adt/xml.c:4064 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "" "Le tableau doit avoir deux dimensions avec une longueur de 2 pour le\n" "deuxième axe." -#: utils/adt/xml.c:4094 +#: utils/adt/xml.c:4088 #, c-format msgid "empty XPath expression" msgstr "expression XPath vide" -#: utils/adt/xml.c:4146 +#: utils/adt/xml.c:4140 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ni le nom de l'espace de noms ni l'URI ne peuvent être NULL" -#: utils/adt/xml.c:4153 +#: utils/adt/xml.c:4147 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "n'a pas pu enregistrer l'espace de noms XML de nom « %s » et d'URI « %s »" -#: utils/adt/xml.c:4510 +#: utils/adt/xml.c:4504 #, c-format msgid "DEFAULT namespace is not supported" msgstr "l'espace de nom DEFAULT n'est pas supporté" -#: utils/adt/xml.c:4539 +#: utils/adt/xml.c:4533 #, c-format msgid "row path filter must not be empty string" msgstr "le filtre du chemin de ligne ne doit pas être une chaîne vide" -#: utils/adt/xml.c:4573 +#: utils/adt/xml.c:4567 #, c-format msgid "column path filter must not be empty string" msgstr "le filtre du chemin de colonne ne doit pas être une chaîne vide" -#: utils/adt/xml.c:4720 +#: utils/adt/xml.c:4714 #, c-format msgid "more than one value returned by column XPath expression" msgstr "plus d'une valeur renvoyée par l'expression XPath de colonne" @@ -25945,7 +25955,7 @@ msgstr "échec de bind_textdomain_codeset" msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "séquence d'octets invalide pour l'encodage « %s » : %s" -#: utils/mb/mbutils.c:1700 +#: utils/mb/mbutils.c:1708 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "" @@ -28517,3 +28527,11 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé #, c-format #~ msgid "Please report this to <%s>." #~ msgstr "Merci de signaler ceci à <%s>." + +#, c-format +#~ msgid "This is known to fail occasionally during archive recovery, where it is harmless." +#~ msgstr "Ceci est connu pour échouer de temps en temps lors d'une restauration d'archive. C'est sans danger." + +#, c-format +#~ msgid "oversize GSSAPI packet sent by the client (%zu > %d)" +#~ msgstr "paquet GSSAPI surdimensionné envoyé par le client (%zu > %d)" diff --git a/src/backend/po/ja.po b/src/backend/po/ja.po index 2a722ff1a2e..5bd9186bdd3 100644 --- a/src/backend/po/ja.po +++ b/src/backend/po/ja.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: postgres (PostgreSQL 14)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-03 10:35+0900\n" -"PO-Revision-Date: 2025-02-03 14:01+0900\n" +"POT-Creation-Date: 2026-02-10 09:17+0900\n" +"PO-Revision-Date: 2026-02-10 09:57+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: jpug-doc \n" "Language: ja\n" @@ -28,26 +28,26 @@ msgstr "" msgid "not recorded" msgstr "記録されていません" -#: ../common/controldata_utils.c:78 ../common/controldata_utils.c:83 commands/copyfrom.c:1526 commands/extension.c:3482 utils/adt/genfile.c:128 +#: ../common/controldata_utils.c:78 ../common/controldata_utils.c:83 commands/copyfrom.c:1526 commands/extension.c:3612 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m" -#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3576 access/transam/xlog.c:4817 access/transam/xlog.c:11662 access/transam/xlog.c:11675 access/transam/xlog.c:12130 access/transam/xlog.c:12210 access/transam/xlog.c:12247 access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 -#: commands/extension.c:3492 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 replication/logical/snapbuild.c:1872 replication/logical/snapbuild.c:1914 replication/logical/snapbuild.c:1941 replication/slot.c:1727 replication/slot.c:1768 replication/walsender.c:545 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:881 +#: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 access/transam/timeline.c:143 access/transam/timeline.c:362 access/transam/twophase.c:1329 access/transam/xlog.c:3594 access/transam/xlog.c:4843 access/transam/xlog.c:11771 access/transam/xlog.c:11784 access/transam/xlog.c:12239 access/transam/xlog.c:12319 access/transam/xlog.c:12356 access/transam/xlog.c:12416 access/transam/xlogfuncs.c:703 access/transam/xlogfuncs.c:722 +#: commands/extension.c:3622 libpq/hba.c:534 replication/basebackup.c:2016 replication/logical/origin.c:729 replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1961 replication/logical/snapbuild.c:1988 replication/slot.c:1794 replication/slot.c:1835 replication/walsender.c:559 storage/file/buffile.c:445 storage/file/copydir.c:195 utils/adt/genfile.c:202 utils/adt/misc.c:881 #: utils/cache/relmapper.c:744 #, c-format msgid "could not read file \"%s\": %m" msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" -#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3581 access/transam/xlog.c:4822 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 utils/cache/relmapper.c:748 +#: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 access/transam/xlog.c:3599 access/transam/xlog.c:4848 replication/basebackup.c:2020 replication/logical/origin.c:734 replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 replication/slot.c:1798 replication/slot.c:1839 replication/walsender.c:564 utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" -#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3616 access/transam/xlog.c:3621 access/transam/xlog.c:3946 -#: access/transam/xlog.c:4787 access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 storage/file/copydir.c:218 -#: storage/file/copydir.c:223 storage/file/fd.c:738 storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 utils/cache/relmapper.c:898 +#: ../common/controldata_utils.c:122 ../common/controldata_utils.c:127 ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 access/transam/timeline.c:392 access/transam/timeline.c:438 access/transam/timeline.c:512 access/transam/twophase.c:1341 access/transam/twophase.c:1753 access/transam/xlog.c:3445 access/transam/xlog.c:3634 access/transam/xlog.c:3639 access/transam/xlog.c:3958 +#: access/transam/xlog.c:4813 access/transam/xlog.c:5741 access/transam/xlogfuncs.c:728 commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 libpq/be-fsstubs.c:525 replication/logical/origin.c:667 replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 replication/slot.c:1683 replication/slot.c:1846 replication/walsender.c:574 storage/file/copydir.c:218 +#: storage/file/copydir.c:223 storage/file/fd.c:735 storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" msgstr "ファイル\"%s\"をクローズできませんでした: %m" @@ -69,29 +69,29 @@ msgstr "" "されるものと一致しないようです。この場合以下の結果は不正確になります。また、\n" "このPostgreSQLはこのデータディレクトリと互換性がなくなります。" -#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3331 access/transam/xlog.c:3487 access/transam/xlog.c:3531 access/transam/xlog.c:3726 access/transam/xlog.c:3811 access/transam/xlog.c:3914 -#: access/transam/xlog.c:4807 access/transam/xlogutils.c:803 postmaster/syslogger.c:1488 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3612 replication/logical/reorderbuffer.c:4163 replication/logical/reorderbuffer.c:4939 replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 replication/slot.c:1699 replication/walsender.c:518 replication/walsender.c:2563 -#: storage/file/copydir.c:161 storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 +#: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 ../common/file_utils.c:227 ../common/file_utils.c:286 ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 access/transam/timeline.c:111 access/transam/timeline.c:251 access/transam/timeline.c:348 access/transam/twophase.c:1285 access/transam/xlog.c:3332 access/transam/xlog.c:3511 access/transam/xlog.c:3549 access/transam/xlog.c:3737 access/transam/xlog.c:3823 access/transam/xlog.c:3926 +#: access/transam/xlog.c:4833 access/transam/xlogutils.c:803 postmaster/syslogger.c:1488 replication/basebackup.c:616 replication/basebackup.c:1610 replication/logical/origin.c:719 replication/logical/reorderbuffer.c:3743 replication/logical/reorderbuffer.c:4294 replication/logical/reorderbuffer.c:5070 replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 replication/slot.c:1766 replication/walsender.c:532 replication/walsender.c:2581 +#: storage/file/copydir.c:161 storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 utils/cache/relmapper.c:842 utils/error/elog.c:1958 utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "ファイル\"%s\"をオープンできませんでした: %m" -#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11419 access/transam/xlog.c:11457 access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 +#: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 access/transam/twophase.c:1726 access/transam/twophase.c:1735 access/transam/xlog.c:11528 access/transam/xlog.c:11566 access/transam/xlog.c:11979 access/transam/xlogfuncs.c:782 postmaster/postmaster.c:5688 postmaster/syslogger.c:1499 postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" msgstr "ファイル\"%s\"を書き出せませんでした: %m" -#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3610 access/transam/xlog.c:4780 access/transam/xlog.c:10902 access/transam/xlog.c:10943 -#: replication/logical/snapbuild.c:1774 replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 +#: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 ../common/file_utils.c:298 ../common/file_utils.c:368 access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 access/transam/timeline.c:506 access/transam/twophase.c:1747 access/transam/xlog.c:3438 access/transam/xlog.c:3628 access/transam/xlog.c:4806 access/transam/xlog.c:11011 access/transam/xlog.c:11052 +#: replication/logical/snapbuild.c:1821 replication/slot.c:1667 replication/slot.c:1776 storage/file/fd.c:727 storage/file/fd.c:3623 storage/smgr/md.c:959 storage/smgr/md.c:1000 storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "ファイル\"%s\"をfsyncできませんでした: %m" -#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 postmaster/bgworker.c:948 -#: postmaster/postmaster.c:2552 postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 postmaster/postmaster.c:5975 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:592 storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 -#: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 tcop/postgres.c:3655 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 -#: utils/mmgr/mcxt.c:1242 utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6721 lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 postmaster/bgworker.c:349 +#: postmaster/bgworker.c:948 postmaster/postmaster.c:2554 postmaster/postmaster.c:4211 postmaster/postmaster.c:5613 postmaster/postmaster.c:5977 replication/libpqwalreceiver/libpqwalreceiver.c:287 replication/logical/logical.c:206 replication/walsender.c:606 storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 +#: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 utils/adt/pg_locale.c:451 utils/adt/pg_locale.c:615 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 utils/hash/dynahash.c:1116 utils/mb/mbutils.c:410 utils/mb/mbutils.c:438 +#: utils/mb/mbutils.c:823 utils/mb/mbutils.c:850 utils/misc/guc.c:5061 utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:927 utils/mmgr/mcxt.c:965 utils/mmgr/mcxt.c:1003 utils/mmgr/mcxt.c:1111 utils/mmgr/mcxt.c:1142 utils/mmgr/mcxt.c:1178 utils/mmgr/mcxt.c:1230 +#: utils/mmgr/mcxt.c:1265 utils/mmgr/mcxt.c:1300 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "メモリ不足" @@ -121,7 +121,7 @@ msgstr "実行対象の\"%s\"が見つかりませんでした" msgid "could not change directory to \"%s\": %m" msgstr "ディレクトリ\"%s\"に移動できませんでした: %m" -#: ../common/exec.c:299 access/transam/xlog.c:11293 replication/basebackup.c:1428 utils/adt/misc.c:362 +#: ../common/exec.c:299 access/transam/xlog.c:11402 replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" @@ -131,7 +131,7 @@ msgstr "シンボリックリンク\"%s\"を読めませんでした: %m" msgid "%s() failed: %m" msgstr "%s() が失敗しました: %m" -#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 ../port/path.c:764 utils/misc/ps_status.c:210 utils/misc/ps_status.c:218 utils/misc/ps_status.c:248 utils/misc/ps_status.c:256 #, c-format msgid "out of memory\n" msgstr "メモリ不足\n" @@ -141,105 +141,105 @@ msgstr "メモリ不足\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "nullポインタは複製できません (内部エラー)\n" -#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11395 access/transam/xlog.c:11433 access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1063 postmaster/pgarch.c:696 replication/basebackup.c:439 -#: replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1653 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 +#: ../common/file_utils.c:86 ../common/file_utils.c:446 ../common/file_utils.c:450 access/transam/twophase.c:1297 access/transam/xlog.c:11504 access/transam/xlog.c:11542 access/transam/xlog.c:11759 access/transam/xlogarchive.c:110 access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 commands/copyto.c:730 commands/extension.c:3601 commands/tablespace.c:805 commands/tablespace.c:894 guc-file.l:1063 postmaster/pgarch.c:696 replication/basebackup.c:439 +#: replication/basebackup.c:622 replication/basebackup.c:698 replication/logical/snapbuild.c:1700 storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 storage/file/fd.c:1948 storage/file/fd.c:3148 storage/file/fd.c:3351 utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 #, c-format msgid "could not stat file \"%s\": %m" msgstr "ファイル\"%s\"のstatに失敗しました: %m" -#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1520 storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 +#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 commands/tablespace.c:739 postmaster/postmaster.c:1522 storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" -#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m" -#: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1793 replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 replication/slot.c:672 replication/slot.c:1550 replication/slot.c:1699 storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m" -#: ../common/jsonapi.c:1084 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "エスケープシーケンス\"\\%s\"は不正です。" -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "0x%02x値を持つ文字はエスケープしなければなりません" -#: ../common/jsonapi.c:1090 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "入力の終端を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "配列要素または\"]\"を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "\",\"または\"]\"を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1099 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "\":\"を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1102 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "JSON値を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1105 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "入力文字列が予期せず終了しました。" -#: ../common/jsonapi.c:1107 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "文字列または\"}\"を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1110 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "\",\"または\"}\"を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1113 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "文字列を想定していましたが、\"%s\"でした。" -#: ../common/jsonapi.c:1116 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "トークン\"%s\"は不正です。" -#: ../common/jsonapi.c:1119 jsonpath_scan.l:500 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:500 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 はテキストに変換できません。" -#: ../common/jsonapi.c:1121 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\"の後には16進数の4桁が続かなければなりません。" -#: ../common/jsonapi.c:1124 +#: ../common/jsonapi.c:1127 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:1126 jsonpath_scan.l:521 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:521 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicodeの上位サロゲートは上位サロゲートに続いてはいけません。" -#: ../common/jsonapi.c:1128 jsonpath_scan.l:532 jsonpath_scan.l:542 jsonpath_scan.l:584 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:532 jsonpath_scan.l:542 jsonpath_scan.l:584 #, c-format msgid "Unicode low surrogate must follow a high surrogate." msgstr "Unicodeの下位サロゲートは上位サロゲートに続かなければなりません。" @@ -274,7 +274,7 @@ msgstr "不正なフォーク名です" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "有効なフォーク名は\"main\"、\"fsm\"、\"vm\"および\"init\"です。" -#: ../common/restricted_token.c:64 libpq/auth.c:1519 libpq/auth.c:2551 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "ライブラリ\"%s\"をロードできませんでした: エラーコード %lu" @@ -345,7 +345,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "実効ユーザーID %ld が見つかりませんでした: %s" -#: ../common/username.c:45 libpq/auth.c:2051 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "ユーザーが存在しません" @@ -467,7 +467,7 @@ msgstr "アクセストークンのメンバーシップを確認できません msgid "request for BRIN range summarization for index \"%s\" page %u was not recorded" msgstr "インデックス\"%s\" ページ%uのBRIN範囲要約のリクエストは登録されていません" -#: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11064 access/transam/xlog.c:11601 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 +#: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 access/transam/xlog.c:11173 access/transam/xlog.c:11710 access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 access/transam/xlogfuncs.c:509 #, c-format msgid "recovery is in progress" msgstr "リカバリは現在進行中です" @@ -497,12 +497,12 @@ msgstr "インデックス\"%s\"の親テーブルをオープンできません msgid "index \"%s\" is not valid" msgstr "インデックス\"%s\"は有効ではありません" -#: access/brin/brin_bloom.c:753 access/brin/brin_bloom.c:795 access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 statistics/dependencies.c:662 statistics/dependencies.c:715 statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 statistics/dependencies.c:662 statistics/dependencies.c:715 statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 utils/adt/pseudotypes.c:77 utils/adt/pseudotypes.c:252 #, c-format msgid "cannot accept a value of type %s" msgstr "%s型の値は受け付けられません" -#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 access/spgist/spgdoinsert.c:2275 +#: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" msgstr "インデックス行サイズ%1$zuはインデックス\"%3$s\"での最大値%2$zuを超えています" @@ -602,7 +602,7 @@ msgstr "インデックス列数(%d)が上限(%d)を超えています" msgid "index row requires %zu bytes, maximum size is %zu" msgstr "インデックス行が%zuバイトを必要としますが最大値は%zuです" -#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1922 +#: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "非サポートの書式コード: %d" @@ -625,57 +625,62 @@ msgstr "ユーザー定義リレーションのパラメータ型の制限を超 msgid "RESET must not include values for parameters" msgstr "RESETにはパラメータの値を含めてはいけません" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "認識できないパラメータ namaspace \"%s\"" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "不正なオプション名\"%s\": \"=\"が含まれていてはなりません" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12615 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "WITH OIDSと定義されたテーブルはサポートされません" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "認識できないラメータ \"%s\"" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "パラメータ\"%s\"が複数回指定されました" -#: access/common/reloptions.c:1592 +#: access/common/reloptions.c:1601 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "不正なブール型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1604 +#: access/common/reloptions.c:1613 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "不正な整数型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "値%sはオプション\"%s\"の範囲外です" -#: access/common/reloptions.c:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "有効な値の範囲は\"%d\"~\"%d\"です。" -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "不正な浮動小数点型オプションの値 \"%s\": %s" -#: access/common/reloptions.c:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "有効な値の範囲は\"%f\"~\"%f\"です。" -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "不正な列挙型オプションの値 \"%s\": %s" @@ -690,7 +695,7 @@ msgstr "圧縮方式lz4はサポートされていません" msgid "This functionality requires the server to be built with lz4 support." msgstr "この機能はlz4サポートを有効にしてビルドしたサーバーを必要とします。" -#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 utils/adt/xml.c:234 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1592 utils/adt/xml.c:234 #, c-format msgid "You need to rebuild PostgreSQL using %s." msgstr "%sを指定してPostgreSQLを再構築する必要があります。" @@ -730,17 +735,17 @@ msgstr "他のセッションの一時インデックスにはアクセスでき msgid "failed to re-find tuple within index \"%s\"" msgstr "インデックス\"%s\"内で行の再検索に失敗しました" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, 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:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "これを修復するには REINDEX INDEX \"%s\" をおこなってください。" -#: access/gin/ginutil.c:145 executor/execExpr.c:2177 utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 utils/adt/rowtypes.c:957 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 utils/adt/arrayfuncs.c:4034 utils/adt/arrayfuncs.c:6704 utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" msgstr "%s型の比較関数が見つかりません" @@ -775,7 +780,7 @@ msgstr "これは、PostgreSQL 9.1へアップグレードする前のクラッ msgid "Please REINDEX it." msgstr "REINDEXを行ってください。" -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "インデックス\"%s\"、ブロック%uでの不完全は分割を修正します" @@ -810,13 +815,13 @@ msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$s 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:278 access/hash/hashfunc.c:335 utils/adt/varchar.c:993 utils/adt/varchar.c:1054 +#: access/hash/hashfunc.c:280 access/hash/hashfunc.c:337 utils/adt/varchar.c:993 utils/adt/varchar.c:1054 #, c-format msgid "could not determine which collation to use for string hashing" msgstr "文字列のハッシュ値計算で使用する照合順序を特定できませんでした" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1971 commands/tablecmds.c:17155 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 -#: utils/adt/varlena.c:1517 +#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:338 catalog/heap.c:714 catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 commands/indexcmds.c:1971 commands/tablecmds.c:17208 commands/view.c:86 regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 utils/adt/like_support.c:1004 utils/adt/varchar.c:733 utils/adt/varchar.c:994 utils/adt/varchar.c:1055 +#: utils/adt/varlena.c:1525 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "照合順序を明示するには COLLATE 句を使います。" @@ -866,37 +871,37 @@ msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は演算子%3$s msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は異なる型間に対応する演算子を含んでいません" -#: access/heap/heapam.c:2299 +#: access/heap/heapam.c:2302 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "並列ワーカーではタプルの挿入はできません" -#: access/heap/heapam.c:2770 +#: access/heap/heapam.c:2773 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "並列処理中はタプルの削除はできません" -#: access/heap/heapam.c:2816 +#: access/heap/heapam.c:2819 #, c-format msgid "attempted to delete invisible tuple" msgstr "不可視のタプルを削除しようとしました" -#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 +#: access/heap/heapam.c:3265 access/heap/heapam.c:6617 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "並列処理中はタプルの更新はできません" -#: access/heap/heapam.c:3449 +#: access/heap/heapam.c:3452 #, c-format msgid "attempted to update invisible tuple" msgstr "不可視のタプルを更新しようとしました" -#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4941 access/heap/heapam.c:4979 access/heap/heapam.c:5246 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "リレーション\"%s\"の行ロックを取得できませんでした" -#: access/heap/heapam.c:6342 commands/trigger.c:3122 executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6371 commands/trigger.c:3152 executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 #, c-format msgid "tuple to be updated was already modified by an operation triggered by the current command" msgstr "更新対象のタプルはすでに現在のコマンドによって発行された操作によって変更されています" @@ -916,7 +921,7 @@ msgstr "行が大きすぎます: サイズは%zu、上限は%zu" msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "ファイル\"%1$s\"に書き込めませんでした、%3$dバイト中%2$dバイト書き込みました: %m" -#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3354 access/transam/xlog.c:3545 access/transam/xlog.c:4759 access/transam/xlog.c:11410 access/transam/xlog.c:11448 access/transam/xlog.c:11853 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 postmaster/postmaster.c:5673 replication/logical/origin.c:587 replication/slot.c:1551 storage/file/copydir.c:167 +#: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 access/transam/timeline.c:329 access/transam/timeline.c:481 access/transam/xlog.c:3354 access/transam/xlog.c:3563 access/transam/xlog.c:4785 access/transam/xlog.c:11519 access/transam/xlog.c:11557 access/transam/xlog.c:11962 access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4636 postmaster/postmaster.c:5675 replication/logical/origin.c:587 replication/slot.c:1611 storage/file/copydir.c:167 #: storage/smgr/md.c:218 utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -927,13 +932,13 @@ msgstr "ファイル\"%s\"を作成できませんでした: %m" msgid "could not truncate file \"%s\" to %u: %m" msgstr "ファイル\"%s\"を%uバイトに切り詰められませんでした: %m" -#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3426 access/transam/xlog.c:3601 access/transam/xlog.c:4771 postmaster/postmaster.c:4644 postmaster/postmaster.c:4654 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1750 replication/slot.c:1586 storage/file/buffile.c:506 +#: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 access/transam/timeline.c:424 access/transam/timeline.c:498 access/transam/xlog.c:3426 access/transam/xlog.c:3619 access/transam/xlog.c:4797 postmaster/postmaster.c:4646 postmaster/postmaster.c:4656 replication/logical/origin.c:599 replication/logical/origin.c:641 replication/logical/origin.c:660 replication/logical/snapbuild.c:1797 replication/slot.c:1647 storage/file/buffile.c:506 #: storage/file/copydir.c:207 utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" msgstr "ファイル\"%s\"に書き込めませんでした: %m" -#: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4432 replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2111 replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 storage/file/fd.c:3239 storage/file/reinit.c:250 +#: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 postmaster/postmaster.c:1098 postmaster/syslogger.c:1465 replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 replication/slot.c:1750 storage/file/fd.c:785 storage/file/fd.c:3168 storage/file/fd.c:3230 storage/file/reinit.c:250 #: storage/ipc/dsm.c:315 storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 utils/time/snapmgr.c:1606 #, c-format msgid "could not remove file \"%s\": %m" @@ -1059,7 +1064,7 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "凍結のため%uページがスキップされました。\n" msgstr[1] "凍結のため%uページがスキップされました。\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 commands/indexcmds.c:4154 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s。" @@ -1215,7 +1220,7 @@ msgstr "システムカタログのスキャン中にトランザクションが msgid "cannot access index \"%s\" while it is being reindexed" msgstr "再作成中であるためインデックス\"%s\"にアクセスできません" -#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: access/index/indexam.c:208 catalog/objectaddress.c:1355 commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 commands/tablecmds.c:16894 commands/tablecmds.c:18710 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\"はインデックスではありません" @@ -1260,17 +1265,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:2680 +#: access/nbtree/nbtutils.c:2685 #, 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:2686 +#: access/nbtree/nbtutils.c:2691 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "インデックス行はリレーション\"%3$s\"のタプル(%1$u,%2$u)を参照しています。" -#: access/nbtree/nbtutils.c:2690 +#: access/nbtree/nbtutils.c:2695 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1309,7 +1314,7 @@ msgstr "アクセスメソッド\"%2$s\"の演算子族\"%1$s\"は%4$s型に対 msgid "\"%s\" is an index" msgstr "\"%s\"はインデックスです" -#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13560 commands/tablecmds.c:16860 +#: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\"は複合型です" @@ -1364,12 +1369,12 @@ msgstr "プライマリサーバーで設定パラメータ\"%s\"がonに設定 msgid "Make sure the configuration parameter \"%s\" is set." msgstr "設定パラメータ\"%s\"が設定されていることを確認してください。" -#: access/transam/multixact.c:1022 +#: access/transam/multixact.c:1106 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "データベース\"%s\"におけるMultiXactIds周回によるデータ損失を防ぐために、データベースは新しくMultiXactIdsを生成するコマンドを受け付けません" -#: access/transam/multixact.c:1024 access/transam/multixact.c:1031 access/transam/multixact.c:1055 access/transam/multixact.c:1064 +#: access/transam/multixact.c:1108 access/transam/multixact.c:1115 access/transam/multixact.c:1139 access/transam/multixact.c:1148 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1378,65 +1383,70 @@ msgstr "" "そのデータベース全体の VACUUM を実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/multixact.c:1029 +#: access/transam/multixact.c:1113 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "OID %u を持つデータベースは周回によるデータ損失を防ぐために、新しいMultiXactIdsを生成するコマンドを受け付けない状態になっています" -#: access/transam/multixact.c:1050 access/transam/multixact.c:2334 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2421 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "database \"%s\" must be vacuumed before %u more MultiXactIds are used" msgstr[0] "データベース\"%s\"はあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" msgstr[1] "データベース\"%s\"はあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" -#: access/transam/multixact.c:1059 access/transam/multixact.c:2343 +#: access/transam/multixact.c:1143 access/transam/multixact.c:2430 #, c-format msgid "database with OID %u must be vacuumed before %u more MultiXactId is used" msgid_plural "database with OID %u must be vacuumed before %u more MultiXactIds are used" msgstr[0] "OID %u のデータベースはあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" msgstr[1] "OID %u のデータベースはあと%u個のMultiXactIdが使われる前にVACUUMする必要があります" -#: access/transam/multixact.c:1120 +#: access/transam/multixact.c:1207 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "マルチトランザクションの\"メンバ\"が制限を超えました" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1208 #, 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:1126 +#: access/transam/multixact.c:1213 #, 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:1157 +#: access/transam/multixact.c:1244 #, c-format msgid "database with OID %u must be vacuumed before %d more multixact member is used" msgid_plural "database with OID %u must be vacuumed before %d more multixact members are used" msgstr[0] "OID %u のデータベースは更に%d個のマルチトランザクションメンバが使用される前にVACUUMを実行する必要があります" msgstr[1] "OID %u のデータベースは更に%d個のマルチトランザクションメンバが使用される前にVACUUMを実行する必要があります" -#: access/transam/multixact.c:1162 +#: access/transam/multixact.c:1249 #, 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:1301 +#: access/transam/multixact.c:1388 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %uはもう存在しません: 周回しているようです" -#: access/transam/multixact.c:1307 +#: access/transam/multixact.c:1394 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %uを作成できませんでした: 周回しているようです" -#: access/transam/multixact.c:2339 access/transam/multixact.c:2348 access/transam/varsup.c:151 access/transam/varsup.c:158 access/transam/varsup.c:466 access/transam/varsup.c:473 +#: access/transam/multixact.c:1469 +#, c-format +msgid "MultiXact %u has invalid next offset" +msgstr "MultiXact %u の次のオフセットが不正です" + +#: access/transam/multixact.c:2426 access/transam/multixact.c:2435 access/transam/varsup.c:151 access/transam/varsup.c:158 access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format msgid "" "To avoid a database shutdown, execute a database-wide VACUUM in that database.\n" @@ -1445,61 +1455,66 @@ msgstr "" "データベースの停止を防ぐために、データベース全体の VACUUM を実行してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除も必要かもしれません。" -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2709 #, 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:2644 +#: access/transam/multixact.c:2731 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "マルチトランザクションメンバーの周回防止が有効になりました" -#: access/transam/multixact.c:3038 +#: access/transam/multixact.c:3125 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "最古のマルチトランザクション%uが見つかりません、アクセス可能な最古のものは%u、切り詰めをスキップします" -#: access/transam/multixact.c:3056 +#: access/transam/multixact.c:3143 #, c-format msgid "cannot truncate up to MultiXact %u because it does not exist on disk, skipping truncation" msgstr "マルチトランザクション%uがディスク上に存在しないため、そこまでの切り詰めができません、切り詰めをスキップします" -#: access/transam/multixact.c:3370 +#: access/transam/multixact.c:3160 +#, c-format +msgid "cannot truncate up to MultiXact %u because it has invalid offset, skipping truncation" +msgstr "マルチトランザクション%uのオフセットが不正なため、そこまでの切り詰めができません、切り詰めをスキップします" + +#: access/transam/multixact.c:3498 #, c-format msgid "invalid MultiXactId: %u" msgstr "不正なMultiXactId: %u" -#: access/transam/parallel.c:737 access/transam/parallel.c:856 +#: access/transam/parallel.c:744 access/transam/parallel.c:863 #, c-format msgid "parallel worker failed to initialize" msgstr "パラレルワーカーの初期化に失敗しました" -#: access/transam/parallel.c:738 access/transam/parallel.c:857 +#: access/transam/parallel.c:745 access/transam/parallel.c:864 #, c-format msgid "More details may be available in the server log." msgstr "詳細な情報がサーバーログにあるかもしれません。" -#: access/transam/parallel.c:918 +#: access/transam/parallel.c:925 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "並列処理中にpostmasterが終了しました" -#: access/transam/parallel.c:1105 +#: access/transam/parallel.c:1112 #, c-format msgid "lost connection to parallel worker" msgstr "パラレルワーカーへの接続を失いました" -#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 +#: access/transam/parallel.c:1178 access/transam/parallel.c:1180 msgid "parallel worker" msgstr "パラレルワーカー" -#: access/transam/parallel.c:1326 +#: access/transam/parallel.c:1333 #, c-format msgid "could not map dynamic shared memory segment" msgstr "動的共有メモリセグメントをマップできませんでした" -#: access/transam/parallel.c:1331 +#: access/transam/parallel.c:1338 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "動的共有メモリセグメントのマジックナンバーが不正です" @@ -1696,7 +1711,7 @@ msgstr "ファイル\"%s\"内に格納されているサイズが不正です" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "算出されたCRCチェックサムがファイル\"%s\"に格納されている値と一致しません" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6722 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "WALリーダの割り当てに中に失敗しました。" @@ -1812,544 +1827,539 @@ msgstr "OID %uのデータベースは%uトランザクション以内にVACUUM msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "1トランザクション内では 2^32-2 個より多くのコマンドを実行できません" -#: access/transam/xact.c:1584 +#: access/transam/xact.c:1594 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "コミットされたサブトランザクション数の最大値(%d)が制限を越えました" -#: access/transam/xact.c:2435 +#: access/transam/xact.c:2445 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "一時オブジェクトに対する操作を行ったトランザクションをPREPAREすることはできません" -#: access/transam/xact.c:2445 +#: access/transam/xact.c:2455 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "エクスポートされたスナップショットを持つトランザクションをPREPAREすることはできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3416 +#: access/transam/xact.c:3426 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%sはトランザクションブロックの内側では実行できません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3426 +#: access/transam/xact.c:3436 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%sはサブトランザクションブロックの内側では実行できません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3436 +#: access/transam/xact.c:3446 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s はパイプライン内での実行はできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3446 +#: access/transam/xact.c:3456 #, c-format msgid "%s cannot be executed from a function" msgstr "%s は関数内での実行はできません" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3517 access/transam/xact.c:3832 access/transam/xact.c:3911 access/transam/xact.c:4034 access/transam/xact.c:4185 access/transam/xact.c:4254 access/transam/xact.c:4365 +#: access/transam/xact.c:3527 access/transam/xact.c:3842 access/transam/xact.c:3921 access/transam/xact.c:4044 access/transam/xact.c:4195 access/transam/xact.c:4264 access/transam/xact.c:4375 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%sはトランザクションブロック内でのみ使用できます" -#: access/transam/xact.c:3718 +#: access/transam/xact.c:3728 #, c-format msgid "there is already a transaction in progress" msgstr "すでにトランザクションが実行中です" -#: access/transam/xact.c:3837 access/transam/xact.c:3916 access/transam/xact.c:4039 +#: access/transam/xact.c:3847 access/transam/xact.c:3926 access/transam/xact.c:4049 #, c-format msgid "there is no transaction in progress" msgstr "実行中のトランザクションがありません" -#: access/transam/xact.c:3927 +#: access/transam/xact.c:3937 #, c-format msgid "cannot commit during a parallel operation" msgstr "並列処理中にはコミットはできません" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4060 #, c-format msgid "cannot abort during a parallel operation" msgstr "パラレル処理中にロールバックはできません" -#: access/transam/xact.c:4149 +#: access/transam/xact.c:4159 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "パラレル処理中にセーブポイントは設定できません" -#: access/transam/xact.c:4236 +#: access/transam/xact.c:4246 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "並列処理中はセーブポイントの解放はできません" -#: access/transam/xact.c:4246 access/transam/xact.c:4297 access/transam/xact.c:4357 access/transam/xact.c:4406 +#: access/transam/xact.c:4256 access/transam/xact.c:4307 access/transam/xact.c:4367 access/transam/xact.c:4416 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "セーブポイント\"%s\"は存在しません" -#: access/transam/xact.c:4303 access/transam/xact.c:4412 +#: access/transam/xact.c:4313 access/transam/xact.c:4422 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "セーブポイント\"%s\"は現在のセーブポイントレベルには存在しません" -#: access/transam/xact.c:4345 +#: access/transam/xact.c:4355 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "パラレル処理中にセーブポイントのロールバックはできません" -#: access/transam/xact.c:4473 +#: access/transam/xact.c:4483 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "並列処理中はサブトランザクションを開始できません" -#: access/transam/xact.c:4541 +#: access/transam/xact.c:4551 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "並列処理中はサブトランザクションをコミットできません" -#: access/transam/xact.c:5188 +#: access/transam/xact.c:5198 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "1トランザクション内には 2^32-1 個より多くのサブトランザクションを作成できません" -#: access/transam/xlog.c:1839 +#: access/transam/xlog.c:1851 #, 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:2612 +#: access/transam/xlog.c:2622 #, 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:3489 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "This is known to fail occasionally during archive recovery, where it is harmless." -msgstr "これはアーカイブリカバリ中にたまに起きますが、その場合は無害であることがわかっています。" - -#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 replication/walsender.c:2557 +#: access/transam/xlog.c:4039 access/transam/xlogutils.c:798 replication/walsender.c:2575 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "要求された WAL セグメント %s はすでに削除されています" -#: access/transam/xlog.c:4289 +#: access/transam/xlog.c:4315 #, c-format msgid "could not rename file \"%s\": %m" msgstr "ファイル\"%s\"の名前を変更できませんでした: %m" -#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 +#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "WALディレクトリ\"%s\"は存在しません" -#: access/transam/xlog.c:4347 +#: access/transam/xlog.c:4373 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "なかったWALディレクトリ\"%s\"を作成しています" -#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4376 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "なかったディレクトリ\"%s\"の作成に失敗しました: %m" -#: access/transam/xlog.c:4472 +#: access/transam/xlog.c:4498 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "ログファイル%2$s、オフセット%3$uのタイムラインID%1$uは想定外です" -#: access/transam/xlog.c:4610 +#: access/transam/xlog.c:4636 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "新しいタイムライン%uはデータベースシステムのタイムライン%uの子ではありません" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4650 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "新しいタイムライン%uは現在のデータベースシステムのタイムライン%uから現在のリカバリポイント%X/%Xより前に分岐しています" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4669 #, c-format msgid "new target timeline is %u" msgstr "新しい目標タイムラインは%uです" -#: access/transam/xlog.c:4679 +#: access/transam/xlog.c:4705 #, c-format msgid "could not generate secret authorization token" msgstr "秘密の認証トークンを生成できませんでした" -#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 access/transam/xlog.c:4871 access/transam/xlog.c:4878 access/transam/xlog.c:4885 access/transam/xlog.c:4890 access/transam/xlog.c:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4918 access/transam/xlog.c:4925 access/transam/xlog.c:4932 access/transam/xlog.c:4941 access/transam/xlog.c:4948 utils/init/miscinit.c:1635 +#: access/transam/xlog.c:4864 access/transam/xlog.c:4873 access/transam/xlog.c:4897 access/transam/xlog.c:4904 access/transam/xlog.c:4911 access/transam/xlog.c:4916 access/transam/xlog.c:4923 access/transam/xlog.c:4930 access/transam/xlog.c:4937 access/transam/xlog.c:4944 access/transam/xlog.c:4951 access/transam/xlog.c:4958 access/transam/xlog.c:4967 access/transam/xlog.c:4974 utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "データベースファイルがサーバーと互換性がありません" -#: access/transam/xlog.c:4839 +#: access/transam/xlog.c:4865 #, 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:4843 +#: access/transam/xlog.c:4869 #, 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:4848 +#: access/transam/xlog.c:4874 #, 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:4851 access/transam/xlog.c:4875 access/transam/xlog.c:4882 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4901 access/transam/xlog.c:4908 access/transam/xlog.c:4913 #, c-format msgid "It looks like you need to initdb." msgstr "initdbが必要のようです。" -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4888 #, c-format msgid "incorrect checksum in control file" msgstr "制御ファイル内のチェックサムが不正です" -#: access/transam/xlog.c:4872 +#: access/transam/xlog.c:4898 #, 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:4879 +#: access/transam/xlog.c:4905 #, 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:4886 +#: access/transam/xlog.c:4912 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "データベースクラスタはサーバー実行ファイルと異なる浮動小数点書式を使用しているようです。" -#: access/transam/xlog.c:4891 +#: access/transam/xlog.c:4917 #, 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:4894 access/transam/xlog.c:4901 access/transam/xlog.c:4908 access/transam/xlog.c:4915 access/transam/xlog.c:4922 access/transam/xlog.c:4929 access/transam/xlog.c:4936 access/transam/xlog.c:4944 access/transam/xlog.c:4951 +#: access/transam/xlog.c:4920 access/transam/xlog.c:4927 access/transam/xlog.c:4934 access/transam/xlog.c:4941 access/transam/xlog.c:4948 access/transam/xlog.c:4955 access/transam/xlog.c:4962 access/transam/xlog.c:4970 access/transam/xlog.c:4977 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "再コンパイルもしくは initdb が必要そうです。" -#: access/transam/xlog.c:4898 +#: access/transam/xlog.c:4924 #, 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:4905 +#: access/transam/xlog.c:4931 #, 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:4912 +#: access/transam/xlog.c:4938 #, 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:4919 +#: access/transam/xlog.c:4945 #, 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:4926 +#: access/transam/xlog.c:4952 #, 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:4933 +#: access/transam/xlog.c:4959 #, 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:4942 +#: access/transam/xlog.c:4968 #, 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:4949 +#: access/transam/xlog.c:4975 #, 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:4958 +#: access/transam/xlog.c:4984 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかしコントロールファイルでは%dバイトとなっています" msgstr[1] "WALセグメントのサイズ指定は1MBと1GBの間の2の累乗でなければなりません、しかしコントロールファイルでは%dバイトとなっています" -#: access/transam/xlog.c:4970 +#: access/transam/xlog.c:4996 #, 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:4974 +#: access/transam/xlog.c:5000 #, 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:5408 +#: access/transam/xlog.c:5438 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルに書き込めませんでした: %m" -#: access/transam/xlog.c:5416 +#: access/transam/xlog.c:5446 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをfsyncできませんでした: %m" -#: access/transam/xlog.c:5422 +#: access/transam/xlog.c:5452 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "ブートストラップの先行書き込みログファイルをクローズできませんでした: %m" -#: access/transam/xlog.c:5483 +#: access/transam/xlog.c:5513 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "リカバリコマンドファイル \"%s\"の使用はサポートされません" -#: access/transam/xlog.c:5548 +#: access/transam/xlog.c:5578 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "スタンバイモードはシングルユーザーサーバーではサポートされません" -#: access/transam/xlog.c:5565 +#: access/transam/xlog.c:5595 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "primary_conninfo と restore_command のどちらも指定されていません" -#: access/transam/xlog.c:5566 +#: access/transam/xlog.c:5596 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "データベースサーバーはpg_walサブディレクトリに置かれたファイルを定期的に確認します。" -#: access/transam/xlog.c:5574 +#: access/transam/xlog.c:5604 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "スタンバイモードを有効にしない場合は、restore_command の指定が必要です" -#: access/transam/xlog.c:5612 +#: access/transam/xlog.c:5642 #, c-format msgid "recovery target timeline %u does not exist" msgstr "リカバリ目標タイムライン%uが存在しません" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5763 #, c-format msgid "archive recovery complete" msgstr "アーカイブリカバリが完了しました" -#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 +#: access/transam/xlog.c:5829 access/transam/xlog.c:6105 #, c-format msgid "recovery stopping after reaching consistency" msgstr "リカバリ処理は一貫性確保後に停止します" -#: access/transam/xlog.c:5821 +#: access/transam/xlog.c:5850 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の前で停止します" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5940 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの前に停止します" -#: access/transam/xlog.c:5918 +#: access/transam/xlog.c:5947 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの前に停止します" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:6000 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "リカバリ処理は復元ポイント\"%s\"、時刻%s に停止します" -#: access/transam/xlog.c:5989 +#: access/transam/xlog.c:6018 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の後で停止します" -#: access/transam/xlog.c:6056 +#: access/transam/xlog.c:6085 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのコミット、時刻%sの後に停止します" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6093 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "リカバリ処理はトランザクション%uのアボート、時刻%sの後に停止します" -#: access/transam/xlog.c:6109 +#: access/transam/xlog.c:6138 #, c-format msgid "pausing at the end of recovery" msgstr "リカバリ完了位置で一時停止しています" -#: access/transam/xlog.c:6110 +#: access/transam/xlog.c:6139 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "再開するには pg_wal_replay_resume() を実行してください" -#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 +#: access/transam/xlog.c:6142 access/transam/xlog.c:6424 #, c-format msgid "recovery has paused" msgstr "リカバリは一時停止中です" -#: access/transam/xlog.c:6114 +#: access/transam/xlog.c:6143 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "再開するには pg_xlog_replay_resume() を実行してください" -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6415 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "パラメータ設定値が十分でないため、ホットスタンバイを使用できません" -#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 access/transam/xlog.c:6444 +#: access/transam/xlog.c:6416 access/transam/xlog.c:6443 access/transam/xlog.c:6473 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "%s = %d はプライマリサーバーでの設定値%dより小さいです。" -#: access/transam/xlog.c:6396 +#: access/transam/xlog.c:6425 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "一時停止が解除されると、サーバーはシャットダウンします。" -#: access/transam/xlog.c:6397 +#: access/transam/xlog.c:6426 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "その後必要な設定変更を行い、サーバーを再起動できます。" -#: access/transam/xlog.c:6408 +#: access/transam/xlog.c:6437 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "パラメータ設定値が十分でないため昇格できません" -#: access/transam/xlog.c:6418 +#: access/transam/xlog.c:6447 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "必要な設定変更を行った後にサーバーを再起動してください。" -#: access/transam/xlog.c:6442 +#: access/transam/xlog.c:6471 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "パラメータの設定値が不足しているためリカバリを中断しました" -#: access/transam/xlog.c:6448 +#: access/transam/xlog.c:6477 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "必要な設定変更を行った後、再起動することができます。" -#: access/transam/xlog.c:6470 +#: access/transam/xlog.c:6499 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "wal_level=minimal でWALが生成されました、リカバリは継続できません" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6500 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "これは一時的に wal_level=minimal にした場合に起こります。" -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6501 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "wal_levelをminimalより上に設定したあとに取得されたバックアップを使用してください。" -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6570 #, c-format msgid "control file contains invalid checkpoint location" msgstr "制御ファイル内のチェックポイント位置が不正です" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6581 #, c-format msgid "database system was shut down at %s" msgstr "データベースシステムは %s にシャットダウンしました" -#: access/transam/xlog.c:6558 +#: access/transam/xlog.c:6587 #, c-format msgid "database system was shut down in recovery at %s" msgstr "データベースシステムはリカバリ中 %s にシャットダウンしました" -#: access/transam/xlog.c:6564 +#: access/transam/xlog.c:6593 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "データベースシステムはシャットダウン中に中断されました; %s まで動作していたことは確認できます" -#: access/transam/xlog.c:6570 +#: access/transam/xlog.c:6599 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "データベースシステムはリカバリ中 %s に中断されました" -#: access/transam/xlog.c:6572 +#: access/transam/xlog.c:6601 #, 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:6578 +#: access/transam/xlog.c:6607 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "データベースシステムはリカバリ中ログ時刻 %s に中断されました" -#: access/transam/xlog.c:6580 +#: access/transam/xlog.c:6609 #, 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:6586 +#: access/transam/xlog.c:6615 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "データベースシステムは中断されました: %s まで動作していたことは確認できます" -#: access/transam/xlog.c:6592 +#: access/transam/xlog.c:6621 #, c-format msgid "control file contains invalid database cluster state" msgstr "制御ファイル内のデータベース・クラスタ状態が不正です" -#: access/transam/xlog.c:6649 +#: access/transam/xlog.c:6678 #, c-format msgid "entering standby mode" msgstr "スタンバイモードに入ります" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6681 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "XID%uまでのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6656 +#: access/transam/xlog.c:6685 #, c-format msgid "starting point-in-time recovery to %s" msgstr "%sまでのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6660 +#: access/transam/xlog.c:6689 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "\"%s\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6664 +#: access/transam/xlog.c:6693 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "WAL位置(LSN) \"%X/%X\"までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6697 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "最も古い一貫性確保点までのポイントインタイムリカバリを開始します" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6700 #, c-format msgid "starting archive recovery" msgstr "アーカイブリカバリを開始しています" -#: access/transam/xlog.c:6745 +#: access/transam/xlog.c:6774 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "チェックポイントレコードが参照している redo 位置を見つけられませんでした" -#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 +#: access/transam/xlog.c:6775 access/transam/xlog.c:6785 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2360,475 +2370,480 @@ msgstr "" "バックアップからの復旧でなければ、\"%s/backup_label\"の削除を試みてください。.\n" "バックアップから復旧で\"%s/backup_label\"を削除すると、クラスタは壊れた状態で復旧されることに注意してください。" -#: access/transam/xlog.c:6755 +#: access/transam/xlog.c:6784 #, c-format msgid "could not locate required checkpoint record" msgstr "必要なチェックポイントが見つかりませんでした" -#: access/transam/xlog.c:6784 commands/tablespace.c:665 +#: access/transam/xlog.c:6813 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "シンボリックリンク\"%s\"を作成できませんでした: %m" -#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 +#: access/transam/xlog.c:6845 access/transam/xlog.c:6851 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "ファイル\"%2$s\"が存在しないためファイル\"%1$s\"を無視します" -#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 +#: access/transam/xlog.c:6847 access/transam/xlog.c:12495 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "ファイル\"%s\"は\"%s\"にリネームされました。" -#: access/transam/xlog.c:6824 +#: access/transam/xlog.c:6853 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlog.c:6875 +#: access/transam/xlog.c:6904 #, c-format msgid "could not locate a valid checkpoint record" msgstr "有効なチェックポイントが見つかりませんでした" -#: access/transam/xlog.c:6913 +#: access/transam/xlog.c:6915 +#, c-format +msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X" +msgstr "%3$X/%4$08Xのチェックポイントレコードが参照しているredo位置%1$X/%2$08Xを見つけられませんでした" + +#: access/transam/xlog.c:6952 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "要求されたタイムライン%uはこのサーバーの履歴からの子孫ではありません" -#: access/transam/xlog.c:6915 +#: access/transam/xlog.c:6954 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "タイムライン%3$uの最終チェックポイントは%1$X/%2$Xですが、要求されたタイムラインの履歴の中ではサーバーはそのタイムラインから%4$X/%5$Xで分岐しています。" -#: access/transam/xlog.c:6929 +#: access/transam/xlog.c:6968 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "要求されたタイムライン%1$uはタイムライン%4$uの最小リカバリポイント%2$X/%3$Xを含みません" -#: access/transam/xlog.c:6959 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid next transaction ID" msgstr "次のトランザクションIDが不正です" -#: access/transam/xlog.c:7059 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo in checkpoint record" msgstr "チェックポイントレコード内の不正なREDO" -#: access/transam/xlog.c:7070 +#: access/transam/xlog.c:7109 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "シャットダウン・チェックポイントにおける不正なREDOレコード" -#: access/transam/xlog.c:7110 +#: access/transam/xlog.c:7149 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "データベースシステムは正しくシャットダウンされていません; 自動リカバリを実行中" -#: access/transam/xlog.c:7114 +#: access/transam/xlog.c:7153 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "タイムライン%uから、タイムライン%uを目標としてクラッシュリカバリを開始します" -#: access/transam/xlog.c:7161 +#: access/transam/xlog.c:7200 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_labelに制御ファイルと整合しないデータが含まれます" -#: access/transam/xlog.c:7162 +#: access/transam/xlog.c:7201 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "これはバックアップが破損しており、リカバリには他のバックアップを使用しなければならないことを意味します。" -#: access/transam/xlog.c:7389 +#: access/transam/xlog.c:7428 #, c-format msgid "redo starts at %X/%X" msgstr "REDOを%X/%Xから開始します" -#: access/transam/xlog.c:7614 +#: access/transam/xlog.c:7653 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "要求されたリカバリ停止ポイントは、一貫性があるリカバリポイントより前にあります" -#: access/transam/xlog.c:7652 +#: access/transam/xlog.c:7691 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "REDOが%X/%Xで終了 システム使用状況: %s" -#: access/transam/xlog.c:7658 +#: access/transam/xlog.c:7697 #, c-format msgid "last completed transaction was at log time %s" msgstr "最後に完了したトランザクションのログ時刻は%sでした" -#: access/transam/xlog.c:7667 +#: access/transam/xlog.c:7706 #, c-format msgid "redo is not required" msgstr "REDOは必要ありません" -#: access/transam/xlog.c:7679 +#: access/transam/xlog.c:7718 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "指定したリカバリターゲットに到達する前にリカバリが終了しました" -#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 +#: access/transam/xlog.c:7802 access/transam/xlog.c:7806 #, c-format msgid "WAL ends before end of online backup" msgstr "オンラインバックアップの終了より前にWALが終了しました" -#: access/transam/xlog.c:7764 +#: access/transam/xlog.c:7803 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "オンラインバックアップ中に生成されたすべてのWALがリカバリで利用可能である必要があります。" -#: access/transam/xlog.c:7768 +#: access/transam/xlog.c:7807 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "pg_start_backup() を使ったオンラインバックアップは pg_stop_backup() で終了なければならず、かつその時点までのすべてのWALはリカバリで利用可能である必要があります" -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7810 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WALが一貫性があるリカバリポイントより前で終了しました" -#: access/transam/xlog.c:7806 +#: access/transam/xlog.c:7853 #, c-format msgid "selected new timeline ID: %u" msgstr "新しいタイムラインIDを選択: %u" -#: access/transam/xlog.c:8274 +#: access/transam/xlog.c:8321 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "%2$s で想定外のディレクトリエントリ\"%1$s\"が見つかりました" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8323 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Pg_tblspc/ のすべてのディレクトリエントリは、シンボリックリンクである必要があります。" -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8324 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "これらのディレクトリを削除するか、またはallow_in_place_tablespacesを一時的にONに設定することでリカバリを完了させることができます。" -#: access/transam/xlog.c:8361 +#: access/transam/xlog.c:8408 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "%X/%X でリカバリの一貫性が確保されました" -#: access/transam/xlog.c:8570 +#: access/transam/xlog.c:8617 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "制御ファイル内の最初のチェックポイントへのリンクが不正です" -#: access/transam/xlog.c:8574 +#: access/transam/xlog.c:8621 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "backup_labelファイル内のチェックポイントへのリンクが不正です" -#: access/transam/xlog.c:8592 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid primary checkpoint record" msgstr "最初のチェックポイントレコードが不正です" -#: access/transam/xlog.c:8596 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid checkpoint record" msgstr "チェックポイントレコードが不正です" -#: access/transam/xlog.c:8607 +#: access/transam/xlog.c:8654 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "プライマリチェックポイントレコード内のリソースマネージャIDが不正です" -#: access/transam/xlog.c:8611 +#: access/transam/xlog.c:8658 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "チェックポイントレコード内のリソースマネージャIDがで不正です" -#: access/transam/xlog.c:8624 +#: access/transam/xlog.c:8671 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "最初のチェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlog.c:8628 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "チェックポイントレコード内のxl_infoが不正です" -#: access/transam/xlog.c:8639 +#: access/transam/xlog.c:8686 #, c-format msgid "invalid length of primary checkpoint record" msgstr "最初のチェックポイントレコード長が不正です" -#: access/transam/xlog.c:8643 +#: access/transam/xlog.c:8690 #, c-format msgid "invalid length of checkpoint record" msgstr "チェックポイントレコード長が不正です" -#: access/transam/xlog.c:8824 +#: access/transam/xlog.c:8871 #, c-format msgid "shutting down" msgstr "シャットダウン処理中" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8863 +#: access/transam/xlog.c:8910 #, 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:8875 +#: access/transam/xlog.c:8922 #, 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:8935 +#: access/transam/xlog.c:8982 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "リスタートポイント完了: %d個のバッファを出力 (%.1f%%); %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB" -#: access/transam/xlog.c:8955 +#: access/transam/xlog.c:9002 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "チェックポイント完了: %d個のバッファを出力 (%.1f%%); %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB" -#: access/transam/xlog.c:9406 +#: access/transam/xlog.c:9473 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "データベースのシャットダウンに並行して、先行書き込みログが発生しました" -#: access/transam/xlog.c:9939 +#: access/transam/xlog.c:10046 #, c-format msgid "recovery restart point at %X/%X" msgstr "リカバリ再開ポイントは%X/%Xです" -#: access/transam/xlog.c:9941 +#: access/transam/xlog.c:10048 #, c-format msgid "Last completed transaction was at log time %s." msgstr "最後に完了したトランザクションはログ時刻 %s のものです" -#: access/transam/xlog.c:10187 +#: access/transam/xlog.c:10296 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "復帰ポイント\"%s\"が%X/%Xに作成されました" -#: access/transam/xlog.c:10332 +#: access/transam/xlog.c:10441 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外の前回のタイムラインID %u(現在のタイムラインIDは%u)がありました" -#: access/transam/xlog.c:10341 +#: access/transam/xlog.c:10450 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u (%uの後)がありました" -#: access/transam/xlog.c:10357 +#: access/transam/xlog.c:10466 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "タイムライン%4$uの最小リカバリポイント%2$X/%3$Xに達する前のチェックポイントレコード内の想定外のタイムラインID%1$u。" -#: access/transam/xlog.c:10432 +#: access/transam/xlog.c:10541 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "オンラインバックアップはキャンセルされ、リカバリを継続できません" -#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 access/transam/xlog.c:10575 +#: access/transam/xlog.c:10598 access/transam/xlog.c:10654 access/transam/xlog.c:10684 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "チェックポイントレコードにおいて想定外のタイムラインID %u(%uのはず)がありました" -#: access/transam/xlog.c:10733 +#: access/transam/xlog.c:10842 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "%X/%Xで%sに上書きされて失われた継続行を正常にスキップしました" -#: access/transam/xlog.c:10948 +#: access/transam/xlog.c:11057 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "ライトスルーファイル\"%s\"をfsyncできませんでした: %m" -#: access/transam/xlog.c:10954 +#: access/transam/xlog.c:11063 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "ファイル\"%s\"をfdatasyncできませんでした: %m" -#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 +#: access/transam/xlog.c:11174 access/transam/xlog.c:11711 access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 access/transam/xlogfuncs.c:383 #, c-format msgid "WAL control functions cannot be executed during recovery." msgstr "リカバリ中はWAL制御関数は実行できません。" -#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 +#: access/transam/xlog.c:11183 access/transam/xlog.c:11720 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "オンラインバックアップを行うにはWALレベルが不十分です" -#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 access/transam/xlogfuncs.c:308 +#: access/transam/xlog.c:11184 access/transam/xlog.c:11721 access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "サーバーの開始時にwal_levelを\"replica\"または \"logical\"にセットする必要があります。" -#: access/transam/xlog.c:11080 +#: access/transam/xlog.c:11189 #, c-format msgid "backup label too long (max %d bytes)" msgstr "バックアップラベルが長すぎます (最大%dバイト)" -#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 access/transam/xlog.c:11439 +#: access/transam/xlog.c:11226 access/transam/xlog.c:11510 access/transam/xlog.c:11548 #, c-format msgid "a backup is already in progress" msgstr "すでにバックアップが進行中です" -#: access/transam/xlog.c:11118 +#: access/transam/xlog.c:11227 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "pg_stop_backup()を実行後に再試行してください" -#: access/transam/xlog.c:11214 +#: access/transam/xlog.c:11323 #, 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:11216 access/transam/xlog.c:11807 +#: access/transam/xlog.c:11325 access/transam/xlog.c:11916 #, 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:11300 replication/basebackup.c:1433 utils/adt/misc.c:367 +#: access/transam/xlog.c:11409 replication/basebackup.c:1433 utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "シンボリックリンク\"%s\"の参照先が長すぎます" -#: access/transam/xlog.c:11350 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 +#: access/transam/xlog.c:11459 commands/tablespace.c:385 commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "このプラットフォームではテーブル空間はサポートしていません" -#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 +#: access/transam/xlog.c:11511 access/transam/xlog.c:11549 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "バックアップが進行中でないことが確かであれば、ファイル\"%s\"を削除し再実行してください。" -#: access/transam/xlog.c:11627 +#: access/transam/xlog.c:11736 #, c-format msgid "exclusive backup not in progress" msgstr "排他バックアップは進行中ではありません" -#: access/transam/xlog.c:11654 +#: access/transam/xlog.c:11763 #, c-format msgid "a backup is not in progress" msgstr "バックアップが進行中ではありません" -#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 access/transam/xlog.c:12144 access/transam/xlog.c:12150 access/transam/xlog.c:12198 access/transam/xlog.c:12278 access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11849 access/transam/xlog.c:11862 access/transam/xlog.c:12253 access/transam/xlog.c:12259 access/transam/xlog.c:12307 access/transam/xlog.c:12387 access/transam/xlog.c:12411 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "ファイル\"%s\"内の不正なデータ" -#: access/transam/xlog.c:11757 replication/basebackup.c:1287 +#: access/transam/xlog.c:11866 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "オンラインバックアップ中にスタンバイが昇格しました" -#: access/transam/xlog.c:11758 replication/basebackup.c:1288 +#: access/transam/xlog.c:11867 replication/basebackup.c:1288 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "つまり取得中のバックアップは破損しているため使用してはいけません。再度オンラインバックアップを取得してください。" -#: access/transam/xlog.c:11805 +#: access/transam/xlog.c:11914 #, 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:11925 +#: access/transam/xlog.c:12034 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "ベースバックアップ完了、必要な WAL セグメントがアーカイブされるのを待っています" -#: access/transam/xlog.c:11937 +#: access/transam/xlog.c:12046 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "まだ必要なすべての WAL セグメントがアーカイブされるのを待っています(%d 秒経過)" -#: access/transam/xlog.c:11939 +#: access/transam/xlog.c:12048 #, 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:11946 +#: access/transam/xlog.c:12055 #, c-format msgid "all required WAL segments have been archived" msgstr "必要なすべての WAL セグメントがアーカイブされました" -#: access/transam/xlog.c:11950 +#: access/transam/xlog.c:12059 #, 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:12005 +#: access/transam/xlog.c:12114 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "バックエンドが pg_stop_backup の呼び出し前に終了したため、バックアップは異常終了しました" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12308 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "読み取られたタイムラインIDは%uでしたが、%uであるはずです。" #. translator: %s is a WAL record description -#: access/transam/xlog.c:12327 +#: access/transam/xlog.c:12436 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "%X/%Xにある%sのWAL再生" -#: access/transam/xlog.c:12375 +#: access/transam/xlog.c:12484 #, c-format msgid "online backup mode was not canceled" msgstr "オンラインバックアップモードはキャンセルされていません" -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12485 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %m。" -#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 access/transam/xlog.c:12407 +#: access/transam/xlog.c:12494 access/transam/xlog.c:12506 access/transam/xlog.c:12516 #, c-format msgid "online backup mode canceled" msgstr "オンラインバックアップモードがキャンセルされました" -#: access/transam/xlog.c:12398 +#: access/transam/xlog.c:12507 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "ファイル\"%s\"、\"%s\"の名前はそれぞれ\"%s\"、\"%s\"へと変更されました。" -#: access/transam/xlog.c:12408 +#: access/transam/xlog.c:12517 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "ファイル\"%s\"の名前は\"%s\"に変更できましたが、\"%s\"の名前は\"%s\"に変更できませんでした: %m" -#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12650 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "ログセグメント%s、オフセット%uを読み取れませんでした: %m" -#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12656 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "ログセグメント%1$s、オフセット%2$uを読み取れませんでした: %4$zu 中 %3$d の読み取り" -#: access/transam/xlog.c:13112 +#: access/transam/xlog.c:13233 #, c-format msgid "WAL receiver process shutdown requested" msgstr "WAL受信プロセスのシャットダウンが要求されました" -#: access/transam/xlog.c:13207 +#: access/transam/xlog.c:13345 #, c-format msgid "received promote request" msgstr "昇格要求を受信しました" -#: access/transam/xlog.c:13220 +#: access/transam/xlog.c:13358 #, c-format msgid "promote trigger file found: %s" msgstr "昇格トリガーファイルがあります: %s" -#: access/transam/xlog.c:13228 +#: access/transam/xlog.c:13366 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "昇格トリガーファイル\"%s\"のstatに失敗しました: %m" @@ -2886,15 +2901,15 @@ msgstr "非排他バックアップが進行中です" msgid "Did you mean to use pg_stop_backup('f')?" msgstr "pg_stop_backup('f') を実行しようとしていたのではないですか?" -#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:1966 commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 -#: replication/walsender.c:3328 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 +#: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 commands/event_trigger.c:1869 commands/extension.c:2096 commands/extension.c:2204 commands/extension.c:2489 commands/prepare.c:713 executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 replication/slotfuncs.c:255 +#: replication/walsender.c:3346 storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 utils/adt/varlena.c:4829 utils/fmgr/funcapi.c:74 #: utils/misc/guc.c:10088 utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "集合を受け付けないコンテキストで集合値関数が呼び出されました" -#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:1970 commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3332 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 -#: utils/adt/genfile.c:511 utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 +#: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 commands/event_trigger.c:1873 commands/extension.c:2100 commands/extension.c:2208 commands/extension.c:2493 commands/prepare.c:717 foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 replication/slotfuncs.c:259 replication/walsender.c:3350 storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 +#: utils/adt/genfile.c:511 utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4833 utils/misc/guc.c:10092 utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" msgstr "マテリアライズモードが必要ですが、現在のコンテクストで禁止されています" @@ -2932,7 +2947,7 @@ msgstr "リカバリが進行中ではありません" #: access/transam/xlogfuncs.c:532 access/transam/xlogfuncs.c:562 access/transam/xlogfuncs.c:586 access/transam/xlogfuncs.c:609 access/transam/xlogfuncs.c:764 #, c-format msgid "Recovery control functions can only be executed during recovery." -msgstr "リカバリ制御関数リカバリ中にのみを実行可能です。" +msgstr "リカバリ制御関数はリカバリ中にのみ実行可能です。" #: access/transam/xlogfuncs.c:537 access/transam/xlogfuncs.c:567 #, c-format @@ -2971,122 +2986,122 @@ msgstr "%X/%Xのレコードオフセットが不正です" msgid "contrecord is requested by %X/%X" msgstr "%X/%Xで継続レコードが要求されました" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "%X/%Xのレコード長が不正です: 長さは%uである必要がありますが、実際は%uでした" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "%X/%Xで継続レコードフラグが設定されていません" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, 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:728 +#: access/transam/xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "%2$X/%3$XのリソースマネージャID %1$uが不正です" -#: access/transam/xlogreader.c:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, 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:795 +#: access/transam/xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です" -#: access/transam/xlogreader.c:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "ログセグメント%2$s、オフセット%3$uのマジックナンバー%1$04Xは不正です" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ログセグメント %2$s、オフセット%3$uの情報ビット%1$04Xは不正です" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, 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:869 +#: access/transam/xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのセグメントサイズが正しくありません" -#: access/transam/xlogreader.c:875 +#: access/transam/xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL ファイルは異なるデータベースシステム由来のものです: ページヘッダーのXLOG_BLCKSZが正しくありません" -#: access/transam/xlogreader.c:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "ログセグメント%3$s、オフセット%4$uに想定外のページアドレス%1$X/%2$X" -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ログセグメント%3$s、オフセット%4$uの時系列ID %1$u(%2$uの後)は順序に従っていません" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %uが%X/%Xで不正です" -#: access/transam/xlogreader.c:1298 +#: access/transam/xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません" -#: access/transam/xlogreader.c:1305 +#: access/transam/xlogreader.c:1313 #, 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:1341 +#: access/transam/xlogreader.c:1349 #, 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:1357 +#: access/transam/xlogreader.c:1365 #, 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:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_IS_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません" -#: access/transam/xlogreader.c:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "%2$X/%3$Xにおけるblock_id %1$uが不正です" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "%X/%Xのレコードのサイズが不正です" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "%X/%X、ブロック %d での圧縮イメージが不正です" @@ -3096,12 +3111,12 @@ msgstr "%X/%X、ブロック %d での圧縮イメージが不正です" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X オプションの値は1MBから1GBの間の2の累乗を指定します" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "--%sには値が必要です" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "-c %sは値が必要です" @@ -3246,12 +3261,12 @@ msgstr "列権限はリレーションに対してのみ有効です" msgid "large object %u does not exist" msgstr "ラージオブジェクト%uは存在しません" -#: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 commands/dbcommands.c:158 commands/dbcommands.c:167 commands/dbcommands.c:176 commands/dbcommands.c:185 commands/dbcommands.c:194 -#: commands/dbcommands.c:203 commands/dbcommands.c:212 commands/dbcommands.c:221 commands/dbcommands.c:230 commands/dbcommands.c:239 commands/dbcommands.c:261 commands/dbcommands.c:1541 commands/dbcommands.c:1550 commands/dbcommands.c:1559 commands/dbcommands.c:1568 commands/extension.c:1757 commands/extension.c:1767 commands/extension.c:1777 commands/extension.c:3074 commands/foreigncmds.c:539 commands/foreigncmds.c:548 commands/functioncmds.c:606 -#: commands/functioncmds.c:772 commands/functioncmds.c:781 commands/functioncmds.c:790 commands/functioncmds.c:799 commands/functioncmds.c:2097 commands/functioncmds.c:2105 commands/publicationcmds.c:87 commands/publicationcmds.c:130 commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 -#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 +#: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 commands/copy.c:402 commands/copy.c:422 commands/copy.c:432 commands/copy.c:441 commands/copy.c:450 commands/copy.c:460 commands/copy.c:469 commands/copy.c:478 commands/copy.c:496 commands/copy.c:512 commands/copy.c:532 commands/copy.c:549 commands/dbcommands.c:158 commands/dbcommands.c:167 commands/dbcommands.c:176 commands/dbcommands.c:185 commands/dbcommands.c:194 +#: commands/dbcommands.c:203 commands/dbcommands.c:212 commands/dbcommands.c:221 commands/dbcommands.c:230 commands/dbcommands.c:239 commands/dbcommands.c:261 commands/dbcommands.c:1541 commands/dbcommands.c:1550 commands/dbcommands.c:1559 commands/dbcommands.c:1568 commands/extension.c:1887 commands/extension.c:1897 commands/extension.c:1907 commands/extension.c:3204 commands/foreigncmds.c:550 commands/foreigncmds.c:559 commands/functioncmds.c:606 +#: commands/functioncmds.c:772 commands/functioncmds.c:781 commands/functioncmds.c:790 commands/functioncmds.c:799 commands/functioncmds.c:2097 commands/functioncmds.c:2105 commands/publicationcmds.c:87 commands/publicationcmds.c:135 commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 +#: commands/subscriptioncmds.c:124 commands/subscriptioncmds.c:134 commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 commands/user.c:156 commands/user.c:165 commands/user.c:174 commands/user.c:183 commands/user.c:192 commands/user.c:201 commands/user.c:210 commands/user.c:219 commands/user.c:228 commands/user.c:237 commands/user.c:246 commands/user.c:582 commands/user.c:590 commands/user.c:598 commands/user.c:606 commands/user.c:614 commands/user.c:622 commands/user.c:630 commands/user.c:638 commands/user.c:647 -#: commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:402 replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 replication/walsender.c:894 replication/walsender.c:904 +#: commands/user.c:655 commands/user.c:663 parser/parse_utilcmd.c:402 replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 replication/pgoutput/pgoutput.c:238 replication/pgoutput/pgoutput.c:248 replication/pgoutput/pgoutput.c:258 replication/walsender.c:897 replication/walsender.c:908 replication/walsender.c:918 #, c-format msgid "conflicting or redundant options" msgstr "競合するオプション、あるいは余計なオプションがあります" @@ -3266,13 +3281,13 @@ msgstr "デフォルト権限は列には設定できません" msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "GRANT/REVOKE ON SCHEMAS を使っている時には IN SCHEMA 句は指定できません" -#: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 commands/tablecmds.c:7147 commands/tablecmds.c:7303 commands/tablecmds.c:7353 commands/tablecmds.c:7427 commands/tablecmds.c:7497 commands/tablecmds.c:7609 commands/tablecmds.c:7703 commands/tablecmds.c:7762 commands/tablecmds.c:7851 commands/tablecmds.c:7880 commands/tablecmds.c:8035 commands/tablecmds.c:8117 -#: commands/tablecmds.c:8273 commands/tablecmds.c:8395 commands/tablecmds.c:11888 commands/tablecmds.c:12080 commands/tablecmds.c:12240 commands/tablecmds.c:13403 commands/tablecmds.c:15950 commands/trigger.c:942 parser/analyze.c:2471 parser/parse_relation.c:714 parser/parse_target.c:1077 parser/parse_type.c:144 parser/parse_utilcmd.c:3425 parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2845 utils/adt/ruleutils.c:2732 +#: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 commands/analyze.c:390 commands/copy.c:781 commands/sequence.c:1709 commands/tablecmds.c:7180 commands/tablecmds.c:7336 commands/tablecmds.c:7386 commands/tablecmds.c:7460 commands/tablecmds.c:7530 commands/tablecmds.c:7642 commands/tablecmds.c:7736 commands/tablecmds.c:7795 commands/tablecmds.c:7884 commands/tablecmds.c:7913 commands/tablecmds.c:8068 commands/tablecmds.c:8150 +#: commands/tablecmds.c:8306 commands/tablecmds.c:8428 commands/tablecmds.c:11908 commands/tablecmds.c:12100 commands/tablecmds.c:12260 commands/tablecmds.c:13446 commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 parser/parse_relation.c:714 parser/parse_target.c:1077 parser/parse_type.c:144 parser/parse_utilcmd.c:3425 parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 utils/adt/ruleutils.c:2732 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$s\"は存在しません" -#: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 commands/tablecmds.c:249 commands/tablecmds.c:16824 utils/adt/acl.c:2053 utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\"はシーケンスではありません" @@ -3692,12 +3707,12 @@ msgstr "OID %uのスキーマは存在しません" msgid "tablespace with OID %u does not exist" msgstr "OID %uのテーブル空間は存在しません" -#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "OID %uの外部データラッパーは存在しません" -#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "OID %uの外部サーバーは存在しません" @@ -3752,12 +3767,12 @@ msgstr "OID %uの変換は存在しません" msgid "extension with OID %u does not exist" msgstr "OID %uの機能拡張は存在しません" -#: catalog/aclchk.c:5379 commands/publicationcmds.c:818 +#: catalog/aclchk.c:5379 commands/publicationcmds.c:823 #, c-format msgid "publication with OID %u does not exist" msgstr "OID %uのパブリケーションは存在しません" -#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "OID %uのサブスクリプションは存在しません" @@ -3856,8 +3871,8 @@ msgstr[1] "" msgid "cannot drop %s because other objects depend on it" msgstr "他のオブジェクトが依存しているため%sを削除できません" -#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 -#: utils/misc/guc.c:11643 +#: catalog/dependency.c:1204 catalog/dependency.c:1211 catalog/dependency.c:1223 commands/tablecmds.c:1301 commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 commands/view.c:506 libpq/auth.c:346 replication/slot.c:181 replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 utils/misc/guc.c:11558 +#: utils/misc/guc.c:11601 utils/misc/guc.c:11643 utils/misc/guc.c:12599 utils/misc/guc.c:12601 #, c-format msgid "%s" msgstr "%s" @@ -3900,7 +3915,7 @@ msgstr "システムカタログの更新は現在禁止されています" msgid "tables can have at most %d columns" msgstr "テーブルは最大で%d列までしか持てません" -#: catalog/heap.c:527 commands/tablecmds.c:7037 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "列名\"%s\"はシステム用の列名に使われています" @@ -3957,102 +3972,102 @@ msgstr "リレーションは同じ名前の関連する型を持ちます。こ msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "バイナリアップグレードモード中にpg_classのヒープOIDが設定されていません" -#: catalog/heap.c:2469 +#: catalog/heap.c:2529 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"に NO INHERIT 制約は追加できません" -#: catalog/heap.c:2742 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "検査制約\"%s\"はすでに存在します" -#: catalog/heap.c:2912 catalog/index.c:886 catalog/pg_constraint.c:670 commands/tablecmds.c:8769 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 commands/tablecmds.c:8802 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "すでに制約\"%s\"はリレーション\"%s\"に存在します" -#: catalog/heap.c:2919 +#: catalog/heap.c:2974 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の継承されていない制約と競合します" -#: catalog/heap.c:2930 +#: catalog/heap.c:2985 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の継承された制約と競合します" -#: catalog/heap.c:2940 +#: catalog/heap.c:2995 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "制約\"%s\"は、リレーション\"%s\"上の NOT VALID 制約と競合します" -#: catalog/heap.c:2945 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "継承された定義により制約\"%s\"をマージしています" -#: catalog/heap.c:3050 +#: catalog/heap.c:3105 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "生成カラム\"%s\"はカラム生成式中では使用できません" -#: catalog/heap.c:3052 +#: catalog/heap.c:3107 #, c-format msgid "A generated column cannot reference another generated column." msgstr "生成カラムは他の生成カラムを参照できません。" -#: catalog/heap.c:3058 +#: catalog/heap.c:3113 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "列生成式では行全体参照は使用できません。" -#: catalog/heap.c:3059 +#: catalog/heap.c:3114 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "これは生成列を自身の値に依存させることにつながります。" -#: catalog/heap.c:3114 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "生成式は不変ではありません" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1288 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "列\"%s\"の型は%sですが、デフォルト式の型は%sです" -#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 parser/parse_target.c:594 parser/parse_target.c:891 parser/parse_target.c:901 rewrite/rewriteHandler.c:1293 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "式を書き換えるかキャストする必要があります。" -#: catalog/heap.c:3194 +#: catalog/heap.c:3249 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "検査制約ではテーブル\"%s\"のみを参照することができます" -#: catalog/heap.c:3492 +#: catalog/heap.c:3547 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "ON COMMITと外部キーの組み合わせはサポートされていません" -#: catalog/heap.c:3493 +#: catalog/heap.c:3548 #, 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:3498 +#: catalog/heap.c:3553 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "外部キー制約で参照されているテーブルを削除できません" -#: catalog/heap.c:3499 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "テーブル\"%s\"は\"%s\"を参照します。" -#: catalog/heap.c:3501 +#: catalog/heap.c:3556 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "同時にテーブル\"%s\"がtruncateされました。TRUNCATE ... CASCADEを使用してください。" @@ -4112,32 +4127,32 @@ msgstr "バイナリアップグレードモード中にpg_classのインデッ msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLYはトランザクション内で最初の操作でなければなりません" -#: catalog/index.c:3653 +#: catalog/index.c:3660 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "他のセッションの一時テーブルはインデクス再構築できません" -#: catalog/index.c:3664 commands/indexcmds.c:3555 +#: catalog/index.c:3671 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "TOASTテーブルの無効なインデックスの再作成はできません" -#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 commands/tablecmds.c:3282 +#: catalog/index.c:3687 commands/indexcmds.c:3469 commands/indexcmds.c:3613 commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "システムリレーション\"%s\"を移動できません" -#: catalog/index.c:3824 +#: catalog/index.c:3831 #, c-format msgid "index \"%s\" was reindexed" msgstr "インデックス\"%s\"のインデックス再構築が完了しました" -#: catalog/index.c:3961 +#: catalog/index.c:3968 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "TOASTテーブルの無効なインデックス \"%s.%s\"の再作成はできません、スキップします " -#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5251 +#: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 commands/trigger.c:5285 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "データベース間の参照は実装されていません: \"%s.%s.%s\"" @@ -4167,7 +4182,7 @@ msgstr "リレーション\"%s.%s\"は存在しません" msgid "relation \"%s\" does not exist" msgstr "リレーション\"%s\"は存在しません" -#: catalog/namespace.c:501 catalog/namespace.c:3076 commands/extension.c:1541 commands/extension.c:1547 +#: catalog/namespace.c:501 catalog/namespace.c:3079 commands/extension.c:1671 commands/extension.c:1677 #, c-format msgid "no schema has been selected to create in" msgstr "作成先のスキーマが選択されていません" @@ -4192,102 +4207,102 @@ msgstr "一時スキーマの中には一時リレーションしか作成でき msgid "statistics object \"%s\" does not exist" msgstr "統計情報オブジェクト\"%s\"は存在しません" -#: catalog/namespace.c:2391 +#: catalog/namespace.c:2394 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "テキスト検索パーサ\"%s\"は存在しません" -#: catalog/namespace.c:2517 +#: catalog/namespace.c:2520 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "テキスト検索辞書\"%s\"は存在しません" -#: catalog/namespace.c:2644 +#: catalog/namespace.c:2647 #, c-format msgid "text search template \"%s\" does not exist" msgstr "テキスト検索テンプレート\"%s\"は存在しません" -#: catalog/namespace.c:2770 commands/tsearchcmds.c:1127 utils/cache/ts_cache.c:613 +#: catalog/namespace.c:2773 commands/tsearchcmds.c:1127 utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "テキスト検索設定\"%s\"は存在しません" -#: catalog/namespace.c:2883 parser/parse_expr.c:810 parser/parse_target.c:1269 +#: catalog/namespace.c:2886 parser/parse_expr.c:810 parser/parse_target.c:1269 #, c-format msgid "cross-database references are not implemented: %s" msgstr "データベース間の参照は実装されていません: %s" -#: catalog/namespace.c:2889 gram.y:15103 gram.y:17077 parser/parse_expr.c:817 parser/parse_target.c:1276 +#: catalog/namespace.c:2892 gram.y:15103 gram.y:17077 parser/parse_expr.c:817 parser/parse_target.c:1276 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "修飾名が不適切です(ドット区切りの名前が多すぎます): %s" -#: catalog/namespace.c:3019 +#: catalog/namespace.c:3022 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "一時スキーマへ、または一時スキーマからオブジェクトを移動できません" -#: catalog/namespace.c:3025 +#: catalog/namespace.c:3028 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "TOASTスキーマへ、またはTOASTスキーマからオブジェクトを移動できません" -#: catalog/namespace.c:3098 commands/schemacmds.c:263 commands/schemacmds.c:343 commands/tablecmds.c:1246 +#: catalog/namespace.c:3101 commands/schemacmds.c:263 commands/schemacmds.c:343 commands/tablecmds.c:1246 #, c-format msgid "schema \"%s\" does not exist" msgstr "スキーマ\"%s\"は存在しません" -#: catalog/namespace.c:3129 +#: catalog/namespace.c:3132 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "リレーション名が不適切です(ドット区切りの名前が多すぎます): %s" -#: catalog/namespace.c:3696 +#: catalog/namespace.c:3699 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "エンコーディング\"%2$s\"の照合順序\"%1$s\"は存在しません" -#: catalog/namespace.c:3751 +#: catalog/namespace.c:3754 #, c-format msgid "conversion \"%s\" does not exist" msgstr "変換\"%sは存在しません" -#: catalog/namespace.c:4015 +#: catalog/namespace.c:4018 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "データベース\"%s\"に一時テーブルを作成する権限がありません" -#: catalog/namespace.c:4031 +#: catalog/namespace.c:4034 #, c-format msgid "cannot create temporary tables during recovery" msgstr "リカバリ中は一時テーブルを作成できません" -#: catalog/namespace.c:4037 +#: catalog/namespace.c:4040 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "並行処理中は一時テーブルを作成できません" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 +#: catalog/namespace.c:4341 commands/tablespace.c:1211 commands/variable.c:64 tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "リスト文法が無効です" -#: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 commands/tablecmds.c:12016 +#: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\"はテーブルではありません" -#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 commands/tablecmds.c:6169 commands/tablecmds.c:16829 commands/view.c:119 +#: catalog/objectaddress.c:1377 commands/tablecmds.c:255 commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\"はビューではありません" -#: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 commands/tablecmds.c:16834 +#: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\"は実体化ビューではありません" -#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 commands/tablecmds.c:6172 commands/tablecmds.c:16839 +#: catalog/objectaddress.c:1391 commands/tablecmds.c:279 commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\"は外部テーブルではありません" @@ -4307,7 +4322,7 @@ msgstr "列名を修飾する必要があります" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の列\"%1$s\"に対するデフォルト値が存在しません" -#: catalog/objectaddress.c:1645 commands/functioncmds.c:139 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4411 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:139 commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "型\"%s\"は存在しません" @@ -4327,7 +4342,7 @@ msgstr "%4$s の関数 %1$d (%2$s, %3$s) がありません" msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "ユーザー\"%s\"に対するユーザーマッピングがサーバー\"%s\"には存在しません" -#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:733 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "サーバー\"%s\"は存在しません" @@ -4900,27 +4915,27 @@ msgstr "変換\"%s\"はすでに存在します" msgid "default conversion for %s to %s already exists" msgstr "%sから%sへのデフォルトの変換はすでに存在します" -#: catalog/pg_depend.c:218 commands/extension.c:3370 +#: catalog/pg_depend.c:220 commands/extension.c:3500 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%sはすでに機能拡張\"%s\"のメンバです" -#: catalog/pg_depend.c:225 catalog/pg_depend.c:276 commands/extension.c:3410 +#: catalog/pg_depend.c:227 catalog/pg_depend.c:278 commands/extension.c:3540 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s は機能拡張\"%s\"のメンバではありません" -#: catalog/pg_depend.c:228 +#: catalog/pg_depend.c:230 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "機能拡張は自身が所有していないオブジェクトを置き換えることができません。" -#: catalog/pg_depend.c:279 +#: catalog/pg_depend.c:281 #, 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:644 +#: catalog/pg_depend.c:646 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "システムオブジェクトであるため、%sの依存関係を削除できません。" @@ -4970,7 +4985,7 @@ msgstr "パーティション子テーブル\"%s\"の取り外しはできませ msgid "The partition is being detached concurrently or has an unfinished detach." msgstr "このパーティションは今現在取り外し中であるか取り外し処理が未完了の状態です。" -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 commands/tablecmds.c:15139 +#: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 commands/tablecmds.c:15182 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "ALTER TABLE ... DETACH PARTITION ... FINALIZE を実行して保留中の取り外し処理を完了させてください。" @@ -5000,7 +5015,7 @@ msgstr "\"%s\"は有効な演算子名ではありません" msgid "only binary operators can have commutators" msgstr "二項演算子のみが交換子を持つことができます" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:507 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:538 #, c-format msgid "only binary operators can have join selectivity" msgstr "二項演算子のみが結合選択性を持つことができます" @@ -5020,12 +5035,12 @@ msgstr "二項演算子のみがハッシュ可能です" msgid "only boolean operators can have negators" msgstr "ブール型演算子のみが否定演算子を持つことができます" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:515 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:546 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "ブール型演算子のみが制限選択率を持つことができます" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:519 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:550 #, c-format msgid "only boolean operators can have join selectivity" msgstr "ブール型演算子のみが結合選択率を持つことができます" @@ -5171,7 +5186,7 @@ msgstr "一時テーブルとUNLOGGEDテーブルはレプリケーションで msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "リレーション\"%s\"はすでにパブリケーション\"%s\"のメンバです" -#: catalog/pg_publication.c:533 commands/publicationcmds.c:458 commands/publicationcmds.c:786 +#: catalog/pg_publication.c:533 commands/publicationcmds.c:463 commands/publicationcmds.c:791 #, c-format msgid "publication \"%s\" does not exist" msgstr "パブリケーション\"%s\"は存在しません" @@ -5244,17 +5259,17 @@ msgstr "データベースシステムが必要としているため%sが所有 msgid "cannot reassign ownership of objects owned by %s because they are required by the database system" msgstr "データベースシステムが必要としているため%sが所有するオブジェクトの所有者を再割り当てできません" -#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "サブスクリプション\"%s\"は存在しません" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "サブスクリプション\"%s\"のリレーションマッピングは削除できません" -#: catalog/pg_subscription.c:434 +#: catalog/pg_subscription.c:459 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "リレーション\"%s\"のテーブル同期が進行中で、状態は\"%c\"です。" @@ -5262,7 +5277,7 @@ msgstr "リレーション\"%s\"のテーブル同期が進行中で、状態は #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:441 +#: catalog/pg_subscription.c:466 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "サブスクリプションが有効にされていない場合は%sを実行して有効化するか、%sを実行してこのサブスクリプションを削除してください。" @@ -5312,12 +5327,12 @@ msgstr "\"%s\"の複範囲型を作成中に失敗しました。" msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "\"multirange_type_name\"属性で複範囲型の型名を手動で指定することができます。" -#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1046 #, c-format msgid "invalid page in block %u of relation %s" msgstr "リレーション%2$sのブロック%1$uに不正なページ" -#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 commands/tablecmds.c:16694 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\"はテーブルや実体化ビューではありません" @@ -5417,12 +5432,12 @@ msgstr "パラメータ\"%s\"は READ_ONLY、SHAREABLE または READ_WRITE で msgid "event trigger \"%s\" already exists" msgstr "イベントトリガー\"%s\"はすでに存在します" -#: commands/alter.c:88 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "外部データラッパー\"%s\"はすでに存在します" -#: commands/alter.c:91 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "サーバー\"%s\"はすでに存在します" @@ -5432,7 +5447,7 @@ msgstr "サーバー\"%s\"はすでに存在します" msgid "language \"%s\" already exists" msgstr "言語\"%s\"はすでに存在します" -#: commands/alter.c:97 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:185 #, c-format msgid "publication \"%s\" already exists" msgstr "パブリケーション\"%s\"はすでに存在します" @@ -5507,7 +5522,7 @@ 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:699 parser/parse_clause.c:940 +#: commands/amcmds.c:264 commands/event_trigger.c:183 commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" msgstr "関数%sは型%sを返さなければなりません" @@ -5557,27 +5572,27 @@ msgstr "継承ツリー\"%s.%s\"のANALYZEをスキップします --- このツ msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "継承ツリー\"%s.%s\"のANALYZEをスキップします --- このツリーにはアナライズ可能な子テーブルがありません" -#: commands/async.c:646 +#: commands/async.c:645 #, c-format msgid "channel name cannot be empty" msgstr "チャネル名が空であることはできません" -#: commands/async.c:652 +#: commands/async.c:651 #, c-format msgid "channel name too long" msgstr "チャネル名が長すぎます" -#: commands/async.c:657 +#: commands/async.c:656 #, c-format msgid "payload string too long" msgstr "ペイロード文字列が長すぎます" -#: commands/async.c:876 +#: commands/async.c:875 #, 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:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "NOTIFY キューで発生した通知イベントが多すぎます" @@ -5617,7 +5632,7 @@ msgstr "パーティション親テーブルに対して CLUSTER は実行でき msgid "there is no previously clustered index for table \"%s\"" msgstr "テーブル\"%s\"には事前にクラスタ化されたインデックスはありません" -#: commands/cluster.c:187 commands/tablecmds.c:13858 commands/tablecmds.c:15718 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "テーブル\"%2$s\"にはインデックス\"%1$s\"は存在しません" @@ -5632,7 +5647,7 @@ msgstr "共有カタログをクラスタ化できません" msgid "cannot vacuum temporary tables of other sessions" msgstr "他のセッションの一時テーブルに対してはVACUUMを実行できません" -#: commands/cluster.c:471 commands/tablecmds.c:15728 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\"はテーブル\"%s\"のインデックスではありません" @@ -5826,152 +5841,162 @@ msgstr "ファイルからの COPY を行うにはスーパーユーザーまた msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "ファイルへの COPY を行うにはスーパーユーザーまたは pg_write_server_files ロールのメンバである必要があります" -#: commands/copy.c:188 +#: commands/copy.c:175 +#, c-format +msgid "generated columns are not supported in COPY FROM WHERE conditions" +msgstr "生成列は COPY FROM の WHERE 条件ではサポートされていません" + +#: commands/copy.c:176 commands/tablecmds.c:11928 commands/tablecmds.c:17048 commands/tablecmds.c:17127 commands/trigger.c:653 rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:974 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "列\"%s\"は生成カラムです。" + +#: commands/copy.c:225 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM で行レベルセキュリティはサポートされていません" -#: commands/copy.c:189 +#: commands/copy.c:226 #, c-format msgid "Use INSERT statements instead." msgstr "代わりにINSERTを文使用してください。" -#: commands/copy.c:377 +#: commands/copy.c:414 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY フォーマット\"%s\"を認識できません" -#: commands/copy.c:450 commands/copy.c:466 commands/copy.c:481 commands/copy.c:503 +#: commands/copy.c:487 commands/copy.c:503 commands/copy.c:518 commands/copy.c:540 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "オプション\"%s\"の引数は列名のリストでなければなりません" -#: commands/copy.c:518 +#: commands/copy.c:555 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "オプション\"%s\"の引数は有効なエンコーディング名でなければなりません" -#: commands/copy.c:525 commands/dbcommands.c:254 commands/dbcommands.c:1575 +#: commands/copy.c:562 commands/dbcommands.c:254 commands/dbcommands.c:1575 #, c-format msgid "option \"%s\" not recognized" msgstr "タイムゾーン\"%s\"を認識できません" -#: commands/copy.c:537 +#: commands/copy.c:574 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "BINARYモードではDELIMITERを指定できません" -#: commands/copy.c:542 +#: commands/copy.c:579 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "BINARYモードではNULLを指定できません" -#: commands/copy.c:564 +#: commands/copy.c:601 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPYの区切り文字は単一の1バイト文字でなければなりません" -#: commands/copy.c:571 +#: commands/copy.c:608 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPYの区切り文字は改行や復帰記号とすることができません" -#: commands/copy.c:577 +#: commands/copy.c:614 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "COPYのNULL表現には改行や復帰記号を使用することはできません" -#: commands/copy.c:594 +#: commands/copy.c:631 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPYの区切り文字を\"%s\"とすることはできません" -#: commands/copy.c:600 +#: commands/copy.c:637 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADERはCSVモードでのみ使用できます" -#: commands/copy.c:606 +#: commands/copy.c:643 #, c-format msgid "COPY quote available only in CSV mode" msgstr "COPYの引用符はCSVモードでのみ使用できます" -#: commands/copy.c:611 +#: commands/copy.c:648 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPYの引用符は単一の1バイト文字でなければなりません" -#: commands/copy.c:616 +#: commands/copy.c:653 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPYの区切り文字と引用符は異なる文字でなければなりません" -#: commands/copy.c:622 +#: commands/copy.c:659 #, c-format msgid "COPY escape available only in CSV mode" msgstr "COPYのエスケープはCSVモードでのみ使用できます" -#: commands/copy.c:627 +#: commands/copy.c:664 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPYのエスケープは単一の1バイト文字でなければなりません" -#: commands/copy.c:633 +#: commands/copy.c:670 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "COPYのFORCE_QUOTEオプションはCSVモードでのみ使用できます" -#: commands/copy.c:637 +#: commands/copy.c:674 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "COPYのFORCE_QUOTEオプションはCOPY TOでのみ使用できます" -#: commands/copy.c:643 +#: commands/copy.c:680 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "COPYのFORCE_NOT_NULLオプションはCSVモードでのみ使用できます" -#: commands/copy.c:647 +#: commands/copy.c:684 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "COPYのFORCE_NOT_NULLオプションはCOPY FROMでのみ使用できます" -#: commands/copy.c:653 +#: commands/copy.c:690 #, c-format msgid "COPY force null available only in CSV mode" msgstr "COPYのFORCE_NULLオプションはCSVモードでのみ使用できます" -#: commands/copy.c:658 +#: commands/copy.c:695 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "COPYのFORCE_NOT_NULLオプションはCOPY FROMでのみ使用できます" -#: commands/copy.c:664 +#: commands/copy.c:701 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "COPYの区切り文字をNULLオプションの値に使用できません" -#: commands/copy.c:671 +#: commands/copy.c:708 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "COPYの引用符をNULLオプションの値に使用できません" -#: commands/copy.c:732 +#: commands/copy.c:769 #, c-format msgid "column \"%s\" is a generated column" msgstr "列\"%s\"は生成カラムです" -#: commands/copy.c:734 +#: commands/copy.c:771 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "生成カラムはCOPYでは使えません。" -#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 commands/tablecmds.c:2344 commands/tablecmds.c:3000 commands/tablecmds.c:3508 parser/parse_relation.c:3651 parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 +#: commands/copy.c:786 commands/indexcmds.c:1842 commands/statscmds.c:265 commands/tablecmds.c:2344 commands/tablecmds.c:3000 commands/tablecmds.c:3508 parser/parse_relation.c:3651 parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2687 #, c-format msgid "column \"%s\" does not exist" msgstr "列\"%s\"は存在しません" -#: commands/copy.c:756 commands/tablecmds.c:2370 commands/trigger.c:951 parser/parse_target.c:1093 parser/parse_target.c:1104 +#: commands/copy.c:793 commands/tablecmds.c:2370 commands/trigger.c:951 parser/parse_target.c:1093 parser/parse_target.c:1104 #, c-format msgid "column \"%s\" specified more than once" msgstr "列\"%s\"が複数指定されました" @@ -6051,7 +6076,7 @@ msgstr "FORCE_NOT_NULL指定された列\"%s\"はCOPYで参照されません" msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "FORCE_NULL指定された列\"%s\"はCOPYで参照されません" -#: commands/copyfrom.c:1343 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1343 utils/mb/mbutils.c:394 #, c-format msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "符号化方式\"%s\"から\"%s\"用のデフォルト変換関数は存在しません" @@ -6641,7 +6666,7 @@ msgstr "\"%s\"は集約関数です" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "集約関数を削除するにはDROP AGGREGATEを使用してください" -#: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 commands/tablecmds.c:3750 commands/tablecmds.c:3803 commands/tablecmds.c:16145 tcop/utility.c:1324 +#: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 commands/tablecmds.c:3750 commands/tablecmds.c:3803 commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "リレーション\"%s\"は存在しません、スキップします" @@ -6671,7 +6696,7 @@ msgstr "照合順序\"%s\"は存在しません、スキップします" msgid "conversion \"%s\" does not exist, skipping" msgstr "変換\"%sは存在しません、スキップします" -#: commands/dropcmds.c:293 commands/statscmds.c:674 +#: commands/dropcmds.c:293 commands/statscmds.c:694 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "統計情報オブジェクト\"%s\"は存在しません、スキップします" @@ -6766,7 +6791,7 @@ msgstr "リレーション\"%2$s\"のルール\"%1$s\"は存在しません、 msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "外部データラッパ\"%s\"は存在しません、スキップします" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "外部データラッパ\"%s\"は存在しません、スキップします" @@ -6872,352 +6897,352 @@ msgstr "EXPLAINのオプションWALにはANALYZE指定が必要です" msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "EXPLAINオプションのTIMINGにはANALYZE指定が必要です" -#: commands/extension.c:173 commands/extension.c:3032 +#: commands/extension.c:195 commands/extension.c:3162 #, c-format msgid "extension \"%s\" does not exist" msgstr "機能拡張\"%s\"は存在しません" -#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 commands/extension.c:303 +#: commands/extension.c:402 commands/extension.c:411 commands/extension.c:423 commands/extension.c:433 #, c-format msgid "invalid extension name: \"%s\"" msgstr "機能拡張名が不正です: \"%s\"" -#: commands/extension.c:273 +#: commands/extension.c:403 #, c-format msgid "Extension names must not be empty." msgstr "機能拡張名が無効です: 空であってはなりません" -#: commands/extension.c:282 +#: commands/extension.c:412 #, c-format msgid "Extension names must not contain \"--\"." msgstr "機能拡張名に\"--\"が含まれていてはなりません" -#: commands/extension.c:294 +#: commands/extension.c:424 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "機能拡張名が\"-\"で始まったり終わったりしてはなりません" -#: commands/extension.c:304 +#: commands/extension.c:434 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "機能拡張名にディレクトリの区切り文字が含まれていてはなりません" -#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 commands/extension.c:347 +#: commands/extension.c:449 commands/extension.c:458 commands/extension.c:467 commands/extension.c:477 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "機能拡張のバージョン名が不正す: \"%s\"" -#: commands/extension.c:320 +#: commands/extension.c:450 #, c-format msgid "Version names must not be empty." msgstr "バージョン名が無効です: 空であってはなりません" -#: commands/extension.c:329 +#: commands/extension.c:459 #, c-format msgid "Version names must not contain \"--\"." msgstr "バージョン名に\"--\"が含まれていてはなりません" -#: commands/extension.c:338 +#: commands/extension.c:468 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "バージョン名が\"-\"で始まったり終わったりしてはなりません" -#: commands/extension.c:348 +#: commands/extension.c:478 #, c-format msgid "Version names must not contain directory separator characters." msgstr "バージョン名にディレクトリの区切り文字が含まれていてはなりません" -#: commands/extension.c:498 +#: commands/extension.c:628 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "機能拡張の制御ファイル\"%s\"をオープンできませんでした: %m" -#: commands/extension.c:520 commands/extension.c:530 +#: commands/extension.c:650 commands/extension.c:660 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "セカンダリの機能拡張制御ファイルにパラメータ\"%s\"を設定できません" -#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 utils/misc/guc.c:7118 +#: commands/extension.c:682 commands/extension.c:690 commands/extension.c:698 utils/misc/guc.c:7118 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "パラメータ\"%s\"にはbooleanを指定します" -#: commands/extension.c:577 +#: commands/extension.c:707 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\"は有効な符号化方式名ではありません" -#: commands/extension.c:591 +#: commands/extension.c:721 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "パラメータ\"%s\"は機能拡張名のリストでなければなりません" -#: commands/extension.c:598 +#: commands/extension.c:728 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "ファイル\"%2$s\"中に認識できないパラメータ\"%1$s\"があります" -#: commands/extension.c:607 +#: commands/extension.c:737 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "\"relocatable\"が真の場合はパラメータ\"schema\"は指定できません" -#: commands/extension.c:785 +#: commands/extension.c:915 #, c-format msgid "transaction control statements are not allowed within an extension script" msgstr "トランザクション制御ステートメントを機能拡張スクリプトの中に書くことはできません" -#: commands/extension.c:862 +#: commands/extension.c:992 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "機能拡張\"%s\"を作成する権限がありません" -#: commands/extension.c:865 +#: commands/extension.c:995 #, c-format msgid "Must have CREATE privilege on current database to create this extension." msgstr "この機能拡張を生成するには現在のデータベースのCREATE権限が必要です。" -#: commands/extension.c:866 +#: commands/extension.c:996 #, c-format msgid "Must be superuser to create this extension." msgstr "この機能拡張を生成するにはスーパーユーザーである必要があります。" -#: commands/extension.c:870 +#: commands/extension.c:1000 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "機能拡張\"%s\"を更新する権限がありません" -#: commands/extension.c:873 +#: commands/extension.c:1003 #, c-format msgid "Must have CREATE privilege on current database to update this extension." msgstr "この機能拡張を更新するには現在のデータベースのCREATE権限が必要です。" -#: commands/extension.c:874 +#: commands/extension.c:1004 #, c-format msgid "Must be superuser to update this extension." msgstr "この機能拡張を更新するにはスーパーユーザーである必要があります。" -#: commands/extension.c:1003 +#: commands/extension.c:1133 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "機能拡張の所有者名に不正な文字: \"%s\"のいずれの文字も含むことはできません" -#: commands/extension.c:1027 +#: commands/extension.c:1157 #, c-format msgid "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" msgstr "機能拡張\"%s\"のスキーマ名に不正な文字: \"%s\"のいずれの文字も含むことはできません" -#: commands/extension.c:1222 +#: commands/extension.c:1352 #, c-format msgid "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" msgstr "機能拡張\"%s\"について、バージョン\"%s\"からバージョン\"%s\"へのアップデートパスがありません" -#: commands/extension.c:1430 commands/extension.c:3093 +#: commands/extension.c:1560 commands/extension.c:3223 #, c-format msgid "version to install must be specified" msgstr "インストールするバージョンを指定してください" -#: commands/extension.c:1467 +#: commands/extension.c:1597 #, c-format msgid "extension \"%s\" has no installation script nor update path for version \"%s\"" msgstr "機能拡張\"%s\"にはバージョン\"%s\"のインストールスクリプトもアップデートパスもありません" -#: commands/extension.c:1501 +#: commands/extension.c:1631 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "機能拡張\"%s\"はスキーマ\"%s\"内にインストールされていなければなりません" -#: commands/extension.c:1661 +#: commands/extension.c:1791 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "機能拡張\"%s\"と\"%s\"の間に循環依存関係が検出されました" -#: commands/extension.c:1666 +#: commands/extension.c:1796 #, c-format msgid "installing required extension \"%s\"" msgstr "必要な機能拡張をインストールします:\"%s\"" -#: commands/extension.c:1689 +#: commands/extension.c:1819 #, c-format msgid "required extension \"%s\" is not installed" msgstr "要求された機能拡張\"%s\"はインストールされていません" -#: commands/extension.c:1692 +#: commands/extension.c:1822 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "必要な機能拡張を一緒にインストールするには CREATE EXTENSION ... CASCADE を使ってください。" -#: commands/extension.c:1727 +#: commands/extension.c:1857 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "機能拡張\"%s\"はすでに存在します、スキップします" -#: commands/extension.c:1734 +#: commands/extension.c:1864 #, c-format msgid "extension \"%s\" already exists" msgstr "機能拡張\"%s\"はすでに存在します" -#: commands/extension.c:1745 +#: commands/extension.c:1875 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "入れ子の CREATE EXTENSION はサポートされません" -#: commands/extension.c:1918 +#: commands/extension.c:2048 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "変更されているため拡張\"%s\"を削除できません" -#: commands/extension.c:2479 +#: commands/extension.c:2609 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "%s はCREATE EXTENSIONにより実行されるSQLスクリプトからのみ呼び出すことができます" -#: commands/extension.c:2491 +#: commands/extension.c:2621 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u がテーブルを参照していません" -#: commands/extension.c:2496 +#: commands/extension.c:2626 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "テーブル\"%s\"は生成されようとしている機能拡張のメンバではありません" -#: commands/extension.c:2850 +#: commands/extension.c:2980 #, c-format msgid "cannot move extension \"%s\" into schema \"%s\" because the extension contains the schema" msgstr "機能拡張がそのスキーマを含んでいるため、機能拡張\"%s\"をスキーマ\"%s\"に移動できません" -#: commands/extension.c:2891 commands/extension.c:2951 +#: commands/extension.c:3021 commands/extension.c:3081 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "機能拡張\"%s\"は SET SCHEMA をサポートしていません" -#: commands/extension.c:2953 +#: commands/extension.c:3083 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "機能拡張のスキーマ\"%2$s\"に%1$sが見つかりません" -#: commands/extension.c:3012 +#: commands/extension.c:3142 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "入れ子になった ALTER EXTENSION はサポートされていません" -#: commands/extension.c:3104 +#: commands/extension.c:3234 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "機能拡張 \"%2$s\"のバージョン\"%1$s\"はすでにインストールされています" -#: commands/extension.c:3316 +#: commands/extension.c:3446 #, c-format msgid "cannot add an object of this type to an extension" msgstr "この型のオブジェクトは機能拡張に追加できません" -#: commands/extension.c:3382 +#: commands/extension.c:3512 #, c-format msgid "cannot add schema \"%s\" to extension \"%s\" because the schema contains the extension" msgstr "スキーマ\"%s\"を拡張\"%s\"に追加できません。そのスキーマにその拡張が含まれているためです" -#: commands/extension.c:3476 +#: commands/extension.c:3606 #, c-format msgid "file \"%s\" is too large" msgstr "ファイル\"%s\"は大きすぎます" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "オプション\"%s\"が見つかりません" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "オプション\"%s\"が2回以上指定されました" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "外部データラッパー\"%s\"の所有者を変更する権限がありません" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "外部データラッパーの所有者を変更するにはスーパーユーザーである必要があります。" -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "外部データラッパーの所有者はスーパーユーザーでなければなりません" -#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:711 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "外部データラッパー\"%s\"は存在しません" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "外部データラッパー\"%s\"を作成する権限がありません" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "外部データラッパを作成するにはスーパーユーザーである必要があります。" -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "外部データラッパー\"%s\"を変更する権限がありません" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "外部データラッパーを更新するにはスーパーユーザーである必要があります。" -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "外部データラッパーのハンドラーを変更すると、既存の外部テーブルの振る舞いが変わることがあります" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "外部データラッパーのバリデータ(検証用関数)を変更すると、それに依存するオプションが不正になる場合があります" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "サーバー\"%s\"はすでに存在します、スキップします" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "\"%s\"のユーザーマッピングはサーバー\"%s\"に対してすでに存在します、スキップします" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "\"%s\"のユーザーマッピングはサーバー\"%s\"に対してすでに存在します" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "\"%s\"のユーザーマッピングはサーバー\"%s\"に対しては存在しません" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "\"%s\"のユーザーマッピングはサーバー\"%s\"に対しては存在しません、スキップします" -#: commands/foreigncmds.c:1511 foreign/foreign.c:399 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "外部データラッパー\"%s\"にはハンドラがありません" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "外部データラッパー\"%s\"は IMPORT FOREIGN SCHEMA をサポートしていません" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "外部テーブル\"%s\"をインポートします" @@ -7734,7 +7759,7 @@ msgstr "包含列はNULLS FIRST/LASTオプションをサポートしません" msgid "could not determine which collation to use for index expression" msgstr "インデックス式で使用する照合順序を特定できませんでした" -#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17215 commands/typecmds.c:810 parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" msgstr "%s型では照合順序はサポートされません" @@ -7769,7 +7794,7 @@ msgstr "アクセスメソッド\"%s\"はASC/DESCオプションをサポート msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "アクセスメソッド\"%s\"はNULLS FIRST/LASTオプションをサポートしません" -#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17240 commands/tablecmds.c:17246 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"にはデータ型%1$s用のデフォルトの演算子クラスがありません" @@ -7794,77 +7819,77 @@ msgstr "演算子クラス\"%s\"はデータ型%sを受け付けません" msgid "there are multiple default operator classes for data type %s" msgstr "データ型%sには複数のデフォルトの演算子クラスがあります" -#: commands/indexcmds.c:2631 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "認識されないREINDEXのオプション\"%s\"" -#: commands/indexcmds.c:2855 +#: commands/indexcmds.c:2889 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "テーブル\"%s\"には並行インデックス再作成が可能なインデックスがありません" -#: commands/indexcmds.c:2869 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "テーブル\"%s\"には再構築すべきインデックスはありません" -#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 commands/indexcmds.c:3544 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "システムカタログではインデックスの並行再構築はできません" -#: commands/indexcmds.c:2932 +#: commands/indexcmds.c:2966 #, c-format msgid "can only reindex the currently open database" msgstr "現在オープンしているデータベースのみをインデックス再構築することができます" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3054 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします" -#: commands/indexcmds.c:3053 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "システムリレーションは移動できません、すべてスキップします" -#: commands/indexcmds.c:3100 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "パーティションテーブル\"%s.%s\"のインデックス再構築中" -#: commands/indexcmds.c:3103 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "パーティションインデックス\"%s.%s\"の再構築中" -#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "テーブル\"%s.%s\"のインデックス再構築が完了しました" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "無効なインデックス \"%s.%s\"の並行再構築はできません、スキップします " -#: commands/indexcmds.c:3454 +#: commands/indexcmds.c:3488 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "排他制約インデックス\"%s.%s\"を並行再構築することはできません、スキップします " -#: commands/indexcmds.c:3609 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "このタイプのリレーションでインデックス並列再構築はできません" -#: commands/indexcmds.c:3630 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "非共有リレーションをテーブルスペース\"%s\"へ移動できません" -#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr " インデックス\"%s.%s\"の再構築が完了しました " @@ -8129,7 +8154,7 @@ msgstr "アクセスメソッド\"%2$s\"用の演算子族\"%1$s\"はスキー msgid "SETOF type not allowed for operator argument" msgstr "演算子の引数にはSETOF型を使用できません" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:479 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:510 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "演算子の属性\"%s\"は不明です" @@ -8154,27 +8179,37 @@ msgstr "演算子の右辺の引数型の指定が必要です" msgid "Postfix operators are not supported." msgstr "後置演算子はサポートされていません。" -#: commands/operatorcmds.c:290 +#: commands/operatorcmds.c:289 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "制約推定関数 %s は %s型を返す必要があります" -#: commands/operatorcmds.c:333 +#: commands/operatorcmds.c:307 +#, c-format +msgid "must be superuser to specify a non-built-in restriction estimator function" +msgstr "組み込みではない制約推定関数を指定するにはスーパーユーザーである必要があります" + +#: commands/operatorcmds.c:352 #, c-format msgid "join estimator function %s has multiple matches" msgstr "JOIN推定関数 %s が複数合致しました" -#: commands/operatorcmds.c:348 +#: commands/operatorcmds.c:367 #, c-format msgid "join estimator function %s must return type %s" msgstr "JOIN推定関数 %s は %s型を返す必要があります" -#: commands/operatorcmds.c:473 +#: commands/operatorcmds.c:376 +#, c-format +msgid "must be superuser to specify a non-built-in join estimator function" +msgstr "組み込みではない結合推定関数を指定するにはスーパーユーザーである必要があります" + +#: commands/operatorcmds.c:504 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "演算子の属性\"%s\"は変更できません" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 commands/tablecmds.c:1582 commands/tablecmds.c:2162 commands/tablecmds.c:3402 commands/tablecmds.c:6112 commands/tablecmds.c:9048 commands/tablecmds.c:16750 commands/tablecmds.c:16785 commands/trigger.c:313 commands/trigger.c:1289 commands/trigger.c:1398 rewrite/rewriteDefine.c:278 rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:157 commands/tablecmds.c:1582 commands/tablecmds.c:2162 commands/tablecmds.c:3402 commands/tablecmds.c:6112 commands/tablecmds.c:9081 commands/tablecmds.c:16793 commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 commands/trigger.c:1398 rewrite/rewriteDefine.c:278 rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "権限がありません: \"%s\"はシステムカタログです" @@ -8224,7 +8259,7 @@ msgstr "カーソル名が不正です: 空ではいけません" 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:2643 utils/adt/xml.c:2813 +#: commands/portalcmds.c:189 commands/portalcmds.c:242 executor/execCurrent.c:70 utils/adt/xml.c:2636 utils/adt/xml.c:2806 #, c-format msgid "cursor \"%s\" does not exist" msgstr "カーソル\"%s\"は存在しません" @@ -8234,7 +8269,7 @@ msgstr "カーソル\"%s\"は存在しません" msgid "invalid statement name: must not be empty" msgstr "不正な文の名前: 空ではいけません" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1483 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "パラメータ$%dのデータ型が特定できませんでした" @@ -8279,57 +8314,57 @@ msgstr "準備された文\"%s\"は存在しません" msgid "must be superuser to create custom procedural language" msgstr "手続き言語を生成するためにはスーパーユーザーである必要があります" -#: commands/publicationcmds.c:104 +#: commands/publicationcmds.c:109 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "\"publish\"オプションのリスト構文が不正です" -#: commands/publicationcmds.c:122 +#: commands/publicationcmds.c:127 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "識別できない\"publish\"の値: \"%s\"" -#: commands/publicationcmds.c:137 +#: commands/publicationcmds.c:142 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "識別できないパブリケーションのパラメータ: \"%s\"" -#: commands/publicationcmds.c:169 +#: commands/publicationcmds.c:174 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "FOR ALL TABLE 指定のパブリケーションを生成するためにはスーパーユーザーである必要があります" -#: commands/publicationcmds.c:250 +#: commands/publicationcmds.c:255 #, c-format msgid "wal_level is insufficient to publish logical changes" msgstr "wal_level が論理更新情報のパブリッシュには不十分です" -#: commands/publicationcmds.c:251 +#: commands/publicationcmds.c:256 #, c-format msgid "Set wal_level to logical before creating subscriptions." msgstr "wal_levelをlogicalに設定にしてからサブスクリプションを作成してください。" -#: commands/publicationcmds.c:376 +#: commands/publicationcmds.c:381 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "パブリケーション\"%s\"は FOR ALL TABLES と定義されています" -#: commands/publicationcmds.c:378 +#: commands/publicationcmds.c:383 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "FOR ALL TABLES指定のパブリケーションではテーブルの追加や削除はできません。" -#: commands/publicationcmds.c:707 +#: commands/publicationcmds.c:712 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "リレーション\"%s\"はパブリケーションの一部ではありません" -#: commands/publicationcmds.c:750 +#: commands/publicationcmds.c:755 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "パブリケーション\"%s\"の所有者を変更する権限がありません" -#: commands/publicationcmds.c:752 +#: commands/publicationcmds.c:757 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "FOR ALL TABLES設定のパブリケーションの所有者はスーパーユーザーである必要があります" @@ -8490,12 +8525,12 @@ msgstr "シーケンスは関連するテーブルと同じスキーマでなけ msgid "cannot change ownership of identity sequence" msgstr "識別シーケンスの所有者は変更できません" -#: commands/sequence.c:1725 commands/tablecmds.c:13550 commands/tablecmds.c:16165 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "シーケンス\"%s\"はテーブル\"%s\"にリンクされています" -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "CREATE STATISTICSで指定可能なリレーションは一つのみです" @@ -8505,72 +8540,72 @@ msgstr "CREATE STATISTICSで指定可能なリレーションは一つのみで msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "リレーション\"%s\"はテーブルや外部テーブル、または実体化ビューではありません" -#: commands/statscmds.c:193 +#: commands/statscmds.c:213 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "統計情報オブジェクト\"%s\"はすでに存在します、スキップします" -#: commands/statscmds.c:201 +#: commands/statscmds.c:221 #, c-format msgid "statistics object \"%s\" already exists" msgstr "統計情報オブジェクト\"%s\"はすでに存在します" -#: commands/statscmds.c:212 +#: commands/statscmds.c:232 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "統計情報は%dを超える列を使用できません" -#: commands/statscmds.c:253 commands/statscmds.c:276 commands/statscmds.c:309 +#: commands/statscmds.c:273 commands/statscmds.c:296 commands/statscmds.c:329 #, c-format msgid "statistics creation on system columns is not supported" msgstr "システム列に対する統計情報の作成はサポートされていません" -#: commands/statscmds.c:260 commands/statscmds.c:283 +#: commands/statscmds.c:280 commands/statscmds.c:303 #, 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:326 +#: commands/statscmds.c:346 #, 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:347 +#: commands/statscmds.c:367 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "単一の式に対する統計情報を構築する際には、統計種別を指定できません" -#: commands/statscmds.c:376 +#: commands/statscmds.c:396 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "認識できない統計情報種別\"%s\"" -#: commands/statscmds.c:405 +#: commands/statscmds.c:425 #, c-format msgid "extended statistics require at least 2 columns" msgstr "拡張統計情報には最低でも2つの列が必要です" -#: commands/statscmds.c:423 +#: commands/statscmds.c:443 #, c-format msgid "duplicate column name in statistics definition" msgstr "定形情報定義中の列名が重複しています" -#: commands/statscmds.c:458 +#: commands/statscmds.c:478 #, c-format msgid "duplicate expression in statistics definition" msgstr "統計情報定義中の式が重複しています" -#: commands/statscmds.c:639 commands/tablecmds.c:8014 +#: commands/statscmds.c:659 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "統計情報目標%dは小さすぎます" -#: commands/statscmds.c:647 commands/tablecmds.c:8022 +#: commands/statscmds.c:667 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "統計情報目標を%dに減らします" -#: commands/statscmds.c:670 +#: commands/statscmds.c:690 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "統計情報オブジェクト\"%s.%s\"は存在しません、スキップします" @@ -8597,7 +8632,7 @@ msgstr "%s としたサブスクリプションでは %s を設定する必要 msgid "must be superuser to create subscriptions" msgstr "サブスクリプションを生成するにはスーパーユーザーである必要があります" -#: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "発行サーバーへの接続ができませんでした: %s" @@ -8638,63 +8673,63 @@ msgstr "ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false) を使 msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESHは無効化されているサブスクリプションには実行できません" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "サブスクリプション\"%s\"は存在しません、スキップします" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "発行サーバー上のレプリケーションスロット\"%s\"を削除しました" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "発行サーバー上のレプリケーションスロット\"%s\"の削除に失敗しました: %s" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "サブスクリプション\"%s\"の所有者を変更する権限がありません" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "サブスクリプションの所有者はスーパーユーザーでなければなりません。" -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "発行テーブルの一覧を発行サーバーから受け取れませんでした: %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, 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:1581 +#: commands/subscriptioncmds.c:1583 #, 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:1612 +#: commands/subscriptioncmds.c:1614 #, c-format msgid "publication name \"%s\" used more than once" msgstr "パブリケーション名\"%s\"が2回以上使われています" -#: commands/subscriptioncmds.c:1656 +#: commands/subscriptioncmds.c:1658 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "パブリケーション\"%s\"はサブスクリプション\"%s\"にすでに存在します" -#: commands/subscriptioncmds.c:1670 +#: commands/subscriptioncmds.c:1672 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "パブリケーション\"%s\"はサブスクリプション\"%s\"にありません" -#: commands/subscriptioncmds.c:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "サブスクリプションからすべてのパブリケーションを削除することはできません" @@ -8755,7 +8790,7 @@ msgstr "実体化ビュー\"%s\"は存在しません、スキップします" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "実体化ビューを削除するにはDROP MATERIALIZED VIEWを使用してください。" -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18688 parser/parse_utilcmd.c:2265 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18753 parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" msgstr "インデックス\"%s\"は存在しません" @@ -8778,7 +8813,7 @@ msgstr "\"%s\"は型ではありません" msgid "Use DROP TYPE to remove a type." msgstr "型を削除するにはDROP TYPEを使用してください" -#: commands/tablecmds.c:277 commands/tablecmds.c:13389 commands/tablecmds.c:15868 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "外部テーブル\"%s\"は存在しません" @@ -8802,7 +8837,7 @@ msgstr "ON COMMITは一時テーブルでのみ使用できます" msgid "cannot create temporary table within security-restricted operation" msgstr "セキュリティー制限された処理中は、一時テーブルを作成できません" -#: commands/tablecmds.c:738 commands/tablecmds.c:14675 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "リレーション\"%s\"が複数回継承されました" @@ -8872,7 +8907,7 @@ msgstr "外部テーブル\"%s\"の切り詰めができません" msgid "cannot truncate temporary tables of other sessions" msgstr "他のセッションの一時テーブルを削除できません" -#: commands/tablecmds.c:2427 commands/tablecmds.c:14572 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "パーティション親テーブル\"%s\"からの継承はできません" @@ -8892,12 +8927,12 @@ msgstr "継承しようとしたリレーション\"%s\"はテーブルまたは msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "一時リレーションを永続リレーション \"%s\" のパーティション子テーブルとして作ることはできません" -#: commands/tablecmds.c:2461 commands/tablecmds.c:14551 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "一時リレーション\"%s\"から継承することはできません" -#: commands/tablecmds.c:2471 commands/tablecmds.c:14559 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "他のセッションの一時リレーションから継承することはできません" @@ -8942,7 +8977,7 @@ msgstr "列\"%s\"の圧縮方法が競合しています" msgid "inherited column \"%s\" has a generation conflict" msgstr "継承された列 \"%s\"の生成が競合しています" -#: commands/tablecmds.c:2682 commands/tablecmds.c:2737 commands/tablecmds.c:12114 parser/parse_utilcmd.c:1260 parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 parser/parse_utilcmd.c:1857 +#: commands/tablecmds.c:2682 commands/tablecmds.c:2737 commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 parser/parse_utilcmd.c:1857 #, c-format msgid "cannot convert whole-row table reference" msgstr "行全体テーブル参照を変換できません" @@ -9224,12 +9259,12 @@ msgstr "型付けされたテーブルに列を追加できません" msgid "cannot add column to a partition" msgstr "パーティションに列は追加できません" -#: commands/tablecmds.c:6657 commands/tablecmds.c:14802 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "子テーブル\"%s\"に異なる型の列\"%s\"があります" -#: commands/tablecmds.c:6663 commands/tablecmds.c:14809 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "子テーブル\"%s\"に異なる照合順序の列\"%s\"があります" @@ -9244,913 +9279,908 @@ msgstr "子\"%2$s\"の列\"%1$s\"の定義をマージしています" msgid "cannot recursively add identity column to table that has child tables" msgstr "子テーブルを持つテーブルに識別列を再帰的に追加することはできません" -#: commands/tablecmds.c:6967 +#: commands/tablecmds.c:7000 #, c-format msgid "column must be added to child tables too" msgstr "列は子テーブルでも追加する必要があります" -#: commands/tablecmds.c:7045 +#: commands/tablecmds.c:7078 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに存在します、スキップします" -#: commands/tablecmds.c:7052 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに存在します" -#: commands/tablecmds.c:7118 commands/tablecmds.c:11742 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "パーティションが存在する場合にはパーティション親テーブルのみから制約を削除することはできません" -#: commands/tablecmds.c:7119 commands/tablecmds.c:7436 commands/tablecmds.c:8463 commands/tablecmds.c:11743 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "ONLYキーワードを指定しないでください。" -#: commands/tablecmds.c:7156 commands/tablecmds.c:7362 commands/tablecmds.c:7504 commands/tablecmds.c:7618 commands/tablecmds.c:7712 commands/tablecmds.c:7771 commands/tablecmds.c:7889 commands/tablecmds.c:8055 commands/tablecmds.c:8125 commands/tablecmds.c:8281 commands/tablecmds.c:11897 commands/tablecmds.c:13412 commands/tablecmds.c:15959 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 commands/tablecmds.c:7537 commands/tablecmds.c:7651 commands/tablecmds.c:7745 commands/tablecmds.c:7804 commands/tablecmds.c:7922 commands/tablecmds.c:8088 commands/tablecmds.c:8158 commands/tablecmds.c:8314 commands/tablecmds.c:11917 commands/tablecmds.c:13455 commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "システム列\"%s\"を変更できません" -#: commands/tablecmds.c:7162 commands/tablecmds.c:7510 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列です" -#: commands/tablecmds.c:7205 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "列\"%s\"はプライマリキーで使用しています" -#: commands/tablecmds.c:7210 +#: commands/tablecmds.c:7243 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "列\"%s\"は複製識別として使用中のインデックスに含まれています" -#: commands/tablecmds.c:7233 +#: commands/tablecmds.c:7266 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "列\"%s\"は親テーブルでNOT NULL指定されています" -#: commands/tablecmds.c:7433 commands/tablecmds.c:8946 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, c-format msgid "constraint must be added to child tables too" msgstr "制約は子テーブルにも追加する必要があります" -#: commands/tablecmds.c:7434 +#: commands/tablecmds.c:7467 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでにNOT NULLLではありません。" -#: commands/tablecmds.c:7512 +#: commands/tablecmds.c:7545 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "代わりに ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY を使ってください。" -#: commands/tablecmds.c:7517 +#: commands/tablecmds.c:7550 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は生成カラムです" -#: commands/tablecmds.c:7520 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "代わりに ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION を使ってください。" -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7662 #, 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:7635 +#: commands/tablecmds.c:7668 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでに識別列です" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:7674 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "リレーション\"%2$s\"の列\"%1$s\"はすでにデフォルト値が指定されています" -#: commands/tablecmds.c:7718 commands/tablecmds.c:7779 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列ではありません" -#: commands/tablecmds.c:7784 +#: commands/tablecmds.c:7817 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"は識別列ではありません、スキップします" -#: commands/tablecmds.c:7837 +#: commands/tablecmds.c:7870 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION は子テーブルに対しても適用する必要があります" -#: commands/tablecmds.c:7859 +#: commands/tablecmds.c:7892 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "継承列から生成式を削除することはできません" -#: commands/tablecmds.c:7897 +#: commands/tablecmds.c:7930 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "リレーション\"%2$s\"の列\"%1$s\"は格納生成列ではありません" -#: commands/tablecmds.c:7902 +#: commands/tablecmds.c:7935 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"は格納生成列ではありません、スキップします" -#: commands/tablecmds.c:8002 +#: commands/tablecmds.c:8035 #, c-format msgid "cannot refer to non-index column by number" msgstr "非インデックス列を番号で参照することはできません" -#: commands/tablecmds.c:8045 +#: commands/tablecmds.c:8078 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "リレーション \"%2$s\"の列 %1$d は存在しません" -#: commands/tablecmds.c:8064 +#: commands/tablecmds.c:8097 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "インデックス\"%2$s\"の包含列\"%1$s\"への統計情報の変更はできません" -#: commands/tablecmds.c:8069 +#: commands/tablecmds.c:8102 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "インデックス \"%2$s\"の非式列\"%1$s\"の統計情報の変更はできません" -#: commands/tablecmds.c:8071 +#: commands/tablecmds.c:8104 #, c-format msgid "Alter statistics on table column instead." msgstr "代わりにテーブルカラムの統計情報を変更してください。" -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "不正な格納タイプ\"%s\"" -#: commands/tablecmds.c:8293 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "列のデータ型%sは格納タイプPLAINしか取ることができません" -#: commands/tablecmds.c:8338 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "型付けされたテーブルから列を削除できません" -#: commands/tablecmds.c:8401 +#: commands/tablecmds.c:8434 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"の列\"%1$s\"は存在しません、スキップします" -#: commands/tablecmds.c:8414 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "システム列\"%s\"を削除できません" -#: commands/tablecmds.c:8424 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "継承される列\"%s\"を削除できません" -#: commands/tablecmds.c:8437 +#: commands/tablecmds.c:8470 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "列\"%s\"はリレーション\"%s\"のパーティションキーの一部であるため、削除できません" -#: commands/tablecmds.c:8462 +#: commands/tablecmds.c:8495 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "子テーブルが存在する場合にはパーティション親テーブルのみから列を削除することはできません" -#: commands/tablecmds.c:8666 +#: commands/tablecmds.c:8699 #, 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:8691 +#: commands/tablecmds.c:8724 #, 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:9026 +#: commands/tablecmds.c:9059 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "パーティションテーブル\"%s\"上のリレーション\"%s\"を参照する外部キー定義ではONLY指定はできません " -#: commands/tablecmds.c:9032 +#: commands/tablecmds.c:9065 #, 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:9035 +#: commands/tablecmds.c:9068 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "この機能はパーティション親テーブルに対してはサポートされていません。" -#: commands/tablecmds.c:9042 commands/tablecmds.c:9447 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "参照先のリレーション\"%s\"はテーブルではありません" -#: commands/tablecmds.c:9065 +#: commands/tablecmds.c:9098 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "永続テーブルの制約は永続テーブルだけを参照できます" -#: commands/tablecmds.c:9072 +#: commands/tablecmds.c:9105 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "UNLOGGEDテーブルに対する制約は、永続テーブルまたはUNLOGGEDテーブルだけを参照する場合があります" -#: commands/tablecmds.c:9078 +#: commands/tablecmds.c:9111 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "一時テーブルに対する制約は一時テーブルだけを参照する場合があります" -#: commands/tablecmds.c:9082 +#: commands/tablecmds.c:9115 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "一時テーブルに対する制約にはこのセッションの一時テーブルを加える必要があります" -#: commands/tablecmds.c:9148 commands/tablecmds.c:9154 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "生成カラムを含む外部キー制約に対する不正な %s 処理" -#: commands/tablecmds.c:9170 +#: commands/tablecmds.c:9203 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "外部キーの参照列数と被参照列数が合いません" -#: commands/tablecmds.c:9277 +#: commands/tablecmds.c:9310 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "外部キー制約\"%sは実装されていません" -#: commands/tablecmds.c:9279 +#: commands/tablecmds.c:9312 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "キーとなる列\"%s\"と\"%s\"との間で型に互換性がありません:%sと%s" -#: commands/tablecmds.c:9642 commands/tablecmds.c:10072 parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "外部テーブルでは外部キー制約はサポートされていません" -#: commands/tablecmds.c:10055 +#: commands/tablecmds.c:10075 #, 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:10525 commands/tablecmds.c:10806 commands/tablecmds.c:11699 commands/tablecmds.c:11774 +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません" -#: commands/tablecmds.c:10532 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は外部キー制約ではありません" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:10590 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "リレーション\"%2$s\"の制約\"%1$s\"を変更できません" -#: commands/tablecmds.c:10573 +#: commands/tablecmds.c:10593 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "制約\"%1$s\"は、リレーション\"%3$s\"の制約\"%2$s\"から継承されています。" -#: commands/tablecmds.c:10575 +#: commands/tablecmds.c:10595 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "代わりに派生元の制約を変更することができます。" -#: commands/tablecmds.c:10814 +#: commands/tablecmds.c:10834 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は外部キー制約でも検査制約でもありません" -#: commands/tablecmds.c:10892 +#: commands/tablecmds.c:10912 #, c-format msgid "constraint must be validated on child tables too" msgstr "制約は子テーブルでも検証される必要があります" -#: commands/tablecmds.c:10982 +#: commands/tablecmds.c:11002 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "外部キー制約で参照される列\"%s\"が存在しません" -#: commands/tablecmds.c:10988 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "システム列は外部キーに使用できません" -#: commands/tablecmds.c:10992 +#: commands/tablecmds.c:11012 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "外部キーでは%dを超えるキーを持つことができません" -#: commands/tablecmds.c:11057 +#: commands/tablecmds.c:11077 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"には遅延可能プライマリキーは使用できません" -#: commands/tablecmds.c:11074 +#: commands/tablecmds.c:11094 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"にはプライマリキーがありません" -#: commands/tablecmds.c:11143 +#: commands/tablecmds.c:11163 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "外部キーの被参照列リストには重複があってはなりません" -#: commands/tablecmds.c:11237 +#: commands/tablecmds.c:11257 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"に対しては、遅延可能な一意性制約は使用できません" -#: commands/tablecmds.c:11242 +#: commands/tablecmds.c:11262 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "被参照テーブル\"%s\"に、指定したキーに合致する一意性制約がありません" -#: commands/tablecmds.c:11655 +#: commands/tablecmds.c:11675 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の継承された制約\"%1$s\"を削除できません" -#: commands/tablecmds.c:11705 +#: commands/tablecmds.c:11725 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "リレーション\"%2$s\"の制約\"%1$s\"は存在しません、スキップします" -#: commands/tablecmds.c:11881 +#: commands/tablecmds.c:11901 #, c-format msgid "cannot alter column type of typed table" msgstr "型付けされたテーブルの列の型を変更できません" -#: commands/tablecmds.c:11907 +#: commands/tablecmds.c:11927 #, c-format msgid "cannot specify USING when altering type of generated column" msgstr "生成列の型変更の際にはUSINGを指定することはできません" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 commands/tablecmds.c:17095 commands/trigger.c:653 rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "列\"%s\"は生成カラムです。" - -#: commands/tablecmds.c:11918 +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "継承される列\"%s\"を変更できません" -#: commands/tablecmds.c:11927 +#: commands/tablecmds.c:11947 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "列\"%s\"はリレーション\"%s\"のパーティションキーの一部であるため、変更できません" -#: commands/tablecmds.c:11977 +#: commands/tablecmds.c:11997 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"に対するUSING句の結果は自動的に%s型に型変換できません" -#: commands/tablecmds.c:11980 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "必要に応じて明示的な型変換を追加してください。" -#: commands/tablecmds.c:11984 +#: commands/tablecmds.c:12004 #, 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:11988 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "必要に応じて\"USING %s::%s\"を追加してください。" -#: commands/tablecmds.c:12087 +#: commands/tablecmds.c:12107 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "リレーション\"%2$s\"の継承列\"%1$s\"は変更できません" -#: commands/tablecmds.c:12115 +#: commands/tablecmds.c:12135 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING式が行全体テーブル参照を含んでいます。" -#: commands/tablecmds.c:12126 +#: commands/tablecmds.c:12146 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "継承される列\"%s\"の型を子テーブルで変更しなければなりません" -#: commands/tablecmds.c:12251 +#: commands/tablecmds.c:12271 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "列\"%s\"の型を2回変更することはできません" -#: commands/tablecmds.c:12289 +#: commands/tablecmds.c:12309 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "カラム\"%s\"に対する生成式は自動的に%s型にキャストできません" -#: commands/tablecmds.c:12294 +#: commands/tablecmds.c:12314 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "列\"%s\"のデフォルト値を自動的に%s型にキャストできません" -#: commands/tablecmds.c:12372 +#: commands/tablecmds.c:12392 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "生成カラムで使用される列の型は変更できません" -#: commands/tablecmds.c:12373 +#: commands/tablecmds.c:12393 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "カラム\"%s\"は生成カラム\"%s\"で使われています。" -#: commands/tablecmds.c:12401 +#: commands/tablecmds.c:12421 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "関数またはプロシージャで使用される列の型は変更できません" -#: commands/tablecmds.c:12402 commands/tablecmds.c:12416 commands/tablecmds.c:12435 commands/tablecmds.c:12453 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%sは列\"%s\"に依存しています" -#: commands/tablecmds.c:12415 +#: commands/tablecmds.c:12435 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "ビューまたはルールで使用される列の型は変更できません" -#: commands/tablecmds.c:12434 +#: commands/tablecmds.c:12454 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "トリガー定義で使用される列の型は変更できません" -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:12472 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "ポリシ定義で使用されている列の型は変更できません" -#: commands/tablecmds.c:13520 commands/tablecmds.c:13532 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "インデックス\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:13522 commands/tablecmds.c:13534 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "代わりにインデックスのテーブルの所有者を変更してください" -#: commands/tablecmds.c:13548 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "シーケンス\"%s\"の所有者を変更できません" -#: commands/tablecmds.c:13562 commands/tablecmds.c:16861 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "代わりにALTER TYPEを使用してください。" -#: commands/tablecmds.c:13571 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\"はテーブル、ビュー、シーケンス、外部テーブルではありません" -#: commands/tablecmds.c:13910 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "SET TABLESPACEサブコマンドを複数指定できません" -#: commands/tablecmds.c:13987 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "\"%s\"はテーブル、ビュー、実体化ビュー、インデックス、TOASTテーブルではありません" -#: commands/tablecmds.c:14020 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTIONは自動更新可能ビューでのみサポートされます" -#: commands/tablecmds.c:14273 +#: commands/tablecmds.c:14316 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "テーブルスペースにはテーブル、インデックスおよび実体化ビューしかありません" -#: commands/tablecmds.c:14285 +#: commands/tablecmds.c:14328 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "pg_globalテーブルスペースとの間のリレーションの移動はできません" -#: commands/tablecmds.c:14377 +#: commands/tablecmds.c:14420 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "リレーション\"%s.%s\"のロックが獲得できなかったため中断します" -#: commands/tablecmds.c:14393 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "テーブルスペース\"%s\"には合致するリレーションはありませんでした" -#: commands/tablecmds.c:14510 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "型付けされたテーブルの継承を変更できません" -#: commands/tablecmds.c:14515 commands/tablecmds.c:15071 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "パーティションの継承は変更できません" -#: commands/tablecmds.c:14520 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "パーティション親テーブルの継承は変更できません" -#: commands/tablecmds.c:14566 +#: commands/tablecmds.c:14609 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "他のセッションの一時テーブルを継承できません" -#: commands/tablecmds.c:14579 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "パーティションからの継承はできません" -#: commands/tablecmds.c:14601 commands/tablecmds.c:17507 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17560 #, c-format msgid "circular inheritance not allowed" msgstr "循環継承を行うことはできません" -#: commands/tablecmds.c:14602 commands/tablecmds.c:17508 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17561 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\"はすでに\"%s\"の子です" -#: commands/tablecmds.c:14615 +#: commands/tablecmds.c:14658 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "トリガー\"%s\"によってテーブル\"%s\"が継承子テーブルになることができません" -#: commands/tablecmds.c:14617 +#: commands/tablecmds.c:14660 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "遷移テーブルを使用したROWトリガーは継承関係ではサポートされていません。" -#: commands/tablecmds.c:14820 +#: commands/tablecmds.c:14863 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "子テーブルの列\"%s\"はNOT NULLである必要があります" -#: commands/tablecmds.c:14829 +#: commands/tablecmds.c:14872 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "子テーブルの列\"%s\"は生成列である必要があります" -#: commands/tablecmds.c:14879 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "子テーブルの列\"%s\"は競合する生成式を持っています" -#: commands/tablecmds.c:14907 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "子テーブルには列\"%s\"がありません" -#: commands/tablecmds.c:14995 +#: commands/tablecmds.c:15038 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "子テーブル\"%s\"では検査制約\"%s\"に異なった定義がされています" -#: commands/tablecmds.c:15003 +#: commands/tablecmds.c:15046 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "制約\"%s\"は子テーブル\"%s\"上の継承されない制約と競合します" -#: commands/tablecmds.c:15014 +#: commands/tablecmds.c:15057 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "制約\"%s\"は子テーブル\"%s\"のNOT VALID制約と衝突しています" -#: commands/tablecmds.c:15049 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "子テーブルには制約\"%s\"がありません" -#: commands/tablecmds.c:15135 +#: commands/tablecmds.c:15178 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "パーティション子テーブル\"%s\"はすでにパーティション\"%s.%s\"で取り外しが進行中です" -#: commands/tablecmds.c:15164 commands/tablecmds.c:15212 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "リレーション\"%s\"はリレーション\"%s\"のパーティション子テーブルではありません" -#: commands/tablecmds.c:15218 +#: commands/tablecmds.c:15261 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "リレーション\"%s\"はリレーション\"%s\"の親ではありません" -#: commands/tablecmds.c:15446 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "型付けされたテーブルは継承できません" -#: commands/tablecmds.c:15476 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "テーブルには列\"%s\"がありません" -#: commands/tablecmds.c:15487 +#: commands/tablecmds.c:15530 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "テーブルには列\"%s\"がありますが型は\"%s\"を必要としています" -#: commands/tablecmds.c:15496 +#: commands/tablecmds.c:15539 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "テーブル\"%s\"では列\"%s\"の型が異なっています" -#: commands/tablecmds.c:15510 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "テーブルに余分な列\"%s\"があります" -#: commands/tablecmds.c:15562 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\"は型付けされたテーブルではありません" -#: commands/tablecmds.c:15736 +#: commands/tablecmds.c:15779 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "非ユニークインデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:15742 +#: commands/tablecmds.c:15785 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "一意性を即時検査しないインデックス\"%s\"は複製識別には使用できません" -#: commands/tablecmds.c:15748 +#: commands/tablecmds.c:15791 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "式インデックス\"%s\"は複製識別としては使用できません" -#: commands/tablecmds.c:15754 +#: commands/tablecmds.c:15797 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "部分インデックス\"%s\"を複製識別としては使用できません" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:15814 #, 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:15778 +#: commands/tablecmds.c:15821 #, 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:16025 +#: commands/tablecmds.c:16068 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "テーブル\"%s\"は一時テーブルであるため、ログ出力設定を変更できません" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:16092 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "テーブル\"%s\"はパブリケーションの一部であるため、UNLOGGEDに変更できません" -#: commands/tablecmds.c:16051 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "UNLOGGEDリレーションはレプリケーションできません。" -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16139 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "テーブル\"%s\"はUNLOGGEDテーブル\"%s\"を参照しているためLOGGEDには設定できません" -#: commands/tablecmds.c:16106 +#: commands/tablecmds.c:16149 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "テーブル\"%s\"はLOGGEDテーブル\"%s\"を参照しているためUNLOGGEDには設定できません" -#: commands/tablecmds.c:16164 +#: commands/tablecmds.c:16207 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "所有するシーケンスを他のスキーマに移動することができません" -#: commands/tablecmds.c:16269 +#: commands/tablecmds.c:16312 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "リレーション\"%s\"はスキーマ\"%s\"内にすでに存在します" -#: commands/tablecmds.c:16844 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\"は複合型ではありません" -#: commands/tablecmds.c:16876 +#: commands/tablecmds.c:16919 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "\"%s\"はテーブル、ビュー、実体化ビュー、シーケンス、外部テーブルではありません" -#: commands/tablecmds.c:16911 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "識別できないパーティションストラテジ \"%s\"" -#: commands/tablecmds.c:16919 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "\"list\"パーティションストラテジは2つ以上の列に対しては使えません" -#: commands/tablecmds.c:16985 +#: commands/tablecmds.c:17028 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "パーティションキーに指定されている列\"%s\"は存在しません" -#: commands/tablecmds.c:16993 +#: commands/tablecmds.c:17036 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "パーティションキーでシステム列\"%s\"は使用できません" -#: commands/tablecmds.c:17004 commands/tablecmds.c:17094 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17126 #, c-format msgid "cannot use generated column in partition key" msgstr "パーティションキーで生成カラムは使用できません" -#: commands/tablecmds.c:17077 +#: commands/tablecmds.c:17116 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "パーティションキー式はシステム列への参照を含むことができません" -#: commands/tablecmds.c:17124 +#: commands/tablecmds.c:17177 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "パーティションキー式で使われる関数はIMMUTABLE指定されている必要があります" -#: commands/tablecmds.c:17133 +#: commands/tablecmds.c:17186 #, c-format msgid "cannot use constant expression as partition key" msgstr "定数式をパーティションキーとして使うことはできません" -#: commands/tablecmds.c:17154 +#: commands/tablecmds.c:17207 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "パーティション式で使用する照合順序を特定できませんでした" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17242 #, 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:17195 +#: commands/tablecmds.c:17248 #, 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:17447 +#: commands/tablecmds.c:17500 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\"はすでパーティションです" -#: commands/tablecmds.c:17453 +#: commands/tablecmds.c:17506 #, c-format msgid "cannot attach a typed table as partition" msgstr "型付けされたテーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:17469 +#: commands/tablecmds.c:17522 #, c-format msgid "cannot attach inheritance child as partition" msgstr "継承子テーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:17483 +#: commands/tablecmds.c:17536 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "継承親テーブルをパーティションにアタッチすることはできません" -#: commands/tablecmds.c:17517 +#: commands/tablecmds.c:17570 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "一時リレーションを永続リレーション\"%s\"の子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:17525 +#: commands/tablecmds.c:17578 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "永続リレーションを一時リレーション\"%s\"のパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:17533 +#: commands/tablecmds.c:17586 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "他セッションの一時リレーションのパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:17540 +#: commands/tablecmds.c:17593 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "他セッションの一時リレーションにパーティション子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:17560 +#: commands/tablecmds.c:17613 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "テーブル\"%1$s\"は親テーブル\"%3$s\"にない列\"%2$s\"を含んでいます" -#: commands/tablecmds.c:17563 +#: commands/tablecmds.c:17616 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "新しいパーティションは親に存在する列のみを含むことができます。" -#: commands/tablecmds.c:17575 +#: commands/tablecmds.c:17628 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "トリガー\"%s\"のため、テーブル\"%s\"はパーティション子テーブルにはなれません" -#: commands/tablecmds.c:17577 commands/trigger.c:459 +#: commands/tablecmds.c:17630 commands/trigger.c:459 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "遷移テーブルを使用するROWトリガーはパーティションではサポートされません" -#: commands/tablecmds.c:17756 +#: commands/tablecmds.c:17809 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "外部テーブル\"%s\"はパーティションテーブル\"%s\"の子テーブルとしてアタッチすることはできません" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:17812 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "パーティションテーブル\"%s\"はユニークインデックスを持っています。" -#: commands/tablecmds.c:18083 +#: commands/tablecmds.c:18137 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "デフォルトパーティションがある場合はパーティション子テーブルを並列的に取り外すことはできません" -#: commands/tablecmds.c:18192 +#: commands/tablecmds.c:18249 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "パーティションテーブル\"%s\"は同時に削除されました" -#: commands/tablecmds.c:18198 +#: commands/tablecmds.c:18255 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "パーティションテーブル\"%s\"は同時に削除されました" -#: commands/tablecmds.c:18722 commands/tablecmds.c:18742 commands/tablecmds.c:18762 commands/tablecmds.c:18781 commands/tablecmds.c:18823 +#: commands/tablecmds.c:18787 commands/tablecmds.c:18807 commands/tablecmds.c:18827 commands/tablecmds.c:18846 commands/tablecmds.c:18888 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "インデックス\"%s\"をインデックス\"%s\"の子インデックスとしてアタッチすることはできません" -#: commands/tablecmds.c:18725 +#: commands/tablecmds.c:18790 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "インデックス\"%s\"はすでに別のインデックスにアタッチされています。" -#: commands/tablecmds.c:18745 +#: commands/tablecmds.c:18810 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "インデックス\"%s\"はテーブル\"%s\"のどの子テーブルのインデックスでもありません。" -#: commands/tablecmds.c:18765 +#: commands/tablecmds.c:18830 #, c-format msgid "The index definitions do not match." msgstr "インデックス定義が合致しません。" -#: commands/tablecmds.c:18784 +#: commands/tablecmds.c:18849 #, 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:18826 +#: commands/tablecmds.c:18891 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "子テーブル\"%s\"にはすでに他のインデックスがアタッチされています。" -#: commands/tablecmds.c:19063 +#: commands/tablecmds.c:19128 #, c-format msgid "column data type %s does not support compression" msgstr "列データ型%sは圧縮をサポートしていません" -#: commands/tablecmds.c:19070 +#: commands/tablecmds.c:19135 #, c-format msgid "invalid compression method \"%s\"" msgstr "無効な圧縮方式 \"%s\"" -#: commands/tablespace.c:161 commands/tablespace.c:177 commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1478 storage/file/copydir.c:47 +#: commands/tablespace.c:161 commands/tablespace.c:177 commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1538 storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を作成できませんでした: %m" @@ -10245,7 +10275,7 @@ msgstr "ディレクトリ\"%s\"に権限を設定できませんでした: %m" msgid "directory \"%s\" already in use as a tablespace" msgstr "ディレクトリ\"%s\"はすでにテーブルスペースとして使われています" -#: commands/tablespace.c:768 commands/tablespace.c:781 commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3169 storage/file/fd.c:3560 +#: commands/tablespace.c:768 commands/tablespace.c:781 commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "ディレクトリ\"%s\"を削除できませんでした: %m" @@ -10475,52 +10505,57 @@ msgstr "テーブル\"%2$s\"のトリガー\"%1$s\"は存在しません" msgid "permission denied: \"%s\" is a system trigger" msgstr "権限がありません: \"%s\"はシステムトリガーです" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "トリガー関数%uはNULL値を返しました" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 commands/trigger.c:3056 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENTトリガーは値を返すことができません" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, 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:2356 +#: commands/trigger.c:2358 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "トリガー\"%s\"の実行前には、この行はパーティション\"%s.%s\"に置かれるはずでした。" -#: commands/trigger.c:3123 executor/nodeModifyTable.c:1314 executor/nodeModifyTable.c:1388 executor/nodeModifyTable.c:1969 executor/nodeModifyTable.c:2059 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 +#, c-format +msgid "cannot collect transition tuples from child foreign tables" +msgstr "外部子テーブルからは遷移タプルを収集できません" + +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 executor/nodeModifyTable.c:2079 #, 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:3152 executor/nodeLockRows.c:229 executor/nodeLockRows.c:238 executor/nodeModifyTable.c:238 executor/nodeModifyTable.c:1330 executor/nodeModifyTable.c:1986 executor/nodeModifyTable.c:2232 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 executor/nodeModifyTable.c:2252 #, c-format msgid "could not serialize access due to concurrent update" msgstr "更新が同時に行われたためアクセスの直列化ができませんでした" -#: commands/trigger.c:3160 executor/nodeModifyTable.c:1420 executor/nodeModifyTable.c:2076 executor/nodeModifyTable.c:2256 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2268 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "削除が同時に行われたためアクセスの直列化ができませんでした" -#: commands/trigger.c:4254 +#: commands/trigger.c:4284 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "セキュリティー制限された処理中は、遅延トリガーは発火させられません" -#: commands/trigger.c:5302 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "制約\"%s\"は遅延可能ではありません" -#: commands/trigger.c:5325 +#: commands/trigger.c:5359 #, c-format msgid "constraint \"%s\" does not exist" msgstr "制約\"%s\"は存在しません" @@ -10985,7 +11020,7 @@ msgstr "bypassrlsユーザーを生成するにはスーパーユーザーであ msgid "permission denied to create role" msgstr "ロールを作成する権限がありません" -#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15260 gram.y:15305 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15260 gram.y:15305 utils/adt/acl.c:5265 utils/adt/acl.c:5271 #, c-format msgid "role name \"%s\" is reserved" msgstr "ロール名\"%s\"は予約されています" @@ -11054,7 +11089,7 @@ msgstr "ロールを削除する権限がありません" msgid "cannot use special role specifier in DROP ROLE" msgstr "DROP ROLE で特殊ロールの識別子は使えません" -#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 utils/adt/acl.c:5198 utils/init/miscinit.c:755 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "ロール\"%s\"は存在しません" @@ -11159,107 +11194,107 @@ msgstr "ロール\"%s\"はすでにロール\"%s\"のメンバです" msgid "role \"%s\" is not a member of role \"%s\"" msgstr "ロール\"%s\"はロール\"%s\"のメンバではありません" -#: commands/vacuum.c:133 +#: commands/vacuum.c:134 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "ANALYZEオプション\"%s\"が認識できません" -#: commands/vacuum.c:171 +#: commands/vacuum.c:172 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "パラレルオプションには0から%dまでの値である必要があります" -#: commands/vacuum.c:183 +#: commands/vacuum.c:184 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "VACUUMの並列ワーカー数は0から%dまでの値でなければなりません" -#: commands/vacuum.c:200 +#: commands/vacuum.c:201 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "認識できないVACUUMオプション \"%s\"" -#: commands/vacuum.c:223 +#: commands/vacuum.c:224 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULLは並列実行できません" -#: commands/vacuum.c:239 +#: commands/vacuum.c:240 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "ANALYZE オプションは列リストが与えられているときのみ指定できます" -#: commands/vacuum.c:329 +#: commands/vacuum.c:330 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%sはVACUUMやANALYZEからは実行できません" -#: commands/vacuum.c:339 +#: commands/vacuum.c:340 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM のオプションDISABLE_PAGE_SKIPPINGはFULLと同時には指定できません" -#: commands/vacuum.c:346 +#: commands/vacuum.c:347 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "VACUUM FULLの際はPROCESS_TOASTの指定が必須です" -#: commands/vacuum.c:587 +#: commands/vacuum.c:597 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "\"%s\"をスキップしています --- スーパーユーザーのみがVACUUMを実行できます" -#: commands/vacuum.c:591 +#: commands/vacuum.c:601 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "\"%s\"をスキップしています --- スーパーユーザーもしくはデータベースの所有者のみがVACUUMを実行できます" -#: commands/vacuum.c:595 +#: commands/vacuum.c:605 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "\"%s\"を飛ばしています --- テーブルまたはデータベースの所有者のみがVACUUMを実行することができます" -#: commands/vacuum.c:610 +#: commands/vacuum.c:620 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "\"%s\"をスキップしています --- スーパーユーザーのみがANALYZEを実行できます" -#: commands/vacuum.c:614 +#: commands/vacuum.c:624 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "\"%s\"をスキップしています --- スーパーユーザーまたはデータベースの所有者のみがANALYZEを実行できます" -#: commands/vacuum.c:618 +#: commands/vacuum.c:628 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "\"%s\"をスキップしています --- テーブルまたはデータベースの所有者のみがANALYZEを実行できます" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:707 commands/vacuum.c:803 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "\"%s\"のVACUUM処理をスキップしています -- ロックを獲得できませんでした" -#: commands/vacuum.c:702 +#: commands/vacuum.c:712 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "\"%s\"のVACUUM処理をスキップしています -- リレーションはすでに存在しません" -#: commands/vacuum.c:718 commands/vacuum.c:798 +#: commands/vacuum.c:728 commands/vacuum.c:808 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "\"%s\"のANALYZEをスキップしています --- ロック獲得できませんでした" -#: commands/vacuum.c:723 +#: commands/vacuum.c:733 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "\"%s\"のANALYZEをスキップします --- リレーションはすでに存在しません" -#: commands/vacuum.c:1041 +#: commands/vacuum.c:1051 #, c-format msgid "oldest xmin is far in the past" msgstr "最も古いxminが古すぎます" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1052 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11268,32 +11303,32 @@ msgstr "" "周回問題を回避するためにすぐに実行中のトランザクションを終了してください。\n" "古い準備済みトランザクションのコミットまたはロールバック、もしくは古いレプリケーションスロットの削除が必要な場合もあります。" -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1093 #, c-format msgid "oldest multixact is far in the past" msgstr "最古のマルチトランザクションが古すぎます" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1094 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "周回問題を回避するために、マルチトランザクションを使用している実行中のトランザクションをすぐにクローズしてください。" -#: commands/vacuum.c:1769 +#: commands/vacuum.c:1779 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "データベースの一部は20億トランザクション以上の間にVACUUMを実行されていませんでした" -#: commands/vacuum.c:1770 +#: commands/vacuum.c:1780 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "トランザクションの周回によるデータ損失が発生している可能性があります" -#: commands/vacuum.c:1938 +#: commands/vacuum.c:1961 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "\"%s\"をスキップしています --- テーブルではないものや、特別なシステムテーブルに対してはVACUUMを実行できません" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 utils/misc/guc.c:11777 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "不明なキーワードです: \"%s\"" @@ -11498,7 +11533,7 @@ msgstr "パラメータの型%d(%s)が実行計画(%s)を準備する時点と msgid "no value found for parameter %d" msgstr "パラメータ%dの値がありません" -#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 executor/nodeModifyTable.c:163 +#: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, c-format msgid "table row type and query-specified row type do not match" msgstr "テーブルの行型と問い合わせで指定した行型が一致しません" @@ -11508,17 +11543,17 @@ msgstr "テーブルの行型と問い合わせで指定した行型が一致し msgid "Query has too many columns." msgstr "問い合わせの列が多すぎます" -#: executor/execExpr.c:644 executor/nodeModifyTable.c:156 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "問い合わせで %d 番目に削除される列の値を指定しています。" -#: executor/execExpr.c:650 executor/execExprInterp.c:4063 executor/nodeModifyTable.c:139 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 executor/nodeModifyTable.c:174 #, 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:1098 parser/parse_agg.c:828 +#: executor/execExpr.c:1098 parser/parse_agg.c:881 #, c-format msgid "window function calls cannot be nested" msgstr "ウィンドウ関数の呼び出しを入れ子にすることはできません" @@ -11585,7 +11620,7 @@ msgstr "互換性がない配列をマージできません" msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "要素型%sの配列を要素型%sのARRAY式に含められません" -#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 utils/adt/arraysubs.c:488 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 utils/adt/arrayfuncs.c:3515 utils/adt/arrayfuncs.c:5586 utils/adt/arrayfuncs.c:6105 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)を超えています" @@ -11595,7 +11630,7 @@ msgstr "配列の次元数(%d)が上限(%d)を超えています" msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "多次元配列は次元が合致する配列式でなければなりません" -#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 utils/adt/arrayfuncs.c:3545 utils/adt/arrayfuncs.c:6197 utils/adt/arrayfuncs.c:6538 utils/adt/arrayutils.c:88 #: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" @@ -11663,157 +11698,157 @@ msgstr "キー %s が既存のキー %s と競合しています" msgid "Key conflicts with existing key." msgstr "キーが既存のキーと衝突しています" -#: executor/execMain.c:1006 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "シーケンス\"%s\"を変更できません" -#: executor/execMain.c:1012 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOASTリレーション\"%s\"を変更できません" -#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 rewrite/rewriteHandler.c:3986 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3148 rewrite/rewriteHandler.c:4010 #, c-format msgid "cannot insert into view \"%s\"" msgstr "ビュー\"%s\"へは挿入(INSERT)できません" -#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 rewrite/rewriteHandler.c:3989 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3151 rewrite/rewriteHandler.c:4013 #, 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:1038 rewrite/rewriteHandler.c:3149 rewrite/rewriteHandler.c:3994 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3156 rewrite/rewriteHandler.c:4018 #, c-format msgid "cannot update view \"%s\"" msgstr "ビュー\"%s\"は更新できません" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 rewrite/rewriteHandler.c:3997 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3159 rewrite/rewriteHandler.c:4021 #, 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:1046 rewrite/rewriteHandler.c:3157 rewrite/rewriteHandler.c:4002 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3164 rewrite/rewriteHandler.c:4026 #, c-format msgid "cannot delete from view \"%s\"" msgstr "ビュー\"%s\"からは削除できません" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 rewrite/rewriteHandler.c:4005 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3167 rewrite/rewriteHandler.c:4029 #, 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:1059 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "実体化ビュー\"%s\"を変更できません" -#: executor/execMain.c:1071 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "外部テーブル\"%s\"への挿入ができません" -#: executor/execMain.c:1077 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "外部テーブル\"%s\"は挿入を許しません" -#: executor/execMain.c:1084 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "外部テーブル \"%s\"の更新ができません" -#: executor/execMain.c:1090 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "外部テーブル\"%s\"は更新を許しません" -#: executor/execMain.c:1097 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "外部テーブル\"%s\"からの削除ができません" -#: executor/execMain.c:1103 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "外部テーブル\"%s\"は削除を許しません" -#: executor/execMain.c:1114 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "リレーション\"%s\"を変更できません" -#: executor/execMain.c:1141 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "シーケンス\"%s\"では行のロックはできません" -#: executor/execMain.c:1148 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "TOAST リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1155 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "ビュー\"%s\"では行のロックはできません" -#: executor/execMain.c:1163 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "実体化ビュー\"%s\"では行のロックはできません" -#: executor/execMain.c:1172 executor/execMain.c:2591 executor/nodeLockRows.c:136 +#: executor/execMain.c:1192 executor/execMain.c:2613 executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "外部テーブル\"%s\"では行のロックはできません" -#: executor/execMain.c:1178 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "リレーション\"%s\"では行のロックはできません" -#: executor/execMain.c:1807 +#: executor/execMain.c:1827 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "リレーション\"%s\"の新しい行はパーティション制約に違反しています" -#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 executor/execMain.c:2051 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "失敗した行は%sを含みます" -#: executor/execMain.c:1889 +#: executor/execMain.c:1909 #, 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:1940 +#: executor/execMain.c:1960 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "リレーション\"%s\"の新しい行は検査制約\"%s\"に違反しています" -#: executor/execMain.c:2049 +#: executor/execMain.c:2069 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "新しい行はビュー\"%s\"のチェックオプションに違反しています" -#: executor/execMain.c:2059 +#: executor/execMain.c:2079 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "新しい行はテーブル\"%2$s\"行レベルセキュリティポリシ\"%1$s\"に違反しています" -#: executor/execMain.c:2064 +#: executor/execMain.c:2084 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシに違反しています" -#: executor/execMain.c:2071 +#: executor/execMain.c:2091 #, 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:2076 +#: executor/execMain.c:2096 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "新しい行はテーブル\"%s\"の行レベルセキュリティポリシ(USING式)に違反しています" @@ -11843,7 +11878,7 @@ msgstr "同時更新がありました、リトライします" msgid "concurrent delete, retrying" msgstr "並行する削除がありました、リトライします" -#: executor/execReplication.c:277 parser/parse_cte.c:301 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6255 utils/adt/rowtypes.c:1203 +#: executor/execReplication.c:277 parser/parse_cte.c:302 parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3870 utils/adt/arrayfuncs.c:4424 utils/adt/arrayfuncs.c:6418 utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "型%sの等価性演算子を識別できませんでした" @@ -12022,7 +12057,7 @@ msgstr "戻り値型%sはSQL関数でサポートされていません" msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "テープ%dに対する予期しないEOF: %zuバイト要求しましたが、%zuバイト読み込みました" -#: executor/nodeAgg.c:3979 parser/parse_agg.c:670 parser/parse_agg.c:698 +#: executor/nodeAgg.c:3979 parser/parse_agg.c:677 parser/parse_agg.c:720 #, c-format msgid "aggregate function calls cannot be nested" msgstr "集約関数の呼び出しを入れ子にすることはできません" @@ -12074,30 +12109,35 @@ msgstr "FULL JOINはマージ結合可能な結合条件でのみサポートさ #: executor/nodeModifyTable.c:164 #, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "問い合わせで %d 番目に生成列の値を指定しています。" + +#: executor/nodeModifyTable.c:184 +#, c-format msgid "Query has too few columns." msgstr "問い合わせの列が少なすぎます。" -#: executor/nodeModifyTable.c:1313 executor/nodeModifyTable.c:1387 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "削除対象のタプルはすでに現在のコマンドによって引き起こされた操作によって変更されています" -#: executor/nodeModifyTable.c:1591 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "不正な ON UPDATE 指定です" -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:1612 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "結果タプルをもとのパーティションではなく異なるパーティションに追加しようとしました。" -#: executor/nodeModifyTable.c:2211 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "ON CONFLICT DO UPDATE コマンドは行に再度影響を与えることはできません" -#: executor/nodeModifyTable.c:2212 +#: executor/nodeModifyTable.c:2232 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "同じコマンドでの挿入候補の行が同じ制約値を持つことがないようにしてください" @@ -12112,7 +12152,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:306 executor/nodeSubplan.c:332 executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "式として使用された副問い合わせが2行以上の行を返しました" @@ -12218,7 +12258,7 @@ msgstr "カーソルで%s問い合わせを開くことができません" msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHAREはサポートされていません" -#: executor/spi.c:1730 parser/analyze.c:2864 +#: executor/spi.c:1730 parser/analyze.c:2865 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "スクロール可能カーソルは読み取り専用である必要があります。" @@ -12259,7 +12299,7 @@ msgstr "共有メモリキューにタプルを送出できませんでした" msgid "user mapping not found for \"%s\"" msgstr "\"%s\"に対するユーザーマッピングが見つかりません" -#: foreign/foreign.c:331 optimizer/plan/createplan.c:7047 optimizer/util/plancat.c:474 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 optimizer/util/plancat.c:474 #, c-format msgid "access to non-system foreign table is restricted" msgstr "非システムの外部テーブルへのアクセスは制限されています" @@ -12572,7 +12612,7 @@ msgstr "WITH TIESはORDER BY句なしで指定はできません" msgid "improper use of \"*\"" msgstr "\"*\"の使い方が不適切です" -#: gram.y:16630 gram.y:16647 tsearch/spell.c:983 tsearch/spell.c:1000 tsearch/spell.c:1017 tsearch/spell.c:1034 tsearch/spell.c:1099 +#: gram.y:16630 gram.y:16647 tsearch/spell.c:982 tsearch/spell.c:998 tsearch/spell.c:1014 tsearch/spell.c:1030 tsearch/spell.c:1095 #, c-format msgid "syntax error" msgstr "構文エラー" @@ -12907,565 +12947,565 @@ msgstr "client-final-message 中の proof の形式が不正です" msgid "Garbage found at the end of client-final-message." msgstr "client-final-message の終端に不要なデータがあります。" -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "ユーザー\"%s\"の認証に失敗しました: ホストを拒絶しました" -#: libpq/auth.c:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"の\"trust\"認証に失敗しました" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のIdent認証に失敗しました" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"で対向(peer)認証に失敗しました" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のパスワード認証に失敗しました" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のGSSAPI認証に失敗しました" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のSSPI認証に失敗しました" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のPAM認証に失敗しました" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のBSD認証に失敗しました" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"のLDAP認証に失敗しました" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"の証明書認証に失敗しました" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "ユーザー\"%s\"の RADIUS 認証に失敗しました" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "ユーザー\"%s\"の認証に失敗しました: 認証方式が不正です" -#: libpq/auth.c:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "接続はpg_hba.confの行%dに合致しました: \"%s\"" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "認証識別子が2度以上設定されました" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "以前の識別子: \"%s\"; 新しい識別子: \"%s\"" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "接続を認証しました: 識別名=\"%s\" 方式=%s (%s:%d)" -#: libpq/auth.c:420 +#: libpq/auth.c:428 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "クライアント証明書はルート証明書ストアが利用できる場合にのみ検証されます" -#: libpq/auth.c:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "この接続には有効なクライアント証明が必要です" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "GSS暗号化" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "SSL暗号化" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "暗号化なし" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, 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:480 +#: libpq/auth.c:488 #, 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:518 +#: libpq/auth.c:526 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "クライアントIPアドレスは\"%s\"に解決されました、前方一致しました。" -#: libpq/auth.c:521 +#: libpq/auth.c:529 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "クライアントIPアドレスは\"%s\"に解決されました、前方一致は確認しません。" -#: libpq/auth.c:524 +#: libpq/auth.c:532 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "クライアントIPアドレスは\"%s\"に解決されました、前方一致しませんでした。" -#: libpq/auth.c:527 +#: libpq/auth.c:535 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "クライアントのホスト名\"%s\"をIPアドレスに変換できませんでした: %s。" -#: libpq/auth.c:532 +#: libpq/auth.c:540 #, 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:540 +#: libpq/auth.c:548 #, 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:548 +#: libpq/auth.c:556 #, 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:721 +#: libpq/auth.c:729 #, c-format msgid "expected password response, got message type %d" msgstr "パスワード応答を想定しましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "パスワードパケットのサイズが不正です" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "クライアントから空のパスワードが返されました" -#: libpq/auth.c:885 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "\"db_user_namespace\"が有効の場合、MD5 認証はサポートされません" -#: libpq/auth.c:891 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "ランダムなMD5ソルトの生成に失敗しました" -#: libpq/auth.c:957 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "SASL応答を想定していましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:1086 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "環境変数を設定できませんでした: %m" -#: libpq/auth.c:1122 +#: libpq/auth.c:1130 #, c-format msgid "expected GSS response, got message type %d" msgstr "GSS応答を想定しましたが、メッセージタイプ %d を受け取りました" -#: libpq/auth.c:1182 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "GSSセキュリティコンテキストの受け付けに失敗しました" -#: libpq/auth.c:1223 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "GSSユーザー名の受信に失敗しました" -#: libpq/auth.c:1372 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "SSPIクレデンシャルを取得できませんでした" -#: libpq/auth.c:1397 +#: libpq/auth.c:1405 #, c-format msgid "expected SSPI response, got message type %d" msgstr "SSPI応答を想定しましたが、メッセージタイプ%dを受け取りました" -#: libpq/auth.c:1475 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "SSPIセキュリティコンテキストを受け付けられませんでした" -#: libpq/auth.c:1537 +#: libpq/auth.c:1545 msgid "could not get token from SSPI security context" msgstr "SSPIセキュリティコンテキストからトークンを入手できませんでした" -#: libpq/auth.c:1676 libpq/auth.c:1695 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "名前の変換ができませんでした" -#: libpq/auth.c:1708 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "realm名が長すぎます" -#: libpq/auth.c:1723 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "変換後のアカウント名が長すぎます" -#: libpq/auth.c:1904 +#: libpq/auth.c:1912 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "Ident接続用のソケットを作成できませんでした: %m" -#: libpq/auth.c:1919 +#: libpq/auth.c:1927 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "ローカルアドレス\"%s\"にバインドできませんでした: %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1939 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバーに接続できませんでした: %m" -#: libpq/auth.c:1953 +#: libpq/auth.c:1961 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバーに問い合わせを送信できませんでした: %m" -#: libpq/auth.c:1970 +#: libpq/auth.c:1978 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "アドレス\"%s\"、ポート%sのIdentサーバーからの応答を受信できませんでした: %m" -#: libpq/auth.c:1980 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "Identサーバーからの応答の書式が不正です: \"%s\"" -#: libpq/auth.c:2033 +#: libpq/auth.c:2041 #, c-format msgid "peer authentication is not supported on this platform" msgstr "このプラットフォームでは対向(peer)認証はサポートされていません" -#: libpq/auth.c:2037 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "ピアの資格証明を入手できませんでした: %m" -#: libpq/auth.c:2049 +#: libpq/auth.c:2057 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "ローカルユーザーID %ldの参照に失敗しました: %s" -#: libpq/auth.c:2150 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "背後のPAM層でエラーがありました: %s" -#: libpq/auth.c:2161 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "非サポートのPAM応答: %d/\"%s\"" -#: libpq/auth.c:2221 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "PAM authenticatorを作成できませんでした: %s" -#: libpq/auth.c:2232 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER)が失敗しました: %s" -#: libpq/auth.c:2264 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST)が失敗しました: %s" -#: libpq/auth.c:2276 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "\"pam_set_item(PAM_CONV)が失敗しました: %s" -#: libpq/auth.c:2289 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "\"pam_authenticateが失敗しました: %s" -#: libpq/auth.c:2302 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmtが失敗しました: %s" -#: libpq/auth.c:2313 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "PAM authenticatorを解放できませんでした: %s" -#: libpq/auth.c:2393 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "LDAPを初期化できませんでした: %d" -#: libpq/auth.c:2430 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "ldapbasedn からドメイン名を抽出できませんでした" -#: libpq/auth.c:2438 +#: libpq/auth.c:2446 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP認証で\"%s\"に対する DNS SRV レコードが見つかりませんでした" -#: libpq/auth.c:2440 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "LDAPサーバー名を明示的に指定してください。" -#: libpq/auth.c:2492 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "LDAPを初期化できませんでした: %s" -#: libpq/auth.c:2502 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "この LDAP ライブラリでは ldaps はサポートされていません" -#: libpq/auth.c:2510 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "LDAPを初期化できませんでした: %m" -#: libpq/auth.c:2520 +#: libpq/auth.c:2528 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "LDAPプロトコルバージョンを設定できませんでした: %s" -#: libpq/auth.c:2560 +#: libpq/auth.c:2568 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "wldap32.dllの_ldap_start_tls_sA関数を読み込みできませんでした" -#: libpq/auth.c:2561 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "このプラットフォームではLDAP over SSLをサポートしていません。" -#: libpq/auth.c:2577 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "LDAP TLSセッションを開始できませんでした: %s" -#: libpq/auth.c:2648 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP サーバーも ldapbasedn も指定されていません" -#: libpq/auth.c:2655 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "LDAP サーバーの指定がありません" -#: libpq/auth.c:2717 +#: libpq/auth.c:2725 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "LDAP 認証でユーザー名の中に不正な文字があります" -#: libpq/auth.c:2734 +#: libpq/auth.c:2742 #, 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:2763 +#: libpq/auth.c:2771 #, 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:2777 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAPサーバー\"%s\"は存在しません" -#: libpq/auth.c:2778 +#: libpq/auth.c:2786 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "サーバー\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が何も返しませんでした。" -#: libpq/auth.c:2782 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAPユーザー\"%s\"は一意ではありません" -#: libpq/auth.c:2783 +#: libpq/auth.c:2791 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "LDAP search for filter \"%s\" on server \"%s\" returned %d entries." msgstr[0] "サーバー\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が%3$d項目返しました。" msgstr[1] "サーバー\"%2$s\"で、フィルタ\"%1$s\"によるLDAP検索が%3$d項目返しました。" -#: libpq/auth.c:2803 +#: libpq/auth.c:2811 #, 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:2824 +#: libpq/auth.c:2832 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "サーバー\"%2$s\"でユーザー\"%1$s\"の検索後、unbindできませんでした" -#: libpq/auth.c:2855 +#: libpq/auth.c:2863 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "サーバー\"%2$s\"でユーザー\"%1$s\"のLDAPログインが失敗しました: %3$s" -#: libpq/auth.c:2887 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP診断: %s" -#: libpq/auth.c:2925 +#: libpq/auth.c:2933 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "ユーザー\"%s\"の証明書認証に失敗しました: クライアント証明書にユーザー名が含まれていません" -#: libpq/auth.c:2946 +#: libpq/auth.c:2954 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "ユーザー\"%s\"の証明書認証に失敗しました: 主体者DNが取得できません" -#: libpq/auth.c:2969 +#: libpq/auth.c:2977 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "ユーザー\"%s\"に対する証明書の検証(clientcert=verify-full) に失敗しました: DN不一致" -#: libpq/auth.c:2974 +#: libpq/auth.c:2982 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "ユーザー\"%s\"に対する証明書の検証(clientcert=verify-full) に失敗しました: CN 不一致" -#: libpq/auth.c:3076 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS サーバーが指定されていません" -#: libpq/auth.c:3083 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS secret が指定されていません" -#: libpq/auth.c:3097 +#: libpq/auth.c:3105 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS認証では%d文字より長いパスワードはサポートしていません" -#: libpq/auth.c:3204 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "RADIUS サーバー名\"%s\"をアドレスに変換できませんでした: %s" -#: libpq/auth.c:3218 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "ランダムな暗号化ベクトルを生成できませんでした" -#: libpq/auth.c:3252 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "パスワードのMD5暗号化に失敗しました" -#: libpq/auth.c:3278 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "RADIUSのソケットを作成できませんでした: %m" -#: libpq/auth.c:3300 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "ローカルの RADIUS ソケットをバインドできませんでした: %m" -#: libpq/auth.c:3310 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "RADIUS パケットを送信できませんでした: %m" -#: libpq/auth.c:3343 libpq/auth.c:3369 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "%sからのRADIUSの応答待ちがタイムアウトしました" -#: libpq/auth.c:3362 +#: libpq/auth.c:3370 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "RADIUSソケットの状態をチェックできませんでした: %m" -#: libpq/auth.c:3392 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "RADIUS応答を読めませんでした: %m" -#: libpq/auth.c:3405 libpq/auth.c:3409 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "%sからのRADIUS応答が誤ったポートから送られてきました: %d" -#: libpq/auth.c:3418 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "%sからのRADIUS応答が短すぎます: %d" -#: libpq/auth.c:3425 +#: libpq/auth.c:3433 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "%sからのRADIUS応答が間違った長さを保持しています: %d(実際の長さは%d)" -#: libpq/auth.c:3433 +#: libpq/auth.c:3441 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "%sからのRADIUS応答は異なるリクエストに対するものです: %d (%d であるはず)" -#: libpq/auth.c:3458 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "受信パケットのMD5暗号化に失敗しました" -#: libpq/auth.c:3467 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "%sからのRADIUS応答が間違ったMD5シグネチャを保持しています" -#: libpq/auth.c:3485 +#: libpq/auth.c:3493 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "%1$sからのRADIUS応答がユーザー\"%3$s\"にとって不正なコード(%2$d)を保持しています" @@ -13565,44 +13605,39 @@ 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:208 msgid "GSSAPI wrap error" msgstr "GSSAPIラップエラー" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "送出されるGSSAPIメッセージは機密性を使用しません" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, 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:358 libpq/be-secure-gssapi.c:580 #, 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:396 msgid "GSSAPI unwrap error" msgstr "GSSAPIアンラップエラー" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "受信したGSSAPIメッセージは機密性を使用していませんでした" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "過大なサイズのGSSAPIパケットがクライアントから送出されました: (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "GSSAPIセキュリティコンテキストを受け入れられませんでした" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "GSSAPIサイズチェックエラー" @@ -13863,7 +13898,7 @@ msgid "authentication option \"%s\" is only valid for authentication methods %s" msgstr "認証オプション\"%s\"は認証方式%sでのみ有効です" #: libpq/hba.c:888 libpq/hba.c:908 libpq/hba.c:946 libpq/hba.c:996 libpq/hba.c:1010 libpq/hba.c:1034 libpq/hba.c:1043 libpq/hba.c:1056 libpq/hba.c:1077 libpq/hba.c:1090 libpq/hba.c:1110 libpq/hba.c:1132 libpq/hba.c:1144 libpq/hba.c:1203 libpq/hba.c:1223 libpq/hba.c:1237 libpq/hba.c:1257 libpq/hba.c:1268 libpq/hba.c:1283 libpq/hba.c:1302 libpq/hba.c:1318 libpq/hba.c:1330 libpq/hba.c:1367 libpq/hba.c:1408 libpq/hba.c:1421 libpq/hba.c:1443 libpq/hba.c:1455 -#: libpq/hba.c:1473 libpq/hba.c:1523 libpq/hba.c:1567 libpq/hba.c:1578 libpq/hba.c:1594 libpq/hba.c:1611 libpq/hba.c:1622 libpq/hba.c:1641 libpq/hba.c:1657 libpq/hba.c:1673 libpq/hba.c:1731 libpq/hba.c:1748 libpq/hba.c:1761 libpq/hba.c:1773 libpq/hba.c:1792 libpq/hba.c:1879 libpq/hba.c:1897 libpq/hba.c:1991 libpq/hba.c:2010 libpq/hba.c:2039 libpq/hba.c:2052 libpq/hba.c:2075 libpq/hba.c:2097 libpq/hba.c:2111 tsearch/ts_locale.c:232 +#: libpq/hba.c:1473 libpq/hba.c:1523 libpq/hba.c:1567 libpq/hba.c:1578 libpq/hba.c:1594 libpq/hba.c:1611 libpq/hba.c:1622 libpq/hba.c:1641 libpq/hba.c:1657 libpq/hba.c:1673 libpq/hba.c:1731 libpq/hba.c:1748 libpq/hba.c:1761 libpq/hba.c:1773 libpq/hba.c:1792 libpq/hba.c:1879 libpq/hba.c:1897 libpq/hba.c:1991 libpq/hba.c:2010 libpq/hba.c:2039 libpq/hba.c:2052 libpq/hba.c:2075 libpq/hba.c:2097 libpq/hba.c:2111 tsearch/ts_locale.c:205 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "設定ファイル \"%2$s\" の %1$d 行目" @@ -14334,7 +14369,7 @@ msgstr "クライアント接続がありません" msgid "could not receive data from client: %m" msgstr "クライアントからデータを受信できませんでした: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "プロトコルの同期が失われたためコネクションを終了します" @@ -14700,12 +14735,12 @@ msgstr "拡張可能ノードタイプ\"%s\"はすでに存在します" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\"は登録されていません" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "リレーション\"%s\"は複合型を持っていません" -#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" msgstr "データ型%sの配列型がありませんでした" @@ -14732,47 +14767,47 @@ 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:1316 parser/analyze.c:1720 parser/analyze.c:1976 parser/analyze.c:3155 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 parser/analyze.c:3156 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "UNION/INTERSECT/EXCEPTでは%sを使用できません" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "GROUP BY を実行できませんでした" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "一部のデータ型がハッシュのみをサポートする一方で、別の型はソートのみをサポートしています。" -#: optimizer/plan/planner.c:4387 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "DISTINCTを実行できませんでした" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "ウィンドウの PARTITION BY を実行できませんでした" -#: optimizer/plan/planner.c:5236 +#: optimizer/plan/planner.c:5266 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "ウィンドウ分割に使用する列は、ソート可能なデータ型でなければなりません。" -#: optimizer/plan/planner.c:5240 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "ウィンドウの ORDER BY を実行できませんでした" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "ウィンドウの順序付けをする列は、ソート可能なデータ型でなければなりません。" -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "レンジテーブルの数が多すぎます" @@ -14808,22 +14843,22 @@ msgstr "リレーション\"%s\"はオープンできません" msgid "cannot access temporary or unlogged relations during recovery" msgstr "リカバリ中は一時テーブルやUNLOGGEDテーブルにはアクセスできません" -#: optimizer/util/plancat.c:702 +#: optimizer/util/plancat.c:707 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "行全体に渡るユニークインデックスの推定指定はサポートされていません" -#: optimizer/util/plancat.c:719 +#: optimizer/util/plancat.c:724 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ON CONFLICT句中の制約には関連付けられるインデックスがありません" -#: optimizer/util/plancat.c:769 +#: optimizer/util/plancat.c:774 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATEでの排除制約の使用はサポートされていません" -#: optimizer/util/plancat.c:879 +#: optimizer/util/plancat.c:884 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "ON CONFLICT 指定に合致するユニーク制約または排除制約がありません" @@ -14854,7 +14889,7 @@ 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:1623 parser/analyze.c:3366 +#: parser/analyze.c:1623 parser/analyze.c:3367 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%sをVALUESに使用できません" @@ -14907,454 +14942,464 @@ 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:2814 parser/analyze.c:2822 +#: parser/analyze.c:2815 parser/analyze.c:2823 #, c-format msgid "cannot specify both %s and %s" msgstr "%sと%sの両方を同時には指定できません" -#: parser/analyze.c:2842 +#: parser/analyze.c:2843 #, 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:2850 +#: parser/analyze.c:2851 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %sはサポートされていません" -#: parser/analyze.c:2853 +#: parser/analyze.c:2854 #, 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:2861 +#: parser/analyze.c:2862 #, 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:2872 +#: parser/analyze.c:2873 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %sは不正です" -#: parser/analyze.c:2875 +#: parser/analyze.c:2876 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "INSENSITIVEカーソルは読み取り専用である必要があります。" -#: parser/analyze.c:2941 +#: parser/analyze.c:2942 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "実体化ビューではWITH句にデータを変更する文を含んではなりません" -#: parser/analyze.c:2951 +#: parser/analyze.c:2952 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "実体化ビューでは一時テーブルやビューを使用してはいけません" -#: parser/analyze.c:2961 +#: parser/analyze.c:2962 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "実体化ビューは境界パラメータを用いて定義してはなりません" -#: parser/analyze.c:2973 +#: parser/analyze.c:2974 #, c-format msgid "materialized views cannot be unlogged" msgstr "実体化ビューをログ非取得にはできません" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3162 +#: parser/analyze.c:3163 #, 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:3169 +#: parser/analyze.c:3170 #, 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:3176 +#: parser/analyze.c:3177 #, 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:3183 +#: parser/analyze.c:3184 #, 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:3190 +#: parser/analyze.c:3191 #, 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:3197 +#: parser/analyze.c:3198 #, 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:3289 +#: parser/analyze.c:3290 #, 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:3339 +#: parser/analyze.c:3340 #, 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:3348 +#: parser/analyze.c:3349 #, 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:3357 +#: parser/analyze.c:3358 #, 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:3375 +#: parser/analyze.c:3376 #, 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:3384 +#: parser/analyze.c:3385 #, 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:3404 +#: parser/analyze.c:3405 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "%2$s句のリレーション\"%1$s\"はFROM句にありません" -#: parser/parse_agg.c:208 parser/parse_oper.c:227 +#: parser/parse_agg.c:211 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "型%sの順序演算子を識別できませんでした" -#: parser/parse_agg.c:210 +#: parser/parse_agg.c:213 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "DISTINCT 付きの集約関数は、入力がソート可能である必要があります。" -#: parser/parse_agg.c:268 +#: parser/parse_agg.c:271 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPINGの引数は32より少くなければなりません" -#: parser/parse_agg.c:371 +#: parser/parse_agg.c:375 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "JOIN条件で集約関数を使用できません" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:377 msgid "grouping operations are not allowed in JOIN conditions" msgstr "グルーピング演算はJOIN条件の中では使用できません" -#: parser/parse_agg.c:383 +#: parser/parse_agg.c:387 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "集約関数は自身の問い合わせレベルのFROM句の中では使用できません" -#: parser/parse_agg.c:385 +#: parser/parse_agg.c:389 msgid "grouping operations are not allowed in FROM clause of their own query level" msgstr "グルーピング演算は自身のクエリレベルのFROM句の中では使用できません" -#: parser/parse_agg.c:390 +#: parser/parse_agg.c:394 msgid "aggregate functions are not allowed in functions in FROM" msgstr "集約関数はFROM句内の関数では使用できません" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:396 msgid "grouping operations are not allowed in functions in FROM" msgstr "グルーピング演算はFROM句内の関数では使用できません" -#: parser/parse_agg.c:400 +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in policy expressions" msgstr "集約関数はポリシ式では使用できません" -#: parser/parse_agg.c:402 +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in policy expressions" msgstr "グルーピング演算はポリシ式では使用できません" -#: parser/parse_agg.c:419 +#: parser/parse_agg.c:423 msgid "aggregate functions are not allowed in window RANGE" msgstr "集約関数はウィンドウRANGEの中では集約関数を使用できません" -#: parser/parse_agg.c:421 +#: parser/parse_agg.c:425 msgid "grouping operations are not allowed in window RANGE" msgstr "グルーピング演算はウィンドウ定義のRANGE句の中では使用できません" -#: parser/parse_agg.c:426 +#: parser/parse_agg.c:430 msgid "aggregate functions are not allowed in window ROWS" msgstr "集約関数はウィンドウ定義のROWS句では使用できません" -#: parser/parse_agg.c:428 +#: parser/parse_agg.c:432 msgid "grouping operations are not allowed in window ROWS" msgstr "グルーピング演算はウィンドウ定義のROWS句では使用できません" -#: parser/parse_agg.c:433 +#: parser/parse_agg.c:437 msgid "aggregate functions are not allowed in window GROUPS" msgstr "集約関数はウィンドウ定義のGROUPS句では使用できません" -#: parser/parse_agg.c:435 +#: parser/parse_agg.c:439 msgid "grouping operations are not allowed in window GROUPS" msgstr "グルーピング演算はウィンドウ定義のGROUPS句では使用できません" -#: parser/parse_agg.c:469 +#: parser/parse_agg.c:473 msgid "aggregate functions are not allowed in check constraints" msgstr "集約関数は検査制約では使用できません" -#: parser/parse_agg.c:471 +#: parser/parse_agg.c:475 msgid "grouping operations are not allowed in check constraints" msgstr "グルーピング演算は検査制約では使用できません" -#: parser/parse_agg.c:478 +#: parser/parse_agg.c:482 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "集約関数はDEFAULT式では使用できません" -#: parser/parse_agg.c:480 +#: parser/parse_agg.c:484 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "グルーピング演算はDEFAULT式では使用できません" -#: parser/parse_agg.c:485 +#: parser/parse_agg.c:489 msgid "aggregate functions are not allowed in index expressions" msgstr "集約関数はインデックス式では使用できません" -#: parser/parse_agg.c:487 +#: parser/parse_agg.c:491 msgid "grouping operations are not allowed in index expressions" msgstr "グルーピング演算はインデックス式では使用できません" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:496 msgid "aggregate functions are not allowed in index predicates" msgstr "集約関数はインデックス述語では使用できません" -#: parser/parse_agg.c:494 +#: parser/parse_agg.c:498 msgid "grouping operations are not allowed in index predicates" msgstr "グルーピング演算はインデックス述語では使用できません" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:503 msgid "aggregate functions are not allowed in statistics expressions" msgstr "集約関数は統計情報式では使用できません" -#: parser/parse_agg.c:501 +#: parser/parse_agg.c:505 msgid "grouping operations are not allowed in statistics expressions" msgstr "グルーピング演算は統計情報式では使用できません" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:510 msgid "aggregate functions are not allowed in transform expressions" msgstr "集約関数は変換式では使用できません" -#: parser/parse_agg.c:508 +#: parser/parse_agg.c:512 msgid "grouping operations are not allowed in transform expressions" msgstr "グルーピング演算は変換式では使用できません" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:517 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "集約関数はEXECUTEのパラメータでは使用できません" -#: parser/parse_agg.c:515 +#: parser/parse_agg.c:519 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "グルーピング演算はEXECUTEのパラメータでは使用できません" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:524 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "集約関数をはトリガーのWHEN条件では用できません" -#: parser/parse_agg.c:522 +#: parser/parse_agg.c:526 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "グルーピング演算はトリガーのWHEN条件では使用できません" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:531 msgid "aggregate functions are not allowed in partition bound" msgstr "集約関数はパーティション境界では使用できません" -#: parser/parse_agg.c:529 +#: parser/parse_agg.c:533 msgid "grouping operations are not allowed in partition bound" msgstr "グルーピング演算はパーティション境界では使用できません" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:538 msgid "aggregate functions are not allowed in partition key expressions" msgstr "集約関数はパーティションキー式では使用できません" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:540 msgid "grouping operations are not allowed in partition key expressions" msgstr "グルーピング演算はパーティションキー式では使用できません" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:546 msgid "aggregate functions are not allowed in column generation expressions" msgstr "集約関数はカラム生成式では使用できません" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:548 msgid "grouping operations are not allowed in column generation expressions" msgstr "グルーピング演算はカラム生成式では使用できません" -#: parser/parse_agg.c:550 +#: parser/parse_agg.c:554 msgid "aggregate functions are not allowed in CALL arguments" msgstr "集約関数はCALLの引数では使用できません" -#: parser/parse_agg.c:552 +#: parser/parse_agg.c:556 msgid "grouping operations are not allowed in CALL arguments" msgstr "グルーピング演算はCALLの引数では使用できません" -#: parser/parse_agg.c:558 +#: parser/parse_agg.c:562 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "集約関数は COPY FROM の WHERE 条件では使用できません" -#: parser/parse_agg.c:560 +#: parser/parse_agg.c:564 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:587 parser/parse_clause.c:1834 +#: parser/parse_agg.c:591 parser/parse_clause.c:1834 #, 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:590 +#: parser/parse_agg.c:594 #, c-format msgid "grouping operations are not allowed in %s" msgstr "グルーピング演算は%sでは使用できません" -#: parser/parse_agg.c:691 +#: parser/parse_agg.c:690 parser/parse_agg.c:727 +#, c-format +msgid "outer-level aggregate cannot use a nested CTE" +msgstr "上位レベルの集約では、下位レベルのCTEを使用することはできません" + +#: parser/parse_agg.c:691 parser/parse_agg.c:728 +#, c-format +msgid "CTE \"%s\" is below the aggregate's semantic level." +msgstr "CTE \"%s\" は、この集約のクエリレベルよりも下位にあります。" + +#: parser/parse_agg.c:713 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "アウタレベルの集約は直接引数に低位の変数を含むことができません" -#: parser/parse_agg.c:769 +#: parser/parse_agg.c:798 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "集合返却関数の呼び出しに集約関数の呼び出しを含むことはできません" -#: parser/parse_agg.c:770 parser/parse_expr.c:1678 parser/parse_expr.c:2159 parser/parse_func.c:883 +#: parser/parse_agg.c:799 parser/parse_expr.c:1678 parser/parse_expr.c:2167 parser/parse_func.c:883 #, 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:775 +#: parser/parse_agg.c:804 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "集約関数の呼び出しにウィンドウ関数の呼び出しを含むことはできません" -#: parser/parse_agg.c:854 +#: parser/parse_agg.c:907 msgid "window functions are not allowed in JOIN conditions" msgstr "JOIN条件ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:861 +#: parser/parse_agg.c:914 msgid "window functions are not allowed in functions in FROM" msgstr "FROM句内の関数ではウィンドウ関数を使用できません" -#: parser/parse_agg.c:867 +#: parser/parse_agg.c:920 msgid "window functions are not allowed in policy expressions" msgstr "ウィンドウ関数はポリシ式では使用できません" -#: parser/parse_agg.c:880 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in window definitions" msgstr "ウィンドウ関数はウィンドウ定義では使用できません" -#: parser/parse_agg.c:912 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in check constraints" msgstr "ウィンドウ関数は検査制約の中では使用できません" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in DEFAULT expressions" msgstr "ウィンドウ関数はDEFAULT式の中では使用できません" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:972 msgid "window functions are not allowed in index expressions" msgstr "ウィンドウ関数はインデックス式では使用できません" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:975 msgid "window functions are not allowed in statistics expressions" msgstr "ウィンドウ関数は統計情報式では使用できません" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:978 msgid "window functions are not allowed in index predicates" msgstr "ウィンドウ関数はインデックス述語では使用できません" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:981 msgid "window functions are not allowed in transform expressions" msgstr "ウィンドウ関数は変換式では使用できません" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:984 msgid "window functions are not allowed in EXECUTE parameters" msgstr "ウィンドウ関数はEXECUTEパラメータでは使用できません" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:987 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "ウィンドウ関数はトリガーのWHEN条件では使用できません" -#: parser/parse_agg.c:937 +#: parser/parse_agg.c:990 msgid "window functions are not allowed in partition bound" msgstr "ウィンドウ関数はパーティション境界では使用できません" -#: parser/parse_agg.c:940 +#: parser/parse_agg.c:993 msgid "window functions are not allowed in partition key expressions" msgstr "ウィンドウ関数はパーティションキー式では使用できません" -#: parser/parse_agg.c:943 +#: parser/parse_agg.c:996 msgid "window functions are not allowed in CALL arguments" msgstr "ウィンドウ関数はCALLの引数では使用できません" -#: parser/parse_agg.c:946 +#: parser/parse_agg.c:999 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "ウィンドウ関数は COPY FROM の WHERE 条件では使用できません" -#: parser/parse_agg.c:949 +#: parser/parse_agg.c:1002 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:972 parser/parse_clause.c:1843 +#: parser/parse_agg.c:1025 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "ウィンドウ関数は%sの中では使用できません" -#: parser/parse_agg.c:1006 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1059 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "ウィンドウ\"%s\"は存在しません" -#: parser/parse_agg.c:1090 +#: parser/parse_agg.c:1143 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "グルーピングセットの数が多すぎます (最大4096)" -#: parser/parse_agg.c:1230 +#: parser/parse_agg.c:1283 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "再帰問い合わせの再帰項では集約関数を使用できません" -#: parser/parse_agg.c:1423 +#: parser/parse_agg.c:1476 #, 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:1426 +#: parser/parse_agg.c:1479 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "順序集合集約の直接引数はグルーピングされた列のみを使用しなければなりません。" -#: parser/parse_agg.c:1431 +#: parser/parse_agg.c:1484 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "外部問い合わせから副問い合わせがグループ化されていない列\"%s.%s\"を使用しています" -#: parser/parse_agg.c:1595 +#: parser/parse_agg.c:1648 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "GROUPINGの引数は関連するクエリレベルのグルーピング式でなければなりません" @@ -15630,7 +15675,7 @@ msgstr "offset PRECEDING/FOLLOWING を伴った RANGE は列型 %s とオフセ 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:2060 parser/parse_expr.c:2662 parser/parse_target.c:1008 +#: parser/parse_coerce.c:1050 parser/parse_coerce.c:1088 parser/parse_coerce.c:1106 parser/parse_coerce.c:1121 parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "型%sから%sへの型変換ができません" @@ -15815,147 +15860,147 @@ 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:307 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "型%sの不等価性演算子を識別できませんでした" -#: parser/parse_cte.c:334 +#: 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:383 +#: 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:389 +#: 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:394 +#: 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:398 +#: 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:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "WITH問い合わせは再帰的ではありません" -#: parser/parse_cte.c:450 +#: 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:455 +#: 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:470 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "検索カラム\"%s\"はWITH問い合わせの列リストの中にありません" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "検索列\"%s\"が複数指定されました" -#: parser/parse_cte.c:486 +#: 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:503 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "循環列\"%s\"はWITHクエリの列リストに存在しません" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "循環列\"%s\"が複数指定されました" -#: parser/parse_cte.c:519 +#: 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:526 +#: 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:534 +#: 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:544 +#: 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:551 +#: 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:635 +#: 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:815 +#: parser/parse_cte.c:868 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "WITH項目間の再帰は実装されていません" -#: parser/parse_cte.c:867 +#: parser/parse_cte.c:920 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "再帰問い合わせ\"%s\"はデータを更新するス文を含んでいてはなりません" -#: parser/parse_cte.c:875 +#: parser/parse_cte.c:928 #, 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:910 +#: parser/parse_cte.c:963 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "再帰問い合わせ内の ORDER BY は実装されていません" -#: parser/parse_cte.c:916 +#: parser/parse_cte.c:969 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "再帰問い合わせ内の OFFSET は実装されていません" -#: parser/parse_cte.c:922 +#: parser/parse_cte.c:975 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "再帰問い合わせ内の LIMIT は実装されていません" -#: parser/parse_cte.c:928 +#: parser/parse_cte.c:981 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "再帰問い合わせ内の FOR UPDATE/SHARE は実装されていません" -#: parser/parse_cte.c:1007 +#: parser/parse_cte.c:1060 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "問い合わせ\"%s\"への再帰参照が2回以上現れてはなりません" @@ -16014,7 +16059,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF では = 演算子が boolean を返す必要があります" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%sは集合を返してはなりません" @@ -16030,7 +16075,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "複数列のUPDATE項目のソースは副問合せまたはROW()式でなければなりません" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "集合返却関数は%sでは使用できません" @@ -16102,82 +16147,82 @@ msgstr "副問い合わせの列が多すぎます" msgid "subquery has too few columns" msgstr "副問い合わせの列が少なすぎます" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, c-format msgid "cannot determine type of empty array" msgstr "空の配列のデータ型を決定できません" -#: parser/parse_expr.c:2001 +#: parser/parse_expr.c:2009 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "必要な型に明示的にキャストしてください。例: ARRAY[]::integer[]" -#: parser/parse_expr.c:2015 +#: parser/parse_expr.c:2023 #, c-format msgid "could not find element type for data type %s" msgstr "データ型%sの要素を見つけられませんでした" -#: parser/parse_expr.c:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW式は最大でも%dエントリまでしか持てません" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "無名のXML属性値は列参照でなければなりません" -#: parser/parse_expr.c:2304 +#: parser/parse_expr.c:2312 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "無名のXML要素値は列参照でなければなりません" -#: parser/parse_expr.c:2319 +#: parser/parse_expr.c:2327 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "XML属性名\"%s\"が複数あります" -#: parser/parse_expr.c:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "XMLSERIALIZE の結果を %s へキャストできません" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "行式において項目数が一致しません" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "長さ0の行を比較できません" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "行比較演算子は型%sではなくbooleanを返さなければなりません" -#: parser/parse_expr.c:2777 +#: parser/parse_expr.c:2785 #, c-format msgid "row comparison operator must not return a set" msgstr "行比較演算子は集合を返してはいけません" -#: parser/parse_expr.c:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "行比較演算子%sの解釈を特定できませんでした" -#: parser/parse_expr.c:2838 +#: parser/parse_expr.c:2846 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "行比較演算子はbtree演算子族と関連付けされなければなりません。" -#: parser/parse_expr.c:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "同程度の適合度の候補が複数存在します。" -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROMでは=演算子はbooleanを返さなければなりません" @@ -17112,22 +17157,22 @@ msgstr "FROMは全てのパーティション列ごとに一つの値を指定 msgid "TO must specify exactly one value per partitioning column" msgstr "TOは全てのパーティション列ごとに一つの値を指定しなければなりません" -#: parser/parse_utilcmd.c:4240 +#: parser/parse_utilcmd.c:4242 #, c-format msgid "cannot specify NULL in range bound" msgstr "範囲境界でNULLは使用できません" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4290 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "MAXVALUEに続く境界値はMAXVALUEでなければなりません" -#: parser/parse_utilcmd.c:4296 +#: parser/parse_utilcmd.c:4297 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "MINVALUEに続く境界値はMINVALUEでなければなりません" -#: parser/parse_utilcmd.c:4339 +#: parser/parse_utilcmd.c:4340 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "指定した値は列\"%s\"の%s型に変換できません" @@ -17145,7 +17190,7 @@ msgstr "不正なUnicodeエスケープ文字" msgid "invalid Unicode escape value" msgstr "不正なUnicodeエスケープシーケンスの値" -#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6555 +#: parser/parser.c:468 scan.l:677 utils/adt/varlena.c:6566 #, c-format msgid "invalid Unicode escape" msgstr "不正なUnicodeエスケープ" @@ -17155,7 +17200,7 @@ msgstr "不正なUnicodeエスケープ" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Unicodeエスケープは\\XXXXまたは\\+XXXXXXでなければなりません。" -#: parser/parser.c:497 scan.l:638 scan.l:654 scan.l:670 utils/adt/varlena.c:6580 +#: parser/parser.c:497 scan.l:638 scan.l:654 scan.l:670 utils/adt/varlena.c:6591 #, c-format msgid "invalid Unicode surrogate pair" msgstr "不正なUnicodeサロゲートペア" @@ -17230,7 +17275,7 @@ msgstr "パーティションキーの列%d は%s型です、しかし与えら 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:678 port/posix_sema.c:209 port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/pg_sema.c:209 port/pg_shmem.c:678 port/posix_sema.c:209 port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "データディレクトリ\"%s\"のstatに失敗しました: %m" @@ -17302,17 +17347,17 @@ msgstr "既存の共有メモリブロック(キー%lu、ID %lu)がまだ使用 msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "データディレクトリ \"%s\". に対応する古いサーバプロセスをすべて終了させてください。" -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "セマフォを作成できませんでした: %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "失敗したシステムコールはsemget(%lu, %d, 0%o)です。" -#: port/sysv_sema.c:129 +#: port/sysv_sema.c:144 #, 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" @@ -17321,7 +17366,7 @@ msgstr "" "このエラーは、ディスクが足りなくなったことを意味していません。この原因はセマフォセット数が上限(SEMMNI)に達したか、またはシステム全体でのセマフォ数を上限まで(SEMMNS)を使いきった場合です。対処としては、対応するカーネルのパラメータを増やす必要があります。もしくは PostgreSQLの max_connections を減らすことで、消費するセマフォの数を減らしてください。\n" "共有メモリの設定に関する詳細情報は、PostgreSQL のドキュメントに記載されています。" -#: port/sysv_sema.c:159 +#: port/sysv_sema.c:174 #, 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 "" @@ -17460,27 +17505,27 @@ msgstr "自動VACUUMワーカープロセスをforkできませんでした: %m" msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "自動VACUUM: 孤立した一時テーブル\"%s.%s.%s\"を削除します" -#: postmaster/autovacuum.c:2548 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動VACUUM" -#: postmaster/autovacuum.c:2551 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "テーブル\"%s.%s.%s\"に対する自動ANALYZE" -#: postmaster/autovacuum.c:2744 +#: postmaster/autovacuum.c:2754 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "リレーション\"%s.%s.%s\"の作業エントリを処理しています" -#: postmaster/autovacuum.c:3430 +#: postmaster/autovacuum.c:3440 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "誤設定のため自動VACUUMが起動できません" -#: postmaster/autovacuum.c:3431 +#: postmaster/autovacuum.c:3441 #, c-format msgid "Enable the \"track_counts\" option." msgstr "\"track_counts\"オプションを有効にしてください。" @@ -17510,7 +17555,7 @@ msgstr "バックグラウンドワーカー\"%s\": 不正な再起動間隔" msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "バックグラウンドワーカー\"%s\": パラレルワーカーは再起動するように設定してはいけません" -#: postmaster/bgworker.c:723 tcop/postgres.c:3229 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "管理者コマンドによりバックグラウンドワーカー\"%s\"を終了しています" @@ -17542,24 +17587,24 @@ msgstr[1] "現在の設定では最大%dのバックグラウンドワーカー msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "設定パラメータ\"max_worker_processes\"を増やすことを検討してください" -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, 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:432 +#: postmaster/checkpointer.c:435 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "設定パラメータ\"max_wal_size\"を増やすことを検討してください" -#: postmaster/checkpointer.c:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "チェックポイント要求が失敗しました" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, c-format msgid "Consult recent messages in the server log for details." msgstr "詳細はサーバーログの最近のメッセージを調査してください" @@ -17599,7 +17644,7 @@ msgstr "失敗したアーカイブコマンドは次のとおりです: %s" msgid "archive command was terminated by exception 0x%X" msgstr "アーカイブコマンドが例外0x%Xで終了しました" -#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3761 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "16進値の説明についてはC インクルードファイル\"ntstatus.h\"を参照してください。" @@ -17785,102 +17830,102 @@ msgstr "WALストリーミング(max_wal_senders > 0)を行うには wal_level msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: データトークンテーブルが不正です、修復してください\n" -#: postmaster/postmaster.c:1052 +#: postmaster/postmaster.c:1054 #, c-format msgid "could not create I/O completion port for child queue" msgstr "子キュー向けのI/O終了ポートを作成できませんでした" -#: postmaster/postmaster.c:1128 +#: postmaster/postmaster.c:1130 #, c-format msgid "ending log output to stderr" msgstr "標準エラー出力へのログ出力を終了しています" -#: postmaster/postmaster.c:1129 +#: postmaster/postmaster.c:1131 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "この後のログ出力はログ配送先\"%s\"に出力されます。" -#: postmaster/postmaster.c:1140 +#: postmaster/postmaster.c:1142 #, c-format msgid "starting %s" msgstr "%s を起動しています" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 utils/init/miscinit.c:1684 +#: postmaster/postmaster.c:1163 postmaster/postmaster.c:1262 utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "パラメータ\"%s\"のリスト構文が不正です" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1194 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "\"%s\"に関する監視用ソケットを作成できませんでした" -#: postmaster/postmaster.c:1198 +#: postmaster/postmaster.c:1200 #, c-format msgid "could not create any TCP/IP sockets" msgstr "TCP/IPソケットを作成できませんでした" -#: postmaster/postmaster.c:1230 +#: postmaster/postmaster.c:1232 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister()が失敗しました: エラーコード %ld" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1284 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "ディレクトリ\"%s\"においてUnixドメインソケットを作成できませんでした" -#: postmaster/postmaster.c:1288 +#: postmaster/postmaster.c:1290 #, c-format msgid "could not create any Unix-domain sockets" msgstr "Unixドメインソケットを作成できませんでした" -#: postmaster/postmaster.c:1300 +#: postmaster/postmaster.c:1302 #, c-format msgid "no socket created for listening" msgstr "監視用に作成するソケットはありません" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1333 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: 外部PIDファイル\"%s\"の権限を変更できませんでした: %s\n" -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1337 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: 外部PIDファイル\"%s\"に書き出せませんでした: %s\n" -#: postmaster/postmaster.c:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1370 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "pg_hba.conf の読み込みができませんでした" -#: postmaster/postmaster.c:1396 +#: postmaster/postmaster.c:1398 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmasterは起動値処理中はマルチスレッドで動作します" -#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 +#: postmaster/postmaster.c:1399 postmaster/postmaster.c:5150 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "LC_ALL環境変数を使用可能なロケールに設定してください。" -#: postmaster/postmaster.c:1492 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: 自身の実行ファイルが見つかりませんでした" -#: postmaster/postmaster.c:1499 +#: postmaster/postmaster.c:1501 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: 一致するpostgres実行ファイルがありませんでした" -#: postmaster/postmaster.c:1522 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1524 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "これは、PostgreSQLのインストールが不完全であるかまたは、ファイル\"%s\"が本来の場所からなくなってしまったことを示しています。" -#: postmaster/postmaster.c:1549 +#: postmaster/postmaster.c:1551 #, c-format msgid "" "%s: could not find the database system\n" @@ -17891,470 +17936,470 @@ msgstr "" "ディレクトリ\"%s\"にあるものと想定していましたが、\n" "ファイル\"%s\"をオープンできませんでした: %s\n" -#: postmaster/postmaster.c:1726 +#: postmaster/postmaster.c:1728 #, c-format msgid "select() failed in postmaster: %m" msgstr "postmasterでselect()が失敗しました: %m" -#: postmaster/postmaster.c:1862 +#: postmaster/postmaster.c:1864 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "手に負えない子プロセスにSIGKILLを送出します" -#: postmaster/postmaster.c:1883 +#: postmaster/postmaster.c:1885 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "データディレクトリのロックファイルが不正なため、即時シャットダウンを実行中です" -#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 +#: postmaster/postmaster.c:1988 postmaster/postmaster.c:2016 #, c-format msgid "incomplete startup packet" msgstr "開始パケットが不完全です" -#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2000 postmaster/postmaster.c:2033 #, c-format msgid "invalid length of startup packet" msgstr "不正な開始パケット長" -#: postmaster/postmaster.c:2060 +#: postmaster/postmaster.c:2062 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "SSLネゴシエーション応答の送信に失敗しました: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "received unencrypted data after SSL request" msgstr "SSL要求の後に非暗号化データを受信しました" -#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2081 postmaster/postmaster.c:2125 #, c-format msgid "This could be either a client-software bug or evidence of an attempted man-in-the-middle attack." msgstr "これはクライアントソフトウェアのバグであるか、man-in-the-middle攻撃の証左である可能性があります。" -#: postmaster/postmaster.c:2104 +#: postmaster/postmaster.c:2106 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "GSSAPIネゴシエーション応答の送信に失敗しました: %m" -#: postmaster/postmaster.c:2122 +#: postmaster/postmaster.c:2124 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "GSSAPI暗号化リクエストの後に非暗号化データを受信" -#: postmaster/postmaster.c:2146 +#: postmaster/postmaster.c:2148 #, 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:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 utils/misc/guc.c:11637 +#: postmaster/postmaster.c:2212 utils/misc/guc.c:7138 utils/misc/guc.c:7174 utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "パラメータ\"%s\"の値が不正です: \"%s\"" -#: postmaster/postmaster.c:2213 +#: postmaster/postmaster.c:2215 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "有効な値: \"false\", 0, \"true\", 1, \"database\"。" -#: postmaster/postmaster.c:2258 +#: postmaster/postmaster.c:2260 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "開始パケットの配置が不正です: 最終バイトはターミネータであるはずです" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2277 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "開始パケットで指定されたPostgreSQLユーザー名は存在しません" -#: postmaster/postmaster.c:2339 +#: postmaster/postmaster.c:2341 #, c-format msgid "the database system is starting up" msgstr "データベースシステムは起動処理中です" -#: postmaster/postmaster.c:2345 +#: postmaster/postmaster.c:2347 #, c-format msgid "the database system is not yet accepting connections" msgstr "データベースシステムはまだ接続を受け付けていません" -#: postmaster/postmaster.c:2346 +#: postmaster/postmaster.c:2348 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "リカバリは一貫性を確保する時点に到達していません" -#: postmaster/postmaster.c:2350 +#: postmaster/postmaster.c:2352 #, c-format msgid "the database system is not accepting connections" msgstr "データベースシステムは接続を受け付けていません" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2353 #, c-format msgid "Hot standby mode is disabled." msgstr "ホットスタンバイモードは無効です。" -#: postmaster/postmaster.c:2356 +#: postmaster/postmaster.c:2358 #, c-format msgid "the database system is shutting down" msgstr "データベースシステムはシャットダウンしています" -#: postmaster/postmaster.c:2361 +#: postmaster/postmaster.c:2363 #, c-format msgid "the database system is in recovery mode" msgstr "データベースシステムはリカバリモードです" -#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 +#: postmaster/postmaster.c:2368 storage/ipc/procarray.c:499 storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "現在クライアント数が多すぎます" -#: postmaster/postmaster.c:2456 +#: postmaster/postmaster.c:2458 #, c-format msgid "wrong key in cancel request for process %d" msgstr "プロセス%dに対するキャンセル要求においてキーが間違っています" -#: postmaster/postmaster.c:2468 +#: postmaster/postmaster.c:2470 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "キャンセル要求内のPID %dがどのプロセスにも一致しません" -#: postmaster/postmaster.c:2721 +#: postmaster/postmaster.c:2723 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "SIGHUPを受け取りました。設定ファイルをリロードしています" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 +#: postmaster/postmaster.c:2749 postmaster/postmaster.c:2753 #, c-format msgid "%s was not reloaded" msgstr "%s は再読み込みされていません" -#: postmaster/postmaster.c:2761 +#: postmaster/postmaster.c:2763 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL設定は再読み込みされていません" -#: postmaster/postmaster.c:2817 +#: postmaster/postmaster.c:2819 #, c-format msgid "received smart shutdown request" msgstr "スマートシャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2863 +#: postmaster/postmaster.c:2865 #, c-format msgid "received fast shutdown request" msgstr "高速シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2881 +#: postmaster/postmaster.c:2883 #, c-format msgid "aborting any active transactions" msgstr "活動中の全トランザクションをアボートしています" -#: postmaster/postmaster.c:2905 +#: postmaster/postmaster.c:2907 #, c-format msgid "received immediate shutdown request" msgstr "即時シャットダウン要求を受け取りました" -#: postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:2984 #, c-format msgid "shutdown at recovery target" msgstr "リカバリ目標でシャットダウンします" -#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3002 postmaster/postmaster.c:3038 msgid "startup process" msgstr "起動プロセス" -#: postmaster/postmaster.c:3003 +#: postmaster/postmaster.c:3005 #, c-format msgid "aborting startup due to startup process failure" msgstr "起動プロセスの失敗のため起動を中断しています" -#: postmaster/postmaster.c:3078 +#: postmaster/postmaster.c:3080 #, c-format msgid "database system is ready to accept connections" msgstr "データベースシステムの接続受け付け準備が整いました" -#: postmaster/postmaster.c:3099 +#: postmaster/postmaster.c:3101 msgid "background writer process" msgstr "バックグランドライタプロセス" -#: postmaster/postmaster.c:3153 +#: postmaster/postmaster.c:3155 msgid "checkpointer process" msgstr "チェックポイント処理プロセス" -#: postmaster/postmaster.c:3169 +#: postmaster/postmaster.c:3171 msgid "WAL writer process" msgstr "WALライタプロセス" -#: postmaster/postmaster.c:3184 +#: postmaster/postmaster.c:3186 msgid "WAL receiver process" msgstr "WAL 受信プロセス" -#: postmaster/postmaster.c:3199 +#: postmaster/postmaster.c:3201 msgid "autovacuum launcher process" msgstr "自動VACUUM起動プロセス" -#: postmaster/postmaster.c:3217 +#: postmaster/postmaster.c:3219 msgid "archiver process" msgstr "アーカイバプロセス" -#: postmaster/postmaster.c:3232 +#: postmaster/postmaster.c:3234 msgid "statistics collector process" msgstr "統計情報収集プロセス" -#: postmaster/postmaster.c:3246 +#: postmaster/postmaster.c:3248 msgid "system logger process" msgstr "システムログ取得プロセス" -#: postmaster/postmaster.c:3310 +#: postmaster/postmaster.c:3312 #, c-format msgid "background worker \"%s\"" msgstr "バックグラウンドワーカー\"%s\"" -#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 +#: postmaster/postmaster.c:3396 postmaster/postmaster.c:3416 postmaster/postmaster.c:3423 postmaster/postmaster.c:3441 msgid "server process" msgstr "サーバープロセス" -#: postmaster/postmaster.c:3493 +#: postmaster/postmaster.c:3495 #, 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:3746 +#: postmaster/postmaster.c:3748 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d)は終了コード%dで終了しました" -#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 +#: postmaster/postmaster.c:3750 postmaster/postmaster.c:3762 postmaster/postmaster.c:3772 postmaster/postmaster.c:3783 #, 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:3757 +#: postmaster/postmaster.c:3759 #, 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:3767 +#: postmaster/postmaster.c:3769 #, 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:3779 +#: postmaster/postmaster.c:3781 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d)は認識できないステータス%dで終了しました" -#: postmaster/postmaster.c:3993 +#: postmaster/postmaster.c:3995 #, c-format msgid "abnormal database system shutdown" msgstr "データベースシステムは異常にシャットダウンしました" -#: postmaster/postmaster.c:4031 +#: postmaster/postmaster.c:4033 #, c-format msgid "shutting down due to startup process failure" msgstr "起動プロセスの失敗のためシャットダウンします" -#: postmaster/postmaster.c:4037 +#: postmaster/postmaster.c:4039 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "restart_after_crashがoffであるため、シャットダウンします" -#: postmaster/postmaster.c:4049 +#: postmaster/postmaster.c:4051 #, c-format msgid "all server processes terminated; reinitializing" msgstr "全てのサーバープロセスが終了しました: 再初期化しています" -#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 postmaster/postmaster.c:5966 +#: postmaster/postmaster.c:4225 postmaster/postmaster.c:5577 postmaster/postmaster.c:5968 #, c-format msgid "could not generate random cancel key" msgstr "ランダムなキャンセルキーを生成できませんでした" -#: postmaster/postmaster.c:4277 +#: postmaster/postmaster.c:4279 #, c-format msgid "could not fork new process for connection: %m" msgstr "接続用の新しいプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:4319 +#: postmaster/postmaster.c:4321 msgid "could not fork new process for connection: " msgstr "接続用の新しいプロセスをforkできませんでした" -#: postmaster/postmaster.c:4425 +#: postmaster/postmaster.c:4427 #, c-format msgid "connection received: host=%s port=%s" msgstr "接続を受け付けました: ホスト=%s ポート番号=%s" -#: postmaster/postmaster.c:4430 +#: postmaster/postmaster.c:4432 #, c-format msgid "connection received: host=%s" msgstr "接続を受け付けました: ホスト=%s" -#: postmaster/postmaster.c:4673 +#: postmaster/postmaster.c:4675 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "サーバープロセス\"%s\"を実行できませんでした: %m" -#: postmaster/postmaster.c:4731 +#: postmaster/postmaster.c:4733 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "バックエンドパラメータファイルのマッピングの作成に失敗しました: エラーコード %lu" -#: postmaster/postmaster.c:4740 +#: postmaster/postmaster.c:4742 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "バックエンドパラメータのメモリのマップに失敗しました: エラーコード %lu" -#: postmaster/postmaster.c:4767 +#: postmaster/postmaster.c:4769 #, c-format msgid "subprocess command line too long" msgstr "サブプロセスのコマンドラインが長すぎます" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4787 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "CreateProcess() の呼び出しに失敗しました: %m (エラーコード %lu)" -#: postmaster/postmaster.c:4812 +#: postmaster/postmaster.c:4814 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "バックエンドパラメータファイルのビューのマップ解除に失敗しました: エラーコード %lu" -#: postmaster/postmaster.c:4816 +#: postmaster/postmaster.c:4818 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "バックエンドパラメータファイルのハンドルのクローズに失敗しました: エラーコード%lu" -#: postmaster/postmaster.c:4838 +#: postmaster/postmaster.c:4840 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "共有メモリの確保のリトライ回数が多すぎるため中断します" -#: postmaster/postmaster.c:4839 +#: postmaster/postmaster.c:4841 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "これはASLRまたはアンチウイルスソフトウェアが原因である可能性があります。" -#: postmaster/postmaster.c:5021 +#: postmaster/postmaster.c:5023 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL構成は子プロセスでは読み込めません" -#: postmaster/postmaster.c:5147 +#: postmaster/postmaster.c:5149 #, c-format msgid "postmaster became multithreaded" msgstr "postmasterがマルチスレッド動作になっています" -#: postmaster/postmaster.c:5235 +#: postmaster/postmaster.c:5237 #, c-format msgid "database system is ready to accept read-only connections" msgstr "データベースシステムはリードオンリー接続の受け付け準備ができました" -#: postmaster/postmaster.c:5499 +#: postmaster/postmaster.c:5501 #, c-format msgid "could not fork startup process: %m" msgstr "起動プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5503 +#: postmaster/postmaster.c:5505 #, c-format msgid "could not fork archiver process: %m" msgstr "アーカイバプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5507 +#: postmaster/postmaster.c:5509 #, c-format msgid "could not fork background writer process: %m" msgstr "バックグランドライタプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5511 +#: postmaster/postmaster.c:5513 #, c-format msgid "could not fork checkpointer process: %m" msgstr "チェックポイント処理プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5515 +#: postmaster/postmaster.c:5517 #, c-format msgid "could not fork WAL writer process: %m" msgstr "WALライタプロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5519 +#: postmaster/postmaster.c:5521 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "WAL 受信プロセスを fork できませんでした: %m" -#: postmaster/postmaster.c:5523 +#: postmaster/postmaster.c:5525 #, c-format msgid "could not fork process: %m" msgstr "プロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 +#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 #, c-format msgid "database connection requirement not indicated during registration" msgstr "登録時にデータベース接続の必要性が示されていません" -#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "invalid processing mode in background worker" msgstr "バックグラウンドワーカー内の不正な処理モード" -#: postmaster/postmaster.c:5839 +#: postmaster/postmaster.c:5841 #, c-format msgid "could not fork worker process: %m" msgstr "ワーカープロセスをforkできませんでした: %m" -#: postmaster/postmaster.c:5952 +#: postmaster/postmaster.c:5954 #, c-format msgid "no slot available for new worker process" msgstr "新しいワーカープロセスに割り当て可能なスロットがありません" -#: postmaster/postmaster.c:6286 +#: postmaster/postmaster.c:6288 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "バックエンドで使用するためにソケット%dを複製できませんでした: エラーコード %d" -#: postmaster/postmaster.c:6318 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "継承したソケットを作成できませんでした: エラーコード %d\n" -#: postmaster/postmaster.c:6347 +#: postmaster/postmaster.c:6349 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "バックエンド変数ファイル\"%s\"をオープンできませんでした: %s\n" -#: postmaster/postmaster.c:6354 +#: postmaster/postmaster.c:6356 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "バックエンド変数ファイル\"%s\"から読み取れませんでした: %s\n" -#: postmaster/postmaster.c:6363 +#: postmaster/postmaster.c:6365 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "ファイル\"%s\"を削除できませんでした: %s\n" -#: postmaster/postmaster.c:6380 +#: postmaster/postmaster.c:6382 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "バックエンド変数のビューをマップできませんでした: エラーコード %lu\n" -#: postmaster/postmaster.c:6389 +#: postmaster/postmaster.c:6391 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "バックエンド変数のビューをアンマップできませんでした: エラーコード %lu\n" -#: postmaster/postmaster.c:6396 +#: postmaster/postmaster.c:6398 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "バックエンドパラメータ変数のハンドルをクローズできませんでした: エラーコード%lu\n" -#: postmaster/postmaster.c:6558 +#: postmaster/postmaster.c:6560 #, c-format msgid "could not read exit code for process\n" msgstr "子プロセスの終了コードの読み込みができませんでした\n" -#: postmaster/postmaster.c:6600 +#: postmaster/postmaster.c:6602 #, c-format msgid "could not post child completion status\n" msgstr "個プロセスの終了コードを投稿できませんでした\n" @@ -18611,7 +18656,7 @@ msgstr "ストリーミングCOPY終了中のエラー: %s" msgid "error reading result of streaming command: %s" msgstr "ストリーミングコマンドの結果読み取り中のエラー: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:570 replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:570 replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "CommandComplete後の想定外の結果: %s" @@ -18626,41 +18671,41 @@ msgstr "プライマリサーバーからタイムライン履歴ファイルを msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "2個のフィールドを持つ1個のタプルを期待していましたが、%2$d 個のフィールドを持つ %1$d 個のタプルを受信しました。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 replication/libpqwalreceiver/libpqwalreceiver.c:824 replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 replication/libpqwalreceiver/libpqwalreceiver.c:821 replication/libpqwalreceiver/libpqwalreceiver.c:828 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "WAL ストリームからデータを受信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, c-format msgid "could not send data to WAL stream: %s" msgstr "WAL ストリームにデータを送信できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "レプリケーションスロット\"%s\"を作成できませんでした: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "不正な問い合わせ応答" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "%d個の列を期待していましたが、%d列を受信しました。" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, c-format msgid "the query interface requires a database connection" msgstr "クエリインタフェースの動作にはデータベースコネクションが必要です" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "空の問い合わせ" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "想定外のパイプライン状態" @@ -18714,12 +18759,12 @@ msgstr "論理デコードを行うにはデータベース接続が必要です msgid "logical decoding cannot be used while in recovery" msgstr "リカバリ中は論理デコードは使用できません" -#: replication/logical/logical.c:350 replication/logical/logical.c:502 +#: replication/logical/logical.c:350 replication/logical/logical.c:504 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "物理レプリケーションスロットを論理デコードに使用するとはできません" -#: replication/logical/logical.c:355 replication/logical/logical.c:507 +#: replication/logical/logical.c:355 replication/logical/logical.c:509 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "レプリケーションスロット\"%s\"はこのデータベースでは作成されていません" @@ -18729,37 +18774,37 @@ msgstr "レプリケーションスロット\"%s\"はこのデータベースで msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "論理レプリケーションスロットは書き込みを行ったトランザクションの中で生成することはできません" -#: replication/logical/logical.c:552 +#: replication/logical/logical.c:554 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "スロット\"%s\"の論理デコードを開始します" -#: replication/logical/logical.c:554 +#: replication/logical/logical.c:556 #, 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:699 +#: replication/logical/logical.c:701 #, 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:705 +#: replication/logical/logical.c:707 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中" -#: replication/logical/logical.c:876 replication/logical/logical.c:921 replication/logical/logical.c:966 replication/logical/logical.c:1012 +#: replication/logical/logical.c:878 replication/logical/logical.c:923 replication/logical/logical.c:968 replication/logical/logical.c:1014 #, c-format msgid "logical replication at prepare time requires a %s callback" msgstr "PREPARE時の論理ストリーミングには%sコールバックが必要です" -#: replication/logical/logical.c:1244 replication/logical/logical.c:1293 replication/logical/logical.c:1334 replication/logical/logical.c:1420 replication/logical/logical.c:1469 +#: replication/logical/logical.c:1246 replication/logical/logical.c:1295 replication/logical/logical.c:1336 replication/logical/logical.c:1422 replication/logical/logical.c:1471 #, c-format msgid "logical streaming requires a %s callback" msgstr "論理ストリーミングには%sコールバックが必要です" -#: replication/logical/logical.c:1379 +#: replication/logical/logical.c:1381 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "PREPARE時の論理ストリーミングを行うには%sコールバックが必要です" @@ -18869,7 +18914,7 @@ msgstr "OID%dのレプリケーション基点は既にPID%dで使用中です" msgid "could not find free replication state slot for replication origin with OID %u" msgstr "OID%uのレプリケーション基点に対するレプリケーション状態スロットの空きがありません" -#: replication/logical/origin.c:941 replication/logical/origin.c:1128 replication/slot.c:1867 +#: replication/logical/origin.c:941 replication/logical/origin.c:1128 replication/slot.c:1934 #, c-format msgid "Increase max_replication_slots and try again." msgstr "max_replication_slotsを増やして再度試してください" @@ -18921,27 +18966,27 @@ msgstr "論理レプリケーションのターゲットリレーション\"%s.% msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "論理レプリケーション先のリレーション\"%s.%s\"は存在しません" -#: replication/logical/reorderbuffer.c:3842 +#: replication/logical/reorderbuffer.c:3973 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "XID%uのためのデータファイルの書き出しに失敗しました: %m" -#: replication/logical/reorderbuffer.c:4188 replication/logical/reorderbuffer.c:4213 +#: replication/logical/reorderbuffer.c:4319 replication/logical/reorderbuffer.c:4344 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "並べ替えバッファのあふれファイルの読み込みに失敗しました: %m" -#: replication/logical/reorderbuffer.c:4192 replication/logical/reorderbuffer.c:4217 +#: replication/logical/reorderbuffer.c:4323 replication/logical/reorderbuffer.c:4348 #, 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:4467 +#: replication/logical/reorderbuffer.c:4598 #, c-format msgid "could not remove file \"%s\" during removal of pg_replslot/%s/xid*: %m" msgstr "pg_replslot/%2$s/xid* の削除中にファイル\"%1$s\"が削除できませんでした: %3$m" -#: replication/logical/reorderbuffer.c:4966 +#: replication/logical/reorderbuffer.c:5097 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "ファイル\"%1$s\"の読み込みに失敗しました: %3$dバイトのはずが%2$dバイトでした" @@ -18958,57 +19003,57 @@ msgid_plural "exported logical decoding snapshot: \"%s\" with %u transaction IDs msgstr[0] "エクスポートされた論理デコードスナップショット: \"%s\" (%u個のトランザクションID を含む)" msgstr[1] "エクスポートされた論理デコードスナップショット: \"%s\" (%u個のトランザクションID を含む)" -#: replication/logical/snapbuild.c:1374 replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:2017 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 replication/logical/snapbuild.c:2068 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "論理デコードは一貫性ポイントを%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1376 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "実行中のトランザクションはありません。" -#: replication/logical/snapbuild.c:1437 +#: replication/logical/snapbuild.c:1484 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "論理デコードは初期開始点を%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1439 replication/logical/snapbuild.c:1463 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "%2$uより古いトランザクション(おおよそ%1$d個)の完了を待っています" -#: replication/logical/snapbuild.c:1461 +#: replication/logical/snapbuild.c:1508 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "論理デコードは初期の一貫性ポイントを%X/%Xで発見しました" -#: replication/logical/snapbuild.c:1488 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "古いトランザクションはこれ以上はありません" -#: replication/logical/snapbuild.c:1885 +#: replication/logical/snapbuild.c:1932 #, 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:1891 +#: replication/logical/snapbuild.c:1938 #, 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:1962 +#: replication/logical/snapbuild.c:2009 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "スナップショット生成状態ファイル\"%s\"のチェックサムが一致しません: %uですが、%uであるべきです" -#: replication/logical/snapbuild.c:2019 +#: replication/logical/snapbuild.c:2070 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "論理デコードは保存されたスナップショットを使って開始します。" -#: replication/logical/snapbuild.c:2091 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "ファイル名\"%s\"をパースできませんでした" @@ -19018,32 +19063,27 @@ msgstr "ファイル名\"%s\"をパースできませんでした" msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "サブスクリプション\"%s\"、テーブル\"%s\"に対する論理レプリケーションテーブル同期ワーカーが終了しました" -#: replication/logical/tablesync.c:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "テーブル\"%s.%s\"のテーブル情報を発行サーバーから取得できませんでした: %s" -#: replication/logical/tablesync.c:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "テーブル\"%s.%s\"が発行サーバー上で見つかりませんでした" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "テーブル\"%s.%s\"の初期内容のコピーを開始できませんでした: %s" -#: replication/logical/tablesync.c:1069 +#: replication/logical/tablesync.c:1104 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "テーブルコピー中に発行サーバー上でのトランザクション開始に失敗しました: %s" -#: replication/logical/tablesync.c:1110 -#, c-format -msgid "replication origin \"%s\" already exists" -msgstr "レプリケーション起源\"%s\"はすでに存在します" - -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1142 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "テーブルコピー中に発行サーバー上でのトランザクション終了に失敗しました: %s" @@ -19103,27 +19143,27 @@ msgstr "パラメータの変更があったため、サブスクリプション msgid "could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes" msgstr "ストリーミングトランザクションのサブトランザクションファイル\"%1$s\"からの読み込みに失敗しました: %3$zuバイト中%2$zuバイト分のみ読み込みました" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "サブスクリプション%uが削除されたため、対応する論理レプリケーション適用ワーカーの起動を中断します" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "サブスクリプション\"%s\"が起動中に無効化されたため、対応する論理レプリケーション適用ワーカーは起動しません" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "サブスクリプション\"%s\"、テーブル\"%s\"に対応する論理レプリケーションテーブル同期ワーカーが起動しました" -#: replication/logical/worker.c:3170 +#: replication/logical/worker.c:3177 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "サブスクリプション\"%s\"に対応する論理レプリケーション適用ワーカーが起動しました" -#: replication/logical/worker.c:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "サブスクリプションにレプリケーションスロットが設定されていません" @@ -19138,147 +19178,146 @@ msgstr "不正なproto_version" msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\"は範囲外です" -#: replication/pgoutput/pgoutput.c:227 +#: replication/pgoutput/pgoutput.c:231 #, c-format msgid "invalid publication_names syntax" msgstr "publication_namesの構文が不正です" -#: replication/pgoutput/pgoutput.c:324 +#: replication/pgoutput/pgoutput.c:328 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "クライアントが proto_version=%d を送信してきましたが、バージョン%d以下のプロトコルのみしかサポートしていません" -#: replication/pgoutput/pgoutput.c:330 +#: replication/pgoutput/pgoutput.c:334 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "クライアントが proto_version=%d を送信してきましたが、バージョン%d以上のプロトコルのみしかサポートしていません" -#: replication/pgoutput/pgoutput.c:336 +#: replication/pgoutput/pgoutput.c:340 #, c-format msgid "publication_names parameter missing" msgstr "publication_namesパラメータが指定されていません" -#: replication/pgoutput/pgoutput.c:349 +#: replication/pgoutput/pgoutput.c:353 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "要求されたproto_version=%dはストリーミングをサポートしていません、バージョン%d以上が必要です" -#: replication/pgoutput/pgoutput.c:354 +#: replication/pgoutput/pgoutput.c:358 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "ストリーミングが要求されましたが、出力プラグインではサポートされていません" -#: replication/slot.c:180 +#: replication/slot.c:212 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "レプリケーションスロット名\"%s\"は短すぎます" -#: replication/slot.c:189 +#: replication/slot.c:220 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "レプリケーションスロット名\"%s\"は長すぎます" -#: replication/slot.c:202 +#: replication/slot.c:232 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "レプリケーションスロット名\"%s\"は不正な文字を含んでいます" -#: replication/slot.c:204 -#, c-format +#: replication/slot.c:233 msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "レプリケーションスロット名は小文字、数字とアンダースコアのみを含むことができます。" -#: replication/slot.c:258 +#: replication/slot.c:287 #, c-format msgid "replication slot \"%s\" already exists" msgstr "レプリケーションスロット\"%s\"はすでに存在します" -#: replication/slot.c:268 +#: replication/slot.c:297 #, c-format msgid "all replication slots are in use" msgstr "レプリケーションスロットは全て使用中です" -#: replication/slot.c:269 +#: replication/slot.c:298 #, c-format msgid "Free one or increase max_replication_slots." msgstr "どれか一つを解放するか、max_replication_slots を大きくしてください。" -#: replication/slot.c:402 replication/slotfuncs.c:761 utils/adt/pgstatfuncs.c:2228 +#: replication/slot.c:431 replication/slotfuncs.c:761 utils/adt/pgstatfuncs.c:2228 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "レプリケーションスロット\"%s\"は存在しません" -#: replication/slot.c:448 replication/slot.c:1025 +#: replication/slot.c:477 replication/slot.c:1083 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "レプリケーションスロット\"%s\"はPID%dで使用中です" -#: replication/slot.c:676 replication/slot.c:1419 replication/slot.c:1802 +#: replication/slot.c:705 replication/slot.c:1479 replication/slot.c:1869 #, c-format msgid "could not remove directory \"%s\"" msgstr "ディレクトリ\"%s\"を削除できませんでした" -#: replication/slot.c:1060 +#: replication/slot.c:1118 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "レプリケーションスロットは max_replication_slots > 0 のときだけ使用できます" -#: replication/slot.c:1065 +#: replication/slot.c:1123 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "レプリケーションスロットは wal_level >= replica のときだけ使用できます" -#: replication/slot.c:1250 +#: replication/slot.c:1310 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "プロセス%dを終了してレプリケーションスロット\"%s\"を解放します" -#: replication/slot.c:1288 +#: replication/slot.c:1348 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "restart_lsnの値 %2$X/%3$X が max_slot_wal_keep_size の範囲を超えたため、スロット\"%1$s\"を無効化します" -#: replication/slot.c:1740 +#: replication/slot.c:1807 #, 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:1747 +#: replication/slot.c:1814 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "レプリケーションスロットファイル\"%s\"はサポート外のバージョン%uです" -#: replication/slot.c:1754 +#: replication/slot.c:1821 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "レプリケーションスロットファイル\"%s\"のサイズ%uは異常です" -#: replication/slot.c:1790 +#: replication/slot.c:1857 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "レプリケーションスロットファイル\"%s\"のチェックサムが一致しません: %uですが、%uであるべきです" -#: replication/slot.c:1824 +#: replication/slot.c:1891 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "論理レプリケーションスロット\"%s\"がありますが、wal_level < logical です" -#: replication/slot.c:1826 +#: replication/slot.c:1893 #, c-format msgid "Change wal_level to be logical or higher." msgstr "wal_level を logical もしくはそれより上位の設定にしてください。" -#: replication/slot.c:1830 +#: replication/slot.c:1897 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "物理レプリケーションスロット\"%s\"がありますが、wal_level < replica です" -#: replication/slot.c:1832 +#: replication/slot.c:1899 #, c-format msgid "Change wal_level to be replica or higher." msgstr "wal_level を replica もしくはそれより上位の設定にしてください。" -#: replication/slot.c:1866 +#: replication/slot.c:1933 #, c-format msgid "too many replication slots active before shutdown" msgstr "シャットダウン前のアクティブなレプリケーションスロットの数が多すぎます" @@ -19333,38 +19372,38 @@ msgstr "未完成の論理レプリケーションスロット\"%s\"はコピー msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "このソースレプリケーションスロットの confirmed_flush_lsn が有効値になってから再度実行してください。" -#: replication/syncrep.c:268 +#: replication/syncrep.c:311 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "管理者コマンドにより同期レプリケーションの待ち状態をキャンセルし、接続を終了しています" -#: replication/syncrep.c:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "トランザクションはローカルではすでにコミット済みですが、スタンバイ側にはレプリケーションされていない可能性があります。" -#: replication/syncrep.c:285 +#: replication/syncrep.c:328 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "ユーザーからの要求により同期レプリケーションの待ち状態をキャンセルしています" # y, c-format -#: replication/syncrep.c:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "スタンバイ\"%s\"は優先度%uの同期スタンバイになりました" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "スタンバイ\"%s\"は定足数同期スタンバイの候補になりました" -#: replication/syncrep.c:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "synchronous_standby_names の読み取りに失敗しました" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "同期スタンバイの数(%d)は1以上である必要があります" @@ -19429,7 +19468,7 @@ msgstr "レプリケーションタイムアウトによりwalreceiverを終了 msgid "primary server contains no more WAL on requested timeline %u" msgstr "プライマリサーバーには要求されたタイムライン%u上にこれ以上WALがありません" -#: replication/walreceiver.c:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "ログセグメント%sをクローズできませんでした: %m" @@ -19439,127 +19478,127 @@ msgstr "ログセグメント%sをクローズできませんでした: %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "プライマリサーバーからライムライン%u用のタイムライン履歴ファイルを取り込みしています" -#: replication/walreceiver.c:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "ログファイルセグメント%sのオフセット%uに長さ%luで書き出せませんでした: %m" -#: replication/walsender.c:525 storage/smgr/md.c:1336 +#: replication/walsender.c:539 storage/smgr/md.c:1339 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "ファイル\"%s\"の終端へシークできませんでした: %m" -#: replication/walsender.c:529 +#: replication/walsender.c:543 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "ファイル\"%s\"の先頭にシークできませんでした: %m" -#: replication/walsender.c:580 +#: replication/walsender.c:594 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM が START_REPLICATION の前に実行されていません" -#: replication/walsender.c:609 +#: replication/walsender.c:623 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "論理レプリケーションスロットは物理レプリケーションには使用できません" -#: replication/walsender.c:678 +#: replication/walsender.c:692 #, 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:681 +#: replication/walsender.c:695 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "サーバーの履歴はタイムライン%uの%X/%Xからフォークしました。" -#: replication/walsender.c:725 +#: replication/walsender.c:739 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "要求された開始ポイント%X/%XはサーバーのWALフラッシュ位置%X/%Xより進んでいます" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:975 +#: replication/walsender.c:989 #, c-format msgid "%s must not be called inside a transaction" msgstr "%sはトランザクション内では呼び出せません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:985 +#: replication/walsender.c:999 #, c-format msgid "%s must be called inside a transaction" msgstr "%sはトランザクション内で呼び出さなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:991 +#: replication/walsender.c:1005 #, 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:997 +#: replication/walsender.c:1011 #, c-format msgid "%s must be called before any query" msgstr "%s は問い合わせの実行前に呼び出されなければなりません" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1003 +#: replication/walsender.c:1017 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s はサブトランザクション内では呼び出せません" -#: replication/walsender.c:1146 +#: replication/walsender.c:1160 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "論理レプリケーションスロット\"%s\"は読み込めません" -#: replication/walsender.c:1148 +#: replication/walsender.c:1162 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "最大留保量を超えたため、このスロットは無効化されています。" -#: replication/walsender.c:1158 +#: replication/walsender.c:1172 #, c-format msgid "terminating walsender process after promotion" msgstr "昇格後にWAL送信プロセスを終了します" -#: replication/walsender.c:1552 +#: replication/walsender.c:1566 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "WAL送信プロセスが停止モードの間は新しいコマンドを実行できません" -#: replication/walsender.c:1587 +#: replication/walsender.c:1601 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "物理レプリケーション用のWAL送信プロセスでSQLコマンドは実行できません" -#: replication/walsender.c:1620 +#: replication/walsender.c:1634 #, c-format msgid "received replication command: %s" msgstr "レプリケーションコマンドを受信しました: %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1081 tcop/postgres.c:1440 tcop/postgres.c:1713 tcop/postgres.c:2194 tcop/postgres.c:2627 tcop/postgres.c:2706 +#: replication/walsender.c:1642 tcop/fastpath.c:208 tcop/postgres.c:1046 tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 tcop/postgres.c:2592 tcop/postgres.c:2671 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "現在のトランザクションがアボートしました。トランザクションブロックが終わるまでコマンドは無視されます" -#: replication/walsender.c:1763 replication/walsender.c:1798 +#: replication/walsender.c:1777 replication/walsender.c:1812 #, c-format msgid "unexpected EOF on standby connection" msgstr "スタンバイ接続で想定外のEOFがありました" -#: replication/walsender.c:1786 +#: replication/walsender.c:1800 #, c-format msgid "invalid standby message type \"%c\"" msgstr "スタンバイのメッセージタイプ\"%c\"は不正です" -#: replication/walsender.c:1875 +#: replication/walsender.c:1889 #, c-format msgid "unexpected message type \"%c\"" msgstr "想定しないメッセージタイプ\"%c\"" -#: replication/walsender.c:2288 +#: replication/walsender.c:2306 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "レプリケーションタイムアウトにより WAL 送信プロセスを終了しています" @@ -19784,196 +19823,196 @@ msgstr "ON SELECTルールの名前を変更することはできません" 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:613 #, 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:666 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "複数ルールではRETURNINGリストを持つことはできません" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:898 rewrite/rewriteHandler.c:937 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "列\"%s\"へはDEFAULT以外の値の挿入はできません" -#: rewrite/rewriteHandler.c:897 rewrite/rewriteHandler.c:963 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:966 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "列\"%s\"は GENERATED ALWAYS として定義されています。" -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:902 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "OVERRIDING SYSTEM VALUE を指定することで挿入を強制できます。" -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: rewrite/rewriteHandler.c:964 rewrite/rewriteHandler.c:972 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "列\"%s\"はDEFAULTにのみ更新可能です" -#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 +#: rewrite/rewriteHandler.c:1107 rewrite/rewriteHandler.c:1125 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "同じ列\"%s\"に複数の代入があります" -#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:1726 rewrite/rewriteHandler.c:3181 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "非システムのビュー\"%s\"へのアクセスは制限されています" -#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 +#: rewrite/rewriteHandler.c:2158 rewrite/rewriteHandler.c:4084 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "リレーション\"%s\"のルールで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2256 +#: rewrite/rewriteHandler.c:2263 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "リレーション\"%s\"のポリシで無限再帰を検出しました" -#: rewrite/rewriteHandler.c:2586 +#: rewrite/rewriteHandler.c:2593 msgid "Junk view columns are not updatable." msgstr "ジャンクビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2591 +#: rewrite/rewriteHandler.c:2598 msgid "View columns that are not columns of their base relation are not updatable." msgstr "基底リレーションの列ではないビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2594 +#: rewrite/rewriteHandler.c:2601 msgid "View columns that refer to system columns are not updatable." msgstr "システム列を参照するビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2604 msgid "View columns that return whole-row references are not updatable." msgstr "行全体参照を返すビュー列は更新不可です。" -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing DISTINCT are not automatically updatable." msgstr "DISTINCTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2661 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing GROUP BY are not automatically updatable." msgstr "GROUP BYを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing HAVING are not automatically updatable." msgstr "HAVINGを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2674 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "UNION、INTERSECT、EXCEPTを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2670 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing WITH are not automatically updatable." msgstr "WITHを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2680 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "LIMIT、OFFSETを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2685 +#: rewrite/rewriteHandler.c:2692 msgid "Views that return aggregate functions are not automatically updatable." msgstr "集約関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2688 +#: rewrite/rewriteHandler.c:2695 msgid "Views that return window functions are not automatically updatable." msgstr "ウィンドウ関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2698 msgid "Views that return set-returning functions are not automatically updatable." msgstr "集合返却関数を返すビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 rewrite/rewriteHandler.c:2710 +#: rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2709 rewrite/rewriteHandler.c:2717 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "単一のテーブルまたはビューからselectしていないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2713 +#: rewrite/rewriteHandler.c:2720 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "TABLESAMPLEを含むビューは自動更新できません。" -#: rewrite/rewriteHandler.c:2737 +#: rewrite/rewriteHandler.c:2744 msgid "Views that have no updatable columns are not automatically updatable." msgstr "更新可能な列を持たないビューは自動更新できません。" -#: rewrite/rewriteHandler.c:3234 +#: rewrite/rewriteHandler.c:3241 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"への挿入はできません" -#: rewrite/rewriteHandler.c:3242 +#: rewrite/rewriteHandler.c:3249 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "ビュー\"%2$s\"の列\"%1$s\"は更新できません" -#: rewrite/rewriteHandler.c:3724 +#: rewrite/rewriteHandler.c:3747 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では DO INSTEAD NOTIFY ルールはサポートされません" -#: rewrite/rewriteHandler.c:3735 +#: rewrite/rewriteHandler.c:3758 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では DO INSTEAD NOTHING ルールはサポートされません" -#: rewrite/rewriteHandler.c:3749 +#: rewrite/rewriteHandler.c:3772 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では、条件付き DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3753 +#: rewrite/rewriteHandler.c:3776 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文では DO ALSO ルールはサポートされません" -#: rewrite/rewriteHandler.c:3758 +#: rewrite/rewriteHandler.c:3781 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "WITH句内のデータを変更する文ではマルチステートメントの DO INSTEAD ルールはサポートされません" -#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 rewrite/rewriteHandler.c:4004 +#: rewrite/rewriteHandler.c:4012 rewrite/rewriteHandler.c:4020 rewrite/rewriteHandler.c:4028 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "条件付きDO INSTEADルールを持つビューは自動更新できません。" -#: rewrite/rewriteHandler.c:4109 +#: rewrite/rewriteHandler.c:4134 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのINSERT RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4111 +#: rewrite/rewriteHandler.c:4136 #, 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:4116 +#: rewrite/rewriteHandler.c:4141 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのUPDATE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4118 +#: rewrite/rewriteHandler.c:4143 #, 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:4123 +#: rewrite/rewriteHandler.c:4148 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "リレーション\"%s\"へのDELETE RETURNINGを行うことはできません" -#: rewrite/rewriteHandler.c:4125 +#: rewrite/rewriteHandler.c:4150 #, 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:4143 +#: rewrite/rewriteHandler.c:4168 #, 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:4200 +#: rewrite/rewriteHandler.c:4225 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "複数問い合わせに対するルールにより書き換えられた問い合わせでは WITH を使用できません" @@ -20132,47 +20171,47 @@ msgstr "統計オブジェクト\"%s.%s\"がリレーション\"%s.%s\"に対し msgid "function returning record called in context that cannot accept type record" msgstr "レコード型を受け付けられないコンテキストでレコードを返す関数が呼び出されました" -#: storage/buffer/bufmgr.c:598 storage/buffer/bufmgr.c:765 +#: storage/buffer/bufmgr.c:605 storage/buffer/bufmgr.c:772 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "他のセッションの一時テーブルにはアクセスできません" -#: storage/buffer/bufmgr.c:843 +#: storage/buffer/bufmgr.c:850 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "リレーション\"%s\"を%uブロックを超えて拡張できません" -#: storage/buffer/bufmgr.c:930 +#: storage/buffer/bufmgr.c:937 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "リレーション %2$s の %1$u ブロック目で、EOF の先に想定外のデータを検出しました" -#: storage/buffer/bufmgr.c:932 +#: storage/buffer/bufmgr.c:939 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "これはカーネルの不具合で発生した模様です。システムの更新を検討してください。" -#: storage/buffer/bufmgr.c:1031 +#: storage/buffer/bufmgr.c:1038 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "リレーション %2$s の %1$u ブロック目のページが不正です: ページをゼロで埋めました" -#: storage/buffer/bufmgr.c:4533 +#: storage/buffer/bufmgr.c:4600 #, c-format msgid "could not write block %u of %s" msgstr "%u ブロックを %s に書き出せませんでした" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4602 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "複数回失敗しました ---ずっと書き込みエラーが続くかもしれません。" -#: storage/buffer/bufmgr.c:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4623 storage/buffer/bufmgr.c:4642 #, c-format msgid "writing block %u of relation %s" msgstr "ブロック %u を リレーション %s に書き込んでいます" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4946 #, c-format msgid "snapshot too old" msgstr "スナップショットが古すぎます" @@ -20202,112 +20241,112 @@ msgstr "BufFile \"%s\"の一時ファイル\"%s\"のサイズの確認に失敗 msgid "could not delete shared fileset \"%s\": %m" msgstr "共有ファイルセット\"%s\"を削除できませんでした: %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:874 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "ファイル\"%s\"の切り詰め処理ができませんでした: %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "ダーティーデータを書き出しできませんでした: %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, c-format msgid "could not determine dirty data size: %m" msgstr "ダーティーデータのサイズを特定できませんでした: %m" -#: storage/file/fd.c:597 +#: storage/file/fd.c:594 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "データの書き出し中にmunmap()に失敗しました: %m" -#: storage/file/fd.c:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "ファイル\"%s\"から\"%s\"へのリンクができませんでした: %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimitが失敗しました: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "サーバープロセスを起動させるために利用できるファイル記述子が不足しています" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "システムでは%d使用できますが、少なくとも%d必要です" -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 storage/file/fd.c:2668 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "ファイル記述子が不足しています: %m: 解放後再実行してください" -#: storage/file/fd.c:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "一時ファイル: パス \"%s\"、サイズ %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "一時ディレクトリ\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "一時サブディレクトリ\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"を作成できませんでした: %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"をオープンできませんでした: %m" -#: storage/file/fd.c:1859 +#: storage/file/fd.c:1850 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"を unlink できませんでした: %m" -#: storage/file/fd.c:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "ファイル\"%s\"を削除できませんでした: %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "一時ファイルのサイズがtemp_file_limit(%d KB)を超えています" -#: storage/file/fd.c:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "ファイル\"%2$s\"をオープンしようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:2496 +#: storage/file/fd.c:2487 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "コマンド\"%2$s\"を実行しようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:2653 +#: storage/file/fd.c:2644 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "ディレクトリ\"%2$s\"をオープンしようとした時にmaxAllocatedDescs(%1$d)を超えました" -#: storage/file/fd.c:3183 +#: storage/file/fd.c:3174 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "一時ファイル用ディレクトリに想定外のファイルがありました: \"%s\"" -#: storage/file/fd.c:3312 +#: storage/file/fd.c:3303 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "\"%s\"を含むファイルシステムを同期できません: %m" @@ -20500,12 +20539,12 @@ msgstr "リカバリ処理は%ld.%03dミリ秒待機中です: %s" msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "リカバリ処理の待機は%ld.%03dミリ秒経過後解除されました: %s" -#: storage/ipc/standby.c:883 tcop/postgres.c:3358 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "リカバリで競合が発生したためステートメントをキャンセルしています" -#: storage/ipc/standby.c:884 tcop/postgres.c:2512 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "リカバリ時にユーザーのトランザクションがバッファのデッドロックを引き起こしました。" @@ -20578,102 +20617,102 @@ msgstr "デッドロックを検出しました" msgid "See server log for query details." msgstr "問い合わせの詳細はサーバーログを参照してください" -#: storage/lmgr/lmgr.c:825 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の更新中" -#: storage/lmgr/lmgr.c:828 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の削除中" -#: storage/lmgr/lmgr.c:831 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)のロック中" -#: storage/lmgr/lmgr.c:834 +#: storage/lmgr/lmgr.c:840 #, 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:837 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のインデックスタプル(%1$u,%2$u)の挿入中" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)の一意性の確認中" -#: storage/lmgr/lmgr.c:843 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"の更新されたタプル(%1$u,%2$u)の再チェック中" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "リレーション\"%3$s\"のタプル(%1$u,%2$u)に対する排除制約のチェック中" -#: storage/lmgr/lmgr.c:1139 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "データベース%2$uのリレーション%1$u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1151 #, c-format msgid "extension of relation %u of database %u" msgstr "データベース%2$uのリレーション%1$uの拡張" -#: storage/lmgr/lmgr.c:1151 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "データベース%uのpg_database.datfrozenxid" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "page %u of relation %u of database %u" msgstr "データベース%3$uのリレーション%2$uのページ%1$u" -#: storage/lmgr/lmgr.c:1163 +#: storage/lmgr/lmgr.c:1169 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "データベース%4$uのリレーション%3$uのタプル(%2$u,%1$u)" -#: storage/lmgr/lmgr.c:1171 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "トランザクション %u" -#: storage/lmgr/lmgr.c:1176 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "仮想トランザクション %d/%u" -#: storage/lmgr/lmgr.c:1182 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "トランザクション%2$uの投機的書き込みトークン%1$u" -#: storage/lmgr/lmgr.c:1188 +#: storage/lmgr/lmgr.c:1194 #, c-format msgid "object %u of class %u of database %u" msgstr "データベース%3$uのリレーション%2$uのオブジェクト%1$u" -#: storage/lmgr/lmgr.c:1196 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "ユーザーロック[%u,%u,%u]" -#: storage/lmgr/lmgr.c:1203 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "アドバイザリ・ロック[%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "ロックタグタイプ%dは不明です" @@ -20848,22 +20887,22 @@ msgstr "ファイル\"%2$s\"で%1$uブロックが書き出せませんでした msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "ファイル\"%2$s\"のブロック%1$uを書き込めませんでした: %4$dバイト中%3$dバイト分のみ書き込みました" -#: storage/smgr/md.c:842 +#: storage/smgr/md.c:845 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: 現在は%uブロックのみとなりました" -#: storage/smgr/md.c:897 +#: storage/smgr/md.c:900 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "ファイル\"%s\"を%uブロックに切り詰められませんでした: %m" -#: storage/smgr/md.c:1301 +#: storage/smgr/md.c:1304 #, 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:1315 +#: storage/smgr/md.c:1318 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "ファイル \"%s\"(対象ブロック %u)をオープンできませんでした: %m" @@ -20878,7 +20917,7 @@ msgstr "関数\"%s\"は高速呼び出しインタフェースでの呼び出し msgid "fastpath function call: \"%s\" (OID %u)" msgstr "近道関数呼び出し: \"%s\"(OID %u))" -#: tcop/fastpath.c:312 tcop/postgres.c:1308 tcop/postgres.c:1566 tcop/postgres.c:2037 tcop/postgres.c:2293 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "期間: %s ミリ秒" @@ -20908,150 +20947,150 @@ msgstr "関数呼び出しメッセージ内の引数サイズ%dが不正です" msgid "incorrect binary data format in function argument %d" msgstr "関数引数%dのバイナリデータ書式が不正です" -#: tcop/postgres.c:449 tcop/postgres.c:4836 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "フロントエンドメッセージタイプ%dが不正です" -#: tcop/postgres.c:1018 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "文: %s" -#: tcop/postgres.c:1313 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "期間: %s ミリ秒 文: %s" -#: tcop/postgres.c:1419 +#: tcop/postgres.c:1384 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "準備された文に複数のコマンドを挿入できません" -#: tcop/postgres.c:1571 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "期間: %s ミリ秒 パース%s : %s" -#: tcop/postgres.c:1638 tcop/postgres.c:2608 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "無名の準備された文が存在しません" -#: tcop/postgres.c:1690 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "バインドメッセージは%dパラメータ書式ありましたがパラメータは%dでした" -#: tcop/postgres.c:1696 +#: tcop/postgres.c:1661 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "バインドメッセージは%dパラメータを提供しましたが、準備された文\"%s\"では%d必要でした" -#: tcop/postgres.c:1915 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "バインドパラメータ%dにおいてバイナリデータ書式が不正です" -#: tcop/postgres.c:2042 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "期間: %s ミリ秒 バインド %s%s%s: %s" -#: tcop/postgres.c:2093 tcop/postgres.c:2692 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "ポータル\"%s\"は存在しません" -#: tcop/postgres.c:2173 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2175 tcop/postgres.c:2301 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "取り出し実行" -#: tcop/postgres.c:2176 tcop/postgres.c:2302 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "実行" -#: tcop/postgres.c:2298 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "期間: %s ミリ秒 %s %s%s%s: %s" -#: tcop/postgres.c:2444 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "準備: %s" -#: tcop/postgres.c:2469 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "パラメータ: %s" -#: tcop/postgres.c:2484 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "異常終了の理由: リカバリが衝突したため" -#: tcop/postgres.c:2500 +#: tcop/postgres.c:2465 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "ユーザーが共有バッファ・ピンを長く保持し過ぎていました" -#: tcop/postgres.c:2503 +#: tcop/postgres.c:2468 #, c-format msgid "User was holding a relation lock for too long." msgstr "ユーザーリレーションのロックを長く保持し過ぎていました" -#: tcop/postgres.c:2506 +#: tcop/postgres.c:2471 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "削除されるべきテーブルスペースをユーザーが使っていました(もしくはその可能性がありました)。" -#: tcop/postgres.c:2509 +#: tcop/postgres.c:2474 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "削除されるべきバージョンの行をユーザー問い合わせが参照しなければならなかった可能性がありました。" -#: tcop/postgres.c:2515 +#: tcop/postgres.c:2480 #, c-format msgid "User was connected to a database that must be dropped." msgstr "削除されるべきデータベースにユーザーが接続していました。" -#: tcop/postgres.c:2554 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "ポータル\"%s\" パラメータ $%d = %s" -#: tcop/postgres.c:2557 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "ポータル\"%s\"パラメータ $%d" -#: tcop/postgres.c:2563 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "無名ポータル パラメータ $%d = %s" -#: tcop/postgres.c:2566 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "無名ポータル パラメータ $%d" -#: tcop/postgres.c:2912 +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "予期しないSIGUITシグナルのため接続を終了します" -#: tcop/postgres.c:2918 +#: tcop/postgres.c:2883 #, c-format msgid "terminating connection because of crash of another server process" msgstr "他のサーバープロセスがクラッシュしたため接続を終了します" -#: tcop/postgres.c:2919 +#: tcop/postgres.c:2884 #, 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 "" @@ -21059,147 +21098,147 @@ msgstr "" "postmasterはこのサーバープロセスに対し、現在のトランザクションをロールバック\n" "し終了するよう指示しました。" -#: tcop/postgres.c:2923 tcop/postgres.c:3284 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "この後、データベースに再接続し、コマンドを繰り返さなければなりません。" -#: tcop/postgres.c:2930 +#: tcop/postgres.c:2895 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "即時シャットダウンコマンドにより接続を終了します" -#: tcop/postgres.c:3016 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "浮動小数点例外" -#: tcop/postgres.c:3017 +#: tcop/postgres.c:2982 #, 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:3188 +#: tcop/postgres.c:3153 #, c-format msgid "canceling authentication due to timeout" msgstr "タイムアウトにより認証処理をキャンセルしています" -#: tcop/postgres.c:3192 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "管理者コマンドにより自動VACUUM処理を終了しています" -#: tcop/postgres.c:3196 +#: tcop/postgres.c:3161 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "管理者コマンドにより、論理レプリケーションワーカーを終了します" -#: tcop/postgres.c:3213 tcop/postgres.c:3223 tcop/postgres.c:3282 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "リカバリで競合が発生したため、接続を終了しています" -#: tcop/postgres.c:3234 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "管理者コマンドにより接続を終了しています" -#: tcop/postgres.c:3265 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "クライアントへの接続が切れました。" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "ロックのタイムアウトのためステートメントをキャンセルしています" -#: tcop/postgres.c:3342 +#: tcop/postgres.c:3307 #, c-format msgid "canceling statement due to statement timeout" msgstr "ステートメントのタイムアウトのためステートメントをキャンセルしています" -#: tcop/postgres.c:3349 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "自動VACUUM処理をキャンセルしています" -#: tcop/postgres.c:3372 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "ユーザーからの要求により文をキャンセルしています" -#: tcop/postgres.c:3386 +#: tcop/postgres.c:3351 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "トランザクション中アイドルタイムアウトのため接続を終了します" -#: tcop/postgres.c:3397 +#: tcop/postgres.c:3362 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "アイドルセッションタイムアウトのため接続を終了します" -#: tcop/postgres.c:3526 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "スタック長制限を越えました" -#: tcop/postgres.c:3527 +#: tcop/postgres.c:3492 #, 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:3590 +#: tcop/postgres.c:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\"は%ldkBを越えてはなりません。" -#: tcop/postgres.c:3592 +#: tcop/postgres.c:3557 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "プラットフォームのスタック長制限を\"ulimit -s\"または同等の機能を使用して増加してください" -#: tcop/postgres.c:4013 +#: tcop/postgres.c:3978 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "サーバープロセスに対する不正なコマンドライン引数: %s" -#: tcop/postgres.c:4014 tcop/postgres.c:4020 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "詳細は\"%s --help\"で確認してください。" -#: tcop/postgres.c:4018 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: 不正なコマンドライン引数: %s" -#: tcop/postgres.c:4081 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: データベース名もユーザー名も指定されていません" -#: tcop/postgres.c:4738 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "不正なCLOSEメッセージのサブタイプ%d" -#: tcop/postgres.c:4773 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "不正なDESCRIBEメッセージのサブタイプ%d" -#: tcop/postgres.c:4857 +#: tcop/postgres.c:4822 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "レプリケーション接続では高速関数呼び出しはサポートされていません" -#: tcop/postgres.c:4861 +#: tcop/postgres.c:4826 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "レプリケーション接続では拡張問い合わせプロトコルはサポートされていません" -#: tcop/postgres.c:5038 +#: tcop/postgres.c:5003 #, 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" @@ -21209,12 +21248,12 @@ msgstr "接続を切断: セッション時間: %d:%02d:%02d.%03d ユーザー=% msgid "bind message has %d result formats but query has %d columns" msgstr "バインドメッセージは%dの結果書式がありましたが、問い合わせは%d列でした" -#: tcop/pquery.c:939 tcop/pquery.c:1698 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "カーゾルは前方へのスキャンしかできません" -#: tcop/pquery.c:940 tcop/pquery.c:1699 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "後方スキャンを有効にするためにはSCROLLオプションを付けて宣言してください。" @@ -21254,6 +21293,11 @@ msgstr "バックグラウンドプロセス内で%sを実行することはで msgid "must be superuser to do CHECKPOINT" msgstr "CHECKPOINTを実行するにはスーパーユーザーである必要があります" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS はFROM句にあるリレーション名のみをサポートしています" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -21374,77 +21418,77 @@ msgstr "認識できないシソーラスパラメータ \"%s\"" msgid "missing Dictionary parameter" msgstr "Dictionaryパラメータがありません" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 tsearch/spell.c:1063 +#: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 tsearch/spell.c:1060 #, c-format msgid "invalid affix flag \"%s\"" msgstr "不正な接辞フラグ\"%s\"" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:387 tsearch/spell.c:1064 #, 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:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:766 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "正規表現が不正です: %s" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1187 tsearch/spell.c:1199 tsearch/spell.c:1758 tsearch/spell.c:1763 tsearch/spell.c:1768 #, c-format msgid "invalid affix alias \"%s\"" msgstr "不正な接辞の別名 \"%s\"" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1240 tsearch/spell.c:1311 tsearch/spell.c:1460 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "affixファイル\"%s\"をオープンできませんでした: %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1294 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell辞書はフラグ値\"default\"、\"long\"および\"num\"のみをサポートします" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1338 #, c-format msgid "invalid number of flag vector aliases" msgstr "不正な数のフラグベクタの別名" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1361 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "別名の数が指定された数 %d を超えています" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1575 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "接辞ファイルが新旧両方の形式のコマンドを含んでいます" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "TSベクターのための文字列が長すぎます(%dバイト、最大は%dバイト)" -#: tsearch/ts_locale.c:227 +#: tsearch/ts_locale.c:200 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "設定ファイル\"%2$s\"の%1$d行目: \"%3$s\"" -#: tsearch/ts_locale.c:307 +#: tsearch/ts_locale.c:280 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "wchar_tからサーバー符号化方式への変換が失敗しました: %m" @@ -21474,137 +21518,137 @@ msgstr "ストップワードファイル\"%s\"をオープンできませんで msgid "text search parser does not support headline creation" msgstr "テキスト検索パーサは見出し作成をサポートしません" -#: tsearch/wparser_def.c:2593 +#: tsearch/wparser_def.c:2594 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "認識できない見出しパラメータ: \"%s\"" -#: tsearch/wparser_def.c:2612 +#: tsearch/wparser_def.c:2613 #, c-format msgid "MinWords should be less than MaxWords" msgstr "MinWordsはMaxWordsより小さくなければなりません" -#: tsearch/wparser_def.c:2616 +#: tsearch/wparser_def.c:2617 #, c-format msgid "MinWords should be positive" msgstr "MinWordsは正でなければなりません" -#: tsearch/wparser_def.c:2620 +#: tsearch/wparser_def.c:2621 #, c-format msgid "ShortWord should be >= 0" msgstr "ShortWordは>= 0でなければなりません" -#: tsearch/wparser_def.c:2624 +#: tsearch/wparser_def.c:2625 #, c-format msgid "MaxFragments should be >= 0" msgstr "MaxFragments は 0 以上でなければなりません" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "識別子が長すぎます" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "識別子は%d文字より短くなければなりません。" -#: utils/adt/acl.c:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "キーワードが不明です: \"%s\"" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACLキーワードは\"group\"または\"user\"でなければなりません。" -#: utils/adt/acl.c:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "名前がありません" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "\"group\"または\"user\"キーワードの後には名前が必要です。" -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "\"=\"記号がありません" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "不正なモード文字: \"%s\"の一つでなければなりません" -#: utils/adt/acl.c:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "\"/\"記号の後には名前が必要です" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "権限付与者をデフォルトのユーザーID %uにしています" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL配列に不正なデータ型があります。" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL配列は1次元の配列でなければなりません" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, c-format msgid "ACL arrays must not contain null values" msgstr "ACL配列にはNULL値を含めてはいけません" -#: utils/adt/acl.c:563 +#: utils/adt/acl.c:580 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "ACL指定の後に余計なゴミがあります" -#: utils/adt/acl.c:1198 +#: utils/adt/acl.c:1215 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "グラントオプションでその権限付与者に権限を戻すことはできません" -#: utils/adt/acl.c:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "依存する権限が存在します" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "これらも取り上げるにはCASCADEを使用してください" -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsertはもうサポートされていません" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremoveはもうサポートされていません" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "権限タイプが不明です: \"%s\"" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "関数\"%s\"は存在しません" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "ロール\"%s\"のメンバでなければなりません" @@ -21619,8 +21663,8 @@ msgstr "入力データ型を特定できませんでした" msgid "input data type is not an array" msgstr "入力データ型は配列ではありません" -#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 utils/adt/int.c:1242 -#: utils/adt/int.c:1310 utils/adt/int.c:1316 utils/adt/int8.c:1299 utils/adt/numeric.c:1783 utils/adt/numeric.c:4246 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 utils/adt/varlena.c:3422 +#: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 utils/adt/float.c:4066 utils/adt/int.c:786 utils/adt/int.c:808 utils/adt/int.c:822 utils/adt/int.c:836 utils/adt/int.c:867 utils/adt/int.c:888 utils/adt/int.c:1005 utils/adt/int.c:1019 utils/adt/int.c:1033 utils/adt/int.c:1066 utils/adt/int.c:1080 utils/adt/int.c:1094 utils/adt/int.c:1125 utils/adt/int.c:1207 utils/adt/int.c:1271 +#: utils/adt/int.c:1339 utils/adt/int.c:1345 utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1119 utils/adt/varlena.c:3430 #, c-format msgid "integer out of range" msgstr "integerの範囲外です" @@ -21736,7 +21780,7 @@ msgstr "多次元配列は合致する次元の副配列を持たなければな msgid "Junk after closing right brace." msgstr "右括弧の後にゴミがあります。" -#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 utils/adt/arrayfuncs.c:5938 +#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3511 utils/adt/arrayfuncs.c:6101 #, c-format msgid "invalid number of dimensions: %d" msgstr "不正な次元数: %d" @@ -21771,7 +21815,7 @@ msgstr "型%sにはバイナリ出力関数がありません" msgid "slices of fixed-length arrays not implemented" msgstr "固定長配列の部分配列は実装されていません" -#: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5924 utils/adt/arrayfuncs.c:5950 utils/adt/arrayfuncs.c:5961 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 +#: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:6087 utils/adt/arrayfuncs.c:6113 utils/adt/arrayfuncs.c:6124 utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 #, c-format msgid "wrong number of array subscripts" msgstr "配列の添え字が不正な数値です" @@ -21806,82 +21850,82 @@ msgstr "空の配列値のスライスに代入するには、スライスの範 msgid "source array too small" msgstr "元の配列が小さすぎます" -#: utils/adt/arrayfuncs.c:3583 +#: utils/adt/arrayfuncs.c:3669 #, c-format msgid "null array element not allowed in this context" msgstr "この文脈ではNULLの配列要素は許可されません" -#: utils/adt/arrayfuncs.c:3685 utils/adt/arrayfuncs.c:3856 utils/adt/arrayfuncs.c:4246 +#: utils/adt/arrayfuncs.c:3846 utils/adt/arrayfuncs.c:4017 utils/adt/arrayfuncs.c:4407 #, c-format msgid "cannot compare arrays of different element types" msgstr "要素型の異なる配列を比較できません" -#: utils/adt/arrayfuncs.c:4034 utils/adt/multirangetypes.c:2742 utils/adt/multirangetypes.c:2814 utils/adt/rangetypes.c:1343 utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 +#: utils/adt/arrayfuncs.c:4195 utils/adt/multirangetypes.c:2743 utils/adt/multirangetypes.c:2815 utils/adt/rangetypes.c:1343 utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "型 %s のハッシュ関数を識別できません" -#: utils/adt/arrayfuncs.c:4161 utils/adt/rowtypes.c:1979 +#: utils/adt/arrayfuncs.c:4322 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "型 %s の拡張ハッシュ関数を特定できませんでした" -#: utils/adt/arrayfuncs.c:5338 +#: utils/adt/arrayfuncs.c:5499 #, c-format msgid "data type %s is not an array type" msgstr "データ型%sは配列型ではありません" -#: utils/adt/arrayfuncs.c:5393 +#: utils/adt/arrayfuncs.c:5554 #, c-format msgid "cannot accumulate null arrays" msgstr "null配列は連結できません" -#: utils/adt/arrayfuncs.c:5421 +#: utils/adt/arrayfuncs.c:5582 #, c-format msgid "cannot accumulate empty arrays" msgstr "空の配列は連結できません" -#: utils/adt/arrayfuncs.c:5448 utils/adt/arrayfuncs.c:5454 +#: utils/adt/arrayfuncs.c:5609 utils/adt/arrayfuncs.c:5615 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "次元の異なる配列は結合できません" -#: utils/adt/arrayfuncs.c:5822 utils/adt/arrayfuncs.c:5862 +#: utils/adt/arrayfuncs.c:5985 utils/adt/arrayfuncs.c:6025 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "次元配列もしくは下限値配列が NULL であってはなりません" -#: utils/adt/arrayfuncs.c:5925 utils/adt/arrayfuncs.c:5951 +#: utils/adt/arrayfuncs.c:6088 utils/adt/arrayfuncs.c:6114 #, c-format msgid "Dimension array must be one dimensional." msgstr "次元配列は1次元でなければなりません" -#: utils/adt/arrayfuncs.c:5930 utils/adt/arrayfuncs.c:5956 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "dimension values cannot be null" msgstr "次元値にnullにはできません" -#: utils/adt/arrayfuncs.c:5962 +#: utils/adt/arrayfuncs.c:6125 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "下限配列が次元配列のサイズと異なっています" -#: utils/adt/arrayfuncs.c:6240 +#: utils/adt/arrayfuncs.c:6403 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "多次元配列からの要素削除はサポートされません" -#: utils/adt/arrayfuncs.c:6517 +#: utils/adt/arrayfuncs.c:6680 #, c-format msgid "thresholds must be one-dimensional array" msgstr "閾値は1次元の配列でなければなりません" -#: utils/adt/arrayfuncs.c:6522 +#: utils/adt/arrayfuncs.c:6685 #, c-format msgid "thresholds array must not contain NULLs" msgstr "閾値配列にはNULL値を含めてはいけません" -#: utils/adt/arrayfuncs.c:6755 +#: utils/adt/arrayfuncs.c:6918 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "切り詰める要素の数は0以上%d以下でなければなりません" @@ -21923,7 +21967,7 @@ msgstr "%s符号化方式からASCIIへの変換はサポートされていま #. translator: first %s is inet or cidr #: utils/adt/bool.c:153 utils/adt/cash.c:354 utils/adt/datetime.c:3802 utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 utils/adt/geo_ops.c:274 utils/adt/geo_ops.c:316 utils/adt/geo_ops.c:326 utils/adt/geo_ops.c:974 utils/adt/geo_ops.c:1389 utils/adt/geo_ops.c:1424 utils/adt/geo_ops.c:1432 -#: utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4675 utils/adt/geo_ops.c:4682 utils/adt/int8.c:126 utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 utils/adt/numeric.c:720 utils/adt/numeric.c:6901 utils/adt/numeric.c:6925 utils/adt/numeric.c:6949 utils/adt/numeric.c:7907 +#: utils/adt/geo_ops.c:3488 utils/adt/geo_ops.c:4660 utils/adt/geo_ops.c:4675 utils/adt/geo_ops.c:4682 utils/adt/int8.c:126 utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 #: utils/adt/numutils.c:116 utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:355 #, c-format msgid "invalid input syntax for type %s: \"%s\"" @@ -21934,8 +21978,8 @@ msgstr "%s型の入力構文が不正です: \"%s\"" msgid "money out of range" msgstr "マネー型の値が範囲外です" -#: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 utils/adt/numeric.c:3046 utils/adt/numeric.c:3069 utils/adt/numeric.c:3154 utils/adt/numeric.c:3172 utils/adt/numeric.c:3268 -#: utils/adt/numeric.c:8456 utils/adt/numeric.c:8746 utils/adt/numeric.c:10392 utils/adt/timestamp.c:3317 +#: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 utils/adt/int.c:851 utils/adt/int.c:967 utils/adt/int.c:1047 utils/adt/int.c:1109 utils/adt/int.c:1147 utils/adt/int.c:1175 utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 +#: utils/adt/numeric.c:8457 utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 utils/adt/timestamp.c:3317 #, c-format msgid "division by zero" msgstr "0による除算が行われました" @@ -21970,7 +22014,7 @@ msgstr "TIME(%d)%sの位取りを許容最大値%dまで減らしました" msgid "date out of range: \"%s\"" msgstr "日付が範囲外です: \"%s\"" -#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 utils/adt/xml.c:2259 +#: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 utils/adt/xml.c:2252 #, c-format msgid "date out of range" msgstr "日付が範囲外です" @@ -22008,7 +22052,7 @@ msgstr "日付の単位\"%s\"は認識できません" #: utils/adt/date.c:1318 utils/adt/date.c:1364 utils/adt/date.c:1920 utils/adt/date.c:1951 utils/adt/date.c:1980 utils/adt/date.c:2844 utils/adt/datetime.c:405 utils/adt/datetime.c:1700 utils/adt/formatting.c:4109 utils/adt/formatting.c:4141 utils/adt/formatting.c:4221 utils/adt/formatting.c:4343 utils/adt/json.c:418 utils/adt/json.c:457 utils/adt/timestamp.c:224 utils/adt/timestamp.c:256 utils/adt/timestamp.c:698 utils/adt/timestamp.c:707 #: utils/adt/timestamp.c:785 utils/adt/timestamp.c:818 utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2865 utils/adt/timestamp.c:2884 utils/adt/timestamp.c:2897 utils/adt/timestamp.c:2908 utils/adt/timestamp.c:2914 utils/adt/timestamp.c:2920 utils/adt/timestamp.c:2925 utils/adt/timestamp.c:2980 utils/adt/timestamp.c:2985 utils/adt/timestamp.c:3006 utils/adt/timestamp.c:3019 utils/adt/timestamp.c:3033 utils/adt/timestamp.c:3041 utils/adt/timestamp.c:3047 #: utils/adt/timestamp.c:3052 utils/adt/timestamp.c:3739 utils/adt/timestamp.c:3864 utils/adt/timestamp.c:3935 utils/adt/timestamp.c:3971 utils/adt/timestamp.c:4061 utils/adt/timestamp.c:4135 utils/adt/timestamp.c:4171 utils/adt/timestamp.c:4274 utils/adt/timestamp.c:4776 utils/adt/timestamp.c:5050 utils/adt/timestamp.c:5509 utils/adt/timestamp.c:5523 utils/adt/timestamp.c:5528 utils/adt/timestamp.c:5542 utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 -#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2281 utils/adt/xml.c:2288 utils/adt/xml.c:2308 utils/adt/xml.c:2315 +#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2274 utils/adt/xml.c:2281 utils/adt/xml.c:2301 utils/adt/xml.c:2308 #, c-format msgid "timestamp out of range" msgstr "timestampの範囲外です" @@ -22023,7 +22067,7 @@ msgstr "時刻が範囲外です" msgid "time field value out of range: %d:%02d:%02g" msgstr "時刻フィールドの値が範囲外です: %d:%02d:%02g" -#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2450 utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 utils/adt/timestamp.c:3450 +#: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 utils/adt/float.c:1123 utils/adt/int.c:643 utils/adt/int.c:690 utils/adt/int.c:725 utils/adt/int8.c:499 utils/adt/numeric.c:2451 utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 utils/adt/timestamp.c:3450 #, c-format msgid "invalid preceding or following size in window function" msgstr "ウィンドウ関数での不正なサイズの PRECEDING または FOLLOWING 指定" @@ -22198,32 +22242,32 @@ msgstr "\"%s\"はreal型の範囲外です" msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\"はdouble precision型の範囲外です" -#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 utils/adt/int8.c:1320 utils/adt/numeric.c:4358 utils/adt/numeric.c:4363 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:363 utils/adt/int.c:901 utils/adt/int.c:923 utils/adt/int.c:937 utils/adt/int.c:951 utils/adt/int.c:983 utils/adt/int.c:1221 utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "smallintの範囲外です" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3564 utils/adt/numeric.c:9339 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, c-format msgid "cannot take square root of a negative number" msgstr "負の値の平方根は取ることができません" -#: utils/adt/float.c:1526 utils/adt/numeric.c:3839 utils/adt/numeric.c:3951 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, c-format msgid "zero raised to a negative power is undefined" msgstr "0の負数乗は定義されていません" -#: utils/adt/float.c:1530 utils/adt/numeric.c:3843 utils/adt/numeric.c:10244 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "負数の非整数乗は、結果が複素数になります" -#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3751 utils/adt/numeric.c:10017 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "ゼロの対数は取ることができません" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3689 utils/adt/numeric.c:3746 utils/adt/numeric.c:10021 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "負の値の対数は取ることができません" @@ -22238,22 +22282,22 @@ msgstr "入力が範囲外です" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "setseed のパラメータ %g は設定可能な範囲 [-1, 1] にありません" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1723 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "countは0より大きくなければなりません" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1734 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "オペランド、下限、上限をNaNにすることはできません" -#: utils/adt/float.c:4041 utils/adt/numeric.c:1739 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "下限および上限は有限でなければなりません" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1753 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "下限を上限と同じにできません" @@ -22503,12 +22547,12 @@ msgstr "24時間形式を使うか、もしくは 1 から 12 の間で指定し msgid "cannot calculate day of year without year information" msgstr "年の情報なしでは年内の日数は計算できません" -#: utils/adt/formatting.c:5606 +#: utils/adt/formatting.c:5608 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\"は入力としてサポートしていません" -#: utils/adt/formatting.c:5618 +#: utils/adt/formatting.c:5620 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\"は入力としてサポートしていません" @@ -22528,7 +22572,7 @@ msgstr "絶対パスは許可されていません" msgid "path must be in or below the current directory" msgstr "パスはカレントディレクトリもしくはその下でなければなりません" -#: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:835 utils/adt/oracle_compat.c:1130 +#: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:844 utils/adt/oracle_compat.c:1139 #, c-format msgid "requested length too large" msgstr "要求した長さが長すぎます" @@ -22623,28 +22667,33 @@ msgstr "半径0の円を多角形に返還できません" msgid "must request at least 2 points" msgstr "少なくとも2ポイントを要求しなければなりません" -#: utils/adt/int.c:164 +#: utils/adt/int.c:158 +#, c-format +msgid "array is not a valid int2vector" +msgstr "配列は有効な int2vector ではありません" + +#: utils/adt/int.c:188 #, c-format msgid "int2vector has too many elements" msgstr "int2vectorの要素数が多すぎます" -#: utils/adt/int.c:237 +#: utils/adt/int.c:265 #, c-format msgid "invalid int2vector data" msgstr "不正なint2vectorデータ" -#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:271 utils/adt/oid.c:239 utils/adt/oid.c:324 #, c-format msgid "oidvector has too many elements" msgstr "oidvectorの要素が多すぎます" -#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 utils/adt/timestamp.c:5879 utils/adt/timestamp.c:5959 +#: utils/adt/int.c:1537 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 utils/adt/timestamp.c:5879 utils/adt/timestamp.c:5959 #, c-format msgid "step size cannot equal zero" msgstr "加算量をゼロにすることはできません" #: utils/adt/int8.c:534 utils/adt/int8.c:557 utils/adt/int8.c:571 utils/adt/int8.c:585 utils/adt/int8.c:616 utils/adt/int8.c:640 utils/adt/int8.c:722 utils/adt/int8.c:790 utils/adt/int8.c:796 utils/adt/int8.c:822 utils/adt/int8.c:836 utils/adt/int8.c:860 utils/adt/int8.c:873 utils/adt/int8.c:942 utils/adt/int8.c:956 utils/adt/int8.c:970 utils/adt/int8.c:1001 utils/adt/int8.c:1023 utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 -#: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4317 utils/adt/varbit.c:1676 +#: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" msgstr "bigintの範囲外です" @@ -22760,22 +22809,22 @@ msgstr "jsonbオブジェクトは%s型へはキャストできません" msgid "cannot cast jsonb array or object to type %s" msgstr "jsonbの配列またはオブジェクトは%s型へはキャストできません" -#: utils/adt/jsonb_util.c:751 +#: utils/adt/jsonb_util.c:748 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "jsonbオブジェクトペア数が許された最大の値(%zu)を上回っています" -#: utils/adt/jsonb_util.c:792 +#: utils/adt/jsonb_util.c:789 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "jsonbの配列要素の数が許された最大の値(%zu)を上回っています" -#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "jsonbの配列要素の全体の大きさが許された最大値%uバイトを上回っています" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "jsonbのオブジェクト要素全体のサイズが最大値である%uを超えています" @@ -23147,7 +23196,7 @@ msgstr "時間帯を使用せずに %s から %s への値の変換はできま msgid "Use *_tz() function for time zone support." msgstr "*_tz() 関数を使用することで時間帯がサポートされます" -#: utils/adt/levenshtein.c:133 +#: utils/adt/levenshtein.c:135 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "レーベンシュタイン距離関数の引数の長さが上限の%d文字を超えています" @@ -23172,12 +23221,12 @@ msgstr "非決定的照合順序はILIKEではサポートされません" msgid "LIKE pattern must not end with escape character" msgstr "LIKE パターンはエスケープ文字で終わってはなりません" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 #, c-format msgid "invalid escape string" msgstr "不正なエスケープ文字列" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:704 #, c-format msgid "Escape string must be empty or one character." msgstr "エスケープ文字は空か1文字でなければなりません。" @@ -23301,22 +23350,22 @@ msgstr "範囲の開始があるはずです" msgid "Expected comma or end of multirange." msgstr "カンマまたは複範囲の終りがあるはずです" -#: utils/adt/multirangetypes.c:975 +#: utils/adt/multirangetypes.c:976 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "複範囲型は多次元配列からは生成できません" -#: utils/adt/multirangetypes.c:1001 +#: utils/adt/multirangetypes.c:1002 #, c-format msgid "multirange values cannot contain null members" msgstr "複範囲値はnullの要素を持てません" -#: utils/adt/multirangetypes.c:1349 +#: utils/adt/multirangetypes.c:1350 #, c-format msgid "range_agg must be called with a range" msgstr "range_aggはrange型で呼び出されなければなりません" -#: utils/adt/multirangetypes.c:1420 +#: utils/adt/multirangetypes.c:1421 #, c-format msgid "range_intersect_agg must be called with a multirange" msgstr "multirange_intersect_aggは複範囲型で呼び出される必要があります" @@ -23454,42 +23503,42 @@ msgstr "加算量はNaNにはできません" msgid "step size cannot be infinity" msgstr "加算量は無限大にはできません" -#: utils/adt/numeric.c:3504 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "負数の階乗は定義されていません" -#: utils/adt/numeric.c:3514 utils/adt/numeric.c:6964 utils/adt/numeric.c:7437 utils/adt/numeric.c:9814 utils/adt/numeric.c:10302 utils/adt/numeric.c:10428 utils/adt/numeric.c:10502 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "値はnumericの形式でオーバフローします" -#: utils/adt/numeric.c:4224 utils/adt/numeric.c:4304 utils/adt/numeric.c:4345 utils/adt/numeric.c:4539 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "NaNは%sには変換できません" -#: utils/adt/numeric.c:4228 utils/adt/numeric.c:4308 utils/adt/numeric.c:4349 utils/adt/numeric.c:4543 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "無限大は%sには変換できません" -#: utils/adt/numeric.c:4552 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsnの範囲外です" -#: utils/adt/numeric.c:7521 utils/adt/numeric.c:7568 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "numericフィールドのオーバーフロー" -#: utils/adt/numeric.c:7522 +#: utils/adt/numeric.c:7523 #, 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:7569 +#: utils/adt/numeric.c:7570 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "精度%d、位取り%dを持つフィールドは、無限大値を格納できません。" @@ -23499,27 +23548,32 @@ msgstr "精度%d、位取り%dを持つフィールドは、無限大値を格 msgid "value \"%s\" is out of range for 8-bit integer" msgstr "値\"%s\"は8ビット整数の範囲外です" -#: utils/adt/oid.c:290 +#: utils/adt/oid.c:211 +#, c-format +msgid "array is not a valid oidvector" +msgstr "配列は有効な oidvector ではありません" + +#: utils/adt/oid.c:318 #, c-format msgid "invalid oidvector data" msgstr "不正なoidvectorデータ" -#: utils/adt/oracle_compat.c:972 +#: utils/adt/oracle_compat.c:981 #, c-format msgid "requested character too large" msgstr "要求された文字が大きすぎます" -#: utils/adt/oracle_compat.c:1022 utils/adt/oracle_compat.c:1084 +#: utils/adt/oracle_compat.c:1031 utils/adt/oracle_compat.c:1093 #, c-format msgid "requested character too large for encoding: %d" msgstr "要求された文字は符号化するには大きすぎます: %d" -#: utils/adt/oracle_compat.c:1063 +#: utils/adt/oracle_compat.c:1072 #, c-format msgid "requested character not valid for encoding: %d" msgstr "要求された文字は不正なため符号化することができません: %d" -#: utils/adt/oracle_compat.c:1077 +#: utils/adt/oracle_compat.c:1086 #, c-format msgid "null character not permitted" msgstr "NULL文字は許可されません" @@ -23529,97 +23583,97 @@ msgstr "NULL文字は許可されません" msgid "percentile value %g is not between 0 and 1" msgstr "百分位数の値%gが0と1の間ではありません" -#: utils/adt/pg_locale.c:1228 +#: utils/adt/pg_locale.c:1229 #, c-format msgid "Apply system library package updates." msgstr "システムライブラリの更新を適用してください。" -#: utils/adt/pg_locale.c:1442 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "could not create locale \"%s\": %m" msgstr "ロケール\"%s\"を作成できませんでした: %m" -#: utils/adt/pg_locale.c:1445 +#: utils/adt/pg_locale.c:1448 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "オペレーティングシステムはロケール名\"%s\"のロケールデータを見つけられませんでした。" -#: utils/adt/pg_locale.c:1547 +#: utils/adt/pg_locale.c:1550 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "このプラットフォームでは値が異なるcollateとctypeによる照合順序をサポートしていません" -#: utils/adt/pg_locale.c:1556 +#: utils/adt/pg_locale.c:1559 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "照合順序プロバイダLIBCはこのプラットフォームではサポートされていません" -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "ICUは値が異なるcollateとctypeによる照合順序をサポートしていません" -#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 utils/adt/pg_locale.c:1940 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1664 utils/adt/pg_locale.c:1943 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "ロケール\"%s\"の照合器をオープンできませんでした: %s" -#: utils/adt/pg_locale.c:1588 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "このビルドではICUはサポートされていません" -#: utils/adt/pg_locale.c:1609 +#: utils/adt/pg_locale.c:1612 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "照合順序\"%s\"には実際のバージョンがありませんが、バージョンが指定されています" -#: utils/adt/pg_locale.c:1616 +#: utils/adt/pg_locale.c:1619 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "照合順序\"%s\"でバージョンの不一致が起きています" -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1621 #, 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:1621 +#: utils/adt/pg_locale.c:1624 #, 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:1692 +#: utils/adt/pg_locale.c:1695 #, c-format msgid "could not load locale \"%s\"" msgstr "ロケール\"%s\"を読み込みできませんでした" -#: utils/adt/pg_locale.c:1717 +#: utils/adt/pg_locale.c:1720 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "ロケール\"%s\"に対応する照合順序バージョンを取得できませんでした: エラーコード %lu" -#: utils/adt/pg_locale.c:1755 +#: utils/adt/pg_locale.c:1758 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "エンコーディング\"%s\"はICUではサポートされていません" -#: utils/adt/pg_locale.c:1762 +#: utils/adt/pg_locale.c:1765 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "エンコーディング\"%s\"のICU変換器をオープンできませんでした: %s" -#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 +#: utils/adt/pg_locale.c:1796 utils/adt/pg_locale.c:1805 utils/adt/pg_locale.c:1834 utils/adt/pg_locale.c:1844 #, c-format msgid "%s failed: %s" msgstr "%s が失敗しました: %s" -#: utils/adt/pg_locale.c:2113 +#: utils/adt/pg_locale.c:2116 #, c-format msgid "invalid multibyte character for locale" msgstr "ロケールに対する不正なマルチバイト文字" -#: utils/adt/pg_locale.c:2114 +#: utils/adt/pg_locale.c:2117 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "おそらくサーバーのLC_CTYPEロケールはデータベースの符号化方式と互換性がありません" @@ -23724,7 +23778,7 @@ msgstr "カンマが多すぎます" msgid "Junk after right parenthesis or bracket." msgstr "右括弧または右角括弧の後にゴミがあります" -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1614 utils/adt/varlena.c:4557 #, c-format msgid "regular expression failed: %s" msgstr "正規表現が失敗しました: %s" @@ -23734,23 +23788,23 @@ msgstr "正規表現が失敗しました: %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "不正な正規表現オプション: \"%.*s\"" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:850 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "SQL正規表現はエスケープされたダブルクオートを2つより多く含むことはできません" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1052 utils/adt/regexp.c:1434 utils/adt/regexp.c:1489 #, c-format msgid "%s does not support the \"global\" option" msgstr "%sは\"global\"オプションをサポートしません" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1054 #, c-format msgid "Use the regexp_matches function instead." msgstr "代わりにregexp_matchesを使ってください。" -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1236 #, c-format msgid "too many regular expression matches" msgstr "正規表現のマッチが多過ぎます" @@ -23765,7 +23819,7 @@ msgstr "\"%s\"という名前の関数が複数あります" msgid "more than one operator named %s" msgstr "%sという名前の演算子が複数あります" -#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 +#: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "引数が多すぎます" @@ -23775,7 +23829,7 @@ msgstr "引数が多すぎます" msgid "Provide two argument types for operator." msgstr "演算子では2つの引数型を指定してください" -#: utils/adt/regproc.c:1639 utils/adt/regproc.c:1663 utils/adt/regproc.c:1764 utils/adt/regproc.c:1788 utils/adt/regproc.c:1890 utils/adt/regproc.c:1895 utils/adt/varlena.c:3698 utils/adt/varlena.c:3703 +#: utils/adt/regproc.c:1639 utils/adt/regproc.c:1663 utils/adt/regproc.c:1764 utils/adt/regproc.c:1788 utils/adt/regproc.c:1890 utils/adt/regproc.c:1895 utils/adt/varlena.c:3706 utils/adt/varlena.c:3711 #, c-format msgid "invalid name syntax" msgstr "不正な名前の構文" @@ -24156,12 +24210,12 @@ msgstr "重み配列にはNULL値を含めてはいけません" msgid "weight out of range" msgstr "重みが範囲外です" -#: utils/adt/tsvector.c:215 +#: utils/adt/tsvector.c:212 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "単語が長すぎます(%ldバイト、最大は%ldバイト)" -#: utils/adt/tsvector.c:222 +#: utils/adt/tsvector.c:219 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "tsベクターのための文字列が長すぎます(%ldバイト、最大は%ldバイト)" @@ -24186,37 +24240,37 @@ msgstr "識別不能な重み付け: \"%c\"" msgid "ts_stat query must return one tsvector column" msgstr "ts_statは1つのtsvector列のみを返さなければなりません" -#: utils/adt/tsvector_op.c:2618 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "tsvector列\"%s\"は存在しません" -#: utils/adt/tsvector_op.c:2625 +#: utils/adt/tsvector_op.c:2629 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "値\"%s\"は型tsvectorではありません" -#: utils/adt/tsvector_op.c:2637 +#: utils/adt/tsvector_op.c:2641 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "設定列\"%s\"は存在しません" -#: utils/adt/tsvector_op.c:2643 +#: utils/adt/tsvector_op.c:2647 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "%s列はregconfig型ではありません" -#: utils/adt/tsvector_op.c:2650 +#: utils/adt/tsvector_op.c:2654 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "設定列\"%s\"をNULLにすることはできません" -#: utils/adt/tsvector_op.c:2663 +#: utils/adt/tsvector_op.c:2667 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "テキスト検索設定名称\"%s\"はスキーマ修飾しなければなりません" -#: utils/adt/tsvector_op.c:2688 +#: utils/adt/tsvector_op.c:2692 #, c-format msgid "column \"%s\" is not of a character type" msgstr "列\"%s\"は文字型ではありません" @@ -24226,12 +24280,12 @@ msgstr "列\"%s\"は文字型ではありません" msgid "syntax error in tsvector: \"%s\"" msgstr "tsvector内の構文エラー: %s" -#: utils/adt/tsvector_parser.c:200 +#: utils/adt/tsvector_parser.c:199 #, c-format msgid "there is no escaped character: \"%s\"" msgstr "エスケープ文字がありません: \"%s\"" -#: utils/adt/tsvector_parser.c:318 +#: utils/adt/tsvector_parser.c:313 #, c-format msgid "wrong position info in tsvector: \"%s\"" msgstr "tsvector内の位置情報が間違っています: \"%s\"" @@ -24281,7 +24335,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:890 utils/adt/varlena.c:953 utils/adt/varlena.c:1110 utils/adt/varlena.c:3340 utils/adt/varlena.c:3418 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:893 utils/adt/varlena.c:957 utils/adt/varlena.c:1115 utils/adt/varlena.c:3348 utils/adt/varlena.c:3426 #, c-format msgid "negative substring length not allowed" msgstr "負の部分文字列長は指定できません" @@ -24306,7 +24360,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:3622 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3630 #, c-format msgid "new bit must be 0 or 1" msgstr "新しいビットは0か1でなければなりません" @@ -24321,107 +24375,107 @@ msgstr "値は型character(%d)に対して長すぎます" msgid "value too long for type character varying(%d)" msgstr "値は型character varying(%d)に対して長すぎます" -#: utils/adt/varchar.c:732 utils/adt/varlena.c:1516 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1524 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "文字列比較で使用する照合順序を特定できませんでした" -#: utils/adt/varlena.c:1209 utils/adt/varlena.c:1956 +#: utils/adt/varlena.c:1214 utils/adt/varlena.c:1964 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "非決定的照合順序は部分文字列探索ではサポートされません" -#: utils/adt/varlena.c:1615 utils/adt/varlena.c:1628 +#: utils/adt/varlena.c:1623 utils/adt/varlena.c:1636 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "文字列をUTF-16に変換できませんでした: エラーコード %lu" -#: utils/adt/varlena.c:1643 +#: utils/adt/varlena.c:1651 #, c-format msgid "could not compare Unicode strings: %m" msgstr "Unicode文字列を比較できませんでした: %m" -#: utils/adt/varlena.c:1694 utils/adt/varlena.c:2406 +#: utils/adt/varlena.c:1702 utils/adt/varlena.c:2414 #, c-format msgid "collation failed: %s" msgstr "照合順序による比較に失敗しました: %s" -#: utils/adt/varlena.c:2613 +#: utils/adt/varlena.c:2621 #, c-format msgid "sort key generation failed: %s" msgstr "ソートキーの生成に失敗しました: %s" -#: utils/adt/varlena.c:3506 utils/adt/varlena.c:3573 +#: utils/adt/varlena.c:3514 utils/adt/varlena.c:3581 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "インデックス%dは有効範囲0..%dの間にありません" -#: utils/adt/varlena.c:3537 utils/adt/varlena.c:3609 +#: utils/adt/varlena.c:3545 utils/adt/varlena.c:3617 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "インデックス%lldは有効範囲0..%lldの間にありません" -#: utils/adt/varlena.c:4645 +#: utils/adt/varlena.c:4653 #, c-format msgid "field position must not be zero" msgstr "フィールド位置に0は指定できません" -#: utils/adt/varlena.c:5686 +#: utils/adt/varlena.c:5697 #, c-format msgid "unterminated format() type specifier" msgstr "終端されていないformat()型指定子" -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5821 utils/adt/varlena.c:5942 +#: utils/adt/varlena.c:5698 utils/adt/varlena.c:5832 utils/adt/varlena.c:5953 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "一つの\"%%\"には\"%%%%\"を使ってください。" -#: utils/adt/varlena.c:5819 utils/adt/varlena.c:5940 +#: utils/adt/varlena.c:5830 utils/adt/varlena.c:5951 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "認識できない format() の型指定子\"%.*s\"" -#: utils/adt/varlena.c:5832 utils/adt/varlena.c:5889 +#: utils/adt/varlena.c:5843 utils/adt/varlena.c:5900 #, c-format msgid "too few arguments for format()" msgstr "format()の引数が少なすぎます" -#: utils/adt/varlena.c:5985 utils/adt/varlena.c:6167 +#: utils/adt/varlena.c:5996 utils/adt/varlena.c:6178 #, c-format msgid "number is out of range" msgstr "数値が範囲外です" -#: utils/adt/varlena.c:6048 utils/adt/varlena.c:6076 +#: utils/adt/varlena.c:6059 utils/adt/varlena.c:6087 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "書式は引数0を指定していますが、引数が1から始まっています" -#: utils/adt/varlena.c:6069 +#: utils/adt/varlena.c:6080 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "width引数の位置は\"$\"で終わらなければなりません" -#: utils/adt/varlena.c:6114 +#: utils/adt/varlena.c:6125 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "nullはSQL識別子として書式付けできません" -#: utils/adt/varlena.c:6240 +#: utils/adt/varlena.c:6251 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "Unicode正規化はサーバーエンコーディングがUTF-8の場合にのみ実行されます" -#: utils/adt/varlena.c:6253 +#: utils/adt/varlena.c:6264 #, c-format msgid "invalid normalization form: %s" msgstr "不正な正規化形式: %s" -#: utils/adt/varlena.c:6456 utils/adt/varlena.c:6491 utils/adt/varlena.c:6526 +#: utils/adt/varlena.c:6467 utils/adt/varlena.c:6502 utils/adt/varlena.c:6537 #, c-format msgid "invalid Unicode code point: %04X" msgstr "不正なUnicodeコードポイント: %04X" -#: utils/adt/varlena.c:6556 +#: utils/adt/varlena.c:6567 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "Unicodeエスケープは \\XXXX, \\+XXXXXX, \\uXXXX, または \\UXXXXXXXX である必要があります。" @@ -24456,7 +24510,7 @@ msgstr "非サポートのXML機能です。" msgid "This functionality requires the server to be built with libxml support." msgstr "この機能はlibxmlサポートを付けたサーバーが必要です。" -#: utils/adt/xml.c:253 utils/mb/mbutils.c:627 +#: utils/adt/xml.c:253 utils/mb/mbutils.c:636 #, c-format msgid "invalid encoding name \"%s\"" msgstr "不正な符号化方式名\"%s\"" @@ -24511,96 +24565,96 @@ msgstr "XMLエラーハンドラを設定できませんでした" 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:1985 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "文字の値が有効ではありません" -#: utils/adt/xml.c:1988 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "スペースをあけてください。" -#: utils/adt/xml.c:1991 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone には 'yes' か 'no' だけが有効です。" -#: utils/adt/xml.c:1994 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "不正な形式の宣言: バージョンがありません。" -#: utils/adt/xml.c:1997 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "テキスト宣言にエンコーディングの指定がありません。" -#: utils/adt/xml.c:2000 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "XML 宣言のパース中: '>?' が必要です。" -#: utils/adt/xml.c:2003 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "認識できないlibxml のエラーコード: %d" -#: utils/adt/xml.c:2260 +#: utils/adt/xml.c:2253 #, c-format msgid "XML does not support infinite date values." msgstr "XMLはデータ値として無限をサポートしません。" -#: utils/adt/xml.c:2282 utils/adt/xml.c:2309 +#: utils/adt/xml.c:2275 utils/adt/xml.c:2302 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XMLタイムスタンプ値としては無限をサポートしません。" -#: utils/adt/xml.c:2725 +#: utils/adt/xml.c:2718 #, c-format msgid "invalid query" msgstr "不正な無効な問い合わせ" -#: utils/adt/xml.c:2817 +#: utils/adt/xml.c:2810 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "ポータル\"%s\"はタプルを返却しません" -#: utils/adt/xml.c:4069 +#: utils/adt/xml.c:4062 #, c-format msgid "invalid array for XML namespace mapping" msgstr "XML名前空間マッピングに対する不正な配列" -#: utils/adt/xml.c:4070 +#: utils/adt/xml.c:4063 #, 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:4094 +#: utils/adt/xml.c:4087 #, c-format msgid "empty XPath expression" msgstr "空のXPath式" -#: utils/adt/xml.c:4146 +#: utils/adt/xml.c:4139 #, c-format msgid "neither namespace name nor URI may be null" msgstr "名前空間名もURIもnullにはできません" -#: utils/adt/xml.c:4153 +#: utils/adt/xml.c:4146 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "\"%s\"という名前のXML名前空間およびURI\"%s\"を登録できませんでした" -#: utils/adt/xml.c:4510 +#: utils/adt/xml.c:4503 #, c-format msgid "DEFAULT namespace is not supported" msgstr "デフォルト名前空間は実装されていません" -#: utils/adt/xml.c:4539 +#: utils/adt/xml.c:4532 #, c-format msgid "row path filter must not be empty string" msgstr "行パスフィルタは空文字列であってはなりません" -#: utils/adt/xml.c:4573 +#: utils/adt/xml.c:4566 #, c-format msgid "column path filter must not be empty string" msgstr "列パスフィルタ空文字列であってはなりません" -#: utils/adt/xml.c:4720 +#: utils/adt/xml.c:4713 #, c-format msgid "more than one value returned by column XPath expression" msgstr "列XPath式が2つ以上の値を返却しました" @@ -24635,17 +24689,17 @@ msgstr "アクセスメソッド %2$s の演算子クラス\"%1$s\"は%4$s型に msgid "cached plan must not change result type" msgstr "キャッシュした実行計画は結果型を変更してはなりません" -#: utils/cache/relcache.c:6328 +#: utils/cache/relcache.c:6344 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "リレーションキャッシュ初期化ファイル\"%sを作成できません: %m" -#: utils/cache/relcache.c:6330 +#: utils/cache/relcache.c:6346 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "とりあえず続行しますが、何かがおかしいです。" -#: utils/cache/relcache.c:6652 +#: utils/cache/relcache.c:6668 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "キャッシュファイル\"%s\"を削除できませんでした: %m" @@ -25251,47 +25305,47 @@ msgstr "ISO8859文字セットに対する符号化方式ID %dは想定外です msgid "unexpected encoding ID %d for WIN character sets" msgstr "WIN文字セットに対する符号化方式ID %dは想定外です<" -#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 +#: utils/mb/mbutils.c:306 utils/mb/mbutils.c:909 #, c-format msgid "conversion between %s and %s is not supported" msgstr "%sと%s間の変換はサポートされていません" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:411 utils/mb/mbutils.c:439 utils/mb/mbutils.c:824 utils/mb/mbutils.c:851 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "%dバイトの文字列は符号化変換では長すぎます。" -#: utils/mb/mbutils.c:568 +#: utils/mb/mbutils.c:577 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "不正な変換元符号化方式名: \"%s\"" -#: utils/mb/mbutils.c:573 +#: utils/mb/mbutils.c:582 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "不正な変換先符号化方式名: \"%s\"" -#: utils/mb/mbutils.c:713 +#: utils/mb/mbutils.c:722 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "符号化方式\"%s\"に対する不正なバイト値: 0x%02x" -#: utils/mb/mbutils.c:877 +#: utils/mb/mbutils.c:886 #, c-format msgid "invalid Unicode code point" msgstr "不正なUnicodeコードポイント" -#: utils/mb/mbutils.c:1146 +#: utils/mb/mbutils.c:1270 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codesetが失敗しました" -#: utils/mb/mbutils.c:1667 +#: utils/mb/mbutils.c:1798 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "符号化方式\"%s\"に対する不正なバイト列です: %s" -#: utils/mb/mbutils.c:1700 +#: utils/mb/mbutils.c:1845 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "符号化方式\"%2$s\"においてバイト列%1$sである文字は符号化方式\"%3$s\"で等価な文字を持ちません" @@ -27540,12 +27594,12 @@ msgstr "メモリコンテキスト\"%s\"の作成時に失敗しました" msgid "could not attach to dynamic shared area" msgstr "動的共有領域に接続できませんでした" -#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1120 utils/mmgr/mcxt.c:1156 utils/mmgr/mcxt.c:1208 utils/mmgr/mcxt.c:1243 utils/mmgr/mcxt.c:1278 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:928 utils/mmgr/mcxt.c:966 utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1112 utils/mmgr/mcxt.c:1143 utils/mmgr/mcxt.c:1179 utils/mmgr/mcxt.c:1231 utils/mmgr/mcxt.c:1266 utils/mmgr/mcxt.c:1301 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "メモリコンテクスト\"%2$s\"でサイズ%1$zuの要求が失敗しました。" -#: utils/mmgr/mcxt.c:1052 +#: utils/mmgr/mcxt.c:1067 #, c-format msgid "logging memory contexts of PID %d" msgstr "PID %d のメモリコンテクストをログ出力しています" @@ -27595,22 +27649,22 @@ msgstr "一時ファイルのブロック%ldへのシークに失敗しました msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" msgstr "一時ファイルのブロック%1$ldの読み取りに失敗しました: %3$zuバイト中%2$zuバイトのみ読み取りました" -#: utils/sort/sharedtuplestore.c:431 utils/sort/sharedtuplestore.c:440 utils/sort/sharedtuplestore.c:463 utils/sort/sharedtuplestore.c:480 utils/sort/sharedtuplestore.c:497 +#: utils/sort/sharedtuplestore.c:432 utils/sort/sharedtuplestore.c:441 utils/sort/sharedtuplestore.c:464 utils/sort/sharedtuplestore.c:481 utils/sort/sharedtuplestore.c:498 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "タプルストア共有一時ファイルからの読み込みに失敗しました" -#: utils/sort/sharedtuplestore.c:486 +#: utils/sort/sharedtuplestore.c:487 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "タプルストア共有一時ファイル内に予期しないチャンクがありました" -#: utils/sort/sharedtuplestore.c:570 +#: utils/sort/sharedtuplestore.c:571 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "共有タプルストア一時ファイルのブロック%uへのシークに失敗しまし" -#: utils/sort/sharedtuplestore.c:577 +#: utils/sort/sharedtuplestore.c:578 #, c-format msgid "could not read from shared tuplestore temporary file: read only %zu of %zu bytes" msgstr "共有タプルストア一時ファイルからの読み込みに失敗しました: %2$zuバイト中%1$zuバイトのみ読み取りました" @@ -27690,5 +27744,8 @@ msgstr "読み取りのみのシリアライザブルトランザクションで msgid "cannot import a snapshot from a different database" msgstr "異なるデータベースからのスナップショットを読み込むことはできません" -#~ msgid "Please report this to <%s>." -#~ msgstr "これを<%s>まで報告してください。" +#~ msgid "cannot create statistics on the specified relation" +#~ msgstr "指定されたリレーションでは統計情報を生成できません" + +#~ msgid "replication origin \"%s\" already exists" +#~ msgstr "レプリケーション起源\"%s\"はすでに存在します" diff --git a/src/backend/po/ru.po b/src/backend/po/ru.po index 3044a238b50..b48a0412d83 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-2025. +# SPDX-FileCopyrightText: 2012-2025, 2026 Alexander Lakhin # 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: 2025-02-08 07:45+0200\n" -"PO-Revision-Date: 2025-02-08 08:50+0200\n" +"POT-Creation-Date: 2026-02-21 05:20+0200\n" +"PO-Revision-Date: 2026-02-21 05:29+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -29,24 +29,24 @@ msgid "not recorded" msgstr "не записано" #: ../common/controldata_utils.c:78 ../common/controldata_utils.c:83 -#: commands/copyfrom.c:1526 commands/extension.c:3482 utils/adt/genfile.c:128 +#: commands/copyfrom.c:1526 commands/extension.c:3612 utils/adt/genfile.c:128 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1329 access/transam/xlog.c:3576 -#: access/transam/xlog.c:4817 access/transam/xlog.c:11662 -#: access/transam/xlog.c:11675 access/transam/xlog.c:12130 -#: access/transam/xlog.c:12210 access/transam/xlog.c:12247 -#: access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 -#: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 +#: access/transam/twophase.c:1329 access/transam/xlog.c:3594 +#: access/transam/xlog.c:4843 access/transam/xlog.c:11771 +#: access/transam/xlog.c:11784 access/transam/xlog.c:12239 +#: access/transam/xlog.c:12319 access/transam/xlog.c:12356 +#: access/transam/xlog.c:12416 access/transam/xlogfuncs.c:703 +#: access/transam/xlogfuncs.c:722 commands/extension.c:3622 libpq/hba.c:534 #: replication/basebackup.c:2016 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 -#: replication/logical/snapbuild.c:1872 replication/logical/snapbuild.c:1914 -#: replication/logical/snapbuild.c:1941 replication/slot.c:1727 -#: replication/slot.c:1768 replication/walsender.c:545 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 +#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1961 +#: replication/logical/snapbuild.c:1988 replication/slot.c:1794 +#: replication/slot.c:1835 replication/walsender.c:559 #: storage/file/buffile.c:445 storage/file/copydir.c:195 #: utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format @@ -54,11 +54,11 @@ msgid "could not read file \"%s\": %m" msgstr "не удалось прочитать файл \"%s\": %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3581 access/transam/xlog.c:4822 +#: access/transam/xlog.c:3599 access/transam/xlog.c:4848 #: replication/basebackup.c:2020 replication/logical/origin.c:734 -#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 -#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 -#: replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 +#: replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 +#: replication/slot.c:1798 replication/slot.c:1839 replication/walsender.c:564 #: utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -70,16 +70,16 @@ msgstr "не удалось прочитать файл \"%s\" (прочитан #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:512 access/transam/twophase.c:1341 #: access/transam/twophase.c:1753 access/transam/xlog.c:3445 -#: access/transam/xlog.c:3616 access/transam/xlog.c:3621 -#: access/transam/xlog.c:3946 access/transam/xlog.c:4787 -#: access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 +#: access/transam/xlog.c:3634 access/transam/xlog.c:3639 +#: access/transam/xlog.c:3958 access/transam/xlog.c:4813 +#: access/transam/xlog.c:5741 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 -#: replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 -#: replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 -#: storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 +#: replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 +#: replication/slot.c:1683 replication/slot.c:1846 replication/walsender.c:574 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:735 +#: storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 #: utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" @@ -108,20 +108,20 @@ msgstr "" #: ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 -#: access/transam/xlog.c:3331 access/transam/xlog.c:3487 -#: access/transam/xlog.c:3531 access/transam/xlog.c:3726 -#: access/transam/xlog.c:3811 access/transam/xlog.c:3914 -#: access/transam/xlog.c:4807 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3332 access/transam/xlog.c:3511 +#: access/transam/xlog.c:3549 access/transam/xlog.c:3737 +#: access/transam/xlog.c:3823 access/transam/xlog.c:3926 +#: access/transam/xlog.c:4833 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3612 -#: replication/logical/reorderbuffer.c:4163 -#: replication/logical/reorderbuffer.c:4939 -#: replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1699 replication/walsender.c:518 -#: replication/walsender.c:2563 storage/file/copydir.c:161 -#: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 -#: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 +#: replication/logical/reorderbuffer.c:3743 +#: replication/logical/reorderbuffer.c:4294 +#: replication/logical/reorderbuffer.c:5070 +#: replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 +#: replication/slot.c:1766 replication/walsender.c:532 +#: replication/walsender.c:2581 storage/file/copydir.c:161 +#: storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 +#: storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 #: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 #: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 @@ -131,9 +131,9 @@ msgstr "не удалось открыть файл \"%s\": %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 #: access/transam/twophase.c:1726 access/transam/twophase.c:1735 -#: access/transam/xlog.c:11419 access/transam/xlog.c:11457 -#: access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 +#: access/transam/xlog.c:11528 access/transam/xlog.c:11566 +#: access/transam/xlog.c:11979 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5688 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" @@ -144,11 +144,11 @@ msgstr "не удалось записать файл \"%s\": %m" #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 #: access/transam/timeline.c:506 access/transam/twophase.c:1747 -#: access/transam/xlog.c:3438 access/transam/xlog.c:3610 -#: access/transam/xlog.c:4780 access/transam/xlog.c:10902 -#: access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 -#: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: access/transam/xlog.c:3438 access/transam/xlog.c:3628 +#: access/transam/xlog.c:4806 access/transam/xlog.c:11011 +#: access/transam/xlog.c:11052 replication/logical/snapbuild.c:1821 +#: replication/slot.c:1667 replication/slot.c:1776 storage/file/fd.c:727 +#: storage/file/fd.c:3623 storage/smgr/md.c:959 storage/smgr/md.c:1000 #: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" @@ -157,32 +157,32 @@ msgstr "не удалось синхронизировать с ФС файл \" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 #: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 -#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 -#: lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2552 -#: postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 -#: postmaster/postmaster.c:5975 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6721 +#: lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 +#: libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 +#: postmaster/bgworker.c:349 postmaster/bgworker.c:948 +#: postmaster/postmaster.c:2554 postmaster/postmaster.c:4211 +#: postmaster/postmaster.c:5613 postmaster/postmaster.c:5977 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 -#: replication/logical/logical.c:206 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 -#: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 +#: replication/logical/logical.c:206 replication/walsender.c:606 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 +#: storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: tcop/postgres.c:3655 utils/adt/cryptohashfuncs.c:46 +#: tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 #: utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 #: utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 -#: utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 +#: utils/adt/pg_locale.c:451 utils/adt/pg_locale.c:615 utils/adt/regexp.c:223 #: utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 -#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5061 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:410 utils/mb/mbutils.c:438 +#: utils/mb/mbutils.c:823 utils/mb/mbutils.c:850 utils/misc/guc.c:5061 #: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 -#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 -#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 -#: utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:927 utils/mmgr/mcxt.c:965 +#: utils/mmgr/mcxt.c:1003 utils/mmgr/mcxt.c:1111 utils/mmgr/mcxt.c:1142 +#: utils/mmgr/mcxt.c:1178 utils/mmgr/mcxt.c:1230 utils/mmgr/mcxt.c:1265 +#: utils/mmgr/mcxt.c:1300 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "нехватка памяти" @@ -212,7 +212,7 @@ msgstr "не удалось найти запускаемый файл \"%s\"" msgid "could not change directory to \"%s\": %m" msgstr "не удалось перейти в каталог \"%s\": %m" -#: ../common/exec.c:299 access/transam/xlog.c:11293 +#: ../common/exec.c:299 access/transam/xlog.c:11402 #: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -228,8 +228,8 @@ msgstr "ошибка в %s(): %m" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 #: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 -#: ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 -#: utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../port/path.c:764 utils/misc/ps_status.c:210 utils/misc/ps_status.c:218 +#: utils/misc/ps_status.c:248 utils/misc/ps_status.c:256 #, c-format msgid "out of memory\n" msgstr "нехватка памяти\n" @@ -241,15 +241,15 @@ msgstr "попытка дублирования нулевого указате #: ../common/file_utils.c:86 ../common/file_utils.c:446 #: ../common/file_utils.c:450 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11395 access/transam/xlog.c:11433 -#: access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11504 access/transam/xlog.c:11542 +#: access/transam/xlog.c:11759 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 -#: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 +#: commands/copyto.c:730 commands/extension.c:3601 commands/tablespace.c:805 #: commands/tablespace.c:894 postmaster/pgarch.c:696 #: replication/basebackup.c:439 replication/basebackup.c:622 -#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 -#: storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1700 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 +#: storage/file/fd.c:1948 storage/file/fd.c:3148 storage/file/fd.c:3351 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 #: utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 #: guc-file.l:1062 @@ -258,95 +258,95 @@ msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" #: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1520 -#: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 +#: commands/tablespace.c:739 postmaster/postmaster.c:1522 +#: storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" #: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1793 -#: replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 -#: storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 +#: replication/slot.c:672 replication/slot.c:1550 replication/slot.c:1699 +#: storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не удалось переименовать файл \"%s\" в \"%s\": %m" -#: ../common/jsonapi.c:1084 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Неверная спецпоследовательность: \"\\%s\"." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: ../common/jsonapi.c:1090 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." -#: ../common/jsonapi.c:1099 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Ожидалось \":\", но обнаружено \"%s\"." -#: ../common/jsonapi.c:1102 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." -#: ../common/jsonapi.c:1105 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: ../common/jsonapi.c:1107 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." -#: ../common/jsonapi.c:1110 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." -#: ../common/jsonapi.c:1113 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Ожидалась строка, но обнаружено \"%s\"." -#: ../common/jsonapi.c:1116 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "Ошибочный элемент \"%s\"." -#: ../common/jsonapi.c:1119 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: ../common/jsonapi.c:1121 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: ../common/jsonapi.c:1124 +#: ../common/jsonapi.c:1127 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -354,13 +354,13 @@ msgstr "" "Спецкоды Unicode для значений выше 007F можно использовать только с " "кодировкой UTF8." -#: ../common/jsonapi.c:1126 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: ../common/jsonapi.c:1128 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:531 jsonpath_scan.l:541 #: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -396,7 +396,7 @@ msgstr "неверное имя слоя" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Допустимые имена слоёв: \"main\", \"fsm\", \"vm\" и \"init\"." -#: ../common/restricted_token.c:64 libpq/auth.c:1519 libpq/auth.c:2551 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "не удалось загрузить библиотеку \"%s\" (код ошибки: %lu)" @@ -470,7 +470,7 @@ msgstr "" msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../common/username.c:45 libpq/auth.c:2051 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "пользователь не существует" @@ -604,7 +604,7 @@ msgstr "" "записан" #: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11064 access/transam/xlog.c:11601 +#: access/transam/xlog.c:11173 access/transam/xlog.c:11710 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -639,8 +639,8 @@ msgstr "не удалось открыть родительскую таблиц msgid "index \"%s\" is not valid" msgstr "индекс \"%s\" - нерабочий" -#: access/brin/brin_bloom.c:753 access/brin/brin_bloom.c:795 -#: access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 +#: access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 #: statistics/dependencies.c:662 statistics/dependencies.c:715 #: statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 @@ -651,7 +651,7 @@ msgstr "значение типа %s нельзя ввести" #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 +#: access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 #: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" @@ -801,7 +801,7 @@ msgid "index row requires %zu bytes, maximum size is %zu" msgstr "строка индекса требует байт: %zu, при максимуме: %zu" #: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 -#: tcop/postgres.c:1922 +#: tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "неподдерживаемый код формата: %d" @@ -824,57 +824,62 @@ msgstr "превышен предел пользовательских типо msgid "RESET must not include values for parameters" msgstr "В RESET не должно передаваться значение параметров" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "нераспознанное пространство имён параметров \"%s\"" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "некорректное имя параметра \"%s\": имя не может содержать \"=\"" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12615 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "таблицы со свойством WITH OIDS не поддерживаются" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "нераспознанный параметр \"%s\"" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "параметр \"%s\" указан неоднократно" -#: access/common/reloptions.c:1592 +#: access/common/reloptions.c:1601 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "неверное значение для логического параметра \"%s\": %s" -#: access/common/reloptions.c:1604 +#: access/common/reloptions.c:1613 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "неверное значение для целочисленного параметра \"%s\": %s" -#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "значение %s вне допустимых пределов параметра \"%s\"" -#: access/common/reloptions.c:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Допускаются значения только от \"%d\" до \"%d\"." -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "неверное значение для численного параметра \"%s\": %s" -#: access/common/reloptions.c:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Допускаются значения только от \"%f\" до \"%f\"." -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "неверное значение для параметра-перечисления \"%s\": %s" @@ -889,7 +894,7 @@ msgstr "метод сжатия lz4 не поддерживается" msgid "This functionality requires the server to be built with lz4 support." msgstr "Для этой функциональности в сервере не хватает поддержки lz4." -#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1592 #: utils/adt/xml.c:234 #, c-format msgid "You need to rebuild PostgreSQL using %s." @@ -931,19 +936,19 @@ msgstr "обращаться к временным индексам других msgid "failed to re-find tuple within index \"%s\"" msgstr "не удалось повторно найти кортеж в индексе \"%s\"" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, 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:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Для исправления выполните REINDEX INDEX \"%s\"." #: access/gin/ginutil.c:145 executor/execExpr.c:2177 -#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 +#: utils/adt/arrayfuncs.c:4034 utils/adt/arrayfuncs.c:6704 #: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" @@ -996,7 +1001,7 @@ msgstr "" msgid "Please REINDEX it." msgstr "Пожалуйста, выполните REINDEX для него." -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "исправление неполного разделения в индексе \"%s\" (блок: %u)" @@ -1046,7 +1051,7 @@ msgstr "" "семейство операторов \"%s\" метода доступа %s содержит некорректное " "определение ORDER BY для оператора %s" -#: access/hash/hashfunc.c:278 access/hash/hashfunc.c:335 +#: access/hash/hashfunc.c:280 access/hash/hashfunc.c:337 #: utils/adt/varchar.c:993 utils/adt/varchar.c:1054 #, c-format msgid "could not determine which collation to use for string hashing" @@ -1054,13 +1059,13 @@ msgstr "" "не удалось определить, какое правило сортировки использовать для хеширования " "строк" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 +#: access/hash/hashfunc.c:281 access/hash/hashfunc.c:338 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17208 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1004 utils/adt/varchar.c:733 -#: utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1517 +#: utils/adt/varchar.c:994 utils/adt/varchar.c:1055 utils/adt/varlena.c:1563 #, c-format msgid "Use the COLLATE clause to set the collation explicitly." msgstr "Задайте правило сортировки явно в предложении COLLATE." @@ -1117,39 +1122,39 @@ msgid "" msgstr "" "в семействе операторов \"%s\" метода доступа %s нет межтипового оператора(ов)" -#: access/heap/heapam.c:2299 +#: access/heap/heapam.c:2302 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "вставлять кортежи в параллельном исполнителе нельзя" -#: access/heap/heapam.c:2770 +#: access/heap/heapam.c:2773 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "удалять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:2816 +#: access/heap/heapam.c:2819 #, c-format msgid "attempted to delete invisible tuple" msgstr "попытка удаления невидимого кортежа" -#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 +#: access/heap/heapam.c:3265 access/heap/heapam.c:6617 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "изменять кортежи во время параллельных операций нельзя" -#: access/heap/heapam.c:3449 +#: access/heap/heapam.c:3452 #, c-format msgid "attempted to update invisible tuple" msgstr "попытка изменения невидимого кортежа" -#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 -#: access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4941 access/heap/heapam.c:4979 +#: access/heap/heapam.c:5246 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "не удалось получить блокировку строки в таблице \"%s\"" -#: access/heap/heapam.c:6342 commands/trigger.c:3122 -#: executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6371 commands/trigger.c:3152 +#: executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 #, c-format msgid "" "tuple to be updated was already modified by an operation triggered by the " @@ -1179,12 +1184,12 @@ msgstr "не удалось записать в файл \"%s\" (записан #: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3545 -#: access/transam/xlog.c:4759 access/transam/xlog.c:11410 -#: access/transam/xlog.c:11448 access/transam/xlog.c:11853 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 -#: postmaster/postmaster.c:5673 replication/logical/origin.c:587 -#: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: access/transam/xlog.c:3354 access/transam/xlog.c:3563 +#: access/transam/xlog.c:4785 access/transam/xlog.c:11519 +#: access/transam/xlog.c:11557 access/transam/xlog.c:11962 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4636 +#: postmaster/postmaster.c:5675 replication/logical/origin.c:587 +#: replication/slot.c:1611 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -1197,11 +1202,11 @@ msgstr "не удалось обрезать файл \"%s\" до нужного #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3426 access/transam/xlog.c:3601 -#: access/transam/xlog.c:4771 postmaster/postmaster.c:4644 -#: postmaster/postmaster.c:4654 replication/logical/origin.c:599 +#: access/transam/xlog.c:3426 access/transam/xlog.c:3619 +#: access/transam/xlog.c:4797 postmaster/postmaster.c:4646 +#: postmaster/postmaster.c:4656 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 -#: replication/logical/snapbuild.c:1750 replication/slot.c:1586 +#: replication/logical/snapbuild.c:1797 replication/slot.c:1647 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 #: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 @@ -1213,11 +1218,11 @@ msgstr "не удалось записать в файл \"%s\": %m" #: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4432 -#: replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2111 -#: replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 -#: storage/file/fd.c:3239 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: postmaster/postmaster.c:1098 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 +#: replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 +#: replication/slot.c:1750 storage/file/fd.c:785 storage/file/fd.c:3168 +#: storage/file/fd.c:3230 storage/file/reinit.c:250 storage/ipc/dsm.c:315 #: storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 #: utils/time/snapmgr.c:1606 #, c-format @@ -1381,8 +1386,8 @@ msgstr[0] "замороженных страниц: %u.\n" msgstr[1] "замороженных страниц: %u.\n" msgstr[2] "замороженных страниц: %u.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 -#: commands/indexcmds.c:4154 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 +#: commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s." @@ -1577,8 +1582,8 @@ msgid "cannot access index \"%s\" while it is being reindexed" msgstr "индекс \"%s\" перестраивается, обращаться к нему нельзя" #: access/index/indexam.c:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16894 commands/tablecmds.c:18710 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" - это не индекс" @@ -1632,7 +1637,7 @@ msgstr "" "Причиной тому могло быть прерывание операции VACUUM в версии 9.3 или старее, " "до обновления. Этот индекс нужно перестроить (REINDEX)." -#: access/nbtree/nbtutils.c:2680 +#: access/nbtree/nbtutils.c:2685 #, c-format msgid "" "index row size %zu exceeds btree version %u maximum %zu for index \"%s\"" @@ -1640,12 +1645,12 @@ msgstr "" "размер строки индекса (%zu) больше предельного для btree версии %u размера " "(%zu) (индекс \"%s\")" -#: access/nbtree/nbtutils.c:2686 +#: access/nbtree/nbtutils.c:2691 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Строка индекса ссылается на кортеж (%u,%u) в отношении \"%s\"." -#: access/nbtree/nbtutils.c:2690 +#: access/nbtree/nbtutils.c:2695 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1702,8 +1707,8 @@ msgid "\"%s\" is an index" msgstr "\"%s\" - это индекс" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13560 -#: commands/tablecmds.c:16860 +#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 +#: commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" - это составной тип" @@ -1761,7 +1766,7 @@ msgstr "" msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Убедитесь, что в конфигурации установлен параметр \"%s\"." -#: access/transam/multixact.c:1022 +#: access/transam/multixact.c:1106 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -1770,8 +1775,8 @@ msgstr "" "база данных не принимает команды, создающие новые MultiXactId, во избежание " "потери данных из-за зацикливания в базе данных \"%s\"" -#: access/transam/multixact.c:1024 access/transam/multixact.c:1031 -#: access/transam/multixact.c:1055 access/transam/multixact.c:1064 +#: access/transam/multixact.c:1108 access/transam/multixact.c:1115 +#: access/transam/multixact.c:1139 access/transam/multixact.c:1148 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1782,7 +1787,7 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:1029 +#: access/transam/multixact.c:1113 #, c-format msgid "" "database is not accepting commands that generate new MultiXactIds to avoid " @@ -1791,7 +1796,7 @@ msgstr "" "база данных не принимает команды, создающие новые MultiXactId, во избежание " "потери данных из-за зацикливания в базе данных с OID %u" -#: access/transam/multixact.c:1050 access/transam/multixact.c:2334 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2421 #, c-format msgid "database \"%s\" must be vacuumed before %u more MultiXactId is used" msgid_plural "" @@ -1806,7 +1811,7 @@ msgstr[2] "" "база данных \"%s\" должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1059 access/transam/multixact.c:2343 +#: access/transam/multixact.c:1143 access/transam/multixact.c:2430 #, c-format msgid "" "database with OID %u must be vacuumed before %u more MultiXactId is used" @@ -1822,12 +1827,12 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, прежде чем будут использованы " "оставшиеся MultiXactId (%u)" -#: access/transam/multixact.c:1120 +#: access/transam/multixact.c:1207 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "слишком много членов мультитранзакции" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1208 #, c-format msgid "" "This command would create a multixact with %u members, but the remaining " @@ -1845,7 +1850,7 @@ msgstr[2] "" "Мультитранзакция, создаваемая этой командой, должна включать членов: %u, но " "оставшегося места хватает только для %u." -#: access/transam/multixact.c:1126 +#: access/transam/multixact.c:1213 #, c-format msgid "" "Execute a database-wide VACUUM in database with OID %u with reduced " @@ -1855,7 +1860,7 @@ msgstr "" "Выполните очистку (VACUUM) всей базы данных с OID %u, уменьшив значения " "vacuum_multixact_freeze_min_age и vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1157 +#: access/transam/multixact.c:1244 #, c-format msgid "" "database with OID %u must be vacuumed before %d more multixact member is used" @@ -1872,7 +1877,7 @@ msgstr[2] "" "база данных с OID %u должна быть очищена, пока не использованы оставшиеся " "члены мультитранзакций (%d)" -#: access/transam/multixact.c:1162 +#: access/transam/multixact.c:1249 #, c-format msgid "" "Execute a database-wide VACUUM in that database with reduced " @@ -1882,17 +1887,22 @@ msgstr "" "Выполните очистку (VACUUM) всей этой базы данных, уменьшив значения " "vacuum_multixact_freeze_min_age и vacuum_multixact_freeze_table_age." -#: access/transam/multixact.c:1301 +#: access/transam/multixact.c:1388 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u прекратил существование: видимо, произошло зацикливание" -#: access/transam/multixact.c:1307 +#: access/transam/multixact.c:1394 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ещё не был создан: видимо, произошло зацикливание" -#: access/transam/multixact.c:2339 access/transam/multixact.c:2348 +#: access/transam/multixact.c:1469 +#, c-format +msgid "MultiXact %u has invalid next offset" +msgstr "для мультитранзакции %u получено некорректное следующее смещение" + +#: access/transam/multixact.c:2426 access/transam/multixact.c:2435 #: access/transam/varsup.c:151 access/transam/varsup.c:158 #: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format @@ -1906,7 +1916,7 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2709 #, c-format msgid "" "MultiXact member wraparound protections are disabled because oldest " @@ -1915,12 +1925,12 @@ msgstr "" "Защита от зацикливания членов мультитранзакций отключена, так как старейшая " "отмеченная мультитранзакция %u не найдена на диске" -#: access/transam/multixact.c:2644 +#: access/transam/multixact.c:2731 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Защита от зацикливания мультитранзакций сейчас включена" -#: access/transam/multixact.c:3038 +#: access/transam/multixact.c:3125 #, c-format msgid "" "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" @@ -1928,7 +1938,7 @@ msgstr "" "старейшая мультитранзакция %u не найдена, новейшая мультитранзакция: %u, " "усечение пропускается" -#: access/transam/multixact.c:3056 +#: access/transam/multixact.c:3143 #, c-format msgid "" "cannot truncate up to MultiXact %u because it does not exist on disk, " @@ -1937,41 +1947,50 @@ msgstr "" "выполнить усечение до мультитранзакции %u нельзя ввиду её отсутствия на " "диске, усечение пропускается" -#: access/transam/multixact.c:3370 +#: access/transam/multixact.c:3160 +#, c-format +msgid "" +"cannot truncate up to MultiXact %u because it has invalid offset, skipping " +"truncation" +msgstr "" +"выполнить усечение до мультитранзакции %u нельзя из-за некорректного " +"смещения, усечение пропускается" + +#: access/transam/multixact.c:3489 #, c-format msgid "invalid MultiXactId: %u" msgstr "неверный MultiXactId: %u" -#: access/transam/parallel.c:737 access/transam/parallel.c:856 +#: access/transam/parallel.c:744 access/transam/parallel.c:863 #, c-format msgid "parallel worker failed to initialize" msgstr "не удалось инициализировать параллельный исполнитель" -#: access/transam/parallel.c:738 access/transam/parallel.c:857 +#: access/transam/parallel.c:745 access/transam/parallel.c:864 #, c-format msgid "More details may be available in the server log." msgstr "Дополнительная информация может быть в журнале сервера." -#: access/transam/parallel.c:918 +#: access/transam/parallel.c:925 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster завершился в процессе параллельной транзакции" -#: access/transam/parallel.c:1105 +#: access/transam/parallel.c:1112 #, c-format msgid "lost connection to parallel worker" msgstr "потеряно подключение к параллельному исполнителю" -#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 +#: access/transam/parallel.c:1178 access/transam/parallel.c:1180 msgid "parallel worker" msgstr "параллельный исполнитель" -#: access/transam/parallel.c:1326 +#: access/transam/parallel.c:1333 #, c-format msgid "could not map dynamic shared memory segment" msgstr "не удалось отобразить динамический сегмент разделяемой памяти" -#: access/transam/parallel.c:1331 +#: access/transam/parallel.c:1338 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неверное магическое число в динамическом сегменте разделяемой памяти" @@ -2183,7 +2202,7 @@ msgstr "" "вычисленная контрольная сумма (CRC) не соответствует значению, сохранённому " "в файле \"%s\"" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6722 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Не удалось разместить обработчик журнала транзакций." @@ -2325,119 +2344,119 @@ msgstr "" msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "в одной транзакции не может быть больше 2^32-2 команд" -#: access/transam/xact.c:1584 +#: access/transam/xact.c:1594 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "превышен предел числа зафиксированных подтранзакций (%d)" -#: access/transam/xact.c:2435 +#: access/transam/xact.c:2445 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "" "нельзя выполнить PREPARE для транзакции, оперирующей с временными объектами" -#: access/transam/xact.c:2445 +#: access/transam/xact.c:2455 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "нельзя выполнить PREPARE для транзакции, снимки которой экспортированы" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3416 +#: access/transam/xact.c:3426 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s не может выполняться внутри блока транзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3426 +#: access/transam/xact.c:3436 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s не может выполняться внутри подтранзакции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3436 +#: access/transam/xact.c:3446 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s нельзя выполнять в конвейере" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3446 +#: access/transam/xact.c:3456 #, c-format msgid "%s cannot be executed from a function" msgstr "%s нельзя выполнять внутри функции" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3517 access/transam/xact.c:3832 -#: access/transam/xact.c:3911 access/transam/xact.c:4034 -#: access/transam/xact.c:4185 access/transam/xact.c:4254 -#: access/transam/xact.c:4365 +#: access/transam/xact.c:3527 access/transam/xact.c:3842 +#: access/transam/xact.c:3921 access/transam/xact.c:4044 +#: access/transam/xact.c:4195 access/transam/xact.c:4264 +#: access/transam/xact.c:4375 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s может выполняться только внутри блоков транзакций" -#: access/transam/xact.c:3718 +#: access/transam/xact.c:3728 #, c-format msgid "there is already a transaction in progress" msgstr "транзакция уже выполняется" -#: access/transam/xact.c:3837 access/transam/xact.c:3916 -#: access/transam/xact.c:4039 +#: access/transam/xact.c:3847 access/transam/xact.c:3926 +#: access/transam/xact.c:4049 #, c-format msgid "there is no transaction in progress" msgstr "нет незавершённой транзакции" -#: access/transam/xact.c:3927 +#: access/transam/xact.c:3937 #, c-format msgid "cannot commit during a parallel operation" msgstr "фиксировать транзакции во время параллельных операций нельзя" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4060 #, c-format msgid "cannot abort during a parallel operation" msgstr "прерывание во время параллельных операций невозможно" -#: access/transam/xact.c:4149 +#: access/transam/xact.c:4159 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "определять точки сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4236 +#: access/transam/xact.c:4246 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "высвобождать точки сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4246 access/transam/xact.c:4297 -#: access/transam/xact.c:4357 access/transam/xact.c:4406 +#: access/transam/xact.c:4256 access/transam/xact.c:4307 +#: access/transam/xact.c:4367 access/transam/xact.c:4416 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "точка сохранения \"%s\" не существует" -#: access/transam/xact.c:4303 access/transam/xact.c:4412 +#: access/transam/xact.c:4313 access/transam/xact.c:4422 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "" "точка сохранения \"%s\" на текущем уровне точек сохранения не существует" -#: access/transam/xact.c:4345 +#: access/transam/xact.c:4355 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "откатиться к точке сохранения во время параллельных операций нельзя" -#: access/transam/xact.c:4473 +#: access/transam/xact.c:4483 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "запускать подтранзакции во время параллельных операций нельзя" -#: access/transam/xact.c:4541 +#: access/transam/xact.c:4551 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "фиксировать подтранзакции во время параллельных операций нельзя" -#: access/transam/xact.c:5188 +#: access/transam/xact.c:5198 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "в одной транзакции не может быть больше 2^32-1 подтранзакций" -#: access/transam/xlog.c:1839 +#: access/transam/xlog.c:1851 #, c-format msgid "" "request to flush past end of generated WAL; request %X/%X, current position " @@ -2446,58 +2465,49 @@ msgstr "" "запрос на сброс данных за концом сгенерированного WAL; запрошена позиция %X/" "%X, текущая позиция %X/%X" -#: access/transam/xlog.c:2612 +#: access/transam/xlog.c:2622 #, 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:3489 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "" -"This is known to fail occasionally during archive recovery, where it is " -"harmless." -msgstr "" -"Это известная и безвредная ошибка, иногда возникающая при восстановлении " -"архива." - -#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 -#: replication/walsender.c:2557 +#: access/transam/xlog.c:4039 access/transam/xlogutils.c:798 +#: replication/walsender.c:2575 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "запрошенный сегмент WAL %s уже удалён" -#: access/transam/xlog.c:4289 +#: access/transam/xlog.c:4315 #, c-format msgid "could not rename file \"%s\": %m" msgstr "не удалось переименовать файл \"%s\": %m" -#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 +#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "требуемый каталог WAL \"%s\" не существует" -#: access/transam/xlog.c:4347 +#: access/transam/xlog.c:4373 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "создаётся отсутствующий каталог WAL \"%s\"" -#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4376 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "не удалось создать отсутствующий каталог \"%s\": %m" -#: access/transam/xlog.c:4472 +#: access/transam/xlog.c:4498 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "неожиданный ID линии времени %u в сегменте журнала %s, смещение %u" -#: access/transam/xlog.c:4610 +#: access/transam/xlog.c:4636 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "" "новая линия времени %u не является ответвлением линии времени системы БД %u" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4650 #, c-format msgid "" "new timeline %u forked off current database system timeline %u before " @@ -2506,29 +2516,29 @@ msgstr "" "новая линия времени %u ответвилась от текущей линии времени базы данных %u " "до текущей точки восстановления %X/%X" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4669 #, c-format msgid "new target timeline is %u" msgstr "новая целевая линия времени %u" -#: access/transam/xlog.c:4679 +#: access/transam/xlog.c:4705 #, c-format msgid "could not generate secret authorization token" msgstr "не удалось сгенерировать случайное число для аутентификации" -#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 -#: access/transam/xlog.c:4871 access/transam/xlog.c:4878 -#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4864 access/transam/xlog.c:4873 #: access/transam/xlog.c:4897 access/transam/xlog.c:4904 -#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 -#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 -#: access/transam/xlog.c:4941 access/transam/xlog.c:4948 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4916 +#: access/transam/xlog.c:4923 access/transam/xlog.c:4930 +#: access/transam/xlog.c:4937 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 access/transam/xlog.c:4958 +#: access/transam/xlog.c:4967 access/transam/xlog.c:4974 #: utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "файлы базы данных несовместимы с сервером" -#: access/transam/xlog.c:4839 +#: access/transam/xlog.c:4865 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d (0x%08x), " @@ -2537,7 +2547,7 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d (0x%08x), но " "сервер скомпилирован с PG_CONTROL_VERSION %d (0x%08x)." -#: access/transam/xlog.c:4843 +#: access/transam/xlog.c:4869 #, c-format msgid "" "This could be a problem of mismatched byte ordering. It looks like you need " @@ -2546,7 +2556,7 @@ msgstr "" "Возможно, проблема вызвана разным порядком байт. Кажется, вам надо выполнить " "initdb." -#: access/transam/xlog.c:4848 +#: access/transam/xlog.c:4874 #, c-format msgid "" "The database cluster was initialized with PG_CONTROL_VERSION %d, but the " @@ -2555,18 +2565,18 @@ msgstr "" "Кластер баз данных был инициализирован с PG_CONTROL_VERSION %d, но сервер " "скомпилирован с PG_CONTROL_VERSION %d." -#: access/transam/xlog.c:4851 access/transam/xlog.c:4875 -#: access/transam/xlog.c:4882 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4913 #, c-format msgid "It looks like you need to initdb." msgstr "Кажется, вам надо выполнить initdb." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4888 #, c-format msgid "incorrect checksum in control file" msgstr "ошибка контрольной суммы в файле pg_control" -#: access/transam/xlog.c:4872 +#: access/transam/xlog.c:4898 #, c-format msgid "" "The database cluster was initialized with CATALOG_VERSION_NO %d, but the " @@ -2575,7 +2585,7 @@ msgstr "" "Кластер баз данных был инициализирован с CATALOG_VERSION_NO %d, но сервер " "скомпилирован с CATALOG_VERSION_NO %d." -#: access/transam/xlog.c:4879 +#: access/transam/xlog.c:4905 #, c-format msgid "" "The database cluster was initialized with MAXALIGN %d, but the server was " @@ -2584,7 +2594,7 @@ msgstr "" "Кластер баз данных был инициализирован с MAXALIGN %d, но сервер " "скомпилирован с MAXALIGN %d." -#: access/transam/xlog.c:4886 +#: access/transam/xlog.c:4912 #, c-format msgid "" "The database cluster appears to use a different floating-point number format " @@ -2593,7 +2603,7 @@ msgstr "" "Кажется, в кластере баз данных и в программе сервера используются разные " "форматы чисел с плавающей точкой." -#: access/transam/xlog.c:4891 +#: access/transam/xlog.c:4917 #, c-format msgid "" "The database cluster was initialized with BLCKSZ %d, but the server was " @@ -2602,16 +2612,16 @@ msgstr "" "Кластер баз данных был инициализирован с BLCKSZ %d, но сервер скомпилирован " "с BLCKSZ %d." -#: access/transam/xlog.c:4894 access/transam/xlog.c:4901 -#: access/transam/xlog.c:4908 access/transam/xlog.c:4915 -#: access/transam/xlog.c:4922 access/transam/xlog.c:4929 -#: access/transam/xlog.c:4936 access/transam/xlog.c:4944 -#: access/transam/xlog.c:4951 +#: access/transam/xlog.c:4920 access/transam/xlog.c:4927 +#: access/transam/xlog.c:4934 access/transam/xlog.c:4941 +#: access/transam/xlog.c:4948 access/transam/xlog.c:4955 +#: access/transam/xlog.c:4962 access/transam/xlog.c:4970 +#: access/transam/xlog.c:4977 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Кажется, вам надо перекомпилировать сервер или выполнить initdb." -#: access/transam/xlog.c:4898 +#: access/transam/xlog.c:4924 #, c-format msgid "" "The database cluster was initialized with RELSEG_SIZE %d, but the server was " @@ -2620,7 +2630,7 @@ msgstr "" "Кластер баз данных был инициализирован с RELSEG_SIZE %d, но сервер " "скомпилирован с RELSEG_SIZE %d." -#: access/transam/xlog.c:4905 +#: access/transam/xlog.c:4931 #, c-format msgid "" "The database cluster was initialized with XLOG_BLCKSZ %d, but the server was " @@ -2629,7 +2639,7 @@ msgstr "" "Кластер баз данных был инициализирован с XLOG_BLCKSZ %d, но сервер " "скомпилирован с XLOG_BLCKSZ %d." -#: access/transam/xlog.c:4912 +#: access/transam/xlog.c:4938 #, c-format msgid "" "The database cluster was initialized with NAMEDATALEN %d, but the server was " @@ -2638,7 +2648,7 @@ msgstr "" "Кластер баз данных был инициализирован с NAMEDATALEN %d, но сервер " "скомпилирован с NAMEDATALEN %d." -#: access/transam/xlog.c:4919 +#: access/transam/xlog.c:4945 #, c-format msgid "" "The database cluster was initialized with INDEX_MAX_KEYS %d, but the server " @@ -2647,7 +2657,7 @@ msgstr "" "Кластер баз данных был инициализирован с INDEX_MAX_KEYS %d, но сервер " "скомпилирован с INDEX_MAX_KEYS %d." -#: access/transam/xlog.c:4926 +#: access/transam/xlog.c:4952 #, c-format msgid "" "The database cluster was initialized with TOAST_MAX_CHUNK_SIZE %d, but the " @@ -2656,7 +2666,7 @@ msgstr "" "Кластер баз данных был инициализирован с TOAST_MAX_CHUNK_SIZE %d, но сервер " "скомпилирован с TOAST_MAX_CHUNK_SIZE %d." -#: access/transam/xlog.c:4933 +#: access/transam/xlog.c:4959 #, c-format msgid "" "The database cluster was initialized with LOBLKSIZE %d, but the server was " @@ -2665,7 +2675,7 @@ msgstr "" "Кластер баз данных был инициализирован с LOBLKSIZE %d, но сервер " "скомпилирован с LOBLKSIZE %d." -#: access/transam/xlog.c:4942 +#: access/transam/xlog.c:4968 #, c-format msgid "" "The database cluster was initialized without USE_FLOAT8_BYVAL but the server " @@ -2674,7 +2684,7 @@ msgstr "" "Кластер баз данных был инициализирован без USE_FLOAT8_BYVAL, но сервер " "скомпилирован с USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4949 +#: access/transam/xlog.c:4975 #, c-format msgid "" "The database cluster was initialized with USE_FLOAT8_BYVAL but the server " @@ -2683,7 +2693,7 @@ msgstr "" "Кластер баз данных был инициализирован с USE_FLOAT8_BYVAL, но сервер был " "скомпилирован без USE_FLOAT8_BYVAL." -#: access/transam/xlog.c:4958 +#: access/transam/xlog.c:4984 #, c-format msgid "" "WAL segment size must be a power of two between 1 MB and 1 GB, but the " @@ -2701,49 +2711,49 @@ msgstr[2] "" "размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " "ГБ, но в управляющем файле указано значение: %d" -#: access/transam/xlog.c:4970 +#: access/transam/xlog.c:4996 #, 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:4974 +#: access/transam/xlog.c:5000 #, 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:5408 +#: access/transam/xlog.c:5438 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "не удалось записать начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5416 +#: access/transam/xlog.c:5446 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "не удалось сбросить на диск начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5422 +#: access/transam/xlog.c:5452 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "не удалось закрыть начальный файл журнала предзаписи: %m" -#: access/transam/xlog.c:5483 +#: access/transam/xlog.c:5513 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "" "использование файла с конфигурацией восстановления \"%s\" не поддерживается" -#: access/transam/xlog.c:5548 +#: access/transam/xlog.c:5578 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "" "режим резервного сервера не поддерживается однопользовательским сервером" -#: access/transam/xlog.c:5565 +#: access/transam/xlog.c:5595 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "не указано ни primary_conninfo, ни restore_command" -#: access/transam/xlog.c:5566 +#: access/transam/xlog.c:5596 #, c-format msgid "" "The database server will regularly poll the pg_wal subdirectory to check for " @@ -2752,96 +2762,96 @@ msgstr "" "Сервер БД будет регулярно опрашивать подкаталог pg_wal и проверять " "содержащиеся в нём файлы." -#: access/transam/xlog.c:5574 +#: access/transam/xlog.c:5604 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "" "необходимо задать restore_command, если не выбран режим резервного сервера" -#: access/transam/xlog.c:5612 +#: access/transam/xlog.c:5642 #, c-format msgid "recovery target timeline %u does not exist" msgstr "целевая линия времени для восстановления %u не существует" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5763 #, c-format msgid "archive recovery complete" msgstr "восстановление архива завершено" -#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 +#: access/transam/xlog.c:5829 access/transam/xlog.c:6105 #, c-format msgid "recovery stopping after reaching consistency" msgstr "" "восстановление останавливается после достижения согласованного состояния" -#: access/transam/xlog.c:5821 +#: access/transam/xlog.c:5850 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается перед позицией в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5940 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "" "восстановление останавливается перед фиксированием транзакции %u, время %s" -#: access/transam/xlog.c:5918 +#: access/transam/xlog.c:5947 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "" "восстановление останавливается перед прерыванием транзакции %u, время %s" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:6000 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "восстановление останавливается в точке восстановления \"%s\", время %s" -#: access/transam/xlog.c:5989 +#: access/transam/xlog.c:6018 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "восстановление останавливается после позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6056 +#: access/transam/xlog.c:6085 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "" "восстановление останавливается после фиксирования транзакции %u, время %s" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6093 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "" "восстановление останавливается после прерывания транзакции %u, время %s" -#: access/transam/xlog.c:6109 +#: access/transam/xlog.c:6138 #, c-format msgid "pausing at the end of recovery" msgstr "остановка в конце восстановления" -#: access/transam/xlog.c:6110 +#: access/transam/xlog.c:6139 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Выполните pg_wal_replay_resume() для повышения." -#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 +#: access/transam/xlog.c:6142 access/transam/xlog.c:6424 #, c-format msgid "recovery has paused" msgstr "восстановление приостановлено" -#: access/transam/xlog.c:6114 +#: access/transam/xlog.c:6143 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Выполните pg_wal_replay_resume() для продолжения." -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6415 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "" "режим горячего резерва невозможен из-за отсутствия достаточных значений " "параметров" -#: access/transam/xlog.c:6387 access/transam/xlog.c:6414 -#: access/transam/xlog.c:6444 +#: access/transam/xlog.c:6416 access/transam/xlog.c:6443 +#: access/transam/xlog.c:6473 #, c-format msgid "" "%s = %d is a lower setting than on the primary server, where its value was " @@ -2849,12 +2859,12 @@ msgid "" msgstr "" "Параметр %s = %d меньше, чем на ведущем сервере, где его значение было %d." -#: access/transam/xlog.c:6396 +#: access/transam/xlog.c:6425 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "В случае возобновления восстановления сервер отключится." -#: access/transam/xlog.c:6397 +#: access/transam/xlog.c:6426 #, c-format msgid "" "You can then restart the server after making the necessary configuration " @@ -2863,24 +2873,24 @@ msgstr "" "Затем вы можете перезапустить сервер после внесения необходимых изменений " "конфигурации." -#: access/transam/xlog.c:6408 +#: access/transam/xlog.c:6437 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "повышение невозможно из-за отсутствия достаточных значений параметров" -#: access/transam/xlog.c:6418 +#: access/transam/xlog.c:6447 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "" "Перезапустите сервер после внесения необходимых изменений конфигурации." -#: access/transam/xlog.c:6442 +#: access/transam/xlog.c:6471 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "" "восстановление прервано из-за отсутствия достаточных значений параметров" -#: access/transam/xlog.c:6448 +#: access/transam/xlog.c:6477 #, c-format msgid "" "You can restart the server after making the necessary configuration changes." @@ -2888,51 +2898,51 @@ msgstr "" "Вы можете перезапустить сервер после внесения необходимых изменений " "конфигурации." -#: access/transam/xlog.c:6470 +#: access/transam/xlog.c:6499 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "" "WAL был создан с параметром wal_level=minimal, продолжение восстановления " "невозможно" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6500 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Это происходит, если вы на время устанавливали wal_level=minimal." -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6501 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "" "Используйте резервную копию, сделанную после переключения wal_level на любой " "уровень выше minimal." -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6570 #, c-format msgid "control file contains invalid checkpoint location" msgstr "файл pg_control содержит неправильную позицию контрольной точки" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6581 #, c-format msgid "database system was shut down at %s" msgstr "система БД была выключена: %s" -#: access/transam/xlog.c:6558 +#: access/transam/xlog.c:6587 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система БД была выключена в процессе восстановления: %s" -#: access/transam/xlog.c:6564 +#: access/transam/xlog.c:6593 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "выключение системы БД было прервано; последний момент работы: %s" -#: access/transam/xlog.c:6570 +#: access/transam/xlog.c:6599 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "работа системы БД была прервана во время восстановления: %s" -#: access/transam/xlog.c:6572 +#: access/transam/xlog.c:6601 #, c-format msgid "" "This probably means that some data is corrupted and you will have to use the " @@ -2941,14 +2951,14 @@ msgstr "" "Это скорее всего означает, что некоторые данные повреждены и вам придётся " "восстановить БД из последней резервной копии." -#: access/transam/xlog.c:6578 +#: access/transam/xlog.c:6607 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "" "работа системы БД была прервана в процессе восстановления, время в журнале: " "%s" -#: access/transam/xlog.c:6580 +#: access/transam/xlog.c:6609 #, c-format msgid "" "If this has occurred more than once some data might be corrupted and you " @@ -2957,59 +2967,59 @@ msgstr "" "Если это происходит постоянно, возможно, какие-то данные были испорчены и " "для восстановления стоит выбрать более раннюю точку." -#: access/transam/xlog.c:6586 +#: access/transam/xlog.c:6615 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "работа системы БД была прервана; последний момент работы: %s" -#: access/transam/xlog.c:6592 +#: access/transam/xlog.c:6621 #, c-format msgid "control file contains invalid database cluster state" msgstr "файл pg_control содержит неверный код состояния кластера" -#: access/transam/xlog.c:6649 +#: access/transam/xlog.c:6678 #, c-format msgid "entering standby mode" msgstr "переход в режим резервного сервера" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6681 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "начинается восстановление точки во времени до XID %u" -#: access/transam/xlog.c:6656 +#: access/transam/xlog.c:6685 #, c-format msgid "starting point-in-time recovery to %s" msgstr "начинается восстановление точки во времени до %s" -#: access/transam/xlog.c:6660 +#: access/transam/xlog.c:6689 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "начинается восстановление точки во времени до \"%s\"" -#: access/transam/xlog.c:6664 +#: access/transam/xlog.c:6693 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "" "начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6697 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "" "начинается восстановление точки во времени до первой точки согласованности" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6700 #, c-format msgid "starting archive recovery" msgstr "начинается восстановление архива" -#: access/transam/xlog.c:6745 +#: access/transam/xlog.c:6774 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "не удалось найти положение REDO, указанное записью контрольной точки" -#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 +#: access/transam/xlog.c:6775 access/transam/xlog.c:6785 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add " @@ -3025,42 +3035,51 @@ msgstr "" "Будьте осторожны: при восстановлении резервной копии удаление \"%s/" "backup_label\" приведёт к повреждению кластера." -#: access/transam/xlog.c:6755 +#: access/transam/xlog.c:6784 #, c-format msgid "could not locate required checkpoint record" msgstr "не удалось считать нужную запись контрольной точки" -#: access/transam/xlog.c:6784 commands/tablespace.c:665 +#: access/transam/xlog.c:6813 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не удалось создать символическую ссылку \"%s\": %m" -#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 +#: access/transam/xlog.c:6845 access/transam/xlog.c:6851 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "файл \"%s\" игнорируется ввиду отсутствия файла \"%s\"" -#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 +#: access/transam/xlog.c:6847 access/transam/xlog.c:12495 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" был переименован в \"%s\"." -#: access/transam/xlog.c:6824 +#: access/transam/xlog.c:6853 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\" (%m)." -#: access/transam/xlog.c:6875 +#: access/transam/xlog.c:6904 #, c-format msgid "could not locate a valid checkpoint record" msgstr "не удалось считать правильную запись контрольной точки" -#: access/transam/xlog.c:6913 +#: access/transam/xlog.c:6915 +#, c-format +msgid "" +"could not find redo location %X/%08X referenced by checkpoint record at %X/" +"%08X" +msgstr "" +"не удалось найти положение REDO %X/%08X, указанное в записи контрольной " +"точки в %X/%08X" + +#: access/transam/xlog.c:6952 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "в истории сервера нет ответвления запрошенной линии времени %u" -#: access/transam/xlog.c:6915 +#: access/transam/xlog.c:6954 #, c-format msgid "" "Latest checkpoint is at %X/%X on timeline %u, but in the history of the " @@ -3069,7 +3088,7 @@ msgstr "" "Последняя контрольная точка: %X/%X на линии времени %u, но в истории " "запрошенной линии времени сервер ответвился с этой линии в %X/%X." -#: access/transam/xlog.c:6929 +#: access/transam/xlog.c:6968 #, c-format msgid "" "requested timeline %u does not contain minimum recovery point %X/%X on " @@ -3078,22 +3097,22 @@ msgstr "" "запрошенная линия времени %u не содержит минимальную точку восстановления %X/" "%X на линии времени %u" -#: access/transam/xlog.c:6959 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid next transaction ID" msgstr "неверный ID следующей транзакции" -#: access/transam/xlog.c:7059 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo in checkpoint record" msgstr "неверная запись REDO в контрольной точке" -#: access/transam/xlog.c:7070 +#: access/transam/xlog.c:7109 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "неверная запись REDO в контрольной точке выключения" -#: access/transam/xlog.c:7110 +#: access/transam/xlog.c:7149 #, c-format msgid "" "database system was not properly shut down; automatic recovery in progress" @@ -3101,19 +3120,19 @@ msgstr "" "система БД была остановлена нештатно; производится автоматическое " "восстановление" -#: access/transam/xlog.c:7114 +#: access/transam/xlog.c:7153 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "" "восстановление после сбоя начинается на линии времени %u, целевая линия " "времени: %u" -#: access/transam/xlog.c:7161 +#: access/transam/xlog.c:7200 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label содержит данные, не согласованные с файлом pg_control" -#: access/transam/xlog.c:7162 +#: access/transam/xlog.c:7201 #, c-format msgid "" "This means that the backup is corrupted and you will have to use another " @@ -3122,44 +3141,44 @@ msgstr "" "Это означает, что резервная копия повреждена и для восстановления БД " "придётся использовать другую копию." -#: access/transam/xlog.c:7389 +#: access/transam/xlog.c:7428 #, c-format msgid "redo starts at %X/%X" msgstr "запись REDO начинается со смещения %X/%X" -#: access/transam/xlog.c:7614 +#: access/transam/xlog.c:7653 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "" "запрошенная точка остановки восстановления предшествует согласованной точке " "восстановления" -#: access/transam/xlog.c:7652 +#: access/transam/xlog.c:7691 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "записи REDO обработаны до смещения %X/%X, нагрузка системы: %s" -#: access/transam/xlog.c:7658 +#: access/transam/xlog.c:7697 #, c-format msgid "last completed transaction was at log time %s" msgstr "последняя завершённая транзакция была выполнена в %s" -#: access/transam/xlog.c:7667 +#: access/transam/xlog.c:7706 #, c-format msgid "redo is not required" msgstr "данные REDO не требуются" -#: access/transam/xlog.c:7679 +#: access/transam/xlog.c:7718 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "восстановление окончилось до достижения заданной цели восстановления" -#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 +#: access/transam/xlog.c:7802 access/transam/xlog.c:7806 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL закончился без признака окончания копирования" -#: access/transam/xlog.c:7764 +#: access/transam/xlog.c:7803 #, c-format msgid "" "All WAL generated while online backup was taken must be available at " @@ -3168,7 +3187,7 @@ msgstr "" "Все журналы WAL, созданные во время резервного копирования \"на ходу\", " "должны быть в наличии для восстановления." -#: access/transam/xlog.c:7768 +#: access/transam/xlog.c:7807 #, c-format msgid "" "Online backup started with pg_start_backup() must be ended with " @@ -3178,28 +3197,28 @@ msgstr "" "должно закончиться pg_stop_backup(), и для восстановления должны быть " "доступны все журналы WAL." -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7810 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL закончился до согласованной точки восстановления" -#: access/transam/xlog.c:7806 +#: access/transam/xlog.c:7853 #, c-format msgid "selected new timeline ID: %u" msgstr "выбранный ID новой линии времени: %u" -#: access/transam/xlog.c:8274 +#: access/transam/xlog.c:8321 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "в %2$s обнаружен недопустимый элемент-каталог \"%1$s\"" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8323 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "" "Все элементы-каталоги в pg_tblspc/ должны быть символическими ссылками." -#: access/transam/xlog.c:8277 +#: access/transam/xlog.c:8324 #, c-format msgid "" "Remove those directories, or set allow_in_place_tablespaces to ON " @@ -3208,80 +3227,80 @@ msgstr "" "Удалите эти каталоги или на время установите в allow_in_place_tablespaces " "значение ON, чтобы восстановление завершилось." -#: access/transam/xlog.c:8361 +#: access/transam/xlog.c:8408 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "согласованное состояние восстановления достигнуто в позиции %X/%X" -#: access/transam/xlog.c:8570 +#: access/transam/xlog.c:8617 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "неверная ссылка на первичную контрольную точку в файле pg_control" -#: access/transam/xlog.c:8574 +#: access/transam/xlog.c:8621 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "неверная ссылка на контрольную точку в файле backup_label" -#: access/transam/xlog.c:8592 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid primary checkpoint record" msgstr "неверная запись первичной контрольной точки" -#: access/transam/xlog.c:8596 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid checkpoint record" msgstr "неверная запись контрольной точки" -#: access/transam/xlog.c:8607 +#: access/transam/xlog.c:8654 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "неверный ID менеджера ресурсов в записи первичной контрольной точки" -#: access/transam/xlog.c:8611 +#: access/transam/xlog.c:8658 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "неверный ID менеджера ресурсов в записи контрольной точки" -#: access/transam/xlog.c:8624 +#: access/transam/xlog.c:8671 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "неверные флаги xl_info в записи первичной контрольной точки" -#: access/transam/xlog.c:8628 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "неверные флаги xl_info в записи контрольной точки" -#: access/transam/xlog.c:8639 +#: access/transam/xlog.c:8686 #, c-format msgid "invalid length of primary checkpoint record" msgstr "неверная длина записи первичной контрольной точки" -#: access/transam/xlog.c:8643 +#: access/transam/xlog.c:8690 #, c-format msgid "invalid length of checkpoint record" msgstr "неверная длина записи контрольной точки" -#: access/transam/xlog.c:8824 +#: access/transam/xlog.c:8871 #, c-format msgid "shutting down" msgstr "выключение" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8863 +#: access/transam/xlog.c:8910 #, 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:8875 +#: access/transam/xlog.c:8922 #, 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:8935 +#: access/transam/xlog.c:8982 #, c-format msgid "" "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -3292,10 +3311,10 @@ msgstr "" "точка перезапуска завершена: записано буферов: %d (%.1f%%); добавлено файлов " "WAL %d, удалено: %d, переработано: %d; запись=%ld.%03d сек., синхр.=%ld.%03d " "сек., всего=%ld.%03d сек.; синхронизировано_файлов=%d, самая_долгая_синхр." -"=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB" +"=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d КБ, ожидалось=%d КБ" # well-spelled: синхр -#: access/transam/xlog.c:8955 +#: access/transam/xlog.c:9002 #, c-format msgid "" "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d " @@ -3306,9 +3325,9 @@ msgstr "" "контрольная точка завершена: записано буферов: %d (%.1f%%); добавлено файлов " "WAL %d, удалено: %d, переработано: %d; запись=%ld.%03d сек., синхр.=%ld.%03d " "сек., всего=%ld.%03d сек.; синхронизировано_файлов=%d, самая_долгая_синхр." -"=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB" +"=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d КБ, ожидалось=%d КБ" -#: access/transam/xlog.c:9406 +#: access/transam/xlog.c:9473 #, c-format msgid "" "concurrent write-ahead log activity while database system is shutting down" @@ -3316,22 +3335,22 @@ msgstr "" "во время выключения системы баз данных отмечена активность в журнале " "предзаписи" -#: access/transam/xlog.c:9939 +#: access/transam/xlog.c:10046 #, c-format msgid "recovery restart point at %X/%X" msgstr "точка перезапуска восстановления в позиции %X/%X" -#: access/transam/xlog.c:9941 +#: access/transam/xlog.c:10048 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Последняя завершённая транзакция была выполнена в %s." -#: access/transam/xlog.c:10187 +#: access/transam/xlog.c:10296 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка восстановления \"%s\" создана в позиции %X/%X" -#: access/transam/xlog.c:10332 +#: access/transam/xlog.c:10441 #, c-format msgid "" "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint " @@ -3340,13 +3359,13 @@ msgstr "" "неожиданный ID предыдущей линии времени %u (ID текущей линии времени %u) в " "записи контрольной точки" -#: access/transam/xlog.c:10341 +#: access/transam/xlog.c:10450 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "неожиданный ID линии времени %u (после %u) в записи контрольной точки" # skip-rule: capital-letter-first -#: access/transam/xlog.c:10357 +#: access/transam/xlog.c:10466 #, c-format msgid "" "unexpected timeline ID %u in checkpoint record, before reaching minimum " @@ -3355,39 +3374,39 @@ msgstr "" "неожиданный ID линии времени %u в записи контрольной точки, до достижения " "минимальной к. т. %X/%X на линии времени %u" -#: access/transam/xlog.c:10432 +#: access/transam/xlog.c:10541 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "" "резервное копирование \"на ходу\" было отменено, продолжить восстановление " "нельзя" -#: access/transam/xlog.c:10489 access/transam/xlog.c:10545 -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10598 access/transam/xlog.c:10654 +#: access/transam/xlog.c:10684 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "" "неожиданный ID линии времени %u (должен быть %u) в записи точки " "восстановления" -#: access/transam/xlog.c:10733 +#: access/transam/xlog.c:10842 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "" "успешно пропущена отсутствующая запись contrecord в %X/%X, перезаписанная в " "%s" -#: access/transam/xlog.c:10948 +#: access/transam/xlog.c:11057 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл сквозной записи %s: %m" -#: access/transam/xlog.c:10954 +#: access/transam/xlog.c:11063 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "не удалось синхронизировать с ФС данные (fdatasync) файла \"%s\": %m" -#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 +#: access/transam/xlog.c:11174 access/transam/xlog.c:11711 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -3395,35 +3414,35 @@ msgstr "не удалось синхронизировать с ФС данны msgid "WAL control functions cannot be executed during recovery." msgstr "Функции управления WAL нельзя использовать в процессе восстановления." -#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 +#: access/transam/xlog.c:11183 access/transam/xlog.c:11720 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "" "Выбранный уровень WAL недостаточен для резервного копирования \"на ходу\"" -#: access/transam/xlog.c:11075 access/transam/xlog.c:11612 +#: access/transam/xlog.c:11184 access/transam/xlog.c:11721 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "Установите wal_level \"replica\" или \"logical\" при запуске сервера." -#: access/transam/xlog.c:11080 +#: access/transam/xlog.c:11189 #, c-format msgid "backup label too long (max %d bytes)" msgstr "длина метки резервной копии превышает предел (%d байт)" -#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 -#: access/transam/xlog.c:11439 +#: access/transam/xlog.c:11226 access/transam/xlog.c:11510 +#: access/transam/xlog.c:11548 #, c-format msgid "a backup is already in progress" msgstr "резервное копирование уже выполняется" -#: access/transam/xlog.c:11118 +#: access/transam/xlog.c:11227 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Выполните pg_stop_backup() и повторите операцию." -#: access/transam/xlog.c:11214 +#: access/transam/xlog.c:11323 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed since last restartpoint" @@ -3431,7 +3450,7 @@ msgstr "" "После последней точки перезапуска был воспроизведён WAL, созданный в режиме " "full_page_writes=off." -#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 +#: access/transam/xlog.c:11325 access/transam/xlog.c:11916 #, c-format msgid "" "This means that the backup being taken on the standby is corrupt and should " @@ -3443,19 +3462,19 @@ msgstr "" "CHECKPOINT на ведущем сервере, а затем попробуйте резервное копирование \"на " "ходу\" ещё раз." -#: access/transam/xlog.c:11300 replication/basebackup.c:1433 +#: access/transam/xlog.c:11409 replication/basebackup.c:1433 #: utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "целевой путь символической ссылки \"%s\" слишком длинный" -#: access/transam/xlog.c:11350 commands/tablespace.c:385 +#: access/transam/xlog.c:11459 commands/tablespace.c:385 #: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "табличные пространства не поддерживаются на этой платформе" -#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 +#: access/transam/xlog.c:11511 access/transam/xlog.c:11549 #, c-format msgid "" "If you're sure there is no backup in progress, remove file \"%s\" and try " @@ -3464,31 +3483,31 @@ msgstr "" "Если вы считаете, что информация о резервном копировании неверна, удалите " "файл \"%s\" и попробуйте снова." -#: access/transam/xlog.c:11627 +#: access/transam/xlog.c:11736 #, c-format msgid "exclusive backup not in progress" msgstr "монопольное резервное копирование не выполняется" -#: access/transam/xlog.c:11654 +#: access/transam/xlog.c:11763 #, c-format msgid "a backup is not in progress" msgstr "резервное копирование не выполняется" -#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 -#: access/transam/xlog.c:12144 access/transam/xlog.c:12150 -#: access/transam/xlog.c:12198 access/transam/xlog.c:12278 -#: access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11849 access/transam/xlog.c:11862 +#: access/transam/xlog.c:12253 access/transam/xlog.c:12259 +#: access/transam/xlog.c:12307 access/transam/xlog.c:12387 +#: access/transam/xlog.c:12411 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "неверные данные в файле \"%s\"" -#: access/transam/xlog.c:11757 replication/basebackup.c:1287 +#: access/transam/xlog.c:11866 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "" "ведомый сервер был повышен в процессе резервного копирования \"на ходу\"" -#: access/transam/xlog.c:11758 replication/basebackup.c:1288 +#: access/transam/xlog.c:11867 replication/basebackup.c:1288 #, c-format msgid "" "This means that the backup being taken is corrupt and should not be used. " @@ -3497,7 +3516,7 @@ msgstr "" "Это означает, что создаваемая резервная копия испорчена и использовать её не " "следует. Попробуйте резервное копирование \"на ходу\" ещё раз." -#: access/transam/xlog.c:11805 +#: access/transam/xlog.c:11914 #, c-format msgid "" "WAL generated with full_page_writes=off was replayed during online backup" @@ -3505,13 +3524,13 @@ msgstr "" "В процессе резервного копирования \"на ходу\" был воспроизведён WAL, " "созданный в режиме full_page_writes=off" -#: access/transam/xlog.c:11925 +#: access/transam/xlog.c:12034 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "" "базовое копирование выполнено, ожидается архивация нужных сегментов WAL" -#: access/transam/xlog.c:11937 +#: access/transam/xlog.c:12046 #, c-format msgid "" "still waiting for all required WAL segments to be archived (%d seconds " @@ -3519,7 +3538,7 @@ msgid "" msgstr "" "продолжается ожидание архивации всех нужных сегментов WAL (прошло %d сек.)" -#: access/transam/xlog.c:11939 +#: access/transam/xlog.c:12048 #, c-format msgid "" "Check that your archive_command is executing properly. You can safely " @@ -3530,12 +3549,12 @@ msgstr "" "копирования можно отменить безопасно, но резервная копия базы будет " "непригодна без всех сегментов WAL." -#: access/transam/xlog.c:11946 +#: access/transam/xlog.c:12055 #, c-format msgid "all required WAL segments have been archived" msgstr "все нужные сегменты WAL заархивированы" -#: access/transam/xlog.c:11950 +#: access/transam/xlog.c:12059 #, c-format msgid "" "WAL archiving is not enabled; you must ensure that all required WAL segments " @@ -3544,48 +3563,48 @@ msgstr "" "архивация WAL не настроена; вы должны обеспечить копирование всех требуемых " "сегментов WAL другими средствами для получения резервной копии" -#: access/transam/xlog.c:12005 +#: access/transam/xlog.c:12114 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "" "прерывание резервного копирования из-за завершения обслуживающего процесса " "до вызова pg_stop_backup" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12308 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Получен идентификатор линии времени %u, но ожидался %u." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12327 +#: access/transam/xlog.c:12436 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "запись REDO в WAL в позиции %X/%X для %s" -#: access/transam/xlog.c:12375 +#: access/transam/xlog.c:12484 #, c-format msgid "online backup mode was not canceled" msgstr "режим копирования \"на ходу\" не был отменён" -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12485 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Не удалось переименовать файл \"%s\" в \"%s\": %m." -#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 -#: access/transam/xlog.c:12407 +#: access/transam/xlog.c:12494 access/transam/xlog.c:12506 +#: access/transam/xlog.c:12516 #, c-format msgid "online backup mode canceled" msgstr "режим копирования \"на ходу\" отменён" -#: access/transam/xlog.c:12398 +#: access/transam/xlog.c:12507 #, c-format msgid "" "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "" "Файлы \"%s\" и \"%s\" были переименованы в \"%s\" и \"%s\", соответственно." -#: access/transam/xlog.c:12408 +#: access/transam/xlog.c:12517 #, c-format msgid "" "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to " @@ -3594,34 +3613,34 @@ msgstr "" "Файл \"%s\" был переименован в \"%s\", но переименовать \"%s\" в \"%s\" не " "удалось: %m." -#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12650 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "не удалось прочитать сегмент журнала %s, смещение %u: %m" -#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12656 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "" "не удалось прочитать из сегмента журнала %s по смещению %u (прочитано байт: " "%d из %zu)" -#: access/transam/xlog.c:13112 +#: access/transam/xlog.c:13233 #, c-format msgid "WAL receiver process shutdown requested" msgstr "получен запрос на выключение процесса приёмника WAL" -#: access/transam/xlog.c:13207 +#: access/transam/xlog.c:13345 #, c-format msgid "received promote request" msgstr "получен запрос повышения статуса" -#: access/transam/xlog.c:13220 +#: access/transam/xlog.c:13358 #, c-format msgid "promote trigger file found: %s" msgstr "найден файл триггера повышения: %s" -#: access/transam/xlog.c:13228 +#: access/transam/xlog.c:13366 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "не удалось получить информацию о файле триггера повышения \"%s\": %m" @@ -3682,19 +3701,19 @@ msgid "Did you mean to use pg_stop_backup('f')?" msgstr "Вероятно, подразумевалось pg_stop_backup('f')?" #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 -#: commands/event_trigger.c:1869 commands/extension.c:1966 -#: commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 +#: commands/event_trigger.c:1869 commands/extension.c:2096 +#: commands/extension.c:2204 commands/extension.c:2489 commands/prepare.c:713 #: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 #: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 -#: replication/slotfuncs.c:255 replication/walsender.c:3328 +#: replication/slotfuncs.c:255 replication/walsender.c:3346 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 #: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 #: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 #: utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 -#: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 +#: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1899 +#: utils/adt/varlena.c:4867 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 #: utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" @@ -3702,15 +3721,15 @@ msgstr "" "функция, возвращающая множество, вызвана в контексте, где ему нет места" #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 -#: commands/event_trigger.c:1873 commands/extension.c:1970 -#: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 +#: commands/event_trigger.c:1873 commands/extension.c:2100 +#: commands/extension.c:2208 commands/extension.c:2493 commands/prepare.c:717 #: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 -#: replication/slotfuncs.c:259 replication/walsender.c:3332 +#: replication/slotfuncs.c:259 replication/walsender.c:3350 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 +#: utils/adt/pgstatfuncs.c:1903 utils/adt/varlena.c:4871 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3796,49 +3815,49 @@ msgstr "неверное смещение записи в позиции %X/%X" msgid "contrecord is requested by %X/%X" msgstr "в позиции %X/%X запрошено продолжение записи" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "неверная длина записи в позиции %X/%X: ожидалось %u, получено %u" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X" -#: access/transam/xlogreader.c:728 +#: access/transam/xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X" -#: access/transam/xlogreader.c:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X" -#: access/transam/xlogreader.c:795 +#: access/transam/xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции " "%X/%X" -#: access/transam/xlogreader.c:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, c-format msgid "" "WAL file is from different database system: WAL file database system " @@ -3847,7 +3866,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД " "%llu, а идентификатор системы pg_control: %llu" -#: access/transam/xlogreader.c:869 +#: access/transam/xlogreader.c:877 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -3856,7 +3875,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный размер сегмента в заголовке " "страницы" -#: access/transam/xlogreader.c:875 +#: access/transam/xlogreader.c:883 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -3865,35 +3884,35 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы" -#: access/transam/xlogreader.c:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте " "журнала %s, смещение %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" -#: access/transam/xlogreader.c:1298 +#: access/transam/xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" -#: access/transam/xlogreader.c:1305 +#: access/transam/xlogreader.c:1313 #, 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:1341 +#: access/transam/xlogreader.c:1349 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -3902,21 +3921,21 @@ msgstr "" "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u " "при длине образа блока %u в позиции %X/%X" -#: access/transam/xlogreader.c:1357 +#: access/transam/xlogreader.c:1365 #, 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:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_IS_COMPRESSED установлен, но длина образа блока равна %u в позиции " "%X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image " @@ -3925,24 +3944,24 @@ msgstr "" "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_IS_COMPRESSED не установлены, но длина " "образа блока равна %u в позиции %X/%X" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "" "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" "%X" -#: access/transam/xlogreader.c:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "неверный идентификатор блока %u в позиции %X/%X" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "запись с неверной длиной в позиции %X/%X" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "неверный сжатый образ в позиции %X/%X, блок %d" @@ -3953,12 +3972,12 @@ msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "" "для -X требуется число, равное степени двух, в интервале от 1 МБ до 1 ГБ" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "для --%s требуется значение" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "для -c %s требуется значение" @@ -4109,10 +4128,10 @@ msgid "large object %u does not exist" msgstr "большой объект %u не существует" #: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 -#: commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 -#: commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 -#: commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 -#: commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 +#: commands/copy.c:402 commands/copy.c:422 commands/copy.c:432 +#: commands/copy.c:441 commands/copy.c:450 commands/copy.c:460 +#: commands/copy.c:469 commands/copy.c:478 commands/copy.c:496 +#: commands/copy.c:512 commands/copy.c:532 commands/copy.c:549 #: commands/dbcommands.c:158 commands/dbcommands.c:167 #: commands/dbcommands.c:176 commands/dbcommands.c:185 #: commands/dbcommands.c:194 commands/dbcommands.c:203 @@ -4120,14 +4139,14 @@ msgstr "большой объект %u не существует" #: commands/dbcommands.c:230 commands/dbcommands.c:239 #: commands/dbcommands.c:261 commands/dbcommands.c:1541 #: commands/dbcommands.c:1550 commands/dbcommands.c:1559 -#: commands/dbcommands.c:1568 commands/extension.c:1757 -#: commands/extension.c:1767 commands/extension.c:1777 -#: commands/extension.c:3074 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:606 +#: commands/dbcommands.c:1568 commands/extension.c:1887 +#: commands/extension.c:1897 commands/extension.c:1907 +#: commands/extension.c:3204 commands/foreigncmds.c:550 +#: commands/foreigncmds.c:559 commands/functioncmds.c:606 #: commands/functioncmds.c:772 commands/functioncmds.c:781 #: commands/functioncmds.c:790 commands/functioncmds.c:799 #: commands/functioncmds.c:2097 commands/functioncmds.c:2105 -#: commands/publicationcmds.c:87 commands/publicationcmds.c:130 +#: commands/publicationcmds.c:87 commands/publicationcmds.c:135 #: commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 #: commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 #: commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 @@ -4135,7 +4154,7 @@ msgstr "большой объект %u не существует" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 #: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 -#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 +#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -4148,9 +4167,9 @@ msgstr "большой объект %u не существует" #: commands/user.c:638 commands/user.c:647 commands/user.c:655 #: commands/user.c:663 parser/parse_utilcmd.c:402 #: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 -#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 -#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 -#: replication/walsender.c:894 replication/walsender.c:904 +#: replication/pgoutput/pgoutput.c:238 replication/pgoutput/pgoutput.c:248 +#: replication/pgoutput/pgoutput.c:258 replication/walsender.c:897 +#: replication/walsender.c:908 replication/walsender.c:918 #, c-format msgid "conflicting or redundant options" msgstr "конфликтующие или избыточные параметры" @@ -4166,29 +4185,29 @@ msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "предложение IN SCHEMA нельзя использовать в GRANT/REVOKE ON SCHEMAS" #: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 -#: commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 -#: commands/tablecmds.c:7147 commands/tablecmds.c:7303 -#: commands/tablecmds.c:7353 commands/tablecmds.c:7427 -#: commands/tablecmds.c:7497 commands/tablecmds.c:7609 -#: commands/tablecmds.c:7703 commands/tablecmds.c:7762 -#: commands/tablecmds.c:7851 commands/tablecmds.c:7880 -#: commands/tablecmds.c:8035 commands/tablecmds.c:8117 -#: commands/tablecmds.c:8273 commands/tablecmds.c:8395 -#: commands/tablecmds.c:11888 commands/tablecmds.c:12080 -#: commands/tablecmds.c:12240 commands/tablecmds.c:13403 -#: commands/tablecmds.c:15950 commands/trigger.c:942 parser/analyze.c:2471 +#: commands/analyze.c:390 commands/copy.c:781 commands/sequence.c:1709 +#: commands/tablecmds.c:7180 commands/tablecmds.c:7336 +#: commands/tablecmds.c:7386 commands/tablecmds.c:7460 +#: commands/tablecmds.c:7530 commands/tablecmds.c:7642 +#: commands/tablecmds.c:7736 commands/tablecmds.c:7795 +#: commands/tablecmds.c:7884 commands/tablecmds.c:7913 +#: commands/tablecmds.c:8068 commands/tablecmds.c:8150 +#: commands/tablecmds.c:8306 commands/tablecmds.c:8428 +#: commands/tablecmds.c:11908 commands/tablecmds.c:12100 +#: commands/tablecmds.c:12260 commands/tablecmds.c:13446 +#: commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 #: parser/parse_relation.c:714 parser/parse_target.c:1077 #: parser/parse_type.c:144 parser/parse_utilcmd.c:3425 -#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2845 +#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 #: utils/adt/ruleutils.c:2732 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "столбец \"%s\" в таблице \"%s\" не существует" #: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 -#: commands/tablecmds.c:249 commands/tablecmds.c:16824 utils/adt/acl.c:2053 -#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 -#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 +#: utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 +#: utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" - это не последовательность" @@ -4617,12 +4636,12 @@ msgstr "схема с OID %u не существует" msgid "tablespace with OID %u does not exist" msgstr "табличное пространство с OID %u не существует" -#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "обёртка сторонних данных с OID %u не существует" -#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "сторонний сервер с OID %u не существует" @@ -4678,12 +4697,12 @@ msgstr "преобразование с OID %u не существует" msgid "extension with OID %u does not exist" msgstr "расширение с OID %u не существует" -#: catalog/aclchk.c:5379 commands/publicationcmds.c:818 +#: catalog/aclchk.c:5379 commands/publicationcmds.c:823 #, c-format msgid "publication with OID %u does not exist" msgstr "публикация с OID %u не существует" -#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "подписка с OID %u не существует" @@ -4799,12 +4818,13 @@ msgstr "удалить объект %s нельзя, так как от него #: catalog/dependency.c:1204 catalog/dependency.c:1211 #: catalog/dependency.c:1223 commands/tablecmds.c:1301 -#: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 -#: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 -#: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 -#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 -#: utils/misc/guc.c:11643 +#: commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 +#: commands/view.c:506 libpq/auth.c:346 replication/slot.c:181 +#: replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 +#: storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 +#: utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 +#: utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 +#: utils/misc/guc.c:12599 utils/misc/guc.c:12601 #, c-format msgid "%s" msgstr "%s" @@ -4850,7 +4870,7 @@ msgstr "Изменение системного каталога в текуще msgid "tables can have at most %d columns" msgstr "максимальное число столбцов в таблице: %d" -#: catalog/heap.c:527 commands/tablecmds.c:7037 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "имя столбца \"%s\" конфликтует с системным столбцом" @@ -4920,38 +4940,38 @@ msgstr "" msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "значение OID кучи в pg_class не задано в режиме двоичного обновления" -#: catalog/heap.c:2469 +#: catalog/heap.c:2529 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "" "добавить ограничение NO INHERIT к секционированной таблице \"%s\" нельзя" -#: catalog/heap.c:2742 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "ограничение-проверка \"%s\" уже существует" -#: catalog/heap.c:2912 catalog/index.c:886 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8769 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8802 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "ограничение \"%s\" для отношения \"%s\" уже существует" -#: catalog/heap.c:2919 +#: catalog/heap.c:2974 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2930 +#: catalog/heap.c:2985 #, c-format msgid "" "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "" "ограничение \"%s\" конфликтует с наследуемым ограничением таблицы \"%s\"" -#: catalog/heap.c:2940 +#: catalog/heap.c:2995 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" @@ -4959,64 +4979,64 @@ msgstr "" "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "таблицы \"%s\"" -#: catalog/heap.c:2945 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "слияние ограничения \"%s\" с унаследованным определением" -#: catalog/heap.c:3050 +#: catalog/heap.c:3105 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" msgstr "" "использовать генерируемый столбец \"%s\" в выражении генерируемого столбца " "нельзя" -#: catalog/heap.c:3052 +#: catalog/heap.c:3107 #, c-format msgid "A generated column cannot reference another generated column." msgstr "" "Генерируемый столбец не может ссылаться на другой генерируемый столбец." -#: catalog/heap.c:3058 +#: catalog/heap.c:3113 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "" "в выражении генерируемого столбца нельзя использовать переменные «вся строка»" -#: catalog/heap.c:3059 +#: catalog/heap.c:3114 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "" "Это сделало бы генерируемый столбец зависимым от собственного значения." -#: catalog/heap.c:3114 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "генерирующее выражение не является постоянным" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1288 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "столбец \"%s\" имеет тип %s, но тип выражения по умолчанию %s" -#: catalog/heap.c:3147 commands/prepare.c:368 parser/analyze.c:2695 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1293 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Перепишите выражение или преобразуйте его тип." -#: catalog/heap.c:3194 +#: catalog/heap.c:3249 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в ограничении-проверке можно ссылаться только на таблицу \"%s\"" -#: catalog/heap.c:3492 +#: catalog/heap.c:3547 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "неподдерживаемое сочетание внешнего ключа с ON COMMIT" -#: catalog/heap.c:3493 +#: catalog/heap.c:3548 #, c-format msgid "" "Table \"%s\" references \"%s\", but they do not have the same ON COMMIT " @@ -5024,17 +5044,17 @@ msgid "" msgstr "" "Таблица \"%s\" ссылается на \"%s\", и для них задан разный режим ON COMMIT." -#: catalog/heap.c:3498 +#: catalog/heap.c:3553 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "опустошить таблицу, на которую ссылается внешний ключ, нельзя" -#: catalog/heap.c:3499 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблица \"%s\" ссылается на \"%s\"." -#: catalog/heap.c:3501 +#: catalog/heap.c:3556 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "" @@ -5103,28 +5123,28 @@ msgstr "" msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY должен быть первым действием в транзакции" -#: catalog/index.c:3653 +#: catalog/index.c:3660 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "переиндексировать временные таблицы других сеансов нельзя" -#: catalog/index.c:3664 commands/indexcmds.c:3555 +#: catalog/index.c:3671 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "перестроить нерабочий индекс в таблице TOAST нельзя" -#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 +#: catalog/index.c:3687 commands/indexcmds.c:3469 commands/indexcmds.c:3613 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "переместить системную таблицу \"%s\" нельзя" -#: catalog/index.c:3824 +#: catalog/index.c:3831 #, c-format msgid "index \"%s\" was reindexed" msgstr "индекс \"%s\" был перестроен" -#: catalog/index.c:3961 +#: catalog/index.c:3968 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "" @@ -5132,7 +5152,7 @@ msgstr "" "пропускается" #: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5251 +#: commands/trigger.c:5285 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "ссылки между базами не реализованы: \"%s.%s.%s\"" @@ -5163,8 +5183,8 @@ msgstr "отношение \"%s.%s\" не существует" msgid "relation \"%s\" does not exist" msgstr "отношение \"%s\" не существует" -#: catalog/namespace.c:501 catalog/namespace.c:3076 commands/extension.c:1541 -#: commands/extension.c:1547 +#: catalog/namespace.c:501 catalog/namespace.c:3079 commands/extension.c:1671 +#: commands/extension.c:1677 #, c-format msgid "no schema has been selected to create in" msgstr "схема для создания объектов не выбрана" @@ -5189,86 +5209,86 @@ msgstr "во временных схемах можно создавать то msgid "statistics object \"%s\" does not exist" msgstr "объект статистики \"%s\" не существует" -#: catalog/namespace.c:2391 +#: catalog/namespace.c:2394 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "анализатор текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2517 +#: catalog/namespace.c:2520 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "словарь текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2644 +#: catalog/namespace.c:2647 #, c-format msgid "text search template \"%s\" does not exist" msgstr "шаблон текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2770 commands/tsearchcmds.c:1127 +#: catalog/namespace.c:2773 commands/tsearchcmds.c:1127 #: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "конфигурация текстового поиска \"%s\" не существует" -#: catalog/namespace.c:2883 parser/parse_expr.c:810 parser/parse_target.c:1269 +#: catalog/namespace.c:2886 parser/parse_expr.c:810 parser/parse_target.c:1269 #, c-format msgid "cross-database references are not implemented: %s" msgstr "ссылки между базами не реализованы: %s" -#: catalog/namespace.c:2889 parser/parse_expr.c:817 parser/parse_target.c:1276 +#: catalog/namespace.c:2892 parser/parse_expr.c:817 parser/parse_target.c:1276 #: gram.y:15103 gram.y:17077 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" -#: catalog/namespace.c:3019 +#: catalog/namespace.c:3022 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "перемещать объекты в/из внутренних схем нельзя" -#: catalog/namespace.c:3025 +#: catalog/namespace.c:3028 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "перемещать объекты в/из схем TOAST нельзя" -#: catalog/namespace.c:3098 commands/schemacmds.c:263 commands/schemacmds.c:343 +#: catalog/namespace.c:3101 commands/schemacmds.c:263 commands/schemacmds.c:343 #: commands/tablecmds.c:1246 #, c-format msgid "schema \"%s\" does not exist" msgstr "схема \"%s\" не существует" -#: catalog/namespace.c:3129 +#: catalog/namespace.c:3132 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неверное имя отношения (слишком много компонентов): %s" -#: catalog/namespace.c:3696 +#: catalog/namespace.c:3699 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "правило сортировки \"%s\" для кодировки \"%s\" не существует" -#: catalog/namespace.c:3751 +#: catalog/namespace.c:3754 #, c-format msgid "conversion \"%s\" does not exist" msgstr "преобразование \"%s\" не существует" -#: catalog/namespace.c:4015 +#: catalog/namespace.c:4018 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "нет прав для создания временных таблиц в базе \"%s\"" -#: catalog/namespace.c:4031 +#: catalog/namespace.c:4034 #, c-format msgid "cannot create temporary tables during recovery" msgstr "создавать временные таблицы в процессе восстановления нельзя" -#: catalog/namespace.c:4037 +#: catalog/namespace.c:4040 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "создавать временные таблицы во время параллельных операций нельзя" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 +#: catalog/namespace.c:4341 commands/tablespace.c:1211 commands/variable.c:64 +#: tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "Ошибка синтаксиса в списке." @@ -5276,25 +5296,25 @@ msgstr "Ошибка синтаксиса в списке." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 #: commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 #: commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 -#: commands/tablecmds.c:12016 +#: commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" - это не таблица" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6169 commands/tablecmds.c:16829 commands/view.c:119 +#: commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" - это не представление" #: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 -#: commands/tablecmds.c:16834 +#: commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" - это не материализованное представление" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6172 commands/tablecmds.c:16839 +#: commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" - это не сторонняя таблица" @@ -5318,7 +5338,7 @@ msgstr "" #: catalog/objectaddress.c:1645 commands/functioncmds.c:139 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 -#: utils/adt/acl.c:4411 +#: utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "тип \"%s\" не существует" @@ -5338,8 +5358,9 @@ msgstr "функция %d (%s, %s) из семейства %s не сущест msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "сопоставление для пользователя \"%s\" на сервере \"%s\" не существует" -#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:733 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 +#: commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 +#: foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "сервер \"%s\" не существует" @@ -5954,23 +5975,23 @@ msgstr "преобразование \"%s\" уже существует" msgid "default conversion for %s to %s already exists" msgstr "преобразование по умолчанию из %s в %s уже существует" -#: catalog/pg_depend.c:218 commands/extension.c:3370 +#: catalog/pg_depend.c:220 commands/extension.c:3500 #, c-format msgid "%s is already a member of extension \"%s\"" msgstr "%s уже относится к расширению \"%s\"" -#: catalog/pg_depend.c:225 catalog/pg_depend.c:276 commands/extension.c:3410 +#: catalog/pg_depend.c:227 catalog/pg_depend.c:278 commands/extension.c:3540 #, c-format msgid "%s is not a member of extension \"%s\"" msgstr "%s не относится к расширению \"%s\"" -#: catalog/pg_depend.c:228 +#: catalog/pg_depend.c:230 #, c-format msgid "An extension is not allowed to replace an object that it does not own." msgstr "" "Расширениям не разрешается заменять объекты, которые им не принадлежат." -#: catalog/pg_depend.c:279 +#: catalog/pg_depend.c:281 #, c-format msgid "" "An extension may only use CREATE ... IF NOT EXISTS to skip object creation " @@ -5979,7 +6000,7 @@ msgstr "" "Расширение может выполнять CREATE ... IF NOT EXISTS только для того, чтобы " "не создавать объект, когда оно уже владеет конфликтующим объектом." -#: catalog/pg_depend.c:644 +#: catalog/pg_depend.c:646 #, c-format msgid "cannot remove dependency on %s because it is a system object" msgstr "" @@ -6036,7 +6057,7 @@ msgstr "" "отсоединения." #: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 -#: commands/tablecmds.c:15139 +#: commands/tablecmds.c:15182 #, c-format msgid "" "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending " @@ -6070,7 +6091,7 @@ msgstr "имя \"%s\" недопустимо для оператора" msgid "only binary operators can have commutators" msgstr "коммутативную операцию можно определить только для бинарных операторов" -#: catalog/pg_operator.c:374 commands/operatorcmds.c:507 +#: catalog/pg_operator.c:374 commands/operatorcmds.c:538 #, c-format msgid "only binary operators can have join selectivity" msgstr "" @@ -6092,13 +6113,13 @@ msgstr "поддержку хеша можно обозначить только msgid "only boolean operators can have negators" msgstr "обратную операцию можно определить только для логических операторов" -#: catalog/pg_operator.c:397 commands/operatorcmds.c:515 +#: catalog/pg_operator.c:397 commands/operatorcmds.c:546 #, c-format msgid "only boolean operators can have restriction selectivity" msgstr "" "функцию оценки ограничения можно определить только для логических операторов" -#: catalog/pg_operator.c:401 commands/operatorcmds.c:519 +#: catalog/pg_operator.c:401 commands/operatorcmds.c:550 #, c-format msgid "only boolean operators can have join selectivity" msgstr "" @@ -6252,8 +6273,8 @@ msgstr "Временные и нежурналируемые отношения msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "отношение \"%s\" уже включено в публикацию \"%s\"" -#: catalog/pg_publication.c:533 commands/publicationcmds.c:458 -#: commands/publicationcmds.c:786 +#: catalog/pg_publication.c:533 commands/publicationcmds.c:463 +#: commands/publicationcmds.c:791 #, c-format msgid "publication \"%s\" does not exist" msgstr "публикация \"%s\" не существует" @@ -6339,17 +6360,17 @@ msgstr "" "нужны системе баз данных" #: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 -#: commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "подписка \"%s\" не существует" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "удалить сопоставление отношений для подписки \"%s\" не получилось" -#: catalog/pg_subscription.c:434 +#: catalog/pg_subscription.c:459 #, c-format msgid "" "Table synchronization for relation \"%s\" is in progress and is in state " @@ -6359,7 +6380,7 @@ msgstr "Выполняется синхронизация отношения \"% #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:441 +#: catalog/pg_subscription.c:466 #, c-format msgid "" "Use %s to enable subscription if not already enabled or use %s to drop the " @@ -6420,13 +6441,13 @@ msgstr "" "Имя мультидиапазонного типа можно указать вручную, воспользовавшись " "атрибутом \"multirange_type_name\"." -#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1046 #, c-format msgid "invalid page in block %u of relation %s" -msgstr "неверная страница в блоке %u отношения %s" +msgstr "некорректная страница в блоке %u отношения %s" #: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 -#: commands/tablecmds.c:16694 +#: commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" - это не таблица и не материализованное представление" @@ -6534,12 +6555,12 @@ msgstr "" msgid "event trigger \"%s\" already exists" msgstr "событийный триггер \"%s\" уже существует" -#: commands/alter.c:88 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "обёртка сторонних данных \"%s\" уже существует" -#: commands/alter.c:91 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" уже существует" @@ -6549,7 +6570,7 @@ msgstr "сервер \"%s\" уже существует" msgid "language \"%s\" already exists" msgstr "язык \"%s\" уже существует" -#: commands/alter.c:97 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:185 #, c-format msgid "publication \"%s\" already exists" msgstr "публикация \"%s\" уже существует" @@ -6626,7 +6647,7 @@ 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:699 +#: commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 #: parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" @@ -6692,22 +6713,22 @@ msgstr "" "пропускается анализ дерева наследования \"%s.%s\" --- это дерево " "наследования не содержит анализируемых дочерних таблиц" -#: commands/async.c:646 +#: commands/async.c:645 #, c-format msgid "channel name cannot be empty" msgstr "имя канала не может быть пустым" -#: commands/async.c:652 +#: commands/async.c:651 #, c-format msgid "channel name too long" msgstr "слишком длинное имя канала" -#: commands/async.c:657 +#: commands/async.c:656 #, c-format msgid "payload string too long" msgstr "слишком длинная строка сообщения-нагрузки" -#: commands/async.c:876 +#: commands/async.c:875 #, c-format msgid "" "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" @@ -6715,7 +6736,7 @@ msgstr "" "выполнить PREPARE для транзакции с командами LISTEN, UNLISTEN или NOTIFY " "нельзя" -#: commands/async.c:980 +#: commands/async.c:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "слишком много уведомлений в очереди NOTIFY" @@ -6762,7 +6783,7 @@ msgstr "кластеризовать секционированную табли msgid "there is no previously clustered index for table \"%s\"" msgstr "таблица \"%s\" ранее не кластеризовалась по какому-либо индексу" -#: commands/cluster.c:187 commands/tablecmds.c:13858 commands/tablecmds.c:15718 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "индекс \"%s\" для таблицы \"%s\" не существует" @@ -6777,7 +6798,7 @@ msgstr "кластеризовать разделяемый каталог не msgid "cannot vacuum temporary tables of other sessions" msgstr "очищать временные таблицы других сеансов нельзя" -#: commands/cluster.c:471 commands/tablecmds.c:15728 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" не является индексом таблицы \"%s\"" @@ -7009,160 +7030,172 @@ msgstr "" "для выполнения COPY с записью в файл нужно быть суперпользователем или " "членом роли pg_write_server_files" -#: commands/copy.c:188 +#: commands/copy.c:175 +#, c-format +msgid "generated columns are not supported in COPY FROM WHERE conditions" +msgstr "генерируемые столбцы не поддерживаются в условиях COPY FROM WHERE" + +#: commands/copy.c:176 commands/tablecmds.c:11928 commands/tablecmds.c:17048 +#: commands/tablecmds.c:17127 commands/trigger.c:653 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:974 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "Столбец \"%s\" является генерируемым." + +#: commands/copy.c:225 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM не поддерживается с защитой на уровне строк." -#: commands/copy.c:189 +#: commands/copy.c:226 #, c-format msgid "Use INSERT statements instead." msgstr "Используйте операторы INSERT." -#: commands/copy.c:377 +#: commands/copy.c:414 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "формат \"%s\" для COPY не распознан" -#: commands/copy.c:450 commands/copy.c:466 commands/copy.c:481 -#: commands/copy.c:503 +#: commands/copy.c:487 commands/copy.c:503 commands/copy.c:518 +#: commands/copy.c:540 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "аргументом параметра \"%s\" должен быть список имён столбцов" -#: commands/copy.c:518 +#: commands/copy.c:555 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом параметра \"%s\" должно быть название допустимой кодировки" -#: commands/copy.c:525 commands/dbcommands.c:254 commands/dbcommands.c:1575 +#: commands/copy.c:562 commands/dbcommands.c:254 commands/dbcommands.c:1575 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не распознан" -#: commands/copy.c:537 +#: commands/copy.c:574 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "в режиме BINARY нельзя указывать DELIMITER" -#: commands/copy.c:542 +#: commands/copy.c:579 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "в режиме BINARY нельзя указывать NULL" -#: commands/copy.c:564 +#: commands/copy.c:601 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "разделитель для COPY должен быть однобайтным символом" -#: commands/copy.c:571 +#: commands/copy.c:608 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "" "разделителем для COPY не может быть символ новой строки или возврата каретки" -#: commands/copy.c:577 +#: commands/copy.c:614 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "" "представление NULL для COPY не может включать символ новой строки или " "возврата каретки" -#: commands/copy.c:594 +#: commands/copy.c:631 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "\"%s\" не может быть разделителем для COPY" -#: commands/copy.c:600 +#: commands/copy.c:637 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER можно использовать только в режиме CSV" -#: commands/copy.c:606 +#: commands/copy.c:643 #, c-format msgid "COPY quote available only in CSV mode" msgstr "определить кавычки для COPY можно только в режиме CSV" -#: commands/copy.c:611 +#: commands/copy.c:648 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "символ кавычек для COPY должен быть однобайтным" -#: commands/copy.c:616 +#: commands/copy.c:653 #, c-format msgid "COPY delimiter and quote must be different" msgstr "символ кавычек для COPY должен отличаться от разделителя" -#: commands/copy.c:622 +#: commands/copy.c:659 #, c-format msgid "COPY escape available only in CSV mode" msgstr "определить спецсимвол для COPY можно только в режиме CSV" -#: commands/copy.c:627 +#: commands/copy.c:664 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "спецсимвол для COPY должен быть однобайтным" -#: commands/copy.c:633 +#: commands/copy.c:670 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "параметр force quote для COPY можно использовать только в режиме CSV" -#: commands/copy.c:637 +#: commands/copy.c:674 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "параметр force quote для COPY можно использовать только с COPY TO" -#: commands/copy.c:643 +#: commands/copy.c:680 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "" "параметр force not null для COPY можно использовать только в режиме CSV" -#: commands/copy.c:647 +#: commands/copy.c:684 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "параметр force not null для COPY можно использовать только с COPY FROM" -#: commands/copy.c:653 +#: commands/copy.c:690 #, c-format msgid "COPY force null available only in CSV mode" msgstr "параметр force null для COPY можно использовать только в режиме CSV" -#: commands/copy.c:658 +#: commands/copy.c:695 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "параметр force null для COPY можно использовать только с COPY FROM" -#: commands/copy.c:664 +#: commands/copy.c:701 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "разделитель для COPY не должен присутствовать в представлении NULL" -#: commands/copy.c:671 +#: commands/copy.c:708 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "символ кавычек в CSV не должен присутствовать в представлении NULL" -#: commands/copy.c:732 +#: commands/copy.c:769 #, c-format msgid "column \"%s\" is a generated column" msgstr "столбец \"%s\" — генерируемый" -#: commands/copy.c:734 +#: commands/copy.c:771 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Генерируемые столбцы нельзя использовать в COPY." -#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 +#: commands/copy.c:786 commands/indexcmds.c:1842 commands/statscmds.c:265 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 -#: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 +#: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2687 #, c-format msgid "column \"%s\" does not exist" msgstr "столбец \"%s\" не существует" -#: commands/copy.c:756 commands/tablecmds.c:2370 commands/trigger.c:951 +#: commands/copy.c:793 commands/tablecmds.c:2370 commands/trigger.c:951 #: parser/parse_target.c:1093 parser/parse_target.c:1104 #, c-format msgid "column \"%s\" specified more than once" @@ -7249,7 +7282,7 @@ msgstr "столбец FORCE_NOT_NULL \"%s\" не фигурирует в COPY" msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "столбец FORCE_NULL \"%s\" не фигурирует в COPY" -#: commands/copyfrom.c:1343 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1343 utils/mb/mbutils.c:394 #, c-format msgid "" "default conversion function for encoding \"%s\" to \"%s\" does not exist" @@ -7905,7 +7938,7 @@ msgstr "Используйте DROP AGGREGATE для удаления агрег #: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 #: commands/tablecmds.c:3750 commands/tablecmds.c:3803 -#: commands/tablecmds.c:16145 tcop/utility.c:1324 +#: commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "отношение \"%s\" не существует, пропускается" @@ -7935,7 +7968,7 @@ msgstr "правило сортировки \"%s\" не существует, п msgid "conversion \"%s\" does not exist, skipping" msgstr "преобразование \"%s\" не существует, пропускается" -#: commands/dropcmds.c:293 commands/statscmds.c:674 +#: commands/dropcmds.c:293 commands/statscmds.c:694 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "объект статистики \"%s\" не существует, пропускается" @@ -8030,7 +8063,7 @@ msgstr "правило \"%s\" для отношения \"%s\" не сущест msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "обёртка сторонних данных \"%s\" не существует, пропускается" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "сервер \"%s\" не существует, пропускается" @@ -8141,149 +8174,149 @@ msgstr "параметр WAL оператора EXPLAIN требует указ msgid "EXPLAIN option TIMING requires ANALYZE" msgstr "параметр TIMING оператора EXPLAIN требует указания ANALYZE" -#: commands/extension.c:173 commands/extension.c:3032 +#: commands/extension.c:195 commands/extension.c:3162 #, c-format msgid "extension \"%s\" does not exist" msgstr "расширение \"%s\" не существует" -#: commands/extension.c:272 commands/extension.c:281 commands/extension.c:293 -#: commands/extension.c:303 +#: commands/extension.c:402 commands/extension.c:411 commands/extension.c:423 +#: commands/extension.c:433 #, c-format msgid "invalid extension name: \"%s\"" msgstr "неверное имя расширения: \"%s\"" -#: commands/extension.c:273 +#: commands/extension.c:403 #, c-format msgid "Extension names must not be empty." msgstr "Имя расширения не может быть пустым." -#: commands/extension.c:282 +#: commands/extension.c:412 #, c-format msgid "Extension names must not contain \"--\"." msgstr "Имя расширения не может содержать \"--\"." -#: commands/extension.c:294 +#: commands/extension.c:424 #, c-format msgid "Extension names must not begin or end with \"-\"." msgstr "Имя расширения не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:304 +#: commands/extension.c:434 #, c-format msgid "Extension names must not contain directory separator characters." msgstr "Имя расширения не может содержать разделители пути." -#: commands/extension.c:319 commands/extension.c:328 commands/extension.c:337 -#: commands/extension.c:347 +#: commands/extension.c:449 commands/extension.c:458 commands/extension.c:467 +#: commands/extension.c:477 #, c-format msgid "invalid extension version name: \"%s\"" msgstr "неверный идентификатор версии расширения: \"%s\"" -#: commands/extension.c:320 +#: commands/extension.c:450 #, c-format msgid "Version names must not be empty." msgstr "Идентификатор версии не может быть пустым." -#: commands/extension.c:329 +#: commands/extension.c:459 #, c-format msgid "Version names must not contain \"--\"." msgstr "Идентификатор версии не может содержать \"--\"." -#: commands/extension.c:338 +#: commands/extension.c:468 #, c-format msgid "Version names must not begin or end with \"-\"." msgstr "" "Идентификатор версии не может начинаться или заканчиваться символом \"-\"." -#: commands/extension.c:348 +#: commands/extension.c:478 #, c-format msgid "Version names must not contain directory separator characters." msgstr "Идентификатор версии не может содержать разделители пути." -#: commands/extension.c:498 +#: commands/extension.c:628 #, c-format msgid "could not open extension control file \"%s\": %m" msgstr "не удалось открыть управляющий файл расширения \"%s\": %m" -#: commands/extension.c:520 commands/extension.c:530 +#: commands/extension.c:650 commands/extension.c:660 #, c-format msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "" "параметр \"%s\" нельзя задавать в дополнительном управляющем файле расширения" -#: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 +#: commands/extension.c:682 commands/extension.c:690 commands/extension.c:698 #: utils/misc/guc.c:7118 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "параметр \"%s\" требует логическое значение" -#: commands/extension.c:577 +#: commands/extension.c:707 #, c-format msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" не является верным названием кодировки" -#: commands/extension.c:591 +#: commands/extension.c:721 #, c-format msgid "parameter \"%s\" must be a list of extension names" msgstr "параметр \"%s\" должен содержать список имён расширений" -#: commands/extension.c:598 +#: commands/extension.c:728 #, c-format msgid "unrecognized parameter \"%s\" in file \"%s\"" msgstr "нераспознанный параметр \"%s\" в файле \"%s\"" -#: commands/extension.c:607 +#: commands/extension.c:737 #, c-format msgid "parameter \"schema\" cannot be specified when \"relocatable\" is true" msgstr "" "параметр \"schema\" не может быть указан вместе с \"relocatable\" = true" -#: commands/extension.c:785 +#: commands/extension.c:915 #, c-format msgid "" "transaction control statements are not allowed within an extension script" msgstr "в скрипте расширения не должно быть операторов управления транзакциями" -#: commands/extension.c:862 +#: commands/extension.c:992 #, c-format msgid "permission denied to create extension \"%s\"" msgstr "нет прав для создания расширения \"%s\"" -#: commands/extension.c:865 +#: commands/extension.c:995 #, c-format msgid "" "Must have CREATE privilege on current database to create this extension." msgstr "Для создания этого расширения нужно иметь право CREATE в текущей базе." -#: commands/extension.c:866 +#: commands/extension.c:996 #, c-format msgid "Must be superuser to create this extension." msgstr "Для создания этого расширения нужно быть суперпользователем." -#: commands/extension.c:870 +#: commands/extension.c:1000 #, c-format msgid "permission denied to update extension \"%s\"" msgstr "нет прав для изменения расширения \"%s\"" -#: commands/extension.c:873 +#: commands/extension.c:1003 #, c-format msgid "" "Must have CREATE privilege on current database to update this extension." msgstr "" "Для обновления этого расширения нужно иметь право CREATE в текущей базе." -#: commands/extension.c:874 +#: commands/extension.c:1004 #, c-format msgid "Must be superuser to update this extension." msgstr "Для изменения этого расширения нужно быть суперпользователем." -#: commands/extension.c:1003 +#: commands/extension.c:1133 #, c-format msgid "invalid character in extension owner: must not contain any of \"%s\"" msgstr "" "недопустимый символ в имени владельца расширения: имя не должно содержать " "\"%s\"" -#: commands/extension.c:1027 +#: commands/extension.c:1157 #, c-format msgid "" "invalid character in extension \"%s\" schema: must not contain any of \"%s\"" @@ -8291,7 +8324,7 @@ msgstr "" "недопустимый символ в имени схемы расширения \"%s\": имя не должно содержать " "\"%s\"" -#: commands/extension.c:1222 +#: commands/extension.c:1352 #, c-format msgid "" "extension \"%s\" has no update path from version \"%s\" to version \"%s\"" @@ -8299,12 +8332,12 @@ msgstr "" "для расширения \"%s\" не определён путь обновления с версии \"%s\" до версии " "\"%s\"" -#: commands/extension.c:1430 commands/extension.c:3093 +#: commands/extension.c:1560 commands/extension.c:3223 #, c-format msgid "version to install must be specified" msgstr "нужно указать версию для установки" -#: commands/extension.c:1467 +#: commands/extension.c:1597 #, c-format msgid "" "extension \"%s\" has no installation script nor update path for version " @@ -8313,71 +8346,71 @@ msgstr "" "для расширения \"%s\" не определён путь установки или обновления для версии " "\"%s\"" -#: commands/extension.c:1501 +#: commands/extension.c:1631 #, c-format msgid "extension \"%s\" must be installed in schema \"%s\"" msgstr "расширение \"%s\" должно устанавливаться в схему \"%s\"" -#: commands/extension.c:1661 +#: commands/extension.c:1791 #, c-format msgid "cyclic dependency detected between extensions \"%s\" and \"%s\"" msgstr "выявлена циклическая зависимость между расширениями \"%s\" и \"%s\"" -#: commands/extension.c:1666 +#: commands/extension.c:1796 #, c-format msgid "installing required extension \"%s\"" msgstr "установка требуемого расширения \"%s\"" -#: commands/extension.c:1689 +#: commands/extension.c:1819 #, c-format msgid "required extension \"%s\" is not installed" msgstr "требуемое расширение \"%s\" не установлено" -#: commands/extension.c:1692 +#: commands/extension.c:1822 #, c-format msgid "Use CREATE EXTENSION ... CASCADE to install required extensions too." msgstr "" "Выполните CREATE EXTENSION ... CASCADE, чтобы установить также требуемые " "расширения." -#: commands/extension.c:1727 +#: commands/extension.c:1857 #, c-format msgid "extension \"%s\" already exists, skipping" msgstr "расширение \"%s\" уже существует, пропускается" -#: commands/extension.c:1734 +#: commands/extension.c:1864 #, c-format msgid "extension \"%s\" already exists" msgstr "расширение \"%s\" уже существует" -#: commands/extension.c:1745 +#: commands/extension.c:1875 #, c-format msgid "nested CREATE EXTENSION is not supported" msgstr "вложенные операторы CREATE EXTENSION не поддерживаются" -#: commands/extension.c:1918 +#: commands/extension.c:2048 #, c-format msgid "cannot drop extension \"%s\" because it is being modified" msgstr "удалить расширение \"%s\" нельзя, так как это модифицируемый объект" -#: commands/extension.c:2479 +#: commands/extension.c:2609 #, c-format msgid "%s can only be called from an SQL script executed by CREATE EXTENSION" msgstr "" "%s можно вызывать только из SQL-скрипта, запускаемого командой CREATE " "EXTENSION" -#: commands/extension.c:2491 +#: commands/extension.c:2621 #, c-format msgid "OID %u does not refer to a table" msgstr "OID %u не относится к таблице" -#: commands/extension.c:2496 +#: commands/extension.c:2626 #, c-format msgid "table \"%s\" is not a member of the extension being created" msgstr "таблица \"%s\" не относится к созданному расширению" -#: commands/extension.c:2850 +#: commands/extension.c:2980 #, c-format msgid "" "cannot move extension \"%s\" into schema \"%s\" because the extension " @@ -8386,32 +8419,32 @@ msgstr "" "переместить расширение \"%s\" в схему \"%s\" нельзя, так как оно содержит " "схему" -#: commands/extension.c:2891 commands/extension.c:2951 +#: commands/extension.c:3021 commands/extension.c:3081 #, c-format msgid "extension \"%s\" does not support SET SCHEMA" msgstr "расширение \"%s\" не поддерживает SET SCHEMA" -#: commands/extension.c:2953 +#: commands/extension.c:3083 #, c-format msgid "%s is not in the extension's schema \"%s\"" msgstr "объект %s не принадлежит схеме расширения \"%s\"" -#: commands/extension.c:3012 +#: commands/extension.c:3142 #, c-format msgid "nested ALTER EXTENSION is not supported" msgstr "вложенные операторы ALTER EXTENSION не поддерживаются" -#: commands/extension.c:3104 +#: commands/extension.c:3234 #, c-format msgid "version \"%s\" of extension \"%s\" is already installed" msgstr "версия \"%s\" расширения \"%s\" уже установлена" -#: commands/extension.c:3316 +#: commands/extension.c:3446 #, c-format msgid "cannot add an object of this type to an extension" msgstr "добавить объект этого типа к расширению нельзя" -#: commands/extension.c:3382 +#: commands/extension.c:3512 #, c-format msgid "" "cannot add schema \"%s\" to extension \"%s\" because the schema contains the " @@ -8420,63 +8453,63 @@ msgstr "" "добавить схему \"%s\" к расширению \"%s\" нельзя, так как схема содержит " "расширение" -#: commands/extension.c:3476 +#: commands/extension.c:3606 #, c-format msgid "file \"%s\" is too large" msgstr "файл \"%s\" слишком большой" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "нераспознанный параметр \"%s\"" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "параметр \"%s\" указан неоднократно" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "нет прав для изменения владельца обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "" "Для смены владельца обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Владельцем обёртки сторонних данных должен быть суперпользователь." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:711 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "обёртка сторонних данных \"%s\" не существует" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "нет прав для создания обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Для создания обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "нет прав для изменения обёртки сторонних данных \"%s\"" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Для изменения обёртки сторонних данных нужно быть суперпользователем." -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "" "changing the foreign-data wrapper handler can change behavior of existing " @@ -8485,7 +8518,7 @@ msgstr "" "при изменении обработчика в обёртке сторонних данных может измениться " "поведение существующих сторонних таблиц" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "" "changing the foreign-data wrapper validator can cause the options for " @@ -8494,46 +8527,46 @@ msgstr "" "при изменении функции проверки в обёртке сторонних данных параметры " "зависимых объектов могут стать неверными" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "сервер \"%s\" уже существует, пропускается" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" уже существует, " "пропускается" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "сопоставление пользователя \"%s\" для сервера \"%s\" уже существует" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "сопоставление пользователя \"%s\" для сервера \"%s\" не существует" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "" "сопоставление пользователя \"%s\" для сервера \"%s\" не существует, " "пропускается" -#: commands/foreigncmds.c:1511 foreign/foreign.c:399 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "обёртка сторонних данных \"%s\" не имеет обработчика" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "обёртка сторонних данных \"%s\" не поддерживает IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "импорт сторонней таблицы \"%s\"" @@ -9091,8 +9124,8 @@ msgstr "включаемые столбцы не поддерживают ука msgid "could not determine which collation to use for index expression" msgstr "не удалось определить правило сортировки для индексного выражения" -#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 -#: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17215 commands/typecmds.c:810 +#: parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" @@ -9134,8 +9167,8 @@ msgstr "метод доступа \"%s\" не поддерживает сорт msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "метод доступа \"%s\" не поддерживает параметр NULLS FIRST/LAST" -#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 -#: commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17240 +#: commands/tablecmds.c:17246 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "" @@ -9168,69 +9201,69 @@ msgid "there are multiple default operator classes for data type %s" msgstr "" "для типа данных %s определено несколько классов операторов по умолчанию" -#: commands/indexcmds.c:2631 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "нераспознанный параметр REINDEX: \"%s\"" -#: commands/indexcmds.c:2855 +#: commands/indexcmds.c:2889 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "" "в таблице \"%s\" нет индексов, которые можно переиндексировать неблокирующим " "способом" -#: commands/indexcmds.c:2869 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "в таблице \"%s\" нет индексов для переиндексации" -#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 -#: commands/indexcmds.c:3544 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 +#: commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "Переиндексировать системные каталоги неблокирующим способом нельзя" -#: commands/indexcmds.c:2932 +#: commands/indexcmds.c:2966 #, c-format msgid "can only reindex the currently open database" msgstr "переиндексировать можно только текущую базу данных" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3054 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "" "все системные каталоги пропускаются, так как их нельзя переиндексировать " "неблокирующим способом" -#: commands/indexcmds.c:3053 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "переместить системные отношения нельзя, все они пропускаются" -#: commands/indexcmds.c:3100 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "при переиндексировании секционированной таблицы \"%s.%s\"" -#: commands/indexcmds.c:3103 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "при перестроении секционированного индекса \"%s.%s\"" -#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблица \"%s.%s\" переиндексирована" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "" "перестроить нерабочий индекс \"%s.%s\" неблокирующим способом нельзя, он " "пропускается" -#: commands/indexcmds.c:3454 +#: commands/indexcmds.c:3488 #, c-format msgid "" "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" @@ -9238,19 +9271,19 @@ msgstr "" "перестроить индекс ограничения-исключения \"%s.%s\" неблокирующим способом " "нельзя, он пропускается" -#: commands/indexcmds.c:3609 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "переиндексировать отношение такого типа неблокирующим способом нельзя" -#: commands/indexcmds.c:3630 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "" "переместить отношение, не являющееся разделяемым, в табличное пространство " "\"%s\" нельзя" -#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "индекс \"%s.%s\" был перестроен" @@ -9549,7 +9582,7 @@ msgstr "" msgid "SETOF type not allowed for operator argument" msgstr "аргументом оператора не может быть тип SETOF" -#: commands/operatorcmds.c:152 commands/operatorcmds.c:479 +#: commands/operatorcmds.c:152 commands/operatorcmds.c:510 #, c-format msgid "operator attribute \"%s\" not recognized" msgstr "атрибут оператора \"%s\" не распознан" @@ -9574,31 +9607,46 @@ msgstr "нужно указать тип правого аргумента оп msgid "Postfix operators are not supported." msgstr "Постфиксные операторы не поддерживаются." -#: commands/operatorcmds.c:290 +#: commands/operatorcmds.c:289 #, c-format msgid "restriction estimator function %s must return type %s" msgstr "функция оценки ограничения %s должна возвращать тип %s" -#: commands/operatorcmds.c:333 +#: commands/operatorcmds.c:307 +#, c-format +msgid "" +"must be superuser to specify a non-built-in restriction estimator function" +msgstr "" +"для указания дополнительной функции оценки ограничения нужно быть " +"суперпользователем" + +#: commands/operatorcmds.c:352 #, c-format msgid "join estimator function %s has multiple matches" msgstr "функция оценки соединения %s присутствует в нескольких экземплярах" -#: commands/operatorcmds.c:348 +#: commands/operatorcmds.c:367 #, c-format msgid "join estimator function %s must return type %s" msgstr "функция оценки соединения %s должна возвращать тип %s" -#: commands/operatorcmds.c:473 +#: commands/operatorcmds.c:376 +#, c-format +msgid "must be superuser to specify a non-built-in join estimator function" +msgstr "" +"для указания дополнительной функции оценки соединения нужно быть " +"суперпользователем" + +#: commands/operatorcmds.c:504 #, c-format msgid "operator attribute \"%s\" cannot be changed" msgstr "атрибут оператора \"%s\" нельзя изменить" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:157 #: commands/tablecmds.c:1582 commands/tablecmds.c:2162 #: commands/tablecmds.c:3402 commands/tablecmds.c:6112 -#: commands/tablecmds.c:9048 commands/tablecmds.c:16750 -#: commands/tablecmds.c:16785 commands/trigger.c:313 commands/trigger.c:1289 +#: commands/tablecmds.c:9081 commands/tablecmds.c:16793 +#: commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 #: commands/trigger.c:1398 rewrite/rewriteDefine.c:278 #: rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format @@ -9653,7 +9701,7 @@ msgstr "" "HOLD" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2643 utils/adt/xml.c:2813 +#: executor/execCurrent.c:70 utils/adt/xml.c:2636 utils/adt/xml.c:2806 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" @@ -9663,7 +9711,7 @@ msgstr "курсор \"%s\" не существует" msgid "invalid statement name: must not be empty" msgstr "неверный оператор: имя не должно быть пустым" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1483 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "не удалось определить тип данных параметра $%d" @@ -9712,57 +9760,57 @@ msgid "must be superuser to create custom procedural language" msgstr "" "для создания дополнительного процедурного языка нужно быть суперпользователем" -#: commands/publicationcmds.c:104 +#: commands/publicationcmds.c:109 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "неверный синтаксис параметра \"publish\"" -#: commands/publicationcmds.c:122 +#: commands/publicationcmds.c:127 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "нераспознанное значение \"publish\": \"%s\"" -#: commands/publicationcmds.c:137 +#: commands/publicationcmds.c:142 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "нераспознанный параметр репликации: \"%s\"" -#: commands/publicationcmds.c:169 +#: commands/publicationcmds.c:174 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "для создания публикации всех таблиц нужно быть суперпользователем" -#: commands/publicationcmds.c:250 +#: commands/publicationcmds.c:255 #, c-format msgid "wal_level is insufficient to publish logical changes" msgstr "уровень wal_level недостаточен для публикации логических изменений" -#: commands/publicationcmds.c:251 +#: commands/publicationcmds.c:256 #, c-format msgid "Set wal_level to logical before creating subscriptions." msgstr "Задайте для wal_level значение logical до создания подписок." -#: commands/publicationcmds.c:376 +#: commands/publicationcmds.c:381 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "публикация \"%s\" определена для всех таблиц (FOR ALL TABLES)" -#: commands/publicationcmds.c:378 +#: commands/publicationcmds.c:383 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "В публикации всех таблиц нельзя добавлять или удалять таблицы." -#: commands/publicationcmds.c:707 +#: commands/publicationcmds.c:712 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "отношение \"%s\" не включено в публикацию" -#: commands/publicationcmds.c:750 +#: commands/publicationcmds.c:755 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "нет прав для изменения владельца публикации \"%s\"" -#: commands/publicationcmds.c:752 +#: commands/publicationcmds.c:757 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "" @@ -9937,13 +9985,13 @@ msgstr "" msgid "cannot change ownership of identity sequence" msgstr "сменить владельца последовательности идентификации нельзя" -#: commands/sequence.c:1725 commands/tablecmds.c:13550 -#: commands/tablecmds.c:16165 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 +#: commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Последовательность \"%s\" связана с таблицей \"%s\"." -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "в CREATE STATISTICS можно указать только одно отношение" @@ -9955,27 +10003,27 @@ msgstr "" "отношение \"%s\" - это не таблица, не сторонняя таблица и не " "материализованное представление" -#: commands/statscmds.c:193 +#: commands/statscmds.c:213 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "объект статистики \"%s\" уже существует, пропускается" -#: commands/statscmds.c:201 +#: commands/statscmds.c:221 #, c-format msgid "statistics object \"%s\" already exists" msgstr "объект статистики \"%s\" уже существует" -#: commands/statscmds.c:212 +#: commands/statscmds.c:232 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "в статистике не может быть больше %d столбцов" -#: commands/statscmds.c:253 commands/statscmds.c:276 commands/statscmds.c:309 +#: commands/statscmds.c:273 commands/statscmds.c:296 commands/statscmds.c:329 #, c-format msgid "statistics creation on system columns is not supported" msgstr "создание статистики для системных столбцов не поддерживается" -#: commands/statscmds.c:260 commands/statscmds.c:283 +#: commands/statscmds.c:280 commands/statscmds.c:303 #, c-format msgid "" "column \"%s\" cannot be used in statistics because its type %s has no " @@ -9984,7 +10032,7 @@ msgstr "" "столбец \"%s\" нельзя использовать в статистике, так как для его типа %s не " "определён класс операторов B-дерева по умолчанию" -#: commands/statscmds.c:326 +#: commands/statscmds.c:346 #, c-format msgid "" "expression cannot be used in multivariate statistics because its type %s has " @@ -9993,7 +10041,7 @@ msgstr "" "выражение нельзя использовать в многовариантной статистике, так как для его " "типа %s не определён класс операторов btree по умолчанию" -#: commands/statscmds.c:347 +#: commands/statscmds.c:367 #, c-format msgid "" "when building statistics on a single expression, statistics kinds may not be " @@ -10002,37 +10050,37 @@ msgstr "" "при построении статистики по единственному выражению указывать виды " "статистики нельзя" -#: commands/statscmds.c:376 +#: commands/statscmds.c:396 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "нераспознанный вид статистики \"%s\"" -#: commands/statscmds.c:405 +#: commands/statscmds.c:425 #, c-format msgid "extended statistics require at least 2 columns" msgstr "для расширенной статистики требуются минимум 2 столбца" -#: commands/statscmds.c:423 +#: commands/statscmds.c:443 #, c-format msgid "duplicate column name in statistics definition" msgstr "повторяющееся имя столбца в определении статистики" -#: commands/statscmds.c:458 +#: commands/statscmds.c:478 #, c-format msgid "duplicate expression in statistics definition" msgstr "повторяющееся выражение в определении статистики" -#: commands/statscmds.c:639 commands/tablecmds.c:8014 +#: commands/statscmds.c:659 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "ориентир статистики слишком мал (%d)" -#: commands/statscmds.c:647 commands/tablecmds.c:8022 +#: commands/statscmds.c:667 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "ориентир статистики снижается до %d" -#: commands/statscmds.c:670 +#: commands/statscmds.c:690 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "объект статистики \"%s.%s\" не существует, пропускается" @@ -10062,7 +10110,7 @@ msgid "must be superuser to create subscriptions" msgstr "для создания подписок нужно быть суперпользователем" #: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 -#: replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "не удалось подключиться к серверу публикации: %s" @@ -10110,38 +10158,38 @@ msgid "" "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH для отключённых подписок не допускается" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "подписка \"%s\" не существует, пропускается" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "слот репликации \"%s\" удалён на сервере репликации" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "слот репликации \"%s\" на сервере публикации не был удалён: %s" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "нет прав для изменения владельца подписки \"%s\"" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Владельцем подписки должен быть суперпользователь." -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "" "не удалось получить список реплицируемых таблиц с сервера репликации: %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, c-format msgid "" "could not connect to publisher when attempting to drop replication slot " @@ -10151,7 +10199,7 @@ msgstr "" "\"%s\": %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1581 +#: commands/subscriptioncmds.c:1583 #, c-format msgid "" "Use %s to disable the subscription, and then use %s to disassociate it from " @@ -10160,22 +10208,22 @@ msgstr "" "Выполните %s, чтобы отключить подписку, а затем выполните %s, чтобы отвязать " "её от слота." -#: commands/subscriptioncmds.c:1612 +#: commands/subscriptioncmds.c:1614 #, c-format msgid "publication name \"%s\" used more than once" msgstr "имя публикации \"%s\" используется неоднократно" -#: commands/subscriptioncmds.c:1656 +#: commands/subscriptioncmds.c:1658 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "публикация \"%s\" уже имеется в подписке \"%s\"" -#: commands/subscriptioncmds.c:1670 +#: commands/subscriptioncmds.c:1672 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "публикация \"%s\" отсутствует в подписке \"%s\"" -#: commands/subscriptioncmds.c:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "удалить все публикации из подписки нельзя" @@ -10238,7 +10286,7 @@ msgstr "" "Выполните DROP MATERIALIZED VIEW для удаления материализованного " "представления." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18688 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18753 #: parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" @@ -10262,8 +10310,8 @@ msgstr "\"%s\" - это не тип" msgid "Use DROP TYPE to remove a type." msgstr "Выполните DROP TYPE для удаления типа." -#: commands/tablecmds.c:277 commands/tablecmds.c:13389 -#: commands/tablecmds.c:15868 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 +#: commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "сторонняя таблица \"%s\" не существует" @@ -10289,7 +10337,7 @@ msgstr "" "в рамках операции с ограничениями по безопасности нельзя создать временную " "таблицу" -#: commands/tablecmds.c:738 commands/tablecmds.c:14675 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "отношение \"%s\" наследуется неоднократно" @@ -10366,7 +10414,7 @@ msgstr "опустошить стороннюю таблицу \"%s\" нельз msgid "cannot truncate temporary tables of other sessions" msgstr "временные таблицы других сеансов нельзя опустошить" -#: commands/tablecmds.c:2427 commands/tablecmds.c:14572 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "наследование от секционированной таблицы \"%s\" не допускается" @@ -10391,12 +10439,12 @@ msgstr "" "создать временное отношение в качестве секции постоянного отношения \"%s\" " "нельзя" -#: commands/tablecmds.c:2461 commands/tablecmds.c:14551 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "временное отношение \"%s\" не может наследоваться" -#: commands/tablecmds.c:2471 commands/tablecmds.c:14559 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "наследование от временного отношения другого сеанса невозможно" @@ -10451,7 +10499,7 @@ msgid "inherited column \"%s\" has a generation conflict" msgstr "конфликт свойства генерирования в наследованном столбце \"%s\"" #: commands/tablecmds.c:2682 commands/tablecmds.c:2737 -#: commands/tablecmds.c:12114 parser/parse_utilcmd.c:1260 +#: commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 #: parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 #: parser/parse_utilcmd.c:1857 #, c-format @@ -10788,12 +10836,12 @@ msgstr "добавить столбец в типизированную табл msgid "cannot add column to a partition" msgstr "добавить столбец в секцию нельзя" -#: commands/tablecmds.c:6657 commands/tablecmds.c:14802 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "дочерняя таблица \"%s\" имеет другой тип для столбца \"%s\"" -#: commands/tablecmds.c:6663 commands/tablecmds.c:14809 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "" @@ -10810,22 +10858,22 @@ msgid "cannot recursively add identity column to table that has child tables" msgstr "" "добавить столбец идентификации в таблицу, у которой есть дочерние, нельзя" -#: commands/tablecmds.c:6967 +#: commands/tablecmds.c:7000 #, c-format msgid "column must be added to child tables too" msgstr "столбец также должен быть добавлен к дочерним таблицам" -#: commands/tablecmds.c:7045 +#: commands/tablecmds.c:7078 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "столбец \"%s\" отношения \"%s\" уже существует, пропускается" -#: commands/tablecmds.c:7052 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "столбец \"%s\" отношения \"%s\" уже существует" -#: commands/tablecmds.c:7118 commands/tablecmds.c:11742 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, c-format msgid "" "cannot remove constraint from only the partitioned table when partitions " @@ -10834,70 +10882,70 @@ msgstr "" "удалить ограничение только из секционированной таблицы, когда существуют " "секции, нельзя" -#: commands/tablecmds.c:7119 commands/tablecmds.c:7436 -#: commands/tablecmds.c:8463 commands/tablecmds.c:11743 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 +#: commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Не указывайте ключевое слово ONLY." -#: commands/tablecmds.c:7156 commands/tablecmds.c:7362 -#: commands/tablecmds.c:7504 commands/tablecmds.c:7618 -#: commands/tablecmds.c:7712 commands/tablecmds.c:7771 -#: commands/tablecmds.c:7889 commands/tablecmds.c:8055 -#: commands/tablecmds.c:8125 commands/tablecmds.c:8281 -#: commands/tablecmds.c:11897 commands/tablecmds.c:13412 -#: commands/tablecmds.c:15959 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 +#: commands/tablecmds.c:7537 commands/tablecmds.c:7651 +#: commands/tablecmds.c:7745 commands/tablecmds.c:7804 +#: commands/tablecmds.c:7922 commands/tablecmds.c:8088 +#: commands/tablecmds.c:8158 commands/tablecmds.c:8314 +#: commands/tablecmds.c:11917 commands/tablecmds.c:13455 +#: commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "системный столбец \"%s\" нельзя изменить" -#: commands/tablecmds.c:7162 commands/tablecmds.c:7510 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "столбец \"%s\" отношения \"%s\" является столбцом идентификации" -#: commands/tablecmds.c:7205 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "столбец \"%s\" входит в первичный ключ" -#: commands/tablecmds.c:7210 +#: commands/tablecmds.c:7243 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "столбец \"%s\" входит в индекс, используемый для идентификации реплики" -#: commands/tablecmds.c:7233 +#: commands/tablecmds.c:7266 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "столбец \"%s\" в родительской таблице помечен как NOT NULL" -#: commands/tablecmds.c:7433 commands/tablecmds.c:8946 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, c-format msgid "constraint must be added to child tables too" msgstr "ограничение также должно быть добавлено к дочерним таблицам" -#: commands/tablecmds.c:7434 +#: commands/tablecmds.c:7467 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Столбец \"%s\" отношения \"%s\" уже имеет свойство NOT NULL." -#: commands/tablecmds.c:7512 +#: commands/tablecmds.c:7545 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Вместо этого выполните ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7517 +#: commands/tablecmds.c:7550 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "столбец \"%s\" отношения \"%s\" является генерируемым" -#: commands/tablecmds.c:7520 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "" "Вместо этого выполните ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION." -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7662 #, c-format msgid "" "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity " @@ -10906,46 +10954,46 @@ msgstr "" "столбец \"%s\" отношения \"%s\" должен быть объявлен как NOT NULL, чтобы его " "можно было сделать столбцом идентификации" -#: commands/tablecmds.c:7635 +#: commands/tablecmds.c:7668 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "столбец \"%s\" отношения \"%s\" уже является столбцом идентификации" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:7674 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "столбец \"%s\" отношения \"%s\" уже имеет значение по умолчанию" -#: commands/tablecmds.c:7718 commands/tablecmds.c:7779 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "столбец \"%s\" отношения \"%s\" не является столбцом идентификации" -#: commands/tablecmds.c:7784 +#: commands/tablecmds.c:7817 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "" "столбец \"%s\" отношения \"%s\" не является столбцом идентификации, " "пропускается" -#: commands/tablecmds.c:7837 +#: commands/tablecmds.c:7870 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "" "ALTER TABLE / DROP EXPRESSION нужно применять также к дочерним таблицам" -#: commands/tablecmds.c:7859 +#: commands/tablecmds.c:7892 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "нельзя удалить генерирующее выражение из наследуемого столбца" -#: commands/tablecmds.c:7897 +#: commands/tablecmds.c:7930 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "" "столбец \"%s\" отношения \"%s\" не является сохранённым генерируемым столбцом" -#: commands/tablecmds.c:7902 +#: commands/tablecmds.c:7935 #, c-format msgid "" "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" @@ -10953,63 +11001,63 @@ msgstr "" "столбец \"%s\" отношения \"%s\" пропускается, так как не является " "сохранённым генерируемым столбцом" -#: commands/tablecmds.c:8002 +#: commands/tablecmds.c:8035 #, c-format msgid "cannot refer to non-index column by number" msgstr "по номеру можно ссылаться только на столбец в индексе" -#: commands/tablecmds.c:8045 +#: commands/tablecmds.c:8078 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "столбец с номером %d отношения \"%s\" не существует" -#: commands/tablecmds.c:8064 +#: commands/tablecmds.c:8097 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "изменить статистику включённого столбца \"%s\" индекса \"%s\" нельзя" -#: commands/tablecmds.c:8069 +#: commands/tablecmds.c:8102 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "" "изменить статистику столбца \"%s\" (не выражения) индекса \"%s\" нельзя" -#: commands/tablecmds.c:8071 +#: commands/tablecmds.c:8104 #, c-format msgid "Alter statistics on table column instead." msgstr "Вместо этого измените статистику для столбца в таблице." -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "неверный тип хранилища \"%s\"" -#: commands/tablecmds.c:8293 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип данных столбца %s совместим только с хранилищем PLAIN" -#: commands/tablecmds.c:8338 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "нельзя удалить столбец в типизированной таблице" -#: commands/tablecmds.c:8401 +#: commands/tablecmds.c:8434 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "столбец \"%s\" в таблице\"%s\" не существует, пропускается" -#: commands/tablecmds.c:8414 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "нельзя удалить системный столбец \"%s\"" -#: commands/tablecmds.c:8424 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "нельзя удалить наследованный столбец \"%s\"" -#: commands/tablecmds.c:8437 +#: commands/tablecmds.c:8470 #, c-format msgid "" "cannot drop column \"%s\" because it is part of the partition key of " @@ -11018,7 +11066,7 @@ msgstr "" "удалить столбец \"%s\" нельзя, так как он входит в ключ разбиения отношения " "\"%s\"" -#: commands/tablecmds.c:8462 +#: commands/tablecmds.c:8495 #, c-format msgid "" "cannot drop column from only the partitioned table when partitions exist" @@ -11026,7 +11074,7 @@ msgstr "" "удалить столбец только из секционированной таблицы, когда существуют секции, " "нельзя" -#: commands/tablecmds.c:8666 +#: commands/tablecmds.c:8699 #, c-format msgid "" "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned " @@ -11035,14 +11083,14 @@ msgstr "" "ALTER TABLE / ADD CONSTRAINT USING INDEX не поддерживается с " "секционированными таблицами" -#: commands/tablecmds.c:8691 +#: commands/tablecmds.c:8724 #, 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:9026 +#: commands/tablecmds.c:9059 #, c-format msgid "" "cannot use ONLY for foreign key on partitioned table \"%s\" referencing " @@ -11051,34 +11099,34 @@ msgstr "" "нельзя использовать ONLY для стороннего ключа в секционированной таблице " "\"%s\", ссылающегося на отношение \"%s\"" -#: commands/tablecmds.c:9032 +#: commands/tablecmds.c:9065 #, c-format msgid "" "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing " "relation \"%s\"" msgstr "" -"нельзя добавить с характеристикой NOT VALID сторонний ключ в " -"секционированной таблице \"%s\", ссылающийся на отношение \"%s\"" +"нельзя добавить со свойством NOT VALID сторонний ключ в секционированной " +"таблице \"%s\", ссылающийся на отношение \"%s\"" -#: commands/tablecmds.c:9035 +#: commands/tablecmds.c:9068 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "" "Эта функциональность с секционированными таблицами пока не поддерживается." -#: commands/tablecmds.c:9042 commands/tablecmds.c:9447 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "указанный объект \"%s\" не является таблицей" -#: commands/tablecmds.c:9065 +#: commands/tablecmds.c:9098 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "" "ограничения в постоянных таблицах могут ссылаться только на постоянные " "таблицы" -#: commands/tablecmds.c:9072 +#: commands/tablecmds.c:9105 #, c-format msgid "" "constraints on unlogged tables may reference only permanent or unlogged " @@ -11087,13 +11135,13 @@ msgstr "" "ограничения в нежурналируемых таблицах могут ссылаться только на постоянные " "или нежурналируемые таблицы" -#: commands/tablecmds.c:9078 +#: commands/tablecmds.c:9111 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "" "ограничения во временных таблицах могут ссылаться только на временные таблицы" -#: commands/tablecmds.c:9082 +#: commands/tablecmds.c:9115 #, c-format msgid "" "constraints on temporary tables must involve temporary tables of this session" @@ -11101,7 +11149,7 @@ msgstr "" "ограничения во временных таблицах должны ссылаться только на временные " "таблицы текущего сеанса" -#: commands/tablecmds.c:9148 commands/tablecmds.c:9154 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, c-format msgid "" "invalid %s action for foreign key constraint containing generated column" @@ -11109,28 +11157,28 @@ msgstr "" "некорректное действие %s для ограничения внешнего ключа, содержащего " "генерируемый столбец" -#: commands/tablecmds.c:9170 +#: commands/tablecmds.c:9203 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "число столбцов в источнике и назначении внешнего ключа не совпадает" -#: commands/tablecmds.c:9277 +#: commands/tablecmds.c:9310 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "ограничение внешнего ключа \"%s\" нельзя реализовать" -#: commands/tablecmds.c:9279 +#: commands/tablecmds.c:9312 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Столбцы ключа \"%s\" и \"%s\" имеют несовместимые типы: %s и %s." -#: commands/tablecmds.c:9642 commands/tablecmds.c:10072 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 #: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "ограничения внешнего ключа для сторонних таблиц не поддерживаются" -#: commands/tablecmds.c:10055 +#: commands/tablecmds.c:10075 #, c-format msgid "" "cannot attach table \"%s\" as a partition because it is referenced by " @@ -11139,34 +11187,34 @@ msgstr "" "присоединить таблицу \"%s\" в качестве секции нельзя, так как на неё " "ссылается внешний ключ \"%s\"" -#: commands/tablecmds.c:10525 commands/tablecmds.c:10806 -#: commands/tablecmds.c:11699 commands/tablecmds.c:11774 +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 +#: commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "ограничение \"%s\" в таблице \"%s\" не существует" -#: commands/tablecmds.c:10532 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "ограничение \"%s\" в таблице \"%s\" не является внешним ключом" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:10590 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "изменить ограничение \"%s\" таблицы \"%s\" нельзя" -#: commands/tablecmds.c:10573 +#: commands/tablecmds.c:10593 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "" "Ограничение \"%s\" является производным от ограничения \"%s\" таблицы \"%s\"." -#: commands/tablecmds.c:10575 +#: commands/tablecmds.c:10595 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Вместо этого вы можете изменить родительское ограничение." -#: commands/tablecmds.c:10814 +#: commands/tablecmds.c:10834 #, c-format msgid "" "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" @@ -11174,51 +11222,51 @@ msgstr "" "ограничение \"%s\" в таблице \"%s\" не является внешним ключом или " "ограничением-проверкой" -#: commands/tablecmds.c:10892 +#: commands/tablecmds.c:10912 #, c-format msgid "constraint must be validated on child tables too" msgstr "ограничение также должно соблюдаться в дочерних таблицах" -#: commands/tablecmds.c:10982 +#: commands/tablecmds.c:11002 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "столбец \"%s\", указанный в ограничении внешнего ключа, не существует" -#: commands/tablecmds.c:10988 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "системные столбцы нельзя использовать во внешних ключах" -#: commands/tablecmds.c:10992 +#: commands/tablecmds.c:11012 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "во внешнем ключе не может быть больше %d столбцов" -#: commands/tablecmds.c:11057 +#: commands/tablecmds.c:11077 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "" "использовать откладываемый первичный ключ в целевой внешней таблице \"%s\" " "нельзя" -#: commands/tablecmds.c:11074 +#: commands/tablecmds.c:11094 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "в целевой внешней таблице \"%s\" нет первичного ключа" -#: commands/tablecmds.c:11143 +#: commands/tablecmds.c:11163 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "в списке столбцов внешнего ключа не должно быть повторений" -#: commands/tablecmds.c:11237 +#: commands/tablecmds.c:11257 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "" "использовать откладываемое ограничение уникальности в целевой внешней " "таблице \"%s\" нельзя" -#: commands/tablecmds.c:11242 +#: commands/tablecmds.c:11262 #, c-format msgid "" "there is no unique constraint matching given keys for referenced table \"%s\"" @@ -11226,39 +11274,32 @@ msgstr "" "в целевой внешней таблице \"%s\" нет ограничения уникальности, " "соответствующего данным ключам" -#: commands/tablecmds.c:11655 +#: commands/tablecmds.c:11675 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "удалить наследованное ограничение \"%s\" таблицы \"%s\" нельзя" -#: commands/tablecmds.c:11705 +#: commands/tablecmds.c:11725 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "ограничение \"%s\" в таблице \"%s\" не существует, пропускается" -#: commands/tablecmds.c:11881 +#: commands/tablecmds.c:11901 #, c-format msgid "cannot alter column type of typed table" msgstr "изменить тип столбца в типизированной таблице нельзя" -#: commands/tablecmds.c:11907 +#: commands/tablecmds.c:11927 #, c-format msgid "cannot specify USING when altering type of generated column" msgstr "изменяя тип генерируемого столбца, нельзя указывать USING" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 -#: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "Столбец \"%s\" является генерируемым." - -#: commands/tablecmds.c:11918 +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "изменить наследованный столбец \"%s\" нельзя" -#: commands/tablecmds.c:11927 +#: commands/tablecmds.c:11947 #, c-format msgid "" "cannot alter column \"%s\" because it is part of the partition key of " @@ -11267,7 +11308,7 @@ msgstr "" "изменить столбец \"%s\" нельзя, так как он входит в ключ разбиения отношения " "\"%s\"" -#: commands/tablecmds.c:11977 +#: commands/tablecmds.c:11997 #, c-format msgid "" "result of USING clause for column \"%s\" cannot be cast automatically to " @@ -11275,45 +11316,45 @@ msgid "" msgstr "" "результат USING для столбца \"%s\" нельзя автоматически привести к типу %s" -#: commands/tablecmds.c:11980 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "Возможно, необходимо добавить явное приведение." -#: commands/tablecmds.c:11984 +#: commands/tablecmds.c:12004 #, 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:11988 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Возможно, необходимо указать \"USING %s::%s\"." -#: commands/tablecmds.c:12087 +#: commands/tablecmds.c:12107 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "изменить наследованный столбец \"%s\" отношения \"%s\" нельзя" -#: commands/tablecmds.c:12115 +#: commands/tablecmds.c:12135 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "Выражение USING ссылается на тип всей строки таблицы." -#: commands/tablecmds.c:12126 +#: commands/tablecmds.c:12146 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "" "тип наследованного столбца \"%s\" должен быть изменён и в дочерних таблицах" -#: commands/tablecmds.c:12251 +#: commands/tablecmds.c:12271 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "нельзя изменить тип столбца \"%s\" дважды" -#: commands/tablecmds.c:12289 +#: commands/tablecmds.c:12309 #, c-format msgid "" "generation expression for column \"%s\" cannot be cast automatically to type " @@ -11322,161 +11363,161 @@ msgstr "" "генерирующее выражение для столбца \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:12294 +#: commands/tablecmds.c:12314 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "" "значение по умолчанию для столбца \"%s\" нельзя автоматически привести к " "типу %s" -#: commands/tablecmds.c:12372 +#: commands/tablecmds.c:12392 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "изменить тип столбца, задействованного в генерируемом столбце, нельзя" -#: commands/tablecmds.c:12373 +#: commands/tablecmds.c:12393 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Столбец \"%s\" используется генерируемым столбцом \"%s\"." -#: commands/tablecmds.c:12401 +#: commands/tablecmds.c:12421 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "изменить тип столбца, задействованного в функции или процедуре, нельзя" -#: commands/tablecmds.c:12402 commands/tablecmds.c:12416 -#: commands/tablecmds.c:12435 commands/tablecmds.c:12453 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 +#: commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s зависит от столбца \"%s\"" -#: commands/tablecmds.c:12415 +#: commands/tablecmds.c:12435 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "" "изменить тип столбца, задействованного в представлении или правиле, нельзя" -#: commands/tablecmds.c:12434 +#: commands/tablecmds.c:12454 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "изменить тип столбца, задействованного в определении триггера, нельзя" -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:12472 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "изменить тип столбца, задействованного в определении политики, нельзя" -#: commands/tablecmds.c:13520 commands/tablecmds.c:13532 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "сменить владельца индекса \"%s\" нельзя" -#: commands/tablecmds.c:13522 commands/tablecmds.c:13534 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Однако возможно сменить владельца таблицы, содержащей этот индекс." -#: commands/tablecmds.c:13548 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "сменить владельца последовательности \"%s\" нельзя" -#: commands/tablecmds.c:13562 commands/tablecmds.c:16861 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "Используйте ALTER TYPE." -#: commands/tablecmds.c:13571 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "" "\"%s\" - это не таблица, TOAST-таблица, индекс, представление или " "последовательность" -#: commands/tablecmds.c:13910 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "в одной инструкции не может быть несколько подкоманд SET TABLESPACE" -#: commands/tablecmds.c:13987 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "" "\"%s\" - это не таблица, представление, материализованное представление, " "индекс или TOAST-таблица" -#: commands/tablecmds.c:14020 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "" "WITH CHECK OPTION поддерживается только с автообновляемыми представлениями" -#: commands/tablecmds.c:14273 +#: commands/tablecmds.c:14316 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "" "в табличных пространствах есть только таблицы, индексы и материализованные " "представления" -#: commands/tablecmds.c:14285 +#: commands/tablecmds.c:14328 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "перемещать объекты в/из табличного пространства pg_global нельзя" -#: commands/tablecmds.c:14377 +#: commands/tablecmds.c:14420 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "" "обработка прерывается из-за невозможности заблокировать отношение \"%s.%s\"" -#: commands/tablecmds.c:14393 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "в табличном пространстве \"%s\" не найдены подходящие отношения" -#: commands/tablecmds.c:14510 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "изменить наследование типизированной таблицы нельзя" -#: commands/tablecmds.c:14515 commands/tablecmds.c:15071 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "изменить наследование секции нельзя" -#: commands/tablecmds.c:14520 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "изменить наследование секционированной таблицы нельзя" -#: commands/tablecmds.c:14566 +#: commands/tablecmds.c:14609 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "наследование для временного отношения другого сеанса невозможно" -#: commands/tablecmds.c:14579 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "наследование от секции невозможно" -#: commands/tablecmds.c:14601 commands/tablecmds.c:17507 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17560 #, c-format msgid "circular inheritance not allowed" msgstr "циклическое наследование недопустимо" -#: commands/tablecmds.c:14602 commands/tablecmds.c:17508 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17561 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" уже является потомком \"%s\"." -#: commands/tablecmds.c:14615 +#: commands/tablecmds.c:14658 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "" "триггер \"%s\" не позволяет таблице \"%s\" стать потомком в иерархии " "наследования" -#: commands/tablecmds.c:14617 +#: commands/tablecmds.c:14660 #, c-format msgid "" "ROW triggers with transition tables are not supported in inheritance " @@ -11485,36 +11526,36 @@ msgstr "" "Триггеры ROW с переходными таблицами не поддерживаются в иерархиях " "наследования." -#: commands/tablecmds.c:14820 +#: commands/tablecmds.c:14863 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "столбец \"%s\" в дочерней таблице должен быть помечен как NOT NULL" -#: commands/tablecmds.c:14829 +#: commands/tablecmds.c:14872 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "столбец \"%s\" в дочерней таблице должен быть генерируемым" -#: commands/tablecmds.c:14879 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "" "столбец \"%s\" в дочерней таблице содержит конфликтующее генерирующее " "выражение" -#: commands/tablecmds.c:14907 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "в дочерней таблице не хватает столбца \"%s\"" -#: commands/tablecmds.c:14995 +#: commands/tablecmds.c:15038 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "" "дочерняя таблица \"%s\" содержит другое определение ограничения-проверки " "\"%s\"" -#: commands/tablecmds.c:15003 +#: commands/tablecmds.c:15046 #, c-format msgid "" "constraint \"%s\" conflicts with non-inherited constraint on child table " @@ -11523,7 +11564,7 @@ msgstr "" "ограничение \"%s\" конфликтует с ненаследуемым ограничением дочерней таблицы " "\"%s\"" -#: commands/tablecmds.c:15014 +#: commands/tablecmds.c:15057 #, c-format msgid "" "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" @@ -11531,82 +11572,82 @@ msgstr "" "ограничение \"%s\" конфликтует с непроверенным (NOT VALID) ограничением " "дочерней таблицы \"%s\"" -#: commands/tablecmds.c:15049 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "в дочерней таблице не хватает ограничения \"%s\"" -#: commands/tablecmds.c:15135 +#: commands/tablecmds.c:15178 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "" "секция \"%s\" уже ожидает отсоединения от секционированной таблицы \"%s.%s\"" -#: commands/tablecmds.c:15164 commands/tablecmds.c:15212 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "отношение \"%s\" не является секцией отношения \"%s\"" -#: commands/tablecmds.c:15218 +#: commands/tablecmds.c:15261 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "отношение \"%s\" не является предком отношения \"%s\"" -#: commands/tablecmds.c:15446 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "типизированные таблицы не могут наследоваться" -#: commands/tablecmds.c:15476 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "в таблице не хватает столбца \"%s\"" -#: commands/tablecmds.c:15487 +#: commands/tablecmds.c:15530 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "таблица содержит столбец \"%s\", тогда как тип требует \"%s\"" -#: commands/tablecmds.c:15496 +#: commands/tablecmds.c:15539 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "таблица \"%s\" содержит столбец \"%s\" другого типа" -#: commands/tablecmds.c:15510 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "таблица содержит лишний столбец \"%s\"" -#: commands/tablecmds.c:15562 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" - это не типизированная таблица" -#: commands/tablecmds.c:15736 +#: commands/tablecmds.c:15779 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать неуникальный индекс \"%s\"" -#: commands/tablecmds.c:15742 +#: commands/tablecmds.c:15785 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать не непосредственный индекс " "\"%s\"" -#: commands/tablecmds.c:15748 +#: commands/tablecmds.c:15791 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "" "для идентификации реплики нельзя использовать индекс с выражением \"%s\"" -#: commands/tablecmds.c:15754 +#: commands/tablecmds.c:15797 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "для идентификации реплики нельзя использовать частичный индекс \"%s\"" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:15814 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column %d is a " @@ -11615,7 +11656,7 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как столбец " "%d - системный" -#: commands/tablecmds.c:15778 +#: commands/tablecmds.c:15821 #, c-format msgid "" "index \"%s\" cannot be used as replica identity because column \"%s\" is " @@ -11624,13 +11665,13 @@ msgstr "" "индекс \"%s\" нельзя использовать для идентификации реплики, так как столбец " "\"%s\" допускает NULL" -#: commands/tablecmds.c:16025 +#: commands/tablecmds.c:16068 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "" "изменить состояние журналирования таблицы %s нельзя, так как она временная" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:16092 #, c-format msgid "" "cannot change table \"%s\" to unlogged because it is part of a publication" @@ -11638,12 +11679,12 @@ msgstr "" "таблицу \"%s\" нельзя сделать нежурналируемой, так как она включена в " "публикацию" -#: commands/tablecmds.c:16051 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Нежурналируемые отношения не поддерживают репликацию." -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16139 #, c-format msgid "" "could not change table \"%s\" to logged because it references unlogged table " @@ -11652,7 +11693,7 @@ msgstr "" "не удалось сделать таблицу \"%s\" журналируемой, так как она ссылается на " "нежурналируемую таблицу \"%s\"" -#: commands/tablecmds.c:16106 +#: commands/tablecmds.c:16149 #, c-format msgid "" "could not change table \"%s\" to unlogged because it references logged table " @@ -11661,22 +11702,22 @@ msgstr "" "не удалось сделать таблицу \"%s\" нежурналируемой, так как она ссылается на " "журналируемую таблицу \"%s\"" -#: commands/tablecmds.c:16164 +#: commands/tablecmds.c:16207 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "переместить последовательность с владельцем в другую схему нельзя" -#: commands/tablecmds.c:16269 +#: commands/tablecmds.c:16312 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "отношение \"%s\" уже существует в схеме \"%s\"" -#: commands/tablecmds.c:16844 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" - это не составной тип" -#: commands/tablecmds.c:16876 +#: commands/tablecmds.c:16919 #, c-format msgid "" "\"%s\" is not a table, view, materialized view, sequence, or foreign table" @@ -11684,56 +11725,56 @@ msgstr "" "\"%s\" - это не таблица, представление, мат. представление, " "последовательность или сторонняя таблица" -#: commands/tablecmds.c:16911 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "нераспознанная стратегия секционирования \"%s\"" -#: commands/tablecmds.c:16919 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "стратегия секционирования по списку не поддерживает несколько столбцов" -#: commands/tablecmds.c:16985 +#: commands/tablecmds.c:17028 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "столбец \"%s\", упомянутый в ключе секционирования, не существует" -#: commands/tablecmds.c:16993 +#: commands/tablecmds.c:17036 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "системный столбец \"%s\" нельзя использовать в ключе секционирования" -#: commands/tablecmds.c:17004 commands/tablecmds.c:17094 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17126 #, c-format msgid "cannot use generated column in partition key" msgstr "генерируемый столбец нельзя использовать в ключе секционирования" -#: commands/tablecmds.c:17077 +#: commands/tablecmds.c:17116 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "" "выражения ключей секционирования не могут содержать ссылки на системный " "столбец" -#: commands/tablecmds.c:17124 +#: commands/tablecmds.c:17177 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "" "функции в выражении ключа секционирования должны быть помечены как IMMUTABLE" -#: commands/tablecmds.c:17133 +#: commands/tablecmds.c:17186 #, c-format msgid "cannot use constant expression as partition key" msgstr "" "в качестве ключа секционирования нельзя использовать константное выражение" -#: commands/tablecmds.c:17154 +#: commands/tablecmds.c:17207 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "не удалось определить правило сортировки для выражения секционирования" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17242 #, c-format msgid "" "You must specify a hash operator class or define a default hash operator " @@ -11742,7 +11783,7 @@ msgstr "" "Вы должны указать класс операторов хеширования или определить класс " "операторов хеширования по умолчанию для этого типа данных." -#: commands/tablecmds.c:17195 +#: commands/tablecmds.c:17248 #, c-format msgid "" "You must specify a btree operator class or define a default btree operator " @@ -11751,27 +11792,27 @@ msgstr "" "Вы должны указать класс операторов B-дерева или определить класс операторов " "B-дерева по умолчанию для этого типа данных." -#: commands/tablecmds.c:17447 +#: commands/tablecmds.c:17500 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" уже является секцией" -#: commands/tablecmds.c:17453 +#: commands/tablecmds.c:17506 #, c-format msgid "cannot attach a typed table as partition" msgstr "подключить типизированную таблицу в качестве секции нельзя" -#: commands/tablecmds.c:17469 +#: commands/tablecmds.c:17522 #, c-format msgid "cannot attach inheritance child as partition" msgstr "подключить потомок в иерархии наследования в качестве секции нельзя" -#: commands/tablecmds.c:17483 +#: commands/tablecmds.c:17536 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "подключить родитель в иерархии наследования в качестве секции нельзя" -#: commands/tablecmds.c:17517 +#: commands/tablecmds.c:17570 #, c-format msgid "" "cannot attach a temporary relation as partition of permanent relation \"%s\"" @@ -11779,7 +11820,7 @@ msgstr "" "подключить временное отношение в качестве секции постоянного отношения " "\"%s\" нельзя" -#: commands/tablecmds.c:17525 +#: commands/tablecmds.c:17578 #, c-format msgid "" "cannot attach a permanent relation as partition of temporary relation \"%s\"" @@ -11787,92 +11828,92 @@ msgstr "" "подключить постоянное отношение в качестве секции временного отношения " "\"%s\" нельзя" -#: commands/tablecmds.c:17533 +#: commands/tablecmds.c:17586 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "подключить секцию к временному отношению в другом сеансе нельзя" -#: commands/tablecmds.c:17540 +#: commands/tablecmds.c:17593 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "" "подключить временное отношение из другого сеанса в качестве секции нельзя" -#: commands/tablecmds.c:17560 +#: commands/tablecmds.c:17613 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "" "таблица \"%s\" содержит столбец \"%s\", отсутствующий в родителе \"%s\"" -#: commands/tablecmds.c:17563 +#: commands/tablecmds.c:17616 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "" "Новая секция может содержать только столбцы, имеющиеся в родительской " "таблице." -#: commands/tablecmds.c:17575 +#: commands/tablecmds.c:17628 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "триггер \"%s\" не позволяет сделать таблицу \"%s\" секцией" -#: commands/tablecmds.c:17577 commands/trigger.c:459 +#: commands/tablecmds.c:17630 commands/trigger.c:459 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "триггеры ROW с переходными таблицами для секций не поддерживаются" -#: commands/tablecmds.c:17756 +#: commands/tablecmds.c:17809 #, c-format msgid "" "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "" "нельзя присоединить стороннюю таблицу \"%s\" в качестве секции таблицы \"%s\"" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:17812 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Секционированная таблица \"%s\" содержит уникальные индексы." -#: commands/tablecmds.c:18083 +#: commands/tablecmds.c:18137 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "" "секции нельзя отсоединять в режиме CONCURRENTLY, когда существует секция по " "умолчанию" -#: commands/tablecmds.c:18192 +#: commands/tablecmds.c:18249 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "секционированная таблица \"%s\" была параллельно удалена" -#: commands/tablecmds.c:18198 +#: commands/tablecmds.c:18255 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "секция \"%s\" была параллельно удалена" -#: commands/tablecmds.c:18722 commands/tablecmds.c:18742 -#: commands/tablecmds.c:18762 commands/tablecmds.c:18781 -#: commands/tablecmds.c:18823 +#: commands/tablecmds.c:18787 commands/tablecmds.c:18807 +#: commands/tablecmds.c:18827 commands/tablecmds.c:18846 +#: commands/tablecmds.c:18888 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "нельзя присоединить индекс \"%s\" в качестве секции индекса \"%s\"" -#: commands/tablecmds.c:18725 +#: commands/tablecmds.c:18790 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Индекс \"%s\" уже присоединён к другому индексу." -#: commands/tablecmds.c:18745 +#: commands/tablecmds.c:18810 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Индекс \"%s\" не является индексом какой-либо секции таблицы \"%s\"." -#: commands/tablecmds.c:18765 +#: commands/tablecmds.c:18830 #, c-format msgid "The index definitions do not match." msgstr "Определения индексов не совпадают." -#: commands/tablecmds.c:18784 +#: commands/tablecmds.c:18849 #, c-format msgid "" "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint " @@ -11881,23 +11922,23 @@ msgstr "" "Индекс \"%s\" принадлежит ограничению в таблице \"%s\", но для индекса " "\"%s\" ограничения нет." -#: commands/tablecmds.c:18826 +#: commands/tablecmds.c:18891 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "К секции \"%s\" уже присоединён другой индекс." -#: commands/tablecmds.c:19063 +#: commands/tablecmds.c:19128 #, c-format msgid "column data type %s does not support compression" msgstr "тим данных столбца %s не поддерживает сжатие" -#: commands/tablecmds.c:19070 +#: commands/tablecmds.c:19135 #, c-format msgid "invalid compression method \"%s\"" msgstr "неверный метод сжатия \"%s\"" #: commands/tablespace.c:161 commands/tablespace.c:177 -#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1478 +#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1538 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" @@ -11999,8 +12040,8 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "каталог \"%s\" уже используется как табличное пространство" #: commands/tablespace.c:768 commands/tablespace.c:781 -#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3169 -#: storage/file/fd.c:3560 +#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 +#: storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "ошибка при удалении каталога \"%s\": %m" @@ -12250,18 +12291,18 @@ msgstr "триггер \"%s\" для таблицы \"%s\" не существу msgid "permission denied: \"%s\" is a system trigger" msgstr "нет доступа: \"%s\" - это системный триггер" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "триггерная функция %u вернула значение NULL" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 -#: commands/trigger.c:3056 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 +#: commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "триггер BEFORE STATEMENT не может возвращать значение" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, c-format msgid "" "moving row to another partition during a BEFORE FOR EACH ROW trigger is not " @@ -12269,7 +12310,7 @@ msgid "" msgstr "" "в триггере BEFORE FOR EACH ROW нельзя перемещать строку в другую секцию" -#: commands/trigger.c:2356 +#: commands/trigger.c:2358 #, c-format msgid "" "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." @@ -12277,9 +12318,14 @@ msgstr "" "До выполнения триггера \"%s\" строка должна была находиться в секции \"%s." "%s\"." -#: commands/trigger.c:3123 executor/nodeModifyTable.c:1314 -#: executor/nodeModifyTable.c:1388 executor/nodeModifyTable.c:1969 -#: executor/nodeModifyTable.c:2059 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 +#, c-format +msgid "cannot collect transition tuples from child foreign tables" +msgstr "собрать переходные кортежи из дочерних сторонних таблиц нельзя" + +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 +#: executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 +#: executor/nodeModifyTable.c:2079 #, c-format msgid "" "Consider using an AFTER trigger instead of a BEFORE trigger to propagate " @@ -12288,33 +12334,33 @@ msgstr "" "Возможно, для распространения изменений в другие строки следует использовать " "триггер AFTER вместо BEFORE." -#: commands/trigger.c:3152 executor/nodeLockRows.c:229 -#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:238 -#: executor/nodeModifyTable.c:1330 executor/nodeModifyTable.c:1986 -#: executor/nodeModifyTable.c:2232 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 +#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 +#: executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 +#: executor/nodeModifyTable.c:2252 #, c-format msgid "could not serialize access due to concurrent update" msgstr "не удалось сериализовать доступ из-за параллельного изменения" -#: commands/trigger.c:3160 executor/nodeModifyTable.c:1420 -#: executor/nodeModifyTable.c:2076 executor/nodeModifyTable.c:2256 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 +#: executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2268 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "не удалось сериализовать доступ из-за параллельного удаления" -#: commands/trigger.c:4254 +#: commands/trigger.c:4284 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "" "в рамках операции с ограничениями по безопасности нельзя вызвать отложенный " "триггер" -#: commands/trigger.c:5302 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "ограничение \"%s\" не является откладываемым" -#: commands/trigger.c:5325 +#: commands/trigger.c:5359 #, c-format msgid "constraint \"%s\" does not exist" msgstr "ограничение \"%s\" не существует" @@ -12497,8 +12543,7 @@ msgstr "конфликтующие ограничения NULL/NOT NULL" #: commands/typecmds.c:970 #, c-format msgid "check constraints for domains cannot be marked NO INHERIT" -msgstr "" -"ограничения-проверки для доменов не могут иметь характеристики NO INHERIT" +msgstr "ограничения-проверки для доменов не могут иметь свойства NO INHERIT" #: commands/typecmds.c:979 commands/typecmds.c:2975 #, c-format @@ -12823,7 +12868,7 @@ msgid "permission denied to create role" msgstr "нет прав для создания роли" #: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 -#: utils/adt/acl.c:5248 utils/adt/acl.c:5254 gram.y:15260 gram.y:15305 +#: utils/adt/acl.c:5265 utils/adt/acl.c:5271 gram.y:15260 gram.y:15305 #, c-format msgid "role name \"%s\" is reserved" msgstr "имя роли \"%s\" зарезервировано" @@ -12901,8 +12946,8 @@ msgstr "использовать специальную роль в DROP ROLE н #: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 #: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 -#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:755 +#: utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 +#: utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "роль \"%s\" не существует" @@ -13007,119 +13052,119 @@ msgstr "роль \"%s\" уже включена в роль \"%s\"" msgid "role \"%s\" is not a member of role \"%s\"" msgstr "роль \"%s\" не включена в роль \"%s\"" -#: commands/vacuum.c:133 +#: commands/vacuum.c:134 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "нераспознанный параметр ANALYZE: \"%s\"" -#: commands/vacuum.c:171 +#: commands/vacuum.c:172 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "для параметра parallel требуется значение от 0 до %d" -#: commands/vacuum.c:183 +#: commands/vacuum.c:184 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "" "число параллельных исполнителей для выполнения очистки должно быть от 0 до %d" -#: commands/vacuum.c:200 +#: commands/vacuum.c:201 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "нераспознанный параметр VACUUM: \"%s\"" -#: commands/vacuum.c:223 +#: commands/vacuum.c:224 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL нельзя выполнять в параллельном режиме" -#: commands/vacuum.c:239 +#: commands/vacuum.c:240 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "если задаётся список столбцов, необходимо указать ANALYZE" -#: commands/vacuum.c:329 +#: commands/vacuum.c:330 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s нельзя выполнить в ходе VACUUM или ANALYZE" -#: commands/vacuum.c:339 +#: commands/vacuum.c:340 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "Параметр VACUUM DISABLE_PAGE_SKIPPING нельзя использовать с FULL" -#: commands/vacuum.c:346 +#: commands/vacuum.c:347 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "VACUUM FULL работает только с PROCESS_TOAST" -#: commands/vacuum.c:587 +#: commands/vacuum.c:597 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "" "\"%s\" пропускается --- только суперпользователь может очистить это отношение" -#: commands/vacuum.c:591 +#: commands/vacuum.c:601 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "" "\"%s\" пропускается --- только суперпользователь или владелец БД может " "очистить это отношение" -#: commands/vacuum.c:595 +#: commands/vacuum.c:605 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "" "\"%s\" пропускается --- только владелец базы данных или этой таблицы может " "очистить её" -#: commands/vacuum.c:610 +#: commands/vacuum.c:620 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "" "\"%s\" пропускается --- только суперпользователь может анализировать это " "отношение" -#: commands/vacuum.c:614 +#: commands/vacuum.c:624 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "" "\"%s\" пропускается --- только суперпользователь или владелец БД может " "анализировать это отношение" -#: commands/vacuum.c:618 +#: commands/vacuum.c:628 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "" "\"%s\" пропускается --- только владелец таблицы или БД может анализировать " "это отношение" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:707 commands/vacuum.c:803 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "очистка \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:702 +#: commands/vacuum.c:712 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "очистка \"%s\" пропускается --- это отношение более не существует" -#: commands/vacuum.c:718 commands/vacuum.c:798 +#: commands/vacuum.c:728 commands/vacuum.c:808 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "анализ \"%s\" пропускается --- блокировка недоступна" -#: commands/vacuum.c:723 +#: commands/vacuum.c:733 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "анализ \"%s\" пропускается --- это отношение более не существует" -#: commands/vacuum.c:1041 +#: commands/vacuum.c:1051 #, c-format msgid "oldest xmin is far in the past" msgstr "самый старый xmin далеко в прошлом" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1052 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -13131,12 +13176,12 @@ msgstr "" "Возможно, вам также придётся зафиксировать или откатить старые " "подготовленные транзакции и удалить неиспользуемые слоты репликации." -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1093 #, c-format msgid "oldest multixact is far in the past" msgstr "самый старый multixact далеко в прошлом" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1094 #, c-format msgid "" "Close open transactions with multixacts soon to avoid wraparound problems." @@ -13144,27 +13189,27 @@ msgstr "" "Скорее закройте открытые транзакции в мультитранзакциях, чтобы избежать " "проблемы зацикливания." -#: commands/vacuum.c:1769 +#: commands/vacuum.c:1779 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "" "есть базы данных, которые не очищались на протяжении более чем 2 миллиардов " "транзакций" -#: commands/vacuum.c:1770 +#: commands/vacuum.c:1780 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "" "Возможно, вы уже потеряли данные в результате зацикливания ID транзакций." -#: commands/vacuum.c:1938 +#: commands/vacuum.c:1961 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "" "\"%s\" пропускается --- очищать не таблицы или специальные системные таблицы " "нельзя" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 #: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." @@ -13395,8 +13440,8 @@ msgstr "не найдено значение параметра %d" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 #: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 #: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 -#: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 -#: executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, c-format msgid "table row type and query-specified row type do not match" msgstr "тип строки таблицы отличается от типа строки-результата запроса" @@ -13406,21 +13451,21 @@ msgstr "тип строки таблицы отличается от типа с msgid "Query has too many columns." msgstr "Запрос возвращает больше столбцов." -#: executor/execExpr.c:644 executor/nodeModifyTable.c:156 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "" "Запрос выдаёт значение для удалённого столбца (с порядковым номером %d)." #: executor/execExpr.c:650 executor/execExprInterp.c:4063 -#: executor/nodeModifyTable.c:139 +#: executor/nodeModifyTable.c:174 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "" "В таблице определён тип %s (номер столбца: %d), а в запросе предполагается " "%s." -#: executor/execExpr.c:1098 parser/parse_agg.c:828 +#: executor/execExpr.c:1098 parser/parse_agg.c:881 #, c-format msgid "window function calls cannot be nested" msgstr "вложенные вызовы оконных функций недопустимы" @@ -13501,8 +13546,8 @@ msgstr "" #: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 -#: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 -#: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 +#: utils/adt/arrayfuncs.c:3515 utils/adt/arrayfuncs.c:5586 +#: utils/adt/arrayfuncs.c:6105 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" @@ -13522,8 +13567,8 @@ msgstr "" #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 #: utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 #: utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 -#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 -#: utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 +#: utils/adt/arrayfuncs.c:3545 utils/adt/arrayfuncs.c:6197 +#: utils/adt/arrayfuncs.c:6538 utils/adt/arrayutils.c:88 #: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" @@ -13598,24 +13643,24 @@ msgstr "Ключ %s конфликтует с существующим ключ msgid "Key conflicts with existing key." msgstr "Ключ конфликтует с уже существующим." -#: executor/execMain.c:1006 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "последовательность \"%s\" изменить нельзя" -#: executor/execMain.c:1012 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 -#: rewrite/rewriteHandler.c:3986 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3148 +#: rewrite/rewriteHandler.c:4010 #, c-format msgid "cannot insert into view \"%s\"" msgstr "вставить данные в представление \"%s\" нельзя" -#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 -#: rewrite/rewriteHandler.c:3989 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3151 +#: rewrite/rewriteHandler.c:4013 #, c-format msgid "" "To enable inserting into the view, provide an INSTEAD OF INSERT trigger or " @@ -13624,14 +13669,14 @@ msgstr "" "Чтобы представление допускало добавление данных, установите триггер INSTEAD " "OF INSERT или безусловное правило ON INSERT DO INSTEAD." -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 -#: rewrite/rewriteHandler.c:3994 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3156 +#: rewrite/rewriteHandler.c:4018 #, c-format msgid "cannot update view \"%s\"" msgstr "изменить данные в представлении \"%s\" нельзя" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 -#: rewrite/rewriteHandler.c:3997 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:4021 #, c-format msgid "" "To enable updating the view, provide an INSTEAD OF UPDATE trigger or an " @@ -13640,14 +13685,14 @@ msgstr "" "Чтобы представление допускало изменение данных, установите триггер INSTEAD " "OF UPDATE или безусловное правило ON UPDATE DO INSTEAD." -#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 -#: rewrite/rewriteHandler.c:4002 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3164 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "cannot delete from view \"%s\"" msgstr "удалить данные из представления \"%s\" нельзя" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 -#: rewrite/rewriteHandler.c:4005 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3167 +#: rewrite/rewriteHandler.c:4029 #, c-format msgid "" "To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an " @@ -13656,119 +13701,119 @@ msgstr "" "Чтобы представление допускало удаление данных, установите триггер INSTEAD OF " "DELETE или безусловное правило ON DELETE DO INSTEAD." -#: executor/execMain.c:1059 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "изменить материализованное представление \"%s\" нельзя" -#: executor/execMain.c:1071 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "вставлять данные в стороннюю таблицу \"%s\" нельзя" -#: executor/execMain.c:1077 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "сторонняя таблица \"%s\" не допускает добавления" -#: executor/execMain.c:1084 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "изменять данные в сторонней таблице \"%s\"" -#: executor/execMain.c:1090 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "сторонняя таблица \"%s\" не допускает изменения" -#: executor/execMain.c:1097 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "удалять данные из сторонней таблицы \"%s\" нельзя" -#: executor/execMain.c:1103 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "сторонняя таблица \"%s\" не допускает удаления" -#: executor/execMain.c:1114 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "отношение \"%s\" изменить нельзя" -#: executor/execMain.c:1141 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "блокировать строки в последовательности \"%s\" нельзя" -#: executor/execMain.c:1148 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "блокировать строки в TOAST-отношении \"%s\" нельзя" -#: executor/execMain.c:1155 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "блокировать строки в представлении \"%s\" нельзя" -#: executor/execMain.c:1163 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокировать строки в материализованном представлении \"%s\" нельзя" -#: executor/execMain.c:1172 executor/execMain.c:2591 +#: executor/execMain.c:1192 executor/execMain.c:2613 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "блокировать строки в сторонней таблице \"%s\" нельзя" -#: executor/execMain.c:1178 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "блокировать строки в отношении \"%s\" нельзя" -#: executor/execMain.c:1807 +#: executor/execMain.c:1827 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "новая строка в отношении \"%s\" нарушает ограничение секции" -#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 -#: executor/execMain.c:2051 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 +#: executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "Ошибочная строка содержит %s." -#: executor/execMain.c:1889 +#: executor/execMain.c:1909 #, c-format msgid "" "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "" "значение NULL в столбце \"%s\" отношения \"%s\" нарушает ограничение NOT NULL" -#: executor/execMain.c:1940 +#: executor/execMain.c:1960 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новая строка в отношении \"%s\" нарушает ограничение-проверку \"%s\"" -#: executor/execMain.c:2049 +#: executor/execMain.c:2069 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "новая строка нарушает ограничение-проверку для представления \"%s\"" -#: executor/execMain.c:2059 +#: executor/execMain.c:2079 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" для таблицы " "\"%s\"" -#: executor/execMain.c:2064 +#: executor/execMain.c:2084 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "" "новая строка нарушает политику защиты на уровне строк для таблицы \"%s\"" -#: executor/execMain.c:2071 +#: executor/execMain.c:2091 #, c-format msgid "" "new row violates row-level security policy \"%s\" (USING expression) for " @@ -13777,7 +13822,7 @@ msgstr "" "новая строка нарушает политику защиты на уровне строк \"%s\" (выражение " "USING) для таблицы \"%s\"" -#: executor/execMain.c:2076 +#: executor/execMain.c:2096 #, c-format msgid "" "new row violates row-level security policy (USING expression) for table " @@ -13815,10 +13860,10 @@ msgstr "параллельное изменение; следует повтор msgid "concurrent delete, retrying" msgstr "параллельное удаление; следует повторная попытка" -#: executor/execReplication.c:277 parser/parse_cte.c:301 +#: executor/execReplication.c:277 parser/parse_cte.c:302 #: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 -#: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 -#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6255 +#: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3870 +#: utils/adt/arrayfuncs.c:4424 utils/adt/arrayfuncs.c:6418 #: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" @@ -14029,7 +14074,7 @@ msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "" "неожиданный конец файла для ленты %d: запрашивалось байт: %zu, прочитано: %zu" -#: executor/nodeAgg.c:3979 parser/parse_agg.c:670 parser/parse_agg.c:698 +#: executor/nodeAgg.c:3979 parser/parse_agg.c:677 parser/parse_agg.c:720 #, c-format msgid "aggregate function calls cannot be nested" msgstr "вложенные вызовы агрегатных функций недопустимы" @@ -14090,10 +14135,16 @@ msgstr "" #: executor/nodeModifyTable.c:164 #, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "" +"Запрос выдаёт значение для генерируемого столбца (с порядковым номером %d)." + +#: executor/nodeModifyTable.c:184 +#, c-format msgid "Query has too few columns." msgstr "Запрос возвращает меньше столбцов." -#: executor/nodeModifyTable.c:1313 executor/nodeModifyTable.c:1387 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, c-format msgid "" "tuple to be deleted was already modified by an operation triggered by the " @@ -14102,12 +14153,12 @@ msgstr "" "кортеж, который должен быть удалён, уже модифицирован в операции, вызванной " "текущей командой" -#: executor/nodeModifyTable.c:1591 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "неверное указание ON UPDATE" -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:1612 #, c-format msgid "" "The result tuple would appear in a different partition than the original " @@ -14116,12 +14167,12 @@ msgstr "" "Результирующий кортеж окажется перемещённым из секции исходного кортежа в " "другую." -#: executor/nodeModifyTable.c:2211 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "команда ON CONFLICT DO UPDATE не может менять строку повторно" -#: executor/nodeModifyTable.c:2212 +#: executor/nodeModifyTable.c:2232 #, c-format msgid "" "Ensure that no rows proposed for insertion within the same command have " @@ -14140,8 +14191,8 @@ 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:306 executor/nodeSubplan.c:332 +#: executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "подзапрос в выражении вернул больше одной строки" @@ -14249,7 +14300,7 @@ msgstr "не удалось открыть запрос %s как курсор" msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE не поддерживается" -#: executor/spi.c:1730 parser/analyze.c:2864 +#: executor/spi.c:1730 parser/analyze.c:2865 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Прокручиваемые курсоры должны быть READ ONLY." @@ -14290,7 +14341,7 @@ msgstr "не удалось передать кортеж в очередь в msgid "user mapping not found for \"%s\"" msgstr "сопоставление пользователя для \"%s\" не найдено" -#: foreign/foreign.c:331 optimizer/plan/createplan.c:7047 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 #: optimizer/util/plancat.c:474 #, c-format msgid "access to non-system foreign table is restricted" @@ -14480,94 +14531,94 @@ msgstr "Некорректное подтверждение в последне msgid "Garbage found at the end of client-final-message." msgstr "Мусор в конце последнего сообщения клиента." -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "" "пользователь \"%s\" не прошёл проверку подлинности: не разрешённый компьютер" -#: libpq/auth.c:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (\"trust\")" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (Ident)" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (Peer)" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (по паролю)" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (GSSAPI)" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (SSPI)" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (PAM)" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (BSD)" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (LDAP)" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (по сертификату)" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "пользователь \"%s\" не прошёл проверку подлинности (RADIUS)" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "" "пользователь \"%s\" не прошёл проверку подлинности: неверный метод проверки" -#: libpq/auth.c:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "Подключение соответствует строке %d в pg_hba.conf: \"%s\"" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "аутентификационный идентификатор указан повторно" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "предыдущий идентификатор: \"%s\"; новый: \"%s\"" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "соединение аутентифицировано: идентификатор=\"%s\" метод=%s (%s:%d)" -#: libpq/auth.c:420 +#: libpq/auth.c:428 #, c-format msgid "" "client certificates can only be checked if a root certificate store is " @@ -14576,25 +14627,25 @@ msgstr "" "сертификаты клиентов могут проверяться, только если доступно хранилище " "корневых сертификатов" -#: libpq/auth.c:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "для подключения требуется годный сертификат клиента" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "Шифрование GSS" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "Шифрование SSL" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "без шифрования" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, c-format msgid "" "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" @@ -14603,7 +14654,7 @@ msgstr "" "пользователь \"%s\", \"%s\"" #. translator: last %s describes encryption state -#: libpq/auth.c:480 +#: libpq/auth.c:488 #, c-format msgid "" "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database " @@ -14612,38 +14663,38 @@ msgstr "" "pg_hba.conf отвергает подключение: компьютер \"%s\", пользователь \"%s\", " "база данных \"%s\", %s" -#: libpq/auth.c:518 +#: libpq/auth.c:526 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "" "IP-адрес клиента разрешается в \"%s\", соответствует прямому преобразованию." -#: libpq/auth.c:521 +#: libpq/auth.c:529 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "" "IP-адрес клиента разрешается в \"%s\", прямое преобразование не проверялось." -#: libpq/auth.c:524 +#: libpq/auth.c:532 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "" "IP-адрес клиента разрешается в \"%s\", это не соответствует прямому " "преобразованию." -#: libpq/auth.c:527 +#: libpq/auth.c:535 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "" "Преобразовать имя клиентского компьютера \"%s\" в IP-адрес не удалось: %s." -#: libpq/auth.c:532 +#: libpq/auth.c:540 #, 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:540 +#: libpq/auth.c:548 #, c-format msgid "" "no pg_hba.conf entry for replication connection from host \"%s\", user " @@ -14653,29 +14704,29 @@ msgstr "" "компьютера \"%s\" для пользователя \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:548 +#: libpq/auth.c:556 #, 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:721 +#: libpq/auth.c:729 #, c-format msgid "expected password response, got message type %d" msgstr "ожидался ответ с паролем, но получено сообщение %d" -#: libpq/auth.c:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "неверный размер пакета с паролем" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "клиент возвратил пустой пароль" -#: libpq/auth.c:885 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "" "MD5 authentication is not supported when \"db_user_namespace\" is enabled" @@ -14683,230 +14734,230 @@ msgstr "" "проверка подлинности MD5 не поддерживается, когда включён режим " "\"db_user_namespace\"" -#: libpq/auth.c:891 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "не удалось сгенерировать случайную соль для MD5" -#: libpq/auth.c:957 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "ожидался ответ SASL, но получено сообщение %d" -#: libpq/auth.c:1086 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "не удалось задать переменную окружения: %m" -#: libpq/auth.c:1122 +#: libpq/auth.c:1130 #, c-format msgid "expected GSS response, got message type %d" msgstr "ожидался ответ GSS, но получено сообщение %d" -#: libpq/auth.c:1182 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "принять контекст безопасности GSS не удалось" -#: libpq/auth.c:1223 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "получить имя пользователя GSS не удалось" -#: libpq/auth.c:1372 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "не удалось получить удостоверение SSPI" -#: libpq/auth.c:1397 +#: libpq/auth.c:1405 #, c-format msgid "expected SSPI response, got message type %d" msgstr "ожидался ответ SSPI, но получено сообщение %d" -#: libpq/auth.c:1475 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "принять контекст безопасности SSPI не удалось" -#: libpq/auth.c:1537 +#: libpq/auth.c:1545 msgid "could not get token from SSPI security context" msgstr "не удалось получить маркер из контекста безопасности SSPI" -#: libpq/auth.c:1676 libpq/auth.c:1695 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "не удалось преобразовать имя" -#: libpq/auth.c:1708 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "имя области слишком длинное" -#: libpq/auth.c:1723 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "преобразованное имя учётной записи слишком длинное" -#: libpq/auth.c:1904 +#: libpq/auth.c:1912 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "не удалось создать сокет для подключения к серверу Ident: %m" -#: libpq/auth.c:1919 +#: libpq/auth.c:1927 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "не удалось привязаться к локальному адресу \"%s\": %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1939 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "не удалось подключиться к серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1953 +#: libpq/auth.c:1961 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось отправить запрос серверу Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1970 +#: libpq/auth.c:1978 #, c-format msgid "" "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "" "не удалось получить ответ от сервера Ident по адресу \"%s\", порт %s: %m" -#: libpq/auth.c:1980 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "неверно форматированный ответ от сервера Ident: \"%s\"" -#: libpq/auth.c:2033 +#: libpq/auth.c:2041 #, c-format msgid "peer authentication is not supported on this platform" msgstr "проверка подлинности peer в этой ОС не поддерживается" -#: libpq/auth.c:2037 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "не удалось получить данные пользователя через механизм peer: %m" -#: libpq/auth.c:2049 +#: libpq/auth.c:2057 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "найти локального пользователя по идентификатору (%ld) не удалось: %s" -#: libpq/auth.c:2150 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "ошибка в нижележащем слое PAM: %s" -#: libpq/auth.c:2161 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "неподдерживаемое сообщение ответа PAM %d/\"%s\"" -#: libpq/auth.c:2221 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "не удалось создать аутентификатор PAM: %s" -#: libpq/auth.c:2232 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "ошибка в pam_set_item(PAM_USER): %s" -#: libpq/auth.c:2264 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "ошибка в pam_set_item(PAM_RHOST): %s" -#: libpq/auth.c:2276 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "ошибка в pam_set_item(PAM_CONV): %s" -#: libpq/auth.c:2289 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "ошибка в pam_authenticate: %s" -#: libpq/auth.c:2302 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "ошибка в pam_acct_mgmt: %s" -#: libpq/auth.c:2313 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "не удалось освободить аутентификатор PAM: %s" -#: libpq/auth.c:2393 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "не удалось инициализировать LDAP (код ошибки: %d)" -#: libpq/auth.c:2430 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "не удалось извлечь имя домена из ldapbasedn" -#: libpq/auth.c:2438 +#: libpq/auth.c:2446 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "для аутентификации LDAP не удалось найти записи DNS SRV для \"%s\"" -#: libpq/auth.c:2440 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Задайте имя сервера LDAP явным образом." -#: libpq/auth.c:2492 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "не удалось инициализировать LDAP: %s" -#: libpq/auth.c:2502 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "протокол ldaps с текущей библиотекой LDAP не поддерживается" -#: libpq/auth.c:2510 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "не удалось инициализировать LDAP: %m" -#: libpq/auth.c:2520 +#: libpq/auth.c:2528 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "не удалось задать версию протокола LDAP: %s" -#: libpq/auth.c:2560 +#: libpq/auth.c:2568 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "не удалось найти функцию _ldap_start_tls_sA в wldap32.dll" -#: libpq/auth.c:2561 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP через SSL не поддерживается в этой ОС." -#: libpq/auth.c:2577 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "не удалось начать сеанс LDAP TLS: %s" -#: libpq/auth.c:2648 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP-сервер не задан и значение ldapbasedn не определено" -#: libpq/auth.c:2655 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "LDAP-сервер не определён" -#: libpq/auth.c:2717 +#: libpq/auth.c:2725 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "недопустимый символ в имени пользователя для проверки подлинности LDAP" -#: libpq/auth.c:2734 +#: libpq/auth.c:2742 #, c-format msgid "" "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": " @@ -14915,28 +14966,28 @@ msgstr "" "не удалось выполнить начальную привязку LDAP для ldapbinddn \"%s\" на " "сервере \"%s\": %s" -#: libpq/auth.c:2763 +#: libpq/auth.c:2771 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "" "не удалось выполнить LDAP-поиск по фильтру \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2777 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "в LDAP нет пользователя \"%s\"" -#: libpq/auth.c:2778 +#: libpq/auth.c:2786 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" не вернул результатов" -#: libpq/auth.c:2782 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "пользователь LDAP \"%s\" не уникален" -#: libpq/auth.c:2783 +#: libpq/auth.c:2791 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned %d entry." msgid_plural "" @@ -14945,7 +14996,7 @@ msgstr[0] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" msgstr[1] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" вернул %d записи." msgstr[2] "LDAP-поиск по фильтру \"%s\" на сервере \"%s\" вернул %d записей." -#: libpq/auth.c:2803 +#: libpq/auth.c:2811 #, c-format msgid "" "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" @@ -14953,24 +15004,24 @@ msgstr "" "не удалось получить dn для первого результата, соответствующего \"%s\" на " "сервере \"%s\": %s" -#: libpq/auth.c:2824 +#: libpq/auth.c:2832 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "" "не удалось отвязаться после поиска пользователя \"%s\" на сервере \"%s\"" -#: libpq/auth.c:2855 +#: libpq/auth.c:2863 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "" "ошибка при регистрации в LDAP пользователя \"%s\" на сервере \"%s\": %s" -#: libpq/auth.c:2887 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "Диагностика LDAP: %s" -#: libpq/auth.c:2925 +#: libpq/auth.c:2933 #, c-format msgid "" "certificate authentication failed for user \"%s\": client certificate " @@ -14979,7 +15030,7 @@ msgstr "" "ошибка проверки подлинности пользователя \"%s\" по сертификату: сертификат " "клиента не содержит имя пользователя" -#: libpq/auth.c:2946 +#: libpq/auth.c:2954 #, c-format msgid "" "certificate authentication failed for user \"%s\": unable to retrieve " @@ -14988,7 +15039,7 @@ msgstr "" "пользователь \"%s\" не прошёл проверку подлинности по сертификату: не " "удалось получить DN субъекта" -#: libpq/auth.c:2969 +#: libpq/auth.c:2977 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": DN " @@ -14997,7 +15048,7 @@ msgstr "" "проверка сертификата (clientcert=verify-full) для пользователя \"%s\" не " "прошла: отличается DN" -#: libpq/auth.c:2974 +#: libpq/auth.c:2982 #, c-format msgid "" "certificate validation (clientcert=verify-full) failed for user \"%s\": CN " @@ -15006,99 +15057,99 @@ msgstr "" "проверка сертификата (clientcert=verify-full) для пользователя \"%s\" не " "прошла: отличается CN" -#: libpq/auth.c:3076 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-сервер не определён" -#: libpq/auth.c:3083 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "секрет RADIUS не определён" # well-spelled: симв -#: libpq/auth.c:3097 +#: libpq/auth.c:3105 #, c-format msgid "" "RADIUS authentication does not support passwords longer than %d characters" msgstr "проверка подлинности RADIUS не поддерживает пароли длиннее %d симв." -#: libpq/auth.c:3204 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "не удалось преобразовать имя сервера RADIUS \"%s\" в адрес: %s" -#: libpq/auth.c:3218 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "не удалось сгенерировать случайный вектор шифрования" -#: libpq/auth.c:3252 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "не удалось вычислить MD5-хеш пароля" -#: libpq/auth.c:3278 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "не удалось создать сокет RADIUS: %m" -#: libpq/auth.c:3300 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "не удалось привязаться к локальному сокету RADIUS: %m" -#: libpq/auth.c:3310 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "не удалось отправить пакет RADIUS: %m" -#: libpq/auth.c:3343 libpq/auth.c:3369 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "превышено время ожидания ответа RADIUS от %s" -#: libpq/auth.c:3362 +#: libpq/auth.c:3370 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "не удалось проверить состояние сокета RADIUS: %m" -#: libpq/auth.c:3392 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "не удалось прочитать ответ RADIUS: %m" -#: libpq/auth.c:3405 libpq/auth.c:3409 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "ответ RADIUS от %s был отправлен с неверного порта: %d" -#: libpq/auth.c:3418 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "слишком короткий ответ RADIUS от %s: %d" -#: libpq/auth.c:3425 +#: libpq/auth.c:3433 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "в ответе RADIUS от %s испорчена длина: %d (фактическая длина %d)" -#: libpq/auth.c:3433 +#: libpq/auth.c:3441 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "пришёл ответ RADIUS от %s на другой запрос: %d (ожидался %d)" -#: libpq/auth.c:3458 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "не удалось вычислить MD5 для принятого пакета" -#: libpq/auth.c:3467 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "ответ RADIUS от %s содержит неверную подпись MD5" -#: libpq/auth.c:3485 +#: libpq/auth.c:3493 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "ответ RADIUS от %s содержит неверный код (%d) для пользователя \"%s\"" @@ -15214,44 +15265,39 @@ msgstr "" "он принадлежит пользователю сервера, либо u=rw,g=r (0640) или более строгие, " "если он принадлежит root." -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:208 msgid "GSSAPI wrap error" msgstr "ошибка обёртывания сообщения в GSSAPI" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "исходящее сообщение GSSAPI не будет защищено" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, 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:358 libpq/be-secure-gssapi.c:580 #, 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:396 msgid "GSSAPI unwrap error" msgstr "ошибка развёртывания сообщения в GSSAPI" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "входящее сообщение GSSAPI не защищено" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "клиент передал чрезмерно большой пакет GSSAPI (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "принять контекст безопасности GSSAPI не удалось" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "ошибка проверки размера в GSSAPI" @@ -15545,7 +15591,7 @@ msgstr "параметр проверки подлинности \"%s\" допу #: libpq/hba.c:1673 libpq/hba.c:1731 libpq/hba.c:1748 libpq/hba.c:1761 #: libpq/hba.c:1773 libpq/hba.c:1792 libpq/hba.c:1879 libpq/hba.c:1897 #: libpq/hba.c:1991 libpq/hba.c:2010 libpq/hba.c:2039 libpq/hba.c:2052 -#: libpq/hba.c:2075 libpq/hba.c:2097 libpq/hba.c:2111 tsearch/ts_locale.c:232 +#: libpq/hba.c:2075 libpq/hba.c:2097 libpq/hba.c:2111 tsearch/ts_locale.c:205 #, c-format msgid "line %d of configuration file \"%s\"" msgstr "строка %d файла конфигурации \"%s\"" @@ -16069,7 +16115,7 @@ msgstr "нет клиентского подключения" msgid "could not receive data from client: %m" msgstr "не удалось получить данные от клиента: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "закрытие подключения из-за потери синхронизации протокола" @@ -16453,14 +16499,14 @@ msgstr "расширенный тип узла \"%s\" уже существуе msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "методы расширенного узла \"%s\" не зарегистрированы" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "отношение \"%s\" не имеет составного типа" #: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 #: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 -#: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 +#: parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" @@ -16492,19 +16538,19 @@ 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:1316 parser/analyze.c:1720 parser/analyze.c:1976 -#: parser/analyze.c:3155 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 +#: parser/analyze.c:3156 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s несовместимо с UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "не удалось реализовать GROUP BY" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 -#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 +#: optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "" "Some of the datatypes only support hashing, while others only support " @@ -16513,32 +16559,32 @@ msgstr "" "Одни типы данных поддерживают только хеширование, а другие - только " "сортировку." -#: optimizer/plan/planner.c:4387 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "не удалось реализовать DISTINCT" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "не удалось реализовать PARTITION BY для окна" -#: optimizer/plan/planner.c:5236 +#: optimizer/plan/planner.c:5266 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Столбцы, разбивающие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/planner.c:5240 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "не удалось реализовать ORDER BY для окна" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Столбцы, сортирующие окна, должны иметь сортируемые типы данных." -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "слишком много элементов RTE" @@ -16576,24 +16622,24 @@ msgstr "" "обращаться к временным или нежурналируемым отношениям в процессе " "восстановления нельзя" -#: optimizer/util/plancat.c:702 +#: optimizer/util/plancat.c:707 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "" "указания со ссылкой на всю строку для выбора уникального индекса не " "поддерживаются" -#: optimizer/util/plancat.c:719 +#: optimizer/util/plancat.c:724 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "ограничению в ON CONFLICT не соответствует индекс" -#: optimizer/util/plancat.c:769 +#: optimizer/util/plancat.c:774 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE не поддерживается с ограничениями-исключениями" -#: optimizer/util/plancat.c:879 +#: optimizer/util/plancat.c:884 #, c-format msgid "" "there is no unique or exclusion constraint matching the ON CONFLICT " @@ -16632,7 +16678,7 @@ 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:1623 parser/analyze.c:3366 +#: parser/analyze.c:1623 parser/analyze.c:3367 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s нельзя применять к VALUES" @@ -16695,342 +16741,352 @@ 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:2814 parser/analyze.c:2822 +#: parser/analyze.c:2815 parser/analyze.c:2823 #, c-format msgid "cannot specify both %s and %s" msgstr "указать %s и %s одновременно нельзя" -#: parser/analyze.c:2842 +#: parser/analyze.c:2843 #, 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:2850 +#: parser/analyze.c:2851 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s не поддерживается" -#: parser/analyze.c:2853 +#: parser/analyze.c:2854 #, 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:2861 +#: parser/analyze.c:2862 #, 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:2872 +#: parser/analyze.c:2873 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s не допускается" -#: parser/analyze.c:2875 +#: parser/analyze.c:2876 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Независимые курсоры должны быть READ ONLY." -#: parser/analyze.c:2941 +#: parser/analyze.c:2942 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "" "в материализованных представлениях не должны использоваться операторы, " "изменяющие данные в WITH" -#: parser/analyze.c:2951 +#: parser/analyze.c:2952 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "" "в материализованных представлениях не должны использоваться временные " "таблицы и представления" -#: parser/analyze.c:2961 +#: parser/analyze.c:2962 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "" "определять материализованные представления со связанными параметрами нельзя" -#: parser/analyze.c:2973 +#: parser/analyze.c:2974 #, c-format msgid "materialized views cannot be unlogged" msgstr "материализованные представления не могут быть нежурналируемыми" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3162 +#: parser/analyze.c:3163 #, 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:3169 +#: parser/analyze.c:3170 #, 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:3176 +#: parser/analyze.c:3177 #, 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:3183 +#: parser/analyze.c:3184 #, 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:3190 +#: parser/analyze.c:3191 #, 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:3197 +#: parser/analyze.c:3198 #, 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:3289 +#: parser/analyze.c:3290 #, 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:3339 +#: parser/analyze.c:3340 #, 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:3348 +#: parser/analyze.c:3349 #, 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:3357 +#: parser/analyze.c:3358 #, 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:3375 +#: parser/analyze.c:3376 #, 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:3384 +#: parser/analyze.c:3385 #, 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:3404 +#: parser/analyze.c:3405 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "отношение \"%s\" в определении %s отсутствует в предложении FROM" -#: parser/parse_agg.c:208 parser/parse_oper.c:227 +#: parser/parse_agg.c:211 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "для типа %s не удалось найти оператор сортировки" -#: parser/parse_agg.c:210 +#: parser/parse_agg.c:213 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Агрегатным функциям с DISTINCT необходимо сортировать входные данные." -#: parser/parse_agg.c:268 +#: parser/parse_agg.c:271 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "у GROUPING должно быть меньше 32 аргументов" -#: parser/parse_agg.c:371 +#: parser/parse_agg.c:375 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "агрегатные функции нельзя применять в условиях JOIN" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:377 msgid "grouping operations are not allowed in JOIN conditions" msgstr "операции группировки нельзя применять в условиях JOIN" -#: parser/parse_agg.c:383 +#: parser/parse_agg.c:387 msgid "" "aggregate functions are not allowed in FROM clause of their own query level" msgstr "" "агрегатные функции нельзя применять в предложении FROM их уровня запроса" -#: parser/parse_agg.c:385 +#: parser/parse_agg.c:389 msgid "" "grouping operations are not allowed in FROM clause of their own query level" msgstr "" "операции группировки нельзя применять в предложении FROM их уровня запроса" -#: parser/parse_agg.c:390 +#: parser/parse_agg.c:394 msgid "aggregate functions are not allowed in functions in FROM" msgstr "агрегатные функции нельзя применять в функциях во FROM" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:396 msgid "grouping operations are not allowed in functions in FROM" msgstr "операции группировки нельзя применять в функциях во FROM" -#: parser/parse_agg.c:400 +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in policy expressions" msgstr "агрегатные функции нельзя применять в выражениях политик" -#: parser/parse_agg.c:402 +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in policy expressions" msgstr "операции группировки нельзя применять в выражениях политик" -#: parser/parse_agg.c:419 +#: parser/parse_agg.c:423 msgid "aggregate functions are not allowed in window RANGE" msgstr "агрегатные функции нельзя применять в указании RANGE для окна" -#: parser/parse_agg.c:421 +#: parser/parse_agg.c:425 msgid "grouping operations are not allowed in window RANGE" msgstr "операции группировки нельзя применять в указании RANGE для окна" -#: parser/parse_agg.c:426 +#: parser/parse_agg.c:430 msgid "aggregate functions are not allowed in window ROWS" msgstr "агрегатные функции нельзя применять в указании ROWS для окна" -#: parser/parse_agg.c:428 +#: parser/parse_agg.c:432 msgid "grouping operations are not allowed in window ROWS" msgstr "операции группировки нельзя применять в указании ROWS для окна" -#: parser/parse_agg.c:433 +#: parser/parse_agg.c:437 msgid "aggregate functions are not allowed in window GROUPS" msgstr "агрегатные функции нельзя применять в указании GROUPS для окна" -#: parser/parse_agg.c:435 +#: parser/parse_agg.c:439 msgid "grouping operations are not allowed in window GROUPS" msgstr "операции группировки нельзя применять в указании GROUPS для окна" -#: parser/parse_agg.c:469 +#: parser/parse_agg.c:473 msgid "aggregate functions are not allowed in check constraints" msgstr "агрегатные функции нельзя применять в ограничениях-проверках" -#: parser/parse_agg.c:471 +#: parser/parse_agg.c:475 msgid "grouping operations are not allowed in check constraints" msgstr "операции группировки нельзя применять в ограничениях-проверках" -#: parser/parse_agg.c:478 +#: parser/parse_agg.c:482 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "агрегатные функции нельзя применять в выражениях DEFAULT" -#: parser/parse_agg.c:480 +#: parser/parse_agg.c:484 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "операции группировки нельзя применять в выражениях DEFAULT" -#: parser/parse_agg.c:485 +#: parser/parse_agg.c:489 msgid "aggregate functions are not allowed in index expressions" msgstr "агрегатные функции нельзя применять в выражениях индексов" -#: parser/parse_agg.c:487 +#: parser/parse_agg.c:491 msgid "grouping operations are not allowed in index expressions" msgstr "операции группировки нельзя применять в выражениях индексов" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:496 msgid "aggregate functions are not allowed in index predicates" msgstr "агрегатные функции нельзя применять в предикатах индексов" -#: parser/parse_agg.c:494 +#: parser/parse_agg.c:498 msgid "grouping operations are not allowed in index predicates" msgstr "операции группировки нельзя применять в предикатах индексов" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:503 msgid "aggregate functions are not allowed in statistics expressions" msgstr "агрегатные функции нельзя применять в выражениях статистики" -#: parser/parse_agg.c:501 +#: parser/parse_agg.c:505 msgid "grouping operations are not allowed in statistics expressions" msgstr "операции группировки нельзя применять в выражениях статистики" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:510 msgid "aggregate functions are not allowed in transform expressions" msgstr "агрегатные функции нельзя применять в выражениях преобразований" -#: parser/parse_agg.c:508 +#: parser/parse_agg.c:512 msgid "grouping operations are not allowed in transform expressions" msgstr "операции группировки нельзя применять в выражениях преобразований" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:517 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "агрегатные функции нельзя применять в параметрах EXECUTE" -#: parser/parse_agg.c:515 +#: parser/parse_agg.c:519 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "операции группировки нельзя применять в параметрах EXECUTE" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:524 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "агрегатные функции нельзя применять в условиях WHEN для триггеров" -#: parser/parse_agg.c:522 +#: parser/parse_agg.c:526 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "операции группировки нельзя применять в условиях WHEN для триггеров" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:531 msgid "aggregate functions are not allowed in partition bound" msgstr "агрегатные функции нельзя применять в выражении границы секции" -#: parser/parse_agg.c:529 +#: parser/parse_agg.c:533 msgid "grouping operations are not allowed in partition bound" msgstr "операции группировки нельзя применять в выражении границы секции" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:538 msgid "aggregate functions are not allowed in partition key expressions" msgstr "агрегатные функции нельзя применять в выражениях ключа секционирования" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:540 msgid "grouping operations are not allowed in partition key expressions" msgstr "" "операции группировки нельзя применять в выражениях ключа секционирования" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:546 msgid "aggregate functions are not allowed in column generation expressions" msgstr "агрегатные функции нельзя применять в выражениях генерируемых столбцов" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:548 msgid "grouping operations are not allowed in column generation expressions" msgstr "" "операции группировки нельзя применять в выражениях генерируемых столбцов" -#: parser/parse_agg.c:550 +#: parser/parse_agg.c:554 msgid "aggregate functions are not allowed in CALL arguments" msgstr "агрегатные функции нельзя применять в аргументах CALL" -#: parser/parse_agg.c:552 +#: parser/parse_agg.c:556 msgid "grouping operations are not allowed in CALL arguments" msgstr "операции группировки нельзя применять в аргументах CALL" -#: parser/parse_agg.c:558 +#: parser/parse_agg.c:562 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "агрегатные функции нельзя применять в условиях COPY FROM WHERE" -#: parser/parse_agg.c:560 +#: parser/parse_agg.c:564 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:587 parser/parse_clause.c:1834 +#: parser/parse_agg.c:591 parser/parse_clause.c:1834 #, 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:590 +#: parser/parse_agg.c:594 #, c-format msgid "grouping operations are not allowed in %s" msgstr "операции группировки нельзя применять в конструкции %s" -#: parser/parse_agg.c:691 +#: parser/parse_agg.c:690 parser/parse_agg.c:727 +#, c-format +msgid "outer-level aggregate cannot use a nested CTE" +msgstr "агрегатная функция внешнего уровня не может использовать вложенное CTE" + +#: parser/parse_agg.c:691 parser/parse_agg.c:728 +#, c-format +msgid "CTE \"%s\" is below the aggregate's semantic level." +msgstr "CTE \"%s\" находится ниже семантического уровня агрегатной функции." + +#: parser/parse_agg.c:713 #, c-format msgid "" "outer-level aggregate cannot contain a lower-level variable in its direct " @@ -17039,14 +17095,14 @@ msgstr "" "агрегатная функция внешнего уровня не может содержать в своих аргументах " "переменные нижнего уровня" -#: parser/parse_agg.c:769 +#: parser/parse_agg.c:798 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "" "вызовы агрегатных функций не могут включать вызовы функций, возвращающих " "множества" -#: parser/parse_agg.c:770 parser/parse_expr.c:1678 parser/parse_expr.c:2159 +#: parser/parse_agg.c:799 parser/parse_expr.c:1678 parser/parse_expr.c:2167 #: parser/parse_func.c:883 #, c-format msgid "" @@ -17056,103 +17112,103 @@ msgstr "" "Исправить ситуацию можно, переместив функцию, возвращающую множество, в " "элемент LATERAL FROM." -#: parser/parse_agg.c:775 +#: parser/parse_agg.c:804 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "вызовы агрегатных функций не могут включать вызовы оконных функции" -#: parser/parse_agg.c:854 +#: parser/parse_agg.c:907 msgid "window functions are not allowed in JOIN conditions" msgstr "оконные функции нельзя применять в условиях JOIN" -#: parser/parse_agg.c:861 +#: parser/parse_agg.c:914 msgid "window functions are not allowed in functions in FROM" msgstr "оконные функции нельзя применять в функциях во FROM" -#: parser/parse_agg.c:867 +#: parser/parse_agg.c:920 msgid "window functions are not allowed in policy expressions" msgstr "оконные функции нельзя применять в выражениях политик" -#: parser/parse_agg.c:880 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in window definitions" msgstr "оконные функции нельзя применять в определении окна" -#: parser/parse_agg.c:912 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in check constraints" msgstr "оконные функции нельзя применять в ограничениях-проверках" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in DEFAULT expressions" msgstr "оконные функции нельзя применять в выражениях DEFAULT" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:972 msgid "window functions are not allowed in index expressions" msgstr "оконные функции нельзя применять в выражениях индексов" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:975 msgid "window functions are not allowed in statistics expressions" msgstr "оконные функции нельзя применять в выражениях статистики" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:978 msgid "window functions are not allowed in index predicates" msgstr "оконные функции нельзя применять в предикатах индексов" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:981 msgid "window functions are not allowed in transform expressions" msgstr "оконные функции нельзя применять в выражениях преобразований" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:984 msgid "window functions are not allowed in EXECUTE parameters" msgstr "оконные функции нельзя применять в параметрах EXECUTE" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:987 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "оконные функции нельзя применять в условиях WHEN для триггеров" -#: parser/parse_agg.c:937 +#: parser/parse_agg.c:990 msgid "window functions are not allowed in partition bound" msgstr "оконные функции нельзя применять в выражении границы секции" -#: parser/parse_agg.c:940 +#: parser/parse_agg.c:993 msgid "window functions are not allowed in partition key expressions" msgstr "оконные функции нельзя применять в выражениях ключа секционирования" -#: parser/parse_agg.c:943 +#: parser/parse_agg.c:996 msgid "window functions are not allowed in CALL arguments" msgstr "оконные функции нельзя применять в аргументах CALL" -#: parser/parse_agg.c:946 +#: parser/parse_agg.c:999 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "оконные функции нельзя применять в условиях COPY FROM WHERE" -#: parser/parse_agg.c:949 +#: parser/parse_agg.c:1002 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:972 parser/parse_clause.c:1843 +#: parser/parse_agg.c:1025 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "оконные функции нельзя применять в конструкции %s" -#: parser/parse_agg.c:1006 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1059 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "окно \"%s\" не существует" -#: parser/parse_agg.c:1090 +#: parser/parse_agg.c:1143 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "слишком много наборов группирования (при максимуме 4096)" -#: parser/parse_agg.c:1230 +#: parser/parse_agg.c:1283 #, c-format msgid "" "aggregate functions are not allowed in a recursive query's recursive term" msgstr "" "в рекурсивной части рекурсивного запроса агрегатные функции недопустимы" -#: parser/parse_agg.c:1423 +#: parser/parse_agg.c:1476 #, c-format msgid "" "column \"%s.%s\" must appear in the GROUP BY clause or be used in an " @@ -17161,7 +17217,7 @@ msgstr "" "столбец \"%s.%s\" должен фигурировать в предложении GROUP BY или " "использоваться в агрегатной функции" -#: parser/parse_agg.c:1426 +#: parser/parse_agg.c:1479 #, c-format msgid "" "Direct arguments of an ordered-set aggregate must use only grouped columns." @@ -17169,13 +17225,13 @@ msgstr "" "Прямые аргументы сортирующей агрегатной функции могут включать только " "группируемые столбцы." -#: parser/parse_agg.c:1431 +#: parser/parse_agg.c:1484 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "" "подзапрос использует негруппированный столбец \"%s.%s\" из внешнего запроса" -#: parser/parse_agg.c:1595 +#: parser/parse_agg.c:1648 #, c-format msgid "" "arguments to GROUPING must be grouping expressions of the associated query " @@ -17503,7 +17559,7 @@ 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:2060 parser/parse_expr.c:2662 parser/parse_target.c:1008 +#: parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "привести тип %s к %s нельзя" @@ -17740,17 +17796,17 @@ msgstr "рекурсивная ссылка на запрос \"%s\" не дол 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:307 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "не удалось найти оператор неравенства для типа %s" -#: parser/parse_cte.c:334 +#: parser/parse_cte.c:335 #, c-format msgid "" "WITH clause containing a data-modifying statement must be at the top level" @@ -17758,7 +17814,7 @@ msgstr "" "предложение WITH, содержащее оператор, изменяющий данные, должно быть на " "верхнем уровне" -#: parser/parse_cte.c:383 +#: parser/parse_cte.c:384 #, c-format msgid "" "recursive query \"%s\" column %d has type %s in non-recursive term but type " @@ -17767,12 +17823,12 @@ msgstr "" "в рекурсивном запросе \"%s\" столбец %d имеет тип %s в нерекурсивной части, " "но в результате тип %s" -#: parser/parse_cte.c:389 +#: 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:394 +#: parser/parse_cte.c:395 #, c-format msgid "" "recursive query \"%s\" column %d has collation \"%s\" in non-recursive term " @@ -17781,43 +17837,43 @@ msgstr "" "в рекурсивном запросе \"%s\" у столбца %d правило сортировки \"%s\" в не " "рекурсивной части, но в результате правило \"%s\"" -#: parser/parse_cte.c:398 +#: 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:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "запрос WITH не рекурсивный" -#: parser/parse_cte.c:450 +#: 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:455 +#: 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:470 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "столбец поиска \"%s\" отсутствует в списке столбцов запроса WITH" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "столбец поиска \"%s\" указан неоднократно" -#: parser/parse_cte.c:486 +#: parser/parse_cte.c:487 #, c-format msgid "" "search sequence column name \"%s\" already used in WITH query column list" @@ -17825,64 +17881,64 @@ msgstr "" "имя столбца последовательности поиска \"%s\" уже используется в списке " "столбцов запроса WITH" -#: parser/parse_cte.c:503 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "столбец цикла \"%s\" отсутствует в списке столбцов запроса WITH" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "столбец цикла \"%s\" указан неоднократно" -#: parser/parse_cte.c:519 +#: 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:526 +#: 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:534 +#: 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:544 +#: 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:551 +#: 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:635 +#: 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:815 +#: parser/parse_cte.c:868 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "взаимная рекурсия между элементами WITH не реализована" -#: parser/parse_cte.c:867 +#: parser/parse_cte.c:920 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "" "рекурсивный запрос \"%s\" не должен содержать операторов, изменяющих данные" -#: parser/parse_cte.c:875 +#: parser/parse_cte.c:928 #, c-format msgid "" "recursive query \"%s\" does not have the form non-recursive-term UNION [ALL] " @@ -17891,27 +17947,27 @@ msgstr "" "рекурсивный запрос \"%s\" должен иметь форму {нерекурсивная часть} UNION " "[ALL] {рекурсивная часть}" -#: parser/parse_cte.c:910 +#: parser/parse_cte.c:963 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:916 +#: parser/parse_cte.c:969 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:922 +#: parser/parse_cte.c:975 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:928 +#: parser/parse_cte.c:981 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE в рекурсивном запросе не поддерживается" -#: parser/parse_cte.c:1007 +#: parser/parse_cte.c:1060 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "рекурсивная ссылка на запрос \"%s\" указана неоднократно" @@ -17975,7 +18031,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "для NULLIF требуется, чтобы оператор = возвращал логическое значение" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%s не должна возвращать множество" @@ -17995,7 +18051,7 @@ msgstr "" "SELECT или выражение ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "функции, возвращающие множества, нельзя применять в конструкции %s" @@ -18067,86 +18123,86 @@ msgstr "в подзапросе слишком много столбцов" msgid "subquery has too few columns" msgstr "в подзапросе недостаточно столбцов" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, c-format msgid "cannot determine type of empty array" msgstr "тип пустого массива определить нельзя" -#: parser/parse_expr.c:2001 +#: parser/parse_expr.c:2009 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "" "Приведите его к желаемому типу явным образом, например ARRAY[]::integer[]." -#: parser/parse_expr.c:2015 +#: parser/parse_expr.c:2023 #, c-format msgid "could not find element type for data type %s" msgstr "не удалось определить тип элемента для типа данных %s" -#: parser/parse_expr.c:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "число элементов в выражениях ROW ограничено %d" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "вместо значения XML-атрибута без имени должен указываться столбец" -#: parser/parse_expr.c:2304 +#: parser/parse_expr.c:2312 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "вместо значения XML-элемента без имени должен указываться столбец" -#: parser/parse_expr.c:2319 +#: parser/parse_expr.c:2327 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "имя XML-атрибута \"%s\" указано неоднократно" -#: parser/parse_expr.c:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "привести результат XMLSERIALIZE к типу %s нельзя" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "разное число элементов в строках" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "строки нулевой длины сравнивать нельзя" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "" "оператор сравнения строк должен выдавать результат логического типа, а не %s" -#: parser/parse_expr.c:2777 +#: parser/parse_expr.c:2785 #, c-format msgid "row comparison operator must not return a set" msgstr "оператор сравнения строк не должен возвращать множество" -#: parser/parse_expr.c:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "не удалось выбрать интерпретацию оператора сравнения строк %s" -#: parser/parse_expr.c:2838 +#: parser/parse_expr.c:2846 #, c-format msgid "" "Row comparison operators must be associated with btree operator families." msgstr "" "Операторы сравнения строк должны быть связаны с семейством операторов btree." -#: parser/parse_expr.c:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Оказалось несколько равноценных кандидатур." -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "" @@ -19169,7 +19225,7 @@ msgstr "предложение NOT DEFERRABLE расположено непра #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "" -"ограничение с характеристикой INITIALLY DEFERRED должно быть объявлено как " +"ограничение со свойством INITIALLY DEFERRED должно быть объявлено как " "DEFERRABLE" #: parser/parse_utilcmd.c:3712 @@ -19250,22 +19306,22 @@ msgid "TO must specify exactly one value per partitioning column" msgstr "" "в TO должно указываться ровно одно значение для секционирующего столбца" -#: parser/parse_utilcmd.c:4240 +#: parser/parse_utilcmd.c:4242 #, c-format msgid "cannot specify NULL in range bound" msgstr "указать NULL в диапазонном ограничении нельзя" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4290 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "за границей MAXVALUE могут следовать только границы MAXVALUE" -#: parser/parse_utilcmd.c:4296 +#: parser/parse_utilcmd.c:4297 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "за границей MINVALUE могут следовать только границы MINVALUE" -#: parser/parse_utilcmd.c:4339 +#: parser/parse_utilcmd.c:4340 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "указанное значение нельзя привести к типу %s столбца \"%s\"" @@ -19283,7 +19339,7 @@ msgstr "неверный символ спецкода Unicode" msgid "invalid Unicode escape value" msgstr "неверное значение спецкода Unicode" -#: parser/parser.c:468 utils/adt/varlena.c:6555 scan.l:677 +#: parser/parser.c:468 utils/adt/varlena.c:6604 scan.l:677 #, c-format msgid "invalid Unicode escape" msgstr "неверный спецкод Unicode" @@ -19293,7 +19349,7 @@ msgstr "неверный спецкод Unicode" msgid "Unicode escapes must be \\XXXX or \\+XXXXXX." msgstr "Спецкоды Unicode должны иметь вид \\XXXX или \\+XXXXXX." -#: parser/parser.c:497 utils/adt/varlena.c:6580 scan.l:638 scan.l:654 +#: parser/parser.c:497 utils/adt/varlena.c:6629 scan.l:638 scan.l:654 #: scan.l:670 #, c-format msgid "invalid Unicode surrogate pair" @@ -19395,7 +19451,7 @@ msgstr "" "значение типа \"%s\"" #: port/pg_sema.c:209 port/pg_shmem.c:678 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "не удалось получить информацию о каталоге данных \"%s\": %m" @@ -19501,17 +19557,17 @@ msgstr "" "Завершите все старые серверные процессы, работающие с каталогом данных " "\"%s\"." -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "не удалось создать семафоры: %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "Ошибка в системном вызове semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:129 +#: port/sysv_sema.c:144 #, c-format msgid "" "This error does *not* mean that you have run out of disk space. It occurs " @@ -19530,7 +19586,7 @@ msgstr "" "Подробная информация о настройке разделяемой памяти содержится в " "документации PostgreSQL." -#: port/sysv_sema.c:159 +#: port/sysv_sema.c:174 #, c-format msgid "" "You possibly need to raise your kernel's SEMVMX value to be at least %d. " @@ -19688,27 +19744,27 @@ msgstr "не удалось породить рабочий процесс ав msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "автоочистка: удаление устаревшей врем. таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2548 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматическая очистка таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2551 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматический анализ таблицы \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2744 +#: postmaster/autovacuum.c:2754 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "обработка рабочей записи для отношения \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3430 +#: postmaster/autovacuum.c:3440 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистка не запущена из-за неправильной конфигурации" -#: postmaster/autovacuum.c:3431 +#: postmaster/autovacuum.c:3441 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Включите параметр \"track_counts\"." @@ -19753,7 +19809,7 @@ msgstr "" "фоновый процесс \"%s\": параллельные исполнители не могут быть настроены для " "перезапуска" -#: postmaster/bgworker.c:723 tcop/postgres.c:3229 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершение фонового процесса \"%s\" по команде администратора" @@ -19797,7 +19853,7 @@ msgid "" "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Возможно, стоит увеличить параметр \"max_worker_processes\"." -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -19805,17 +19861,17 @@ msgstr[0] "контрольные точки происходят слишком msgstr[1] "контрольные точки происходят слишком часто (через %d сек.)" msgstr[2] "контрольные точки происходят слишком часто (через %d сек.)" -#: postmaster/checkpointer.c:432 +#: postmaster/checkpointer.c:435 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Возможно, стоит увеличить параметр \"max_wal_size\"." -#: postmaster/checkpointer.c:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "сбой при запросе контрольной точки" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Смотрите подробности в протоколе сервера." @@ -19864,7 +19920,7 @@ msgstr "Команда архивации с ошибкой: %s" msgid "archive command was terminated by exception 0x%X" msgstr "команда архивации была прервана исключением 0x%X" -#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3761 #, c-format msgid "" "See C include file \"ntstatus.h\" for a description of the hexadecimal value." @@ -20079,98 +20135,98 @@ msgstr "" msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ошибка в таблицах маркеров времени, требуется исправление\n" -#: postmaster/postmaster.c:1052 +#: postmaster/postmaster.c:1054 #, c-format msgid "could not create I/O completion port for child queue" msgstr "не удалось создать порт завершения ввода/вывода для очереди потомков" -#: postmaster/postmaster.c:1128 +#: postmaster/postmaster.c:1130 #, c-format msgid "ending log output to stderr" msgstr "завершение вывода в stderr" -#: postmaster/postmaster.c:1129 +#: postmaster/postmaster.c:1131 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "В дальнейшем протокол будет выводиться в \"%s\"." -#: postmaster/postmaster.c:1140 +#: postmaster/postmaster.c:1142 #, c-format msgid "starting %s" msgstr "запускается %s" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 +#: postmaster/postmaster.c:1163 postmaster/postmaster.c:1262 #: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неверный формат списка в параметре \"%s\"" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1194 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не удалось создать принимающий сокет для \"%s\"" -#: postmaster/postmaster.c:1198 +#: postmaster/postmaster.c:1200 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не удалось создать сокеты TCP/IP" -#: postmaster/postmaster.c:1230 +#: postmaster/postmaster.c:1232 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "функция DNSServiceRegister() выдала ошибку с кодом %ld" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1284 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не удалось создать Unix-сокет в каталоге \"%s\"" -#: postmaster/postmaster.c:1288 +#: postmaster/postmaster.c:1290 #, c-format msgid "could not create any Unix-domain sockets" msgstr "ни один Unix-сокет создать не удалось" -#: postmaster/postmaster.c:1300 +#: postmaster/postmaster.c:1302 #, c-format msgid "no socket created for listening" msgstr "отсутствуют принимающие сокеты" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1333 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: не удалось поменять права для внешнего файла PID \"%s\": %s\n" -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1337 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: не удалось записать внешний файл PID \"%s\": %s\n" -#: postmaster/postmaster.c:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1370 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "не удалось загрузить pg_hba.conf" -#: postmaster/postmaster.c:1396 +#: postmaster/postmaster.c:1398 #, c-format msgid "postmaster became multithreaded during startup" msgstr "процесс postmaster стал многопоточным при запуске" -#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 +#: postmaster/postmaster.c:1399 postmaster/postmaster.c:5150 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Установите в переменной окружения LC_ALL правильную локаль." -#: postmaster/postmaster.c:1492 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: не удалось найти путь к собственному исполняемому файлу" -#: postmaster/postmaster.c:1499 +#: postmaster/postmaster.c:1501 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: подходящий исполняемый файл postgres не найден" -#: postmaster/postmaster.c:1522 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1524 utils/misc/tzparser.c:340 #, c-format msgid "" "This may indicate an incomplete PostgreSQL installation, or that the file " @@ -20179,7 +20235,7 @@ msgstr "" "Возможно, PostgreSQL установлен не полностью или файла \"%s\" нет в " "положенном месте." -#: postmaster/postmaster.c:1549 +#: postmaster/postmaster.c:1551 #, c-format msgid "" "%s: could not find the database system\n" @@ -20190,45 +20246,45 @@ msgstr "" "Ожидалось найти её в каталоге \"%s\",\n" "но открыть файл \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:1726 +#: postmaster/postmaster.c:1728 #, c-format msgid "select() failed in postmaster: %m" msgstr "сбой select() в postmaster'е: %m" # well-spelled: неподчиняющимся -#: postmaster/postmaster.c:1862 +#: postmaster/postmaster.c:1864 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "неподчиняющимся потомкам посылается SIGKILL" -#: postmaster/postmaster.c:1883 +#: postmaster/postmaster.c:1885 #, c-format msgid "" "performing immediate shutdown because data directory lock file is invalid" msgstr "" "немедленное отключение из-за ошибочного файла блокировки каталога данных" -#: postmaster/postmaster.c:1986 postmaster/postmaster.c:2014 +#: postmaster/postmaster.c:1988 postmaster/postmaster.c:2016 #, c-format msgid "incomplete startup packet" msgstr "неполный стартовый пакет" -#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2000 postmaster/postmaster.c:2033 #, c-format msgid "invalid length of startup packet" msgstr "неверная длина стартового пакета" -#: postmaster/postmaster.c:2060 +#: postmaster/postmaster.c:2062 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "не удалось отправить ответ в процессе SSL-согласования: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "received unencrypted data after SSL request" msgstr "после запроса SSL получены незашифрованные данные" -#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2081 postmaster/postmaster.c:2125 #, c-format msgid "" "This could be either a client-software bug or evidence of an attempted man-" @@ -20237,450 +20293,450 @@ msgstr "" "Это может свидетельствовать об ошибке в клиентском ПО или о попытке атаки " "MITM." -#: postmaster/postmaster.c:2104 +#: postmaster/postmaster.c:2106 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "не удалось отправить ответ в процессе согласования GSSAPI: %m" -#: postmaster/postmaster.c:2122 +#: postmaster/postmaster.c:2124 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "после запроса шифрования GSSAPI получены незашифрованные данные" -#: postmaster/postmaster.c:2146 +#: postmaster/postmaster.c:2148 #, 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:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: postmaster/postmaster.c:2212 utils/misc/guc.c:7138 utils/misc/guc.c:7174 #: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 #: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "неверное значение для параметра \"%s\": \"%s\"" -#: postmaster/postmaster.c:2213 +#: postmaster/postmaster.c:2215 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Допустимые значения: \"false\", 0, \"true\", 1, \"database\"." -#: postmaster/postmaster.c:2258 +#: postmaster/postmaster.c:2260 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "" "неверная структура стартового пакета: последним байтом должен быть терминатор" -#: postmaster/postmaster.c:2275 +#: postmaster/postmaster.c:2277 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "в стартовом пакете не указано имя пользователя PostgreSQL" -#: postmaster/postmaster.c:2339 +#: postmaster/postmaster.c:2341 #, c-format msgid "the database system is starting up" msgstr "система баз данных запускается" -#: postmaster/postmaster.c:2345 +#: postmaster/postmaster.c:2347 #, c-format msgid "the database system is not yet accepting connections" msgstr "система БД ещё не принимает подключения" -#: postmaster/postmaster.c:2346 +#: postmaster/postmaster.c:2348 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "Согласованное состояние восстановления ещё не достигнуто." -#: postmaster/postmaster.c:2350 +#: postmaster/postmaster.c:2352 #, c-format msgid "the database system is not accepting connections" msgstr "система БД не принимает подключения" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2353 #, c-format msgid "Hot standby mode is disabled." msgstr "Режим горячего резерва отключён." -#: postmaster/postmaster.c:2356 +#: postmaster/postmaster.c:2358 #, c-format msgid "the database system is shutting down" msgstr "система баз данных останавливается" -#: postmaster/postmaster.c:2361 +#: postmaster/postmaster.c:2363 #, c-format msgid "the database system is in recovery mode" msgstr "система баз данных в режиме восстановления" -#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2368 storage/ipc/procarray.c:499 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "извините, уже слишком много клиентов" -#: postmaster/postmaster.c:2456 +#: postmaster/postmaster.c:2458 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильный ключ в запросе на отмену процесса %d" -#: postmaster/postmaster.c:2468 +#: postmaster/postmaster.c:2470 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "процесс с кодом %d, полученным в запросе на отмену, не найден" -#: postmaster/postmaster.c:2721 +#: postmaster/postmaster.c:2723 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "получен SIGHUP, файлы конфигурации перезагружаются" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 +#: postmaster/postmaster.c:2749 postmaster/postmaster.c:2753 #, c-format msgid "%s was not reloaded" msgstr "%s не был перезагружен" -#: postmaster/postmaster.c:2761 +#: postmaster/postmaster.c:2763 #, c-format msgid "SSL configuration was not reloaded" msgstr "конфигурация SSL не была перезагружена" -#: postmaster/postmaster.c:2817 +#: postmaster/postmaster.c:2819 #, c-format msgid "received smart shutdown request" msgstr "получен запрос на \"вежливое\" выключение" -#: postmaster/postmaster.c:2863 +#: postmaster/postmaster.c:2865 #, c-format msgid "received fast shutdown request" msgstr "получен запрос на быстрое выключение" -#: postmaster/postmaster.c:2881 +#: postmaster/postmaster.c:2883 #, c-format msgid "aborting any active transactions" msgstr "прерывание всех активных транзакций" -#: postmaster/postmaster.c:2905 +#: postmaster/postmaster.c:2907 #, c-format msgid "received immediate shutdown request" msgstr "получен запрос на немедленное выключение" -#: postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:2984 #, c-format msgid "shutdown at recovery target" msgstr "выключение при достижении цели восстановления" -#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3002 postmaster/postmaster.c:3038 msgid "startup process" msgstr "стартовый процесс" -#: postmaster/postmaster.c:3003 +#: postmaster/postmaster.c:3005 #, c-format msgid "aborting startup due to startup process failure" msgstr "прерывание запуска из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:3078 +#: postmaster/postmaster.c:3080 #, c-format msgid "database system is ready to accept connections" msgstr "система БД готова принимать подключения" -#: postmaster/postmaster.c:3099 +#: postmaster/postmaster.c:3101 msgid "background writer process" msgstr "процесс фоновой записи" -#: postmaster/postmaster.c:3153 +#: postmaster/postmaster.c:3155 msgid "checkpointer process" msgstr "процесс контрольных точек" -#: postmaster/postmaster.c:3169 +#: postmaster/postmaster.c:3171 msgid "WAL writer process" msgstr "процесс записи WAL" -#: postmaster/postmaster.c:3184 +#: postmaster/postmaster.c:3186 msgid "WAL receiver process" msgstr "процесс считывания WAL" -#: postmaster/postmaster.c:3199 +#: postmaster/postmaster.c:3201 msgid "autovacuum launcher process" msgstr "процесс запуска автоочистки" -#: postmaster/postmaster.c:3217 +#: postmaster/postmaster.c:3219 msgid "archiver process" msgstr "процесс архивации" -#: postmaster/postmaster.c:3232 +#: postmaster/postmaster.c:3234 msgid "statistics collector process" msgstr "процесс сбора статистики" -#: postmaster/postmaster.c:3246 +#: postmaster/postmaster.c:3248 msgid "system logger process" msgstr "процесс системного протоколирования" -#: postmaster/postmaster.c:3310 +#: postmaster/postmaster.c:3312 #, c-format msgid "background worker \"%s\"" msgstr "фоновый процесс \"%s\"" -#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 -#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 +#: postmaster/postmaster.c:3396 postmaster/postmaster.c:3416 +#: postmaster/postmaster.c:3423 postmaster/postmaster.c:3441 msgid "server process" msgstr "процесс сервера" -#: postmaster/postmaster.c:3493 +#: postmaster/postmaster.c:3495 #, 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:3746 +#: postmaster/postmaster.c:3748 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершился с кодом выхода %d" -#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 -#: postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 +#: postmaster/postmaster.c:3750 postmaster/postmaster.c:3762 +#: postmaster/postmaster.c:3772 postmaster/postmaster.c:3783 #, 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:3757 +#: postmaster/postmaster.c:3759 #, 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:3767 +#: postmaster/postmaster.c:3769 #, 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:3779 +#: postmaster/postmaster.c:3781 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершился с нераспознанным кодом состояния %d" -#: postmaster/postmaster.c:3993 +#: postmaster/postmaster.c:3995 #, c-format msgid "abnormal database system shutdown" msgstr "аварийное выключение системы БД" -#: postmaster/postmaster.c:4031 +#: postmaster/postmaster.c:4033 #, c-format msgid "shutting down due to startup process failure" msgstr "сервер останавливается из-за ошибки в стартовом процессе" -#: postmaster/postmaster.c:4037 +#: postmaster/postmaster.c:4039 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "сервер останавливается, так как параметр restart_after_crash равен off" -#: postmaster/postmaster.c:4049 +#: postmaster/postmaster.c:4051 #, c-format msgid "all server processes terminated; reinitializing" msgstr "все серверные процессы завершены... переинициализация" -#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 -#: postmaster/postmaster.c:5966 +#: postmaster/postmaster.c:4225 postmaster/postmaster.c:5577 +#: postmaster/postmaster.c:5968 #, c-format msgid "could not generate random cancel key" msgstr "не удалось сгенерировать случайный ключ отмены" -#: postmaster/postmaster.c:4277 +#: postmaster/postmaster.c:4279 #, c-format msgid "could not fork new process for connection: %m" msgstr "породить новый процесс для соединения не удалось: %m" -#: postmaster/postmaster.c:4319 +#: postmaster/postmaster.c:4321 msgid "could not fork new process for connection: " msgstr "породить новый процесс для соединения не удалось: " -#: postmaster/postmaster.c:4425 +#: postmaster/postmaster.c:4427 #, c-format msgid "connection received: host=%s port=%s" msgstr "принято подключение: узел=%s порт=%s" -#: postmaster/postmaster.c:4430 +#: postmaster/postmaster.c:4432 #, c-format msgid "connection received: host=%s" msgstr "принято подключение: узел=%s" -#: postmaster/postmaster.c:4673 +#: postmaster/postmaster.c:4675 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "запустить серверный процесс \"%s\" не удалось: %m" -#: postmaster/postmaster.c:4731 +#: postmaster/postmaster.c:4733 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "" "создать отображение файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4740 +#: postmaster/postmaster.c:4742 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "" "отобразить файл серверных параметров в память не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4767 +#: postmaster/postmaster.c:4769 #, c-format msgid "subprocess command line too long" msgstr "слишком длинная командная строка подпроцесса" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4787 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "ошибка в CreateProcess(): %m (код ошибки: %lu)" -#: postmaster/postmaster.c:4812 +#: postmaster/postmaster.c:4814 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "" "отключить отображение файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4816 +#: postmaster/postmaster.c:4818 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "" "закрыть указатель файла серверных параметров не удалось (код ошибки: %lu)" -#: postmaster/postmaster.c:4838 +#: postmaster/postmaster.c:4840 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "" "число повторных попыток резервирования разделяемой памяти достигло предела" -#: postmaster/postmaster.c:4839 +#: postmaster/postmaster.c:4841 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Это может быть вызвано антивирусным ПО или механизмом ASLR." -#: postmaster/postmaster.c:5021 +#: postmaster/postmaster.c:5023 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "не удалось загрузить конфигурацию SSL в дочерний процесс" -#: postmaster/postmaster.c:5147 +#: postmaster/postmaster.c:5149 #, c-format msgid "postmaster became multithreaded" msgstr "процесс postmaster стал многопоточным" -#: postmaster/postmaster.c:5235 +#: postmaster/postmaster.c:5237 #, c-format msgid "database system is ready to accept read-only connections" msgstr "система БД готова принимать подключения в режиме \"только чтение\"" -#: postmaster/postmaster.c:5499 +#: postmaster/postmaster.c:5501 #, c-format msgid "could not fork startup process: %m" msgstr "породить стартовый процесс не удалось: %m" -#: postmaster/postmaster.c:5503 +#: postmaster/postmaster.c:5505 #, c-format msgid "could not fork archiver process: %m" msgstr "породить процесс архиватора не удалось: %m" -#: postmaster/postmaster.c:5507 +#: postmaster/postmaster.c:5509 #, c-format msgid "could not fork background writer process: %m" msgstr "породить процесс фоновой записи не удалось: %m" -#: postmaster/postmaster.c:5511 +#: postmaster/postmaster.c:5513 #, c-format msgid "could not fork checkpointer process: %m" msgstr "породить процесс контрольных точек не удалось: %m" -#: postmaster/postmaster.c:5515 +#: postmaster/postmaster.c:5517 #, c-format msgid "could not fork WAL writer process: %m" msgstr "породить процесс записи WAL не удалось: %m" -#: postmaster/postmaster.c:5519 +#: postmaster/postmaster.c:5521 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "породить процесс считывания WAL не удалось: %m" -#: postmaster/postmaster.c:5523 +#: postmaster/postmaster.c:5525 #, c-format msgid "could not fork process: %m" msgstr "породить процесс не удалось: %m" -#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 +#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 #, c-format msgid "database connection requirement not indicated during registration" msgstr "" "при регистрации фонового процесса не указывалось, что ему требуется " "подключение к БД" -#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "invalid processing mode in background worker" msgstr "неправильный режим обработки в фоновом процессе" -#: postmaster/postmaster.c:5839 +#: postmaster/postmaster.c:5841 #, c-format msgid "could not fork worker process: %m" msgstr "породить рабочий процесс не удалось: %m" -#: postmaster/postmaster.c:5952 +#: postmaster/postmaster.c:5954 #, c-format msgid "no slot available for new worker process" msgstr "для нового рабочего процесса не нашлось свободного слота" -#: postmaster/postmaster.c:6286 +#: postmaster/postmaster.c:6288 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "" "продублировать сокет %d для серверного процесса не удалось (код ошибки: %d)" -#: postmaster/postmaster.c:6318 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "создать наследуемый сокет не удалось (код ошибки: %d)\n" -#: postmaster/postmaster.c:6347 +#: postmaster/postmaster.c:6349 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "открыть файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:6354 +#: postmaster/postmaster.c:6356 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "прочитать файл серверных переменных \"%s\" не удалось: %s\n" -#: postmaster/postmaster.c:6363 +#: postmaster/postmaster.c:6365 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "не удалось стереть файл \"%s\": %s\n" -#: postmaster/postmaster.c:6380 +#: postmaster/postmaster.c:6382 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "отобразить файл серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6389 +#: postmaster/postmaster.c:6391 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "" "отключить отображение файла серверных переменных не удалось (код ошибки: " "%lu)\n" -#: postmaster/postmaster.c:6396 +#: postmaster/postmaster.c:6398 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "" "закрыть указатель файла серверных переменных не удалось (код ошибки: %lu)\n" -#: postmaster/postmaster.c:6558 +#: postmaster/postmaster.c:6560 #, c-format msgid "could not read exit code for process\n" msgstr "прочитать код завершения процесса не удалось\n" -#: postmaster/postmaster.c:6600 +#: postmaster/postmaster.c:6602 #, c-format msgid "could not post child completion status\n" msgstr "отправить состояние завершения потомка не удалось\n" @@ -20962,7 +21018,7 @@ msgid "error reading result of streaming command: %s" msgstr "ошибка при чтении результата команды передачи: %s" #: replication/libpqwalreceiver/libpqwalreceiver.c:570 -#: replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "неожиданный результат после CommandComplete: %s" @@ -20977,43 +21033,43 @@ msgstr "не удалось получить файл истории линии msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Ожидался 1 кортеж с 2 полями, однако получено кортежей: %d, полей: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:824 -#: replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 +#: replication/libpqwalreceiver/libpqwalreceiver.c:821 +#: replication/libpqwalreceiver/libpqwalreceiver.c:828 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не удалось получить данные из потока WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, c-format msgid "could not send data to WAL stream: %s" msgstr "не удалось отправить данные в поток WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "не удалось создать слот репликации \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "неверный ответ на запрос" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Ожидалось полей: %d, получено: %d." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, c-format msgid "the query interface requires a database connection" msgstr "для интерфейса запросов требуется подключение к БД" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "пустой запрос" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "неожиданный режим канала" @@ -21074,13 +21130,13 @@ msgstr "для логического декодирования требует msgid "logical decoding cannot be used while in recovery" msgstr "логическое декодирование нельзя использовать в процессе восстановления" -#: replication/logical/logical.c:350 replication/logical/logical.c:502 +#: replication/logical/logical.c:350 replication/logical/logical.c:504 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "" "физический слот репликации нельзя использовать для логического декодирования" -#: replication/logical/logical.c:355 replication/logical/logical.c:507 +#: replication/logical/logical.c:355 replication/logical/logical.c:509 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "слот репликации \"%s\" создан не в этой базе данных" @@ -21093,42 +21149,42 @@ msgid "" msgstr "" "нельзя создать слот логической репликации в транзакции, осуществляющей запись" -#: replication/logical/logical.c:552 +#: replication/logical/logical.c:554 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "начинается логическое декодирование для слота \"%s\"" -#: replication/logical/logical.c:554 +#: replication/logical/logical.c:556 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Передача транзакций, фиксируемых после %X/%X, чтение WAL с %X/%X." -#: replication/logical/logical.c:699 +#: replication/logical/logical.c:701 #, 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:705 +#: replication/logical/logical.c:707 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "слот \"%s\", модуль вывода \"%s\", в обработчике %s" -#: replication/logical/logical.c:876 replication/logical/logical.c:921 -#: replication/logical/logical.c:966 replication/logical/logical.c:1012 +#: replication/logical/logical.c:878 replication/logical/logical.c:923 +#: replication/logical/logical.c:968 replication/logical/logical.c:1014 #, c-format msgid "logical replication at prepare time requires a %s callback" msgstr "для логической репликации во время подготовки требуется обработчик %s" -#: replication/logical/logical.c:1244 replication/logical/logical.c:1293 -#: replication/logical/logical.c:1334 replication/logical/logical.c:1420 -#: replication/logical/logical.c:1469 +#: replication/logical/logical.c:1246 replication/logical/logical.c:1295 +#: replication/logical/logical.c:1336 replication/logical/logical.c:1422 +#: replication/logical/logical.c:1471 #, c-format msgid "logical streaming requires a %s callback" msgstr "для логической потоковой репликации требуется обработчик %s" -#: replication/logical/logical.c:1379 +#: replication/logical/logical.c:1381 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "" @@ -21262,7 +21318,7 @@ msgstr "" "репликации с OID %u" #: replication/logical/origin.c:941 replication/logical/origin.c:1128 -#: replication/slot.c:1867 +#: replication/slot.c:1934 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Увеличьте параметр max_replication_slots и повторите попытку." @@ -21330,19 +21386,19 @@ msgstr "" msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "целевое отношение логической репликации \"%s.%s\" не существует" -#: replication/logical/reorderbuffer.c:3842 +#: replication/logical/reorderbuffer.c:3973 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "не удалось записать в файл данных для XID %u: %m" -#: replication/logical/reorderbuffer.c:4188 -#: replication/logical/reorderbuffer.c:4213 +#: replication/logical/reorderbuffer.c:4319 +#: replication/logical/reorderbuffer.c:4344 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "не удалось прочитать файл подкачки буфера пересортировки: %m" -#: replication/logical/reorderbuffer.c:4192 -#: replication/logical/reorderbuffer.c:4217 +#: replication/logical/reorderbuffer.c:4323 +#: replication/logical/reorderbuffer.c:4348 #, c-format msgid "" "could not read from reorderbuffer spill file: read %d instead of %u bytes" @@ -21350,13 +21406,13 @@ msgstr "" "не удалось прочитать файл подкачки буфера пересортировки (прочитано байт: " "%d, требовалось: %u)" -#: replication/logical/reorderbuffer.c:4467 +#: replication/logical/reorderbuffer.c:4598 #, 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:4966 +#: replication/logical/reorderbuffer.c:5097 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d, требовалось: %d)" @@ -21379,63 +21435,63 @@ msgstr[1] "" msgstr[2] "" "экспортирован снимок логического декодирования: \"%s\" (ид. транзакций: %u)" -#: replication/logical/snapbuild.c:1374 replication/logical/snapbuild.c:1486 -#: replication/logical/snapbuild.c:2017 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 +#: replication/logical/snapbuild.c:2068 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "процесс логического декодирования достиг точки согласованности в %X/%X" -#: replication/logical/snapbuild.c:1376 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "Больше активных транзакций нет." -#: replication/logical/snapbuild.c:1437 +#: replication/logical/snapbuild.c:1484 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "" "процесс логического декодирования нашёл начальную стартовую точку в %X/%X" -#: replication/logical/snapbuild.c:1439 replication/logical/snapbuild.c:1463 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Ожидание транзакций (примерно %d), старее %u до конца." -#: replication/logical/snapbuild.c:1461 +#: replication/logical/snapbuild.c:1508 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "" "при логическом декодировании найдена начальная точка согласованности в %X/%X" -#: replication/logical/snapbuild.c:1488 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "Больше старых транзакций нет." -#: replication/logical/snapbuild.c:1885 +#: replication/logical/snapbuild.c:1932 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "" "файл состояния snapbuild \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/logical/snapbuild.c:1891 +#: replication/logical/snapbuild.c:1938 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "" "файл состояния snapbuild \"%s\" имеет неправильную версию (%u вместо %u)" -#: replication/logical/snapbuild.c:1962 +#: replication/logical/snapbuild.c:2009 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "" "в файле состояния snapbuild \"%s\" неверная контрольная сумма (%u вместо %u)" -#: replication/logical/snapbuild.c:2019 +#: replication/logical/snapbuild.c:2070 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Логическое декодирование начнётся с сохранённого снимка." -#: replication/logical/snapbuild.c:2091 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "не удалось разобрать имя файла \"%s\"" @@ -21449,36 +21505,31 @@ msgstr "" "процесс синхронизации таблицы при логической репликации для подписки \"%s\", " "таблицы \"%s\" закончил обработку" -#: replication/logical/tablesync.c:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "" "не удалось получить информацию о таблице \"%s.%s\" с сервера публикации: %s" -#: replication/logical/tablesync.c:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "таблица \"%s.%s\" не найдена на сервере публикации" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "" "не удалось начать копирование начального содержимого таблицы \"%s.%s\": %s" -#: replication/logical/tablesync.c:1069 +#: replication/logical/tablesync.c:1104 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "" "при копировании таблицы не удалось начать транзакцию на сервере публикации: " "%s" -#: replication/logical/tablesync.c:1110 -#, c-format -msgid "replication origin \"%s\" already exists" -msgstr "источник репликации \"%s\" уже существует" - -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1142 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "" @@ -21575,7 +21626,7 @@ msgstr "" "не удалось прочитать файл потоковых подтранзакций \"%s\" (прочитано байт: " "%zu из %zu)" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "" "logical replication apply worker for subscription %u will not start because " @@ -21584,7 +21635,7 @@ msgstr "" "применяющий процесс логической репликации для подписки %u не будет запущен, " "так как подписка была удалена при старте" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "" "logical replication apply worker for subscription \"%s\" will not start " @@ -21593,7 +21644,7 @@ msgstr "" "применяющий процесс логической репликации для подписки \"%s\" не будет " "запущен, так как подписка была отключена при старте" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, c-format msgid "" "logical replication table synchronization worker for subscription \"%s\", " @@ -21602,13 +21653,13 @@ msgstr "" "процесс синхронизации таблицы при логической репликации для подписки \"%s\", " "таблицы \"%s\" запущен" -#: replication/logical/worker.c:3170 +#: replication/logical/worker.c:3177 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "" "запускается применяющий процесс логической репликации для подписки \"%s\"" -#: replication/logical/worker.c:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "для подписки не задан слот репликации" @@ -21623,29 +21674,29 @@ msgstr "неверное значение proto_version" msgid "proto_version \"%s\" out of range" msgstr "значение proto_verson \"%s\" вне диапазона" -#: replication/pgoutput/pgoutput.c:227 +#: replication/pgoutput/pgoutput.c:231 #, c-format msgid "invalid publication_names syntax" msgstr "неверный синтаксис publication_names" -#: replication/pgoutput/pgoutput.c:324 +#: replication/pgoutput/pgoutput.c:328 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "" "клиент передал proto_version=%d, но мы поддерживаем только протокол %d и ниже" -#: replication/pgoutput/pgoutput.c:330 +#: replication/pgoutput/pgoutput.c:334 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "" "клиент передал proto_version=%d, но мы поддерживаем только протокол %d и выше" -#: replication/pgoutput/pgoutput.c:336 +#: replication/pgoutput/pgoutput.c:340 #, c-format msgid "publication_names parameter missing" msgstr "отсутствует параметр publication_names" -#: replication/pgoutput/pgoutput.c:349 +#: replication/pgoutput/pgoutput.c:353 #, c-format msgid "" "requested proto_version=%d does not support streaming, need %d or higher" @@ -21653,28 +21704,27 @@ msgstr "" "запрошенная версия proto_version=%d не поддерживает потоковую передачу, " "требуется версия %d или выше" -#: replication/pgoutput/pgoutput.c:354 +#: replication/pgoutput/pgoutput.c:358 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "запрошена потоковая передача, но она не поддерживается модулем вывода" -#: replication/slot.c:180 +#: replication/slot.c:212 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "имя слота репликации \"%s\" слишком короткое" -#: replication/slot.c:189 +#: replication/slot.c:220 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "имя слота репликации \"%s\" слишком длинное" -#: replication/slot.c:202 +#: replication/slot.c:232 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "имя слота репликации \"%s\" содержит недопустимый символ" -#: replication/slot.c:204 -#, c-format +#: replication/slot.c:233 msgid "" "Replication slot names may only contain lower case letters, numbers, and the " "underscore character." @@ -21682,54 +21732,54 @@ msgstr "" "Имя слота репликации может содержать только буквы в нижнем регистре, цифры и " "знак подчёркивания." -#: replication/slot.c:258 +#: replication/slot.c:287 #, c-format msgid "replication slot \"%s\" already exists" msgstr "слот репликации \"%s\" уже существует" -#: replication/slot.c:268 +#: replication/slot.c:297 #, c-format msgid "all replication slots are in use" msgstr "используются все слоты репликации" -#: replication/slot.c:269 +#: replication/slot.c:298 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Освободите ненужный или увеличьте параметр max_replication_slots." -#: replication/slot.c:402 replication/slotfuncs.c:761 -#: utils/adt/pgstatfuncs.c:2228 +#: replication/slot.c:431 replication/slotfuncs.c:761 +#: utils/adt/pgstatfuncs.c:2240 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "слот репликации \"%s\" не существует" -#: replication/slot.c:448 replication/slot.c:1025 +#: replication/slot.c:477 replication/slot.c:1083 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "слот репликации \"%s\" занят процессом с PID %d" -#: replication/slot.c:676 replication/slot.c:1419 replication/slot.c:1802 +#: replication/slot.c:705 replication/slot.c:1479 replication/slot.c:1869 #, c-format msgid "could not remove directory \"%s\"" msgstr "ошибка при удалении каталога \"%s\"" -#: replication/slot.c:1060 +#: replication/slot.c:1118 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "" "слоты репликации можно использовать, только если max_replication_slots > 0" -#: replication/slot.c:1065 +#: replication/slot.c:1123 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "слоты репликации можно использовать, только если wal_level >= replica" -#: replication/slot.c:1250 +#: replication/slot.c:1310 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "завершение процесса %d для освобождения слота репликации \"%s\"" -#: replication/slot.c:1288 +#: replication/slot.c:1348 #, c-format msgid "" "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds " @@ -21738,49 +21788,49 @@ msgstr "" "слот \"%s\" аннулируется, так как его позиция restart_lsn %X/%X превышает " "max_slot_wal_keep_size" -#: replication/slot.c:1740 +#: replication/slot.c:1807 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "" "файл слота репликации \"%s\" имеет неправильную сигнатуру (%u вместо %u)" -#: replication/slot.c:1747 +#: replication/slot.c:1814 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "файл состояния snapbuild \"%s\" имеет неподдерживаемую версию %u" -#: replication/slot.c:1754 +#: replication/slot.c:1821 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "у файла слота репликации \"%s\" неверная длина: %u" -#: replication/slot.c:1790 +#: replication/slot.c:1857 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "" "в файле слота репликации \"%s\" неверная контрольная сумма (%u вместо %u)" -#: replication/slot.c:1824 +#: replication/slot.c:1891 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "существует слот логической репликации \"%s\", но wal_level < logical" -#: replication/slot.c:1826 +#: replication/slot.c:1893 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Смените wal_level на logical или более высокий уровень." -#: replication/slot.c:1830 +#: replication/slot.c:1897 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "существует слот физической репликации \"%s\", но wal_level < replica" -#: replication/slot.c:1832 +#: replication/slot.c:1899 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Смените wal_level на replica или более высокий уровень." -#: replication/slot.c:1866 +#: replication/slot.c:1933 #, c-format msgid "too many replication slots active before shutdown" msgstr "перед завершением активно слишком много слотов репликации" @@ -21850,7 +21900,7 @@ msgstr "" "Повторите попытку, когда для исходного слота репликации будет определена " "позиция confirmed_flush_lsn." -#: replication/syncrep.c:268 +#: replication/syncrep.c:311 #, c-format msgid "" "canceling the wait for synchronous replication and terminating connection " @@ -21859,7 +21909,7 @@ msgstr "" "отмена ожидания синхронной репликации и закрытие соединения по команде " "администратора" -#: replication/syncrep.c:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, c-format msgid "" "The transaction has already committed locally, but might not have been " @@ -21868,29 +21918,29 @@ msgstr "" "Транзакция уже была зафиксирована локально, но, возможно, не была " "реплицирована на резервный сервер." -#: replication/syncrep.c:285 +#: replication/syncrep.c:328 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "отмена ожидания синхронной репликации по запросу пользователя" -#: replication/syncrep.c:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "резервный сервер \"%s\" стал синхронным с приоритетом %u" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "" "резервный сервер \"%s\" стал кандидатом для включения в кворум синхронных " "резервных" -#: replication/syncrep.c:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "ошибка при разборе synchronous_standby_names" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "число синхронных резервных серверов (%d) должно быть больше нуля" @@ -21960,7 +22010,7 @@ msgid "primary server contains no more WAL on requested timeline %u" msgstr "" "на главном сервере больше нет журналов для запрошенной линии времени %u" -#: replication/walreceiver.c:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "не удалось закрыть сегмент журнала %s: %m" @@ -21970,45 +22020,45 @@ msgstr "не удалось закрыть сегмент журнала %s: %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "загрузка файла истории для линии времени %u с главного сервера" -#: replication/walreceiver.c:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "не удалось записать в сегмент журнала %s (смещение %u, длина %lu): %m" -#: replication/walsender.c:525 storage/smgr/md.c:1336 +#: replication/walsender.c:539 storage/smgr/md.c:1339 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "не удалось перейти к концу файла \"%s\": %m" -#: replication/walsender.c:529 +#: replication/walsender.c:543 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "не удалось перейти к началу файла \"%s\": %m" -#: replication/walsender.c:580 +#: replication/walsender.c:594 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "Команда IDENTIFY_SYSTEM не выполнялась до START_REPLICATION" -#: replication/walsender.c:609 +#: replication/walsender.c:623 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "" "слот логической репликации нельзя использовать для физической репликации" -#: replication/walsender.c:678 +#: replication/walsender.c:692 #, 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:681 +#: replication/walsender.c:695 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "История этого сервера ответвилась от линии времени %u в %X/%X." -#: replication/walsender.c:725 +#: replication/walsender.c:739 #, c-format msgid "" "requested starting point %X/%X is ahead of the WAL flush position of this " @@ -22018,41 +22068,41 @@ msgstr "" "на этом сервере (%X/%X)" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:975 +#: replication/walsender.c:989 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s требуется выполнять не в транзакции" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:985 +#: replication/walsender.c:999 #, c-format msgid "%s must be called inside a transaction" msgstr "%s требуется выполнять внутри транзакции" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:991 +#: replication/walsender.c:1005 #, 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:997 +#: replication/walsender.c:1011 #, c-format msgid "%s must be called before any query" msgstr "%s требуется выполнять до каких-либо запросов" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1003 +#: replication/walsender.c:1017 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s требуется вызывать не в подтранзакции" -#: replication/walsender.c:1146 +#: replication/walsender.c:1160 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "прочитать из слота логической репликации \"%s\" нельзя" -#: replication/walsender.c:1148 +#: replication/walsender.c:1162 #, c-format msgid "" "This slot has been invalidated because it exceeded the maximum reserved size." @@ -22060,33 +22110,33 @@ msgstr "" "Этот слот был аннулирован из-за превышения максимального зарезервированного " "размера." -#: replication/walsender.c:1158 +#: replication/walsender.c:1172 #, c-format msgid "terminating walsender process after promotion" msgstr "завершение процесса передачи журнала после повышения" -#: replication/walsender.c:1552 +#: replication/walsender.c:1566 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "" "нельзя выполнять новые команды, пока процесс передачи WAL находится в режиме " "остановки" -#: replication/walsender.c:1587 +#: replication/walsender.c:1601 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "" "нельзя выполнять команды SQL в процессе, передающем WAL для физической " "репликации" -#: replication/walsender.c:1620 +#: replication/walsender.c:1634 #, c-format msgid "received replication command: %s" msgstr "получена команда репликации: %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1081 -#: tcop/postgres.c:1440 tcop/postgres.c:1713 tcop/postgres.c:2194 -#: tcop/postgres.c:2627 tcop/postgres.c:2706 +#: replication/walsender.c:1642 tcop/fastpath.c:208 tcop/postgres.c:1046 +#: tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 +#: tcop/postgres.c:2592 tcop/postgres.c:2671 #, c-format msgid "" "current transaction is aborted, commands ignored until end of transaction " @@ -22094,22 +22144,22 @@ msgid "" msgstr "" "текущая транзакция прервана, команды до конца блока транзакции игнорируются" -#: replication/walsender.c:1763 replication/walsender.c:1798 +#: replication/walsender.c:1777 replication/walsender.c:1812 #, c-format msgid "unexpected EOF on standby connection" msgstr "неожиданный обрыв соединения с резервным сервером" -#: replication/walsender.c:1786 +#: replication/walsender.c:1800 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неверный тип сообщения резервного сервера: \"%c\"" -#: replication/walsender.c:1875 +#: replication/walsender.c:1889 #, c-format msgid "unexpected message type \"%c\"" msgstr "неожиданный тип сообщения \"%c\"" -#: replication/walsender.c:2288 +#: replication/walsender.c:2306 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершение процесса передачи журнала из-за тайм-аута репликации" @@ -22369,7 +22419,7 @@ msgstr "" "имя запроса WITH \"%s\" оказалось и в действии правила, и в переписываемом " "запросе" -#: rewrite/rewriteHandler.c:610 +#: rewrite/rewriteHandler.c:613 #, c-format msgid "" "INSERT...SELECT rule actions are not supported for queries having data-" @@ -22378,118 +22428,118 @@ msgstr "" "правила INSERT...SELECT не поддерживаются для запросов с операторами, " "изменяющими данные, в WITH" -#: rewrite/rewriteHandler.c:663 +#: rewrite/rewriteHandler.c:666 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "RETURNING можно определить только для одного правила" -#: rewrite/rewriteHandler.c:895 rewrite/rewriteHandler.c:934 +#: rewrite/rewriteHandler.c:898 rewrite/rewriteHandler.c:937 #, 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:900 rewrite/rewriteHandler.c:966 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "" "Столбец \"%s\" является столбцом идентификации со свойством GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:899 +#: rewrite/rewriteHandler.c:902 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для переопределения укажите OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:961 rewrite/rewriteHandler.c:969 +#: rewrite/rewriteHandler.c:964 rewrite/rewriteHandler.c:972 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "столбцу \"%s\" можно присвоить только значение DEFAULT" -#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 +#: rewrite/rewriteHandler.c:1107 rewrite/rewriteHandler.c:1125 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "многочисленные присвоения одному столбцу \"%s\"" -#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:1726 rewrite/rewriteHandler.c:3181 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "доступ к несистемному представлению \"%s\" ограничен" -#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 +#: rewrite/rewriteHandler.c:2158 rewrite/rewriteHandler.c:4084 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в правилах для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2256 +#: rewrite/rewriteHandler.c:2263 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "обнаружена бесконечная рекурсия в политике для отношения \"%s\"" -#: rewrite/rewriteHandler.c:2586 +#: rewrite/rewriteHandler.c:2593 msgid "Junk view columns are not updatable." msgstr "Утилизируемые столбцы представлений не обновляются." -#: rewrite/rewriteHandler.c:2591 +#: rewrite/rewriteHandler.c:2598 msgid "" "View columns that are not columns of their base relation are not updatable." msgstr "" "Столбцы представлений, не являющиеся столбцами базовых отношений, не " "обновляются." -#: rewrite/rewriteHandler.c:2594 +#: rewrite/rewriteHandler.c:2601 msgid "View columns that refer to system columns are not updatable." msgstr "" "Столбцы представлений, ссылающиеся на системные столбцы, не обновляются." -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2604 msgid "View columns that return whole-row references are not updatable." msgstr "" "Столбцы представлений, возвращающие ссылки на всю строку, не обновляются." -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Представления с DISTINCT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2661 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Представления с GROUP BY не обновляются автоматически." -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing HAVING are not automatically updatable." msgstr "Представления с HAVING не обновляются автоматически." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2674 msgid "" "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "" "Представления с UNION, INTERSECT или EXCEPT не обновляются автоматически." -#: rewrite/rewriteHandler.c:2670 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing WITH are not automatically updatable." msgstr "Представления с WITH не обновляются автоматически." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2680 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Представления с LIMIT или OFFSET не обновляются автоматически." -#: rewrite/rewriteHandler.c:2685 +#: rewrite/rewriteHandler.c:2692 msgid "Views that return aggregate functions are not automatically updatable." msgstr "" "Представления, возвращающие агрегатные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2688 +#: rewrite/rewriteHandler.c:2695 msgid "Views that return window functions are not automatically updatable." msgstr "" "Представления, возвращающие оконные функции, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2698 msgid "" "Views that return set-returning functions are not automatically updatable." msgstr "" "Представления, возвращающие функции с результатом-множеством, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:2698 rewrite/rewriteHandler.c:2702 -#: rewrite/rewriteHandler.c:2710 +#: rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2709 +#: rewrite/rewriteHandler.c:2717 msgid "" "Views that do not select from a single table or view are not automatically " "updatable." @@ -22497,27 +22547,27 @@ msgstr "" "Представления, выбирающие данные не из одной таблицы или представления, не " "обновляются автоматически." -#: rewrite/rewriteHandler.c:2713 +#: rewrite/rewriteHandler.c:2720 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Представления, содержащие TABLESAMPLE, не обновляются автоматически." -#: rewrite/rewriteHandler.c:2737 +#: rewrite/rewriteHandler.c:2744 msgid "Views that have no updatable columns are not automatically updatable." msgstr "" "Представления, не содержащие обновляемых столбцов, не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:3234 +#: rewrite/rewriteHandler.c:3241 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставить данные в столбец \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3242 +#: rewrite/rewriteHandler.c:3249 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "изменить данные в столбце \"%s\" представления \"%s\" нельзя" -#: rewrite/rewriteHandler.c:3724 +#: rewrite/rewriteHandler.c:3747 #, c-format msgid "" "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in " @@ -22526,7 +22576,7 @@ msgstr "" "правила DO INSTEAD NOTIFY не поддерживаются в операторах, изменяющих данные, " "в WITH" -#: rewrite/rewriteHandler.c:3735 +#: rewrite/rewriteHandler.c:3758 #, c-format msgid "" "DO INSTEAD NOTHING rules are not supported for data-modifying statements in " @@ -22535,7 +22585,7 @@ msgstr "" "правила DO INSTEAD NOTHING не поддерживаются в операторах, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3749 +#: rewrite/rewriteHandler.c:3772 #, c-format msgid "" "conditional DO INSTEAD rules are not supported for data-modifying statements " @@ -22544,13 +22594,13 @@ msgstr "" "условные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3753 +#: rewrite/rewriteHandler.c:3776 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "" "правила DO ALSO не поддерживаются для операторов, изменяющих данные, в WITH" -#: rewrite/rewriteHandler.c:3758 +#: rewrite/rewriteHandler.c:3781 #, c-format msgid "" "multi-statement DO INSTEAD rules are not supported for data-modifying " @@ -22559,8 +22609,8 @@ msgstr "" "составные правила DO INSTEAD не поддерживаются для операторов, изменяющих " "данные, в WITH" -#: rewrite/rewriteHandler.c:3988 rewrite/rewriteHandler.c:3996 -#: rewrite/rewriteHandler.c:4004 +#: rewrite/rewriteHandler.c:4012 rewrite/rewriteHandler.c:4020 +#: rewrite/rewriteHandler.c:4028 #, c-format msgid "" "Views with conditional DO INSTEAD rules are not automatically updatable." @@ -22568,43 +22618,43 @@ msgstr "" "Представления в сочетании с правилами DO INSTEAD с условиями не обновляются " "автоматически." -#: rewrite/rewriteHandler.c:4109 +#: rewrite/rewriteHandler.c:4134 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "выполнить INSERT RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4111 +#: rewrite/rewriteHandler.c:4136 #, 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:4116 +#: rewrite/rewriteHandler.c:4141 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "выполнить UPDATE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4118 +#: rewrite/rewriteHandler.c:4143 #, 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:4123 +#: rewrite/rewriteHandler.c:4148 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "выполнить DELETE RETURNING для отношения \"%s\" нельзя" -#: rewrite/rewriteHandler.c:4125 +#: rewrite/rewriteHandler.c:4150 #, 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:4143 +#: rewrite/rewriteHandler.c:4168 #, c-format msgid "" "INSERT with ON CONFLICT clause cannot be used with table that has INSERT or " @@ -22613,7 +22663,7 @@ msgstr "" "INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для " "которой заданы правила INSERT или UPDATE" -#: rewrite/rewriteHandler.c:4200 +#: rewrite/rewriteHandler.c:4225 #, c-format msgid "" "WITH cannot be used in a query that is rewritten by rules into multiple " @@ -22690,22 +22740,22 @@ msgid "" msgstr "" "функция, возвращающая запись, вызвана в контексте, не допускающем этот тип" -#: storage/buffer/bufmgr.c:598 storage/buffer/bufmgr.c:765 +#: storage/buffer/bufmgr.c:605 storage/buffer/bufmgr.c:772 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "обращаться к временным таблицам других сеансов нельзя" -#: storage/buffer/bufmgr.c:843 +#: storage/buffer/bufmgr.c:850 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "не удалось увеличить отношение \"%s\" до блока %u" -#: storage/buffer/bufmgr.c:930 +#: storage/buffer/bufmgr.c:937 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "неожиданные данные после EOF в блоке %u отношения %s" -#: storage/buffer/bufmgr.c:932 +#: storage/buffer/bufmgr.c:939 #, c-format msgid "" "This has been seen to occur with buggy kernels; consider updating your " @@ -22714,27 +22764,27 @@ msgstr "" "Эта ситуация может возникать из-за ошибок в ядре; возможно, вам следует " "обновить ОС." -#: storage/buffer/bufmgr.c:1031 +#: storage/buffer/bufmgr.c:1038 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" -msgstr "неверная страница в блоке %u отношения %s; страница обнуляется" +msgstr "некорректная страница в блоке %u отношения %s; страница обнуляется" -#: storage/buffer/bufmgr.c:4533 +#: storage/buffer/bufmgr.c:4600 #, c-format msgid "could not write block %u of %s" msgstr "не удалось запись блок %u файла %s" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4602 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Множественные сбои - возможно, постоянная ошибка записи." -#: storage/buffer/bufmgr.c:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4623 storage/buffer/bufmgr.c:4642 #, c-format msgid "writing block %u of relation %s" msgstr "запись блока %u отношения %s" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4946 #, c-format msgid "snapshot too old" msgstr "снимок слишком стар" @@ -22768,115 +22818,115 @@ msgstr "" msgid "could not delete shared fileset \"%s\": %m" msgstr "ошибка удаления разделяемого набора файлов \"%s\": %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:874 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "не удалось обрезать файл \"%s\": %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "не удалось сбросить грязные данные: %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, c-format msgid "could not determine dirty data size: %m" msgstr "не удалось определить размер грязных данных: %m" -#: storage/file/fd.c:597 +#: storage/file/fd.c:594 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "ошибка в munmap() при сбросе данных на диск: %m" -#: storage/file/fd.c:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "для файла \"%s\" не удалось создать ссылку \"%s\": %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "ошибка в getrlimit(): %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "недостаточно дескрипторов файлов для запуска серверного процесса" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "Система выделяет: %d, а требуется минимум: %d." -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 -#: storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 +#: storage/file/fd.c:2668 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "нехватка дескрипторов файлов: %m; освободите их и повторите попытку" -#: storage/file/fd.c:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "временный файл: путь \"%s\", размер %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "не удалось создать временный каталог \"%s\": %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "не удалось создать временный подкаталог \"%s\": %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "не удалось создать временный файл \"%s\": %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "не удалось открыть временный файл \"%s\": %m" -#: storage/file/fd.c:1859 +#: storage/file/fd.c:1850 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "ошибка удаления временного файла \"%s\": %m" -#: storage/file/fd.c:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "ошибка удаления файла \"%s\": %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "размер временного файла превышает предел temp_file_limit (%d КБ)" -#: storage/file/fd.c:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "превышен предел maxAllocatedDescs (%d) при попытке открыть файл \"%s\"" -#: storage/file/fd.c:2496 +#: storage/file/fd.c:2487 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке выполнить команду \"%s\"" -#: storage/file/fd.c:2653 +#: storage/file/fd.c:2644 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "" "превышен предел maxAllocatedDescs (%d) при попытке открыть каталог \"%s\"" -#: storage/file/fd.c:3183 +#: storage/file/fd.c:3174 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "в каталоге временных файлов обнаружен неуместный файл: \"%s\"" -#: storage/file/fd.c:3312 +#: storage/file/fd.c:3303 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "не удалось синхронизировать с ФС файл \"%s\": %m" @@ -23101,13 +23151,13 @@ msgstr "процесс восстановления продолжает ожи msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "процесс восстановления завершил ожидание после %ld.%03d мс: %s" -#: storage/ipc/standby.c:883 tcop/postgres.c:3358 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "" "выполнение оператора отменено из-за конфликта с процессом восстановления" -#: storage/ipc/standby.c:884 tcop/postgres.c:2512 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "" @@ -23184,103 +23234,103 @@ msgstr "обнаружена взаимоблокировка" msgid "See server log for query details." msgstr "Подробности запроса смотрите в протоколе сервера." -#: storage/lmgr/lmgr.c:825 +#: storage/lmgr/lmgr.c:831 #, c-format msgid "while updating tuple (%u,%u) in relation \"%s\"" msgstr "при изменении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:828 +#: storage/lmgr/lmgr.c:834 #, c-format msgid "while deleting tuple (%u,%u) in relation \"%s\"" msgstr "при удалении кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:831 +#: storage/lmgr/lmgr.c:837 #, c-format msgid "while locking tuple (%u,%u) in relation \"%s\"" msgstr "при блокировке кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:834 +#: storage/lmgr/lmgr.c:840 #, c-format msgid "while locking updated version (%u,%u) of tuple in relation \"%s\"" msgstr "при блокировке изменённой версии (%u,%u) кортежа в отношении \"%s\"" -#: storage/lmgr/lmgr.c:837 +#: storage/lmgr/lmgr.c:843 #, c-format msgid "while inserting index tuple (%u,%u) in relation \"%s\"" msgstr "при добавлении кортежа индекса (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:840 +#: storage/lmgr/lmgr.c:846 #, c-format msgid "while checking uniqueness of tuple (%u,%u) in relation \"%s\"" msgstr "при проверке уникальности кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:843 +#: storage/lmgr/lmgr.c:849 #, c-format msgid "while rechecking updated tuple (%u,%u) in relation \"%s\"" msgstr "при перепроверке изменённого кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:846 +#: storage/lmgr/lmgr.c:852 #, c-format msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "" "при проверке ограничения-исключения для кортежа (%u,%u) в отношении \"%s\"" -#: storage/lmgr/lmgr.c:1139 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "отношение %u базы данных %u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1151 #, c-format msgid "extension of relation %u of database %u" msgstr "расширение отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1151 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid базы %u" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "page %u of relation %u of database %u" msgstr "страница %u отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1163 +#: storage/lmgr/lmgr.c:1169 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "кортеж (%u,%u) отношения %u базы данных %u" -#: storage/lmgr/lmgr.c:1171 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "транзакция %u" -#: storage/lmgr/lmgr.c:1176 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "виртуальная транзакция %d/%u" -#: storage/lmgr/lmgr.c:1182 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "спекулятивный маркер %u транзакции %u" -#: storage/lmgr/lmgr.c:1188 +#: storage/lmgr/lmgr.c:1194 #, c-format msgid "object %u of class %u of database %u" msgstr "объект %u класса %u базы данных %u" -#: storage/lmgr/lmgr.c:1196 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "пользовательская блокировка [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1203 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "рекомендательная блокировка [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "нераспознанный тип блокировки %d" @@ -23513,19 +23563,19 @@ msgstr "не удалось записать блок %u в файл \"%s\": %m" msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "не удалось записать блок %u в файл \"%s\" (записано байт: %d из %d)" -#: storage/smgr/md.c:842 +#: storage/smgr/md.c:845 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "" "не удалось обрезать файл \"%s\" (требуемая длина в блоках: %u, но сейчас он " "содержит %u)" -#: storage/smgr/md.c:897 +#: storage/smgr/md.c:900 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "не удалось обрезать файл \"%s\" до нужного числа блоков (%u): %m" -#: storage/smgr/md.c:1301 +#: storage/smgr/md.c:1304 #, c-format msgid "" "could not open file \"%s\" (target block %u): previous segment is only %u " @@ -23534,7 +23584,7 @@ msgstr "" "не удалось открыть файл file \"%s\" (целевой блок %u): недостаточно блоков в " "предыдущем сегменте (всего %u)" -#: storage/smgr/md.c:1315 +#: storage/smgr/md.c:1318 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "не удалось открыть файл file \"%s\" (целевой блок %u): %m" @@ -23549,8 +23599,8 @@ msgstr "вызвать функцию \"%s\" через интерфейс fastp msgid "fastpath function call: \"%s\" (OID %u)" msgstr "вызов функции (через fastpath): \"%s\" (OID %u)" -#: tcop/fastpath.c:312 tcop/postgres.c:1308 tcop/postgres.c:1566 -#: tcop/postgres.c:2037 tcop/postgres.c:2293 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 +#: tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "продолжительность: %s мс" @@ -23585,44 +23635,44 @@ msgstr "неверный размер аргумента (%d) в сообщен msgid "incorrect binary data format in function argument %d" msgstr "неправильный формат двоичных данных в аргументе функции %d" -#: tcop/postgres.c:449 tcop/postgres.c:4836 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "неправильный тип клиентского сообщения %d" -#: tcop/postgres.c:1018 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "оператор: %s" -#: tcop/postgres.c:1313 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "продолжительность: %s мс, оператор: %s" -#: tcop/postgres.c:1419 +#: tcop/postgres.c:1384 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "в подготовленный оператор нельзя вставить несколько команд" -#: tcop/postgres.c:1571 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "продолжительность: %s мс, разбор %s: %s" # [SM]: TO REVIEW -#: tcop/postgres.c:1638 tcop/postgres.c:2608 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "безымянный подготовленный оператор не существует" -#: tcop/postgres.c:1690 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "" "неверное число форматов параметров в сообщении Bind (%d, а параметров %d)" -#: tcop/postgres.c:1696 +#: tcop/postgres.c:1661 #, c-format msgid "" "bind message supplies %d parameters, but prepared statement \"%s\" requires " @@ -23631,113 +23681,113 @@ msgstr "" "в сообщении Bind передано неверное число параметров (%d, а подготовленный " "оператор \"%s\" требует %d)" -#: tcop/postgres.c:1915 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "неверный формат двоичных данных в параметре Bind %d" -#: tcop/postgres.c:2042 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "продолжительность: %s мс, сообщение Bind %s%s%s: %s" -#: tcop/postgres.c:2093 tcop/postgres.c:2692 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не существует" -#: tcop/postgres.c:2173 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2175 tcop/postgres.c:2301 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "выборка из" -#: tcop/postgres.c:2176 tcop/postgres.c:2302 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "выполнение" -#: tcop/postgres.c:2298 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "продолжительность: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2444 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "подготовка: %s" -#: tcop/postgres.c:2469 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "параметры: %s" -#: tcop/postgres.c:2484 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "причина прерывания: конфликт при восстановлении" -#: tcop/postgres.c:2500 +#: tcop/postgres.c:2465 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Пользователь удерживал фиксатор разделяемого буфера слишком долго." -#: tcop/postgres.c:2503 +#: tcop/postgres.c:2468 #, c-format msgid "User was holding a relation lock for too long." msgstr "Пользователь удерживал блокировку таблицы слишком долго." -#: tcop/postgres.c:2506 +#: tcop/postgres.c:2471 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "" "Пользователь использовал табличное пространство, которое должно быть удалено." -#: tcop/postgres.c:2509 +#: tcop/postgres.c:2474 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "" "Запросу пользователя нужно было видеть версии строк, которые должны быть " "удалены." -#: tcop/postgres.c:2515 +#: tcop/postgres.c:2480 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Пользователь был подключён к базе данных, которая должна быть удалена." -#: tcop/postgres.c:2554 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "портал \"%s\", параметр $%d = %s" -#: tcop/postgres.c:2557 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "портал \"%s\", параметр $%d" -#: tcop/postgres.c:2563 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "неименованный портал, параметр $%d = %s" -#: tcop/postgres.c:2566 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "неименованный портал, параметр $%d" -#: tcop/postgres.c:2912 +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "закрытие подключения из-за неожиданного сигнала SIGQUIT" -#: tcop/postgres.c:2918 +#: tcop/postgres.c:2883 #, c-format msgid "terminating connection because of crash of another server process" msgstr "закрытие подключения из-за краха другого серверного процесса" -#: tcop/postgres.c:2919 +#: tcop/postgres.c:2884 #, c-format msgid "" "The postmaster has commanded this server process to roll back the current " @@ -23748,7 +23798,7 @@ msgstr "" "транзакцию и завершиться, так как другой серверный процесс завершился " "аварийно и, возможно, разрушил разделяемую память." -#: tcop/postgres.c:2923 tcop/postgres.c:3284 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, c-format msgid "" "In a moment you should be able to reconnect to the database and repeat your " @@ -23757,18 +23807,18 @@ msgstr "" "Вы сможете переподключиться к базе данных и повторить вашу команду сию " "минуту." -#: tcop/postgres.c:2930 +#: tcop/postgres.c:2895 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "" "закрытие подключения вследствие получения команды для немедленного отключения" -#: tcop/postgres.c:3016 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "исключение в операции с плавающей точкой" -#: tcop/postgres.c:3017 +#: tcop/postgres.c:2982 #, c-format msgid "" "An invalid floating-point operation was signaled. This probably means an out-" @@ -23778,72 +23828,72 @@ msgstr "" "оказался вне допустимых рамок или произошла ошибка вычисления, например, " "деление на ноль." -#: tcop/postgres.c:3188 +#: tcop/postgres.c:3153 #, c-format msgid "canceling authentication due to timeout" msgstr "отмена проверки подлинности из-за тайм-аута" -#: tcop/postgres.c:3192 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "прекращение процесса автоочистки по команде администратора" -#: tcop/postgres.c:3196 +#: tcop/postgres.c:3161 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "завершение обработчика логической репликации по команде администратора" -#: tcop/postgres.c:3213 tcop/postgres.c:3223 tcop/postgres.c:3282 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "закрытие подключения из-за конфликта с процессом восстановления" -#: tcop/postgres.c:3234 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "закрытие подключения по команде администратора" -#: tcop/postgres.c:3265 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "подключение к клиенту потеряно" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "выполнение оператора отменено из-за тайм-аута блокировки" -#: tcop/postgres.c:3342 +#: tcop/postgres.c:3307 #, c-format msgid "canceling statement due to statement timeout" msgstr "выполнение оператора отменено из-за тайм-аута" -#: tcop/postgres.c:3349 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "отмена задачи автоочистки" -#: tcop/postgres.c:3372 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "выполнение оператора отменено по запросу пользователя" -#: tcop/postgres.c:3386 +#: tcop/postgres.c:3351 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "закрытие подключения из-за тайм-аута простоя в транзакции" -#: tcop/postgres.c:3397 +#: tcop/postgres.c:3362 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "закрытие подключения из-за тайм-аута простоя сеанса" -#: tcop/postgres.c:3526 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "превышен предел глубины стека" -#: tcop/postgres.c:3527 +#: tcop/postgres.c:3492 #, c-format msgid "" "Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " @@ -23853,12 +23903,12 @@ msgstr "" "КБ), предварительно убедившись, что ОС предоставляет достаточный размер " "стека." -#: tcop/postgres.c:3590 +#: tcop/postgres.c:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значение \"max_stack_depth\" не должно превышать %ld КБ." -#: tcop/postgres.c:3592 +#: tcop/postgres.c:3557 #, c-format msgid "" "Increase the platform's stack depth limit via \"ulimit -s\" or local " @@ -23867,49 +23917,49 @@ msgstr "" "Увеличьте предел глубины стека в системе с помощью команды \"ulimit -s\" или " "эквивалента в вашей ОС." -#: tcop/postgres.c:4013 +#: tcop/postgres.c:3978 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неверный аргумент командной строки для серверного процесса: %s" -#: tcop/postgres.c:4014 tcop/postgres.c:4020 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Для дополнительной информации попробуйте \"%s --help\"." -#: tcop/postgres.c:4018 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неверный аргумент командной строки: %s" -#: tcop/postgres.c:4081 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: не указаны ни база данных, ни пользователь" -#: tcop/postgres.c:4738 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неверный подтип сообщения CLOSE: %d" -#: tcop/postgres.c:4773 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неверный подтип сообщения DESCRIBE: %d" -#: tcop/postgres.c:4857 +#: tcop/postgres.c:4822 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "" "вызовы функций через fastpath не поддерживаются для реплицирующих соединений" -#: tcop/postgres.c:4861 +#: tcop/postgres.c:4826 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "" "протокол расширенных запросов не поддерживается для реплицирующих соединений" -#: tcop/postgres.c:5038 +#: tcop/postgres.c:5003 #, c-format msgid "" "disconnection: session time: %d:%02d:%02d.%03d user=%s database=%s " @@ -23925,12 +23975,12 @@ msgstr "" "число форматов результатов в сообщении Bind (%d) не равно числу столбцов в " "запросе (%d)" -#: tcop/pquery.c:939 tcop/pquery.c:1698 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "курсор может сканировать только вперёд" -#: tcop/pquery.c:940 tcop/pquery.c:1699 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Добавьте в его объявление SCROLL, чтобы он мог перемещаться назад." @@ -23970,6 +24020,11 @@ msgstr "выполнять %s в фоновом процессе нельзя" msgid "must be superuser to do CHECKPOINT" msgstr "для выполнения CHECKPOINT нужно быть суперпользователем" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS принимает только имена отношений в предложении FROM" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -24094,55 +24149,55 @@ msgstr "нераспознанный параметр тезауруса: \"%s\" msgid "missing Dictionary parameter" msgstr "отсутствует параметр Dictionary" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 -#: tsearch/spell.c:1063 +#: tsearch/spell.c:383 tsearch/spell.c:400 tsearch/spell.c:409 +#: tsearch/spell.c:1060 #, c-format msgid "invalid affix flag \"%s\"" msgstr "неверный флаг аффиксов \"%s\"" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:387 tsearch/spell.c:1064 #, 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:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:766 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "неверное регулярное выражение: %s" -#: tsearch/spell.c:983 tsearch/spell.c:1000 tsearch/spell.c:1017 -#: tsearch/spell.c:1034 tsearch/spell.c:1099 gram.y:16630 gram.y:16647 +#: tsearch/spell.c:982 tsearch/spell.c:998 tsearch/spell.c:1014 +#: tsearch/spell.c:1030 tsearch/spell.c:1095 gram.y:16630 gram.y:16647 #, c-format msgid "syntax error" msgstr "ошибка синтаксиса" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 -#: tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1187 tsearch/spell.c:1199 tsearch/spell.c:1758 +#: tsearch/spell.c:1763 tsearch/spell.c:1768 #, c-format msgid "invalid affix alias \"%s\"" msgstr "неверное указание аффикса \"%s\"" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1240 tsearch/spell.c:1311 tsearch/spell.c:1460 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "не удалось открыть файл аффиксов \"%s\": %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1294 #, c-format msgid "" "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag " @@ -24151,32 +24206,32 @@ msgstr "" "словарь Ispell поддерживает для флага только значения \"default\", \"long\" " "и \"num\"" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1338 #, c-format msgid "invalid number of flag vector aliases" msgstr "неверное количество векторов флагов" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1361 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "количество псевдонимов превышает заданное число %d" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1575 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "файл аффиксов содержит команды и в старом, и в новом стиле" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "строка слишком длинна для tsvector (%d Б, при максимуме %d)" -#: tsearch/ts_locale.c:227 +#: tsearch/ts_locale.c:200 #, c-format msgid "line %d of configuration file \"%s\": \"%s\"" msgstr "строка %d файла конфигурации \"%s\": \"%s\"" -#: tsearch/ts_locale.c:307 +#: tsearch/ts_locale.c:280 #, c-format msgid "conversion from wchar_t to server encoding failed: %m" msgstr "преобразовать wchar_t в кодировку сервера не удалось: %m" @@ -24208,137 +24263,137 @@ msgstr "не удалось открыть файл стоп-слов \"%s\": %m msgid "text search parser does not support headline creation" msgstr "анализатор текстового поиска не поддерживает создание выдержек" -#: tsearch/wparser_def.c:2593 +#: tsearch/wparser_def.c:2594 #, c-format msgid "unrecognized headline parameter: \"%s\"" msgstr "нераспознанный параметр функции выдержки: \"%s\"" -#: tsearch/wparser_def.c:2612 +#: tsearch/wparser_def.c:2613 #, c-format msgid "MinWords should be less than MaxWords" msgstr "Значение MinWords должно быть меньше MaxWords" -#: tsearch/wparser_def.c:2616 +#: tsearch/wparser_def.c:2617 #, c-format msgid "MinWords should be positive" msgstr "Значение MinWords должно быть положительным" -#: tsearch/wparser_def.c:2620 +#: tsearch/wparser_def.c:2621 #, c-format msgid "ShortWord should be >= 0" msgstr "Значение ShortWord должно быть >= 0" -#: tsearch/wparser_def.c:2624 +#: tsearch/wparser_def.c:2625 #, c-format msgid "MaxFragments should be >= 0" msgstr "Значение MaxFragments должно быть >= 0" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "слишком длинный идентификатор" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Идентификатор должен быть короче %d байт." -#: utils/adt/acl.c:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "нераспознанное ключевое слово: \"%s\"" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Ключевым словом ACL должно быть \"group\" или \"user\"." -#: utils/adt/acl.c:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "отсутствует имя" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "За ключевыми словами \"group\" или \"user\" должно следовать имя." -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "отсутствует знак \"=\"" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "неверный символ режима: должен быть один из \"%s\"" -#: utils/adt/acl.c:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "за знаком \"/\" должно следовать имя" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "назначившим права считается пользователь с ID %u" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "Массив ACL содержит неверный тип данных" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "Массивы ACL должны быть одномерными" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, c-format msgid "ACL arrays must not contain null values" msgstr "Массивы ACL не должны содержать значения null" -#: utils/adt/acl.c:563 +#: utils/adt/acl.c:580 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "лишний мусор в конце спецификации ACL" -#: utils/adt/acl.c:1198 +#: utils/adt/acl.c:1215 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "привилегию назначения прав нельзя вернуть тому, кто назначил её вам" -#: utils/adt/acl.c:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "существуют зависимые права" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Используйте CASCADE, чтобы отозвать и их." -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert больше не поддерживается" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove больше не поддерживается" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "нераспознанный тип прав: \"%s\"" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "функция \"%s\" не существует" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "нужно быть членом роли \"%s\"" @@ -24358,15 +24413,15 @@ msgstr "тип входных данных не является массиво #: utils/adt/array_userfuncs.c:129 utils/adt/array_userfuncs.c:181 #: utils/adt/float.c:1233 utils/adt/float.c:1307 utils/adt/float.c:4052 -#: utils/adt/float.c:4066 utils/adt/int.c:757 utils/adt/int.c:779 -#: utils/adt/int.c:793 utils/adt/int.c:807 utils/adt/int.c:838 -#: utils/adt/int.c:859 utils/adt/int.c:976 utils/adt/int.c:990 -#: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 -#: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 -#: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 -#: utils/adt/int8.c:1299 utils/adt/numeric.c:1783 utils/adt/numeric.c:4246 -#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 -#: utils/adt/varlena.c:3422 +#: utils/adt/float.c:4066 utils/adt/int.c:786 utils/adt/int.c:808 +#: utils/adt/int.c:822 utils/adt/int.c:836 utils/adt/int.c:867 +#: utils/adt/int.c:888 utils/adt/int.c:1005 utils/adt/int.c:1019 +#: utils/adt/int.c:1033 utils/adt/int.c:1066 utils/adt/int.c:1080 +#: utils/adt/int.c:1094 utils/adt/int.c:1125 utils/adt/int.c:1207 +#: utils/adt/int.c:1271 utils/adt/int.c:1339 utils/adt/int.c:1345 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 +#: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1157 +#: utils/adt/varlena.c:3468 #, c-format msgid "integer out of range" msgstr "целое вне диапазона" @@ -24504,8 +24559,8 @@ msgstr "" msgid "Junk after closing right brace." msgstr "Мусор после закрывающей фигурной скобки." -#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 -#: utils/adt/arrayfuncs.c:5938 +#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3511 +#: utils/adt/arrayfuncs.c:6101 #, c-format msgid "invalid number of dimensions: %d" msgstr "неверное число размерностей: %d" @@ -24546,8 +24601,8 @@ msgstr "разрезание массивов постоянной длины н #: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 #: utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 -#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5924 -#: utils/adt/arrayfuncs.c:5950 utils/adt/arrayfuncs.c:5961 +#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:6087 +#: utils/adt/arrayfuncs.c:6113 utils/adt/arrayfuncs.c:6124 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 #: utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 @@ -24590,85 +24645,85 @@ msgstr "" msgid "source array too small" msgstr "исходный массив слишком мал" -#: utils/adt/arrayfuncs.c:3583 +#: utils/adt/arrayfuncs.c:3669 #, c-format msgid "null array element not allowed in this context" msgstr "элемент массива null недопустим в данном контексте" -#: utils/adt/arrayfuncs.c:3685 utils/adt/arrayfuncs.c:3856 -#: utils/adt/arrayfuncs.c:4246 +#: utils/adt/arrayfuncs.c:3846 utils/adt/arrayfuncs.c:4017 +#: utils/adt/arrayfuncs.c:4407 #, c-format msgid "cannot compare arrays of different element types" msgstr "нельзя сравнивать массивы с элементами разных типов" -#: utils/adt/arrayfuncs.c:4034 utils/adt/multirangetypes.c:2742 -#: utils/adt/multirangetypes.c:2814 utils/adt/rangetypes.c:1343 +#: utils/adt/arrayfuncs.c:4195 utils/adt/multirangetypes.c:2743 +#: utils/adt/multirangetypes.c:2815 utils/adt/rangetypes.c:1343 #: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "не удалось найти функцию хеширования для типа %s" -#: utils/adt/arrayfuncs.c:4161 utils/adt/rowtypes.c:1979 +#: utils/adt/arrayfuncs.c:4322 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "не удалось найти функцию расширенного хеширования для типа %s" -#: utils/adt/arrayfuncs.c:5338 +#: utils/adt/arrayfuncs.c:5499 #, c-format msgid "data type %s is not an array type" msgstr "тип данных %s не является типом массива" -#: utils/adt/arrayfuncs.c:5393 +#: utils/adt/arrayfuncs.c:5554 #, c-format msgid "cannot accumulate null arrays" msgstr "аккумулировать NULL-массивы нельзя" -#: utils/adt/arrayfuncs.c:5421 +#: utils/adt/arrayfuncs.c:5582 #, c-format msgid "cannot accumulate empty arrays" msgstr "аккумулировать пустые массивы нельзя" -#: utils/adt/arrayfuncs.c:5448 utils/adt/arrayfuncs.c:5454 +#: utils/adt/arrayfuncs.c:5609 utils/adt/arrayfuncs.c:5615 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "аккумулировать массивы различной размерности нельзя" -#: utils/adt/arrayfuncs.c:5822 utils/adt/arrayfuncs.c:5862 +#: utils/adt/arrayfuncs.c:5985 utils/adt/arrayfuncs.c:6025 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "массив размерностей или массив нижних границ не может быть null" -#: utils/adt/arrayfuncs.c:5925 utils/adt/arrayfuncs.c:5951 +#: utils/adt/arrayfuncs.c:6088 utils/adt/arrayfuncs.c:6114 #, c-format msgid "Dimension array must be one dimensional." msgstr "Массив размерностей должен быть одномерным." -#: utils/adt/arrayfuncs.c:5930 utils/adt/arrayfuncs.c:5956 +#: utils/adt/arrayfuncs.c:6093 utils/adt/arrayfuncs.c:6119 #, c-format msgid "dimension values cannot be null" msgstr "значения размерностей не могут быть null" -#: utils/adt/arrayfuncs.c:5962 +#: utils/adt/arrayfuncs.c:6125 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Массив нижних границ и массив размерностей имеют разные размеры." -#: utils/adt/arrayfuncs.c:6240 +#: utils/adt/arrayfuncs.c:6403 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "удаление элементов из многомерных массивов не поддерживается" -#: utils/adt/arrayfuncs.c:6517 +#: utils/adt/arrayfuncs.c:6680 #, c-format msgid "thresholds must be one-dimensional array" msgstr "границы должны задаваться одномерным массивом" -#: utils/adt/arrayfuncs.c:6522 +#: utils/adt/arrayfuncs.c:6685 #, c-format msgid "thresholds array must not contain NULLs" msgstr "массив границ не должен содержать NULL" -#: utils/adt/arrayfuncs.c:6755 +#: utils/adt/arrayfuncs.c:6918 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "число удаляемых элементов должно быть от 0 до %d" @@ -24720,8 +24775,8 @@ msgstr "преобразование кодировки из %s в ASCII не п #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 #: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 -#: utils/adt/numeric.c:720 utils/adt/numeric.c:6901 utils/adt/numeric.c:6925 -#: utils/adt/numeric.c:6949 utils/adt/numeric.c:7907 utils/adt/numutils.c:116 +#: utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 +#: utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 utils/adt/numutils.c:116 #: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 #: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 #: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 @@ -24738,13 +24793,13 @@ msgid "money out of range" msgstr "денежное значение вне диапазона" #: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 -#: utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 -#: utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 +#: utils/adt/int.c:851 utils/adt/int.c:967 utils/adt/int.c:1047 +#: utils/adt/int.c:1109 utils/adt/int.c:1147 utils/adt/int.c:1175 #: utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 #: utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 -#: utils/adt/numeric.c:3046 utils/adt/numeric.c:3069 utils/adt/numeric.c:3154 -#: utils/adt/numeric.c:3172 utils/adt/numeric.c:3268 utils/adt/numeric.c:8456 -#: utils/adt/numeric.c:8746 utils/adt/numeric.c:10392 +#: utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 +#: utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 utils/adt/numeric.c:8457 +#: utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 #: utils/adt/timestamp.c:3317 #, c-format msgid "division by zero" @@ -24787,7 +24842,7 @@ msgid "date out of range: \"%s\"" msgstr "дата вне диапазона: \"%s\"" #: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 -#: utils/adt/xml.c:2259 +#: utils/adt/xml.c:2252 #, c-format msgid "date out of range" msgstr "дата вне диапазона" @@ -24849,8 +24904,8 @@ msgstr "дата содержит нераспознанные единицы \" #: utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 #: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 #: utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 -#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2281 -#: utils/adt/xml.c:2288 utils/adt/xml.c:2308 utils/adt/xml.c:2315 +#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2274 +#: utils/adt/xml.c:2281 utils/adt/xml.c:2301 utils/adt/xml.c:2308 #, c-format msgid "timestamp out of range" msgstr "timestamp вне диапазона" @@ -24866,8 +24921,8 @@ msgid "time field value out of range: %d:%02d:%02g" msgstr "значение поля типа time вне диапазона: %d:%02d:%02g" #: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 -#: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 -#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2450 +#: utils/adt/float.c:1123 utils/adt/int.c:643 utils/adt/int.c:690 +#: utils/adt/int.c:725 utils/adt/int8.c:499 utils/adt/numeric.c:2451 #: utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 #: utils/adt/timestamp.c:3450 #, c-format @@ -25005,7 +25060,7 @@ msgstr "" "Входные данные лишены выравнивания, обрезаны или повреждены иным образом." #: utils/adt/encode.c:482 utils/adt/encode.c:547 utils/adt/jsonfuncs.c:629 -#: utils/adt/varlena.c:336 utils/adt/varlena.c:377 jsonpath_gram.y:528 +#: utils/adt/varlena.c:337 utils/adt/varlena.c:378 jsonpath_gram.y:528 #: jsonpath_scan.l:519 jsonpath_scan.l:530 jsonpath_scan.l:540 #: jsonpath_scan.l:582 #, c-format @@ -25065,37 +25120,37 @@ msgstr "\"%s\" вне диапазона для типа real" msgid "\"%s\" is out of range for type double precision" msgstr "\"%s\" вне диапазона для типа double precision" -#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 -#: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 -#: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 -#: utils/adt/int8.c:1320 utils/adt/numeric.c:4358 utils/adt/numeric.c:4363 +#: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:363 +#: utils/adt/int.c:901 utils/adt/int.c:923 utils/adt/int.c:937 +#: utils/adt/int.c:951 utils/adt/int.c:983 utils/adt/int.c:1221 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "smallint вне диапазона" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3564 utils/adt/numeric.c:9339 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, c-format msgid "cannot take square root of a negative number" msgstr "извлечь квадратный корень отрицательного числа нельзя" -#: utils/adt/float.c:1526 utils/adt/numeric.c:3839 utils/adt/numeric.c:3951 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, c-format msgid "zero raised to a negative power is undefined" msgstr "ноль в отрицательной степени даёт неопределённость" -#: utils/adt/float.c:1530 utils/adt/numeric.c:3843 utils/adt/numeric.c:10244 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "отрицательное число в дробной степени даёт комплексный результат" -#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3751 -#: utils/adt/numeric.c:10017 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 +#: utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "вычислить логарифм нуля нельзя" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3689 -#: utils/adt/numeric.c:3746 utils/adt/numeric.c:10021 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 +#: utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "вычислить логарифм отрицательного числа нельзя" @@ -25114,22 +25169,22 @@ msgstr "введённое значение вне диапазона" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "параметр setseed %g вне допустимого диапазона [-1,1]" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1723 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "счётчик должен быть больше нуля" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1734 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "операнд, нижняя и верхняя границы не могут быть NaN" -#: utils/adt/float.c:4041 utils/adt/numeric.c:1739 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "нижняя и верхняя границы должны быть конечными" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1753 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "нижняя граница не может равняться верхней" @@ -25399,12 +25454,12 @@ msgstr "Используйте 24-часовой формат или перед msgid "cannot calculate day of year without year information" msgstr "нельзя рассчитать день года без информации о годе" -#: utils/adt/formatting.c:5606 +#: utils/adt/formatting.c:5608 #, c-format msgid "\"EEEE\" not supported for input" msgstr "\"EEEE\" не поддерживается при вводе" -#: utils/adt/formatting.c:5618 +#: utils/adt/formatting.c:5620 #, c-format msgid "\"RN\" not supported for input" msgstr "\"RN\" не поддерживается при вводе" @@ -25425,8 +25480,8 @@ msgid "path must be in or below the current directory" msgstr "путь должен указывать в текущий или вложенный каталог" #: utils/adt/genfile.c:119 utils/adt/oracle_compat.c:187 -#: utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:835 -#: utils/adt/oracle_compat.c:1130 +#: utils/adt/oracle_compat.c:285 utils/adt/oracle_compat.c:844 +#: utils/adt/oracle_compat.c:1139 #, c-format msgid "requested length too large" msgstr "запрошенная длина слишком велика" @@ -25522,22 +25577,27 @@ msgstr "круг с нулевым радиусом нельзя преобра msgid "must request at least 2 points" msgstr "точек должно быть минимум 2" -#: utils/adt/int.c:164 +#: utils/adt/int.c:158 +#, c-format +msgid "array is not a valid int2vector" +msgstr "массив не подходит для типа int2vector" + +#: utils/adt/int.c:188 #, c-format msgid "int2vector has too many elements" msgstr "int2vector содержит слишком много элементов" -#: utils/adt/int.c:237 +#: utils/adt/int.c:265 #, c-format msgid "invalid int2vector data" msgstr "неверные данные int2vector" -#: utils/adt/int.c:243 utils/adt/oid.c:215 utils/adt/oid.c:296 +#: utils/adt/int.c:271 utils/adt/oid.c:239 utils/adt/oid.c:324 #, c-format msgid "oidvector has too many elements" msgstr "oidvector содержит слишком много элементов" -#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 +#: utils/adt/int.c:1537 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 #: utils/adt/timestamp.c:5879 utils/adt/timestamp.c:5959 #, c-format msgid "step size cannot equal zero" @@ -25552,7 +25612,7 @@ msgstr "размер шага не может быть нулевым" #: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 #: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 #: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 -#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4317 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 #: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" @@ -25673,23 +25733,23 @@ msgstr "привести объект jsonb к типу %s нельзя" msgid "cannot cast jsonb array or object to type %s" msgstr "привести массив или объект jsonb к типу %s нельзя" -#: utils/adt/jsonb_util.c:751 +#: utils/adt/jsonb_util.c:748 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "число пар объекта jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:792 +#: utils/adt/jsonb_util.c:789 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "число элементов массива jsonb превышает предел (%zu)" -#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "общий размер элементов массива jsonb превышает предел (%u байт)" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 -#: utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 +#: utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "общий размер элементов объекта jsonb превышает предел (%u байт)" @@ -26124,7 +26184,7 @@ msgid "Use *_tz() function for time zone support." msgstr "Для передачи часового пояса используйте функцию *_tz()." # well-spelled: симв -#: utils/adt/levenshtein.c:133 +#: utils/adt/levenshtein.c:135 #, c-format msgid "levenshtein argument exceeds maximum length of %d characters" msgstr "длина аргумента levenshtein() превышает максимум (%d симв.)" @@ -26149,12 +26209,12 @@ msgstr "недетерминированные правила сортировк msgid "LIKE pattern must not end with escape character" msgstr "шаблон LIKE не должен заканчиваться защитным символом" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:703 #, c-format msgid "invalid escape string" msgstr "неверный защитный символ" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:704 #, c-format msgid "Escape string must be empty or one character." msgstr "Защитный символ должен быть пустым или состоять из одного байта." @@ -26286,22 +26346,22 @@ msgstr "Ожидалось начало диапазона." msgid "Expected comma or end of multirange." msgstr "Ожидалась запятая или конец мультидиапазона." -#: utils/adt/multirangetypes.c:975 +#: utils/adt/multirangetypes.c:976 #, c-format msgid "multiranges cannot be constructed from multidimensional arrays" msgstr "мультидиапазоны нельзя получить из массивов мультидиапазонов" -#: utils/adt/multirangetypes.c:1001 +#: utils/adt/multirangetypes.c:1002 #, c-format msgid "multirange values cannot contain null members" msgstr "мультидиапазоны не могут содержать элементы NULL" -#: utils/adt/multirangetypes.c:1349 +#: utils/adt/multirangetypes.c:1350 #, c-format msgid "range_agg must be called with a range" msgstr "функция range_agg должна вызываться с диапазоном" -#: utils/adt/multirangetypes.c:1420 +#: utils/adt/multirangetypes.c:1421 #, c-format msgid "range_intersect_agg must be called with a multirange" msgstr "функция range_intersect_agg должна вызываться с мультидиапазоном" @@ -26440,41 +26500,41 @@ msgstr "размер шага не может быть NaN" msgid "step size cannot be infinity" msgstr "размер шага не может быть бесконечностью" -#: utils/adt/numeric.c:3504 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "факториал отрицательного числа даёт неопределённость" -#: utils/adt/numeric.c:3514 utils/adt/numeric.c:6964 utils/adt/numeric.c:7437 -#: utils/adt/numeric.c:9814 utils/adt/numeric.c:10302 utils/adt/numeric.c:10428 -#: utils/adt/numeric.c:10502 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 +#: utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 +#: utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "значение переполняет формат numeric" -#: utils/adt/numeric.c:4224 utils/adt/numeric.c:4304 utils/adt/numeric.c:4345 -#: utils/adt/numeric.c:4539 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 +#: utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "нельзя преобразовать NaN в %s" -#: utils/adt/numeric.c:4228 utils/adt/numeric.c:4308 utils/adt/numeric.c:4349 -#: utils/adt/numeric.c:4543 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 +#: utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "нельзя представить бесконечность в %s" -#: utils/adt/numeric.c:4552 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn вне диапазона" -#: utils/adt/numeric.c:7521 utils/adt/numeric.c:7568 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "переполнение поля numeric" -#: utils/adt/numeric.c:7522 +#: utils/adt/numeric.c:7523 #, c-format msgid "" "A field with precision %d, scale %d must round to an absolute value less " @@ -26483,7 +26543,7 @@ msgstr "" "Поле с точностью %d, порядком %d должно округляться до абсолютного значения " "меньше чем %s%d." -#: utils/adt/numeric.c:7569 +#: utils/adt/numeric.c:7570 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "" @@ -26494,27 +26554,32 @@ msgstr "" msgid "value \"%s\" is out of range for 8-bit integer" msgstr "значение \"%s\" вне диапазона для 8-битового integer" -#: utils/adt/oid.c:290 +#: utils/adt/oid.c:211 +#, c-format +msgid "array is not a valid oidvector" +msgstr "массив не подходит для типа oidvector" + +#: utils/adt/oid.c:318 #, c-format msgid "invalid oidvector data" msgstr "неверные данные oidvector" -#: utils/adt/oracle_compat.c:972 +#: utils/adt/oracle_compat.c:981 #, c-format msgid "requested character too large" msgstr "запрошенный символ больше допустимого" -#: utils/adt/oracle_compat.c:1022 utils/adt/oracle_compat.c:1084 +#: utils/adt/oracle_compat.c:1031 utils/adt/oracle_compat.c:1093 #, c-format msgid "requested character too large for encoding: %d" msgstr "код запрошенного символа слишком велик для кодировки: %d" -#: utils/adt/oracle_compat.c:1063 +#: utils/adt/oracle_compat.c:1072 #, c-format msgid "requested character not valid for encoding: %d" msgstr "запрошенный символ не подходит для кодировки: %d" -#: utils/adt/oracle_compat.c:1077 +#: utils/adt/oracle_compat.c:1086 #, c-format msgid "null character not permitted" msgstr "символ не может быть null" @@ -26525,24 +26590,24 @@ msgstr "символ не может быть null" msgid "percentile value %g is not between 0 and 1" msgstr "значение перцентиля %g лежит не в диапазоне 0..1" -#: utils/adt/pg_locale.c:1228 +#: utils/adt/pg_locale.c:1229 #, c-format msgid "Apply system library package updates." msgstr "Обновите пакет с системной библиотекой." -#: utils/adt/pg_locale.c:1442 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не удалось создать локаль \"%s\": %m" -#: utils/adt/pg_locale.c:1445 +#: utils/adt/pg_locale.c:1448 #, c-format msgid "" "The operating system could not find any locale data for the locale name " "\"%s\"." msgstr "Операционная система не может найти данные локали с именем \"%s\"." -#: utils/adt/pg_locale.c:1547 +#: utils/adt/pg_locale.c:1550 #, c-format msgid "" "collations with different collate and ctype values are not supported on this " @@ -26551,40 +26616,40 @@ msgstr "" "правила сортировки с разными значениями collate и ctype не поддерживаются на " "этой платформе" -#: utils/adt/pg_locale.c:1556 +#: utils/adt/pg_locale.c:1559 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "провайдер правил сортировки LIBC не поддерживается на этой платформе" -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "" "collations with different collate and ctype values are not supported by ICU" msgstr "" "ICU не поддерживает правила сортировки с разными значениями collate и ctype" -#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1940 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1664 +#: utils/adt/pg_locale.c:1943 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "не удалось открыть сортировщик для локали \"%s\": %s" -#: utils/adt/pg_locale.c:1588 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не поддерживается в данной сборке" -#: utils/adt/pg_locale.c:1609 +#: utils/adt/pg_locale.c:1612 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "для правила сортировки \"%s\", лишённого версии, была задана версия" -#: utils/adt/pg_locale.c:1616 +#: utils/adt/pg_locale.c:1619 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "несовпадение версии для правила сортировки \"%s\"" -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1621 #, c-format msgid "" "The collation in the database was created using version %s, but the " @@ -26593,7 +26658,7 @@ msgstr "" "Правило сортировки в базе данных было создано с версией %s, но операционная " "система предоставляет версию %s." -#: utils/adt/pg_locale.c:1621 +#: utils/adt/pg_locale.c:1624 #, c-format msgid "" "Rebuild all objects affected by this collation and run ALTER COLLATION %s " @@ -26603,40 +26668,40 @@ msgstr "" "ALTER COLLATION %s REFRESH VERSION либо соберите PostgreSQL с правильной " "версией библиотеки." -#: utils/adt/pg_locale.c:1692 +#: utils/adt/pg_locale.c:1695 #, c-format msgid "could not load locale \"%s\"" msgstr "не удалось загрузить локаль \"%s\"" -#: utils/adt/pg_locale.c:1717 +#: utils/adt/pg_locale.c:1720 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "" "не удалось получить версию правила сортировки для локали \"%s\" (код ошибки: " "%lu)" -#: utils/adt/pg_locale.c:1755 +#: utils/adt/pg_locale.c:1758 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "ICU не поддерживает кодировку \"%s\"" -#: utils/adt/pg_locale.c:1762 +#: utils/adt/pg_locale.c:1765 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "не удалось открыть преобразователь ICU для кодировки \"%s\": %s" -#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 -#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 +#: utils/adt/pg_locale.c:1796 utils/adt/pg_locale.c:1805 +#: utils/adt/pg_locale.c:1834 utils/adt/pg_locale.c:1844 #, c-format msgid "%s failed: %s" msgstr "ошибка %s: %s" -#: utils/adt/pg_locale.c:2113 +#: utils/adt/pg_locale.c:2116 #, c-format msgid "invalid multibyte character for locale" msgstr "неверный многобайтный символ для локали" -#: utils/adt/pg_locale.c:2114 +#: utils/adt/pg_locale.c:2117 #, c-format msgid "" "The server's LC_CTYPE locale is probably incompatible with the database " @@ -26750,7 +26815,7 @@ msgstr "Слишком много запятых." msgid "Junk after right parenthesis or bracket." msgstr "Мусор после правой скобки." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1614 utils/adt/varlena.c:4595 #, c-format msgid "regular expression failed: %s" msgstr "ошибка в регулярном выражении: %s" @@ -26760,7 +26825,7 @@ msgstr "ошибка в регулярном выражении: %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "неверный параметр регулярного выражения: \"%.*s\"" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:850 #, c-format msgid "" "SQL regular expression may not contain more than two escape-double-quote " @@ -26770,17 +26835,17 @@ msgstr "" "(экранированных кавычек)" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1052 utils/adt/regexp.c:1434 utils/adt/regexp.c:1489 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s не поддерживает режим \"global\"" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1054 #, c-format msgid "Use the regexp_matches function instead." msgstr "Вместо неё используйте функцию regexp_matches." -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1236 #, c-format msgid "too many regular expression matches" msgstr "слишком много совпадений для регулярного выражения" @@ -26807,7 +26872,7 @@ msgstr "" "Чтобы обозначить отсутствующий аргумент унарного оператора, укажите NONE." #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 +#: utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "слишком много аргументов" @@ -26819,7 +26884,7 @@ msgstr "Предоставьте для оператора два типа ар #: utils/adt/regproc.c:1639 utils/adt/regproc.c:1663 utils/adt/regproc.c:1764 #: utils/adt/regproc.c:1788 utils/adt/regproc.c:1890 utils/adt/regproc.c:1895 -#: utils/adt/varlena.c:3698 utils/adt/varlena.c:3703 +#: utils/adt/varlena.c:3744 utils/adt/varlena.c:3749 #, c-format msgid "invalid name syntax" msgstr "ошибка синтаксиса в имени" @@ -27261,12 +27326,12 @@ msgstr "массив весов не может содержать null" msgid "weight out of range" msgstr "вес вне диапазона" -#: utils/adt/tsvector.c:215 +#: utils/adt/tsvector.c:212 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "слово слишком длинное (%ld Б, при максимуме %ld)" -#: utils/adt/tsvector.c:222 +#: utils/adt/tsvector.c:219 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "строка слишком длинна для tsvector (%ld Б, при максимуме %ld)" @@ -27292,37 +27357,37 @@ msgstr "нераспознанный вес: \"%c\"" msgid "ts_stat query must return one tsvector column" msgstr "запрос ts_stat должен вернуть один столбец tsvector" -#: utils/adt/tsvector_op.c:2618 +#: utils/adt/tsvector_op.c:2622 #, c-format msgid "tsvector column \"%s\" does not exist" msgstr "столбец \"%s\" типа tsvector не существует" -#: utils/adt/tsvector_op.c:2625 +#: utils/adt/tsvector_op.c:2629 #, c-format msgid "column \"%s\" is not of tsvector type" msgstr "столбец \"%s\" должен иметь тип tsvector" -#: utils/adt/tsvector_op.c:2637 +#: utils/adt/tsvector_op.c:2641 #, c-format msgid "configuration column \"%s\" does not exist" msgstr "столбец конфигурации \"%s\" не существует" -#: utils/adt/tsvector_op.c:2643 +#: utils/adt/tsvector_op.c:2647 #, c-format msgid "column \"%s\" is not of regconfig type" msgstr "столбец \"%s\" должен иметь тип regconfig" -#: utils/adt/tsvector_op.c:2650 +#: utils/adt/tsvector_op.c:2654 #, c-format msgid "configuration column \"%s\" must not be null" msgstr "значение столбца конфигурации \"%s\" не должно быть null" -#: utils/adt/tsvector_op.c:2663 +#: utils/adt/tsvector_op.c:2667 #, c-format msgid "text search configuration name \"%s\" must be schema-qualified" msgstr "имя конфигурации текстового поиска \"%s\" должно указываться со схемой" -#: utils/adt/tsvector_op.c:2688 +#: utils/adt/tsvector_op.c:2692 #, c-format msgid "column \"%s\" is not of a character type" msgstr "столбец \"%s\" имеет не символьный тип" @@ -27333,12 +27398,12 @@ msgid "syntax error in tsvector: \"%s\"" msgstr "ошибка синтаксиса в tsvector: \"%s\"" # skip-rule: capital-letter-first -#: utils/adt/tsvector_parser.c:200 +#: utils/adt/tsvector_parser.c:199 #, c-format msgid "there is no escaped character: \"%s\"" msgstr "нет спец. символа \"%s\"" -#: utils/adt/tsvector_parser.c:318 +#: utils/adt/tsvector_parser.c:313 #, c-format msgid "wrong position info in tsvector: \"%s\"" msgstr "неверная информация о позиции в tsvector: \"%s\"" @@ -27388,9 +27453,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:890 -#: utils/adt/varlena.c:953 utils/adt/varlena.c:1110 utils/adt/varlena.c:3340 -#: utils/adt/varlena.c:3418 +#: utils/adt/varbit.c:1081 utils/adt/varbit.c:1191 utils/adt/varlena.c:894 +#: utils/adt/varlena.c:958 utils/adt/varlena.c:1153 utils/adt/varlena.c:3386 +#: utils/adt/varlena.c:3464 #, c-format msgid "negative substring length not allowed" msgstr "подстрока должна иметь неотрицательную длину" @@ -27416,7 +27481,7 @@ msgstr "" msgid "bit index %d out of valid range (0..%d)" msgstr "индекс бита %d вне диапазона 0..%d" -#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3622 +#: utils/adt/varbit.c:1833 utils/adt/varlena.c:3668 #, c-format msgid "new bit must be 0 or 1" msgstr "значением бита должен быть 0 или 1" @@ -27431,111 +27496,111 @@ msgstr "значение не умещается в тип character(%d)" msgid "value too long for type character varying(%d)" msgstr "значение не умещается в тип character varying(%d)" -#: utils/adt/varchar.c:732 utils/adt/varlena.c:1516 +#: utils/adt/varchar.c:732 utils/adt/varlena.c:1562 #, c-format msgid "could not determine which collation to use for string comparison" msgstr "" "не удалось определить, какое правило сортировки использовать для сравнения " "строк" -#: utils/adt/varlena.c:1209 utils/adt/varlena.c:1956 +#: utils/adt/varlena.c:1252 utils/adt/varlena.c:2002 #, c-format msgid "nondeterministic collations are not supported for substring searches" msgstr "" "недетерминированные правила сортировки не поддерживаются для поиска подстрок" -#: utils/adt/varlena.c:1615 utils/adt/varlena.c:1628 +#: utils/adt/varlena.c:1661 utils/adt/varlena.c:1674 #, c-format msgid "could not convert string to UTF-16: error code %lu" msgstr "не удалось преобразовать строку в UTF-16 (код ошибки: %lu)" -#: utils/adt/varlena.c:1643 +#: utils/adt/varlena.c:1689 #, c-format msgid "could not compare Unicode strings: %m" msgstr "не удалось сравнить строки в Unicode: %m" -#: utils/adt/varlena.c:1694 utils/adt/varlena.c:2406 +#: utils/adt/varlena.c:1740 utils/adt/varlena.c:2452 #, c-format msgid "collation failed: %s" msgstr "ошибка в библиотеке сортировки: %s" -#: utils/adt/varlena.c:2613 +#: utils/adt/varlena.c:2659 #, c-format msgid "sort key generation failed: %s" msgstr "не удалось сгенерировать ключ сортировки: %s" -#: utils/adt/varlena.c:3506 utils/adt/varlena.c:3573 +#: utils/adt/varlena.c:3552 utils/adt/varlena.c:3619 #, c-format msgid "index %d out of valid range, 0..%d" msgstr "индекс %d вне диапазона 0..%d" -#: utils/adt/varlena.c:3537 utils/adt/varlena.c:3609 +#: utils/adt/varlena.c:3583 utils/adt/varlena.c:3655 #, c-format msgid "index %lld out of valid range, 0..%lld" msgstr "индекс %lld вне диапазона 0..%lld" -#: utils/adt/varlena.c:4645 +#: utils/adt/varlena.c:4691 #, c-format msgid "field position must not be zero" msgstr "позиция поля должна быть отлична от 0" -#: utils/adt/varlena.c:5686 +#: utils/adt/varlena.c:5735 #, c-format msgid "unterminated format() type specifier" msgstr "незавершённый спецификатор типа format()" -#: utils/adt/varlena.c:5687 utils/adt/varlena.c:5821 utils/adt/varlena.c:5942 +#: utils/adt/varlena.c:5736 utils/adt/varlena.c:5870 utils/adt/varlena.c:5991 #, c-format msgid "For a single \"%%\" use \"%%%%\"." msgstr "Для представления одного знака \"%%\" запишите \"%%%%\"." -#: utils/adt/varlena.c:5819 utils/adt/varlena.c:5940 +#: utils/adt/varlena.c:5868 utils/adt/varlena.c:5989 #, c-format msgid "unrecognized format() type specifier \"%.*s\"" msgstr "нераспознанный спецификатор типа format(): \"%.*s\"" -#: utils/adt/varlena.c:5832 utils/adt/varlena.c:5889 +#: utils/adt/varlena.c:5881 utils/adt/varlena.c:5938 #, c-format msgid "too few arguments for format()" msgstr "мало аргументов для format()" -#: utils/adt/varlena.c:5985 utils/adt/varlena.c:6167 +#: utils/adt/varlena.c:6034 utils/adt/varlena.c:6216 #, c-format msgid "number is out of range" msgstr "число вне диапазона" -#: utils/adt/varlena.c:6048 utils/adt/varlena.c:6076 +#: utils/adt/varlena.c:6097 utils/adt/varlena.c:6125 #, c-format msgid "format specifies argument 0, but arguments are numbered from 1" msgstr "формат ссылается на аргумент 0, но аргументы нумеруются с 1" -#: utils/adt/varlena.c:6069 +#: utils/adt/varlena.c:6118 #, c-format msgid "width argument position must be ended by \"$\"" msgstr "указание аргумента ширины должно оканчиваться \"$\"" -#: utils/adt/varlena.c:6114 +#: utils/adt/varlena.c:6163 #, c-format msgid "null values cannot be formatted as an SQL identifier" msgstr "значения null нельзя представить в виде SQL-идентификатора" -#: utils/adt/varlena.c:6240 +#: utils/adt/varlena.c:6289 #, c-format msgid "Unicode normalization can only be performed if server encoding is UTF8" msgstr "" "нормализацию Unicode можно выполнять, только если кодировка сервера — UTF8" -#: utils/adt/varlena.c:6253 +#: utils/adt/varlena.c:6302 #, c-format msgid "invalid normalization form: %s" msgstr "неверная форма нормализации: %s" -#: utils/adt/varlena.c:6456 utils/adt/varlena.c:6491 utils/adt/varlena.c:6526 +#: utils/adt/varlena.c:6505 utils/adt/varlena.c:6540 utils/adt/varlena.c:6575 #, c-format msgid "invalid Unicode code point: %04X" msgstr "неверный код символа Unicode: %04X" -#: utils/adt/varlena.c:6556 +#: utils/adt/varlena.c:6605 #, c-format msgid "Unicode escapes must be \\XXXX, \\+XXXXXX, \\uXXXX, or \\UXXXXXXXX." msgstr "" @@ -27571,7 +27636,7 @@ msgstr "XML-функции не поддерживаются" msgid "This functionality requires the server to be built with libxml support." msgstr "Для этой функциональности в сервере не хватает поддержки libxml." -#: utils/adt/xml.c:253 utils/mb/mbutils.c:627 +#: utils/adt/xml.c:253 utils/mb/mbutils.c:636 #, c-format msgid "invalid encoding name \"%s\"" msgstr "неверное имя кодировки: \"%s\"" @@ -27631,99 +27696,99 @@ msgstr "" "Возможно, это означает, что используемая версия libxml2 несовместима с " "заголовочными файлами libxml2, с которыми был собран PostgreSQL." -#: utils/adt/xml.c:1985 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "Неверный символ." -#: utils/adt/xml.c:1988 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "Требуется пробел." -#: utils/adt/xml.c:1991 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "значениями атрибута standalone могут быть только 'yes' и 'no'." -#: utils/adt/xml.c:1994 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "Ошибочное объявление: не указана версия." -#: utils/adt/xml.c:1997 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "В объявлении не указана кодировка." -#: utils/adt/xml.c:2000 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "Ошибка при разборе XML-объявления: ожидается '?>'." -#: utils/adt/xml.c:2003 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Нераспознанный код ошибки libxml: %d." -#: utils/adt/xml.c:2260 +#: utils/adt/xml.c:2253 #, c-format msgid "XML does not support infinite date values." msgstr "XML не поддерживает бесконечность в датах." -#: utils/adt/xml.c:2282 utils/adt/xml.c:2309 +#: utils/adt/xml.c:2275 utils/adt/xml.c:2302 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML не поддерживает бесконечность в timestamp." -#: utils/adt/xml.c:2725 +#: utils/adt/xml.c:2718 #, c-format msgid "invalid query" msgstr "неверный запрос" -#: utils/adt/xml.c:2817 +#: utils/adt/xml.c:2810 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "портал \"%s\" не возвращает кортежи" -#: utils/adt/xml.c:4069 +#: utils/adt/xml.c:4062 #, c-format msgid "invalid array for XML namespace mapping" msgstr "неправильный массив с сопоставлениями пространств имён XML" -#: utils/adt/xml.c:4070 +#: utils/adt/xml.c:4063 #, c-format msgid "" "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Массив должен быть двухмерным и содержать 2 элемента по второй оси." -#: utils/adt/xml.c:4094 +#: utils/adt/xml.c:4087 #, c-format msgid "empty XPath expression" msgstr "пустое выражение XPath" -#: utils/adt/xml.c:4146 +#: utils/adt/xml.c:4139 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ни префикс, ни URI пространства имён не может быть null" -#: utils/adt/xml.c:4153 +#: utils/adt/xml.c:4146 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "" "не удалось зарегистрировать пространство имён XML с префиксом \"%s\" и URI " "\"%s\"" -#: utils/adt/xml.c:4510 +#: utils/adt/xml.c:4503 #, c-format msgid "DEFAULT namespace is not supported" msgstr "пространство имён DEFAULT не поддерживается" -#: utils/adt/xml.c:4539 +#: utils/adt/xml.c:4532 #, c-format msgid "row path filter must not be empty string" msgstr "путь отбираемых строк не должен быть пустым" -#: utils/adt/xml.c:4573 +#: utils/adt/xml.c:4566 #, c-format msgid "column path filter must not be empty string" msgstr "путь отбираемого столбца не должен быть пустым" -#: utils/adt/xml.c:4720 +#: utils/adt/xml.c:4713 #, c-format msgid "more than one value returned by column XPath expression" msgstr "выражение XPath, отбирающее столбец, возвратило более одного значения" @@ -27763,17 +27828,17 @@ msgstr "" msgid "cached plan must not change result type" msgstr "в кешированном плане не должен изменяться тип результата" -#: utils/cache/relcache.c:6328 +#: utils/cache/relcache.c:6344 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "создать файл инициализации для кеша отношений \"%s\" не удалось: %m" -#: utils/cache/relcache.c:6330 +#: utils/cache/relcache.c:6346 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Продолжаем всё равно, хотя что-то не так." -#: utils/cache/relcache.c:6652 +#: utils/cache/relcache.c:6668 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "не удалось стереть файл кеша \"%s\": %m" @@ -28435,48 +28500,48 @@ msgstr "неожиданный ID кодировки %d для наборов с msgid "unexpected encoding ID %d for WIN character sets" msgstr "неожиданный ID кодировки %d для наборов символов WIN" -#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 +#: utils/mb/mbutils.c:306 utils/mb/mbutils.c:909 #, c-format msgid "conversion between %s and %s is not supported" msgstr "преобразование %s <-> %s не поддерживается" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 -#: utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:411 utils/mb/mbutils.c:439 utils/mb/mbutils.c:824 +#: utils/mb/mbutils.c:851 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Строка из %d байт слишком длинна для преобразования кодировки." -#: utils/mb/mbutils.c:568 +#: utils/mb/mbutils.c:577 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "неверное имя исходной кодировки: \"%s\"" -#: utils/mb/mbutils.c:573 +#: utils/mb/mbutils.c:582 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "неверное имя кодировки результата: \"%s\"" -#: utils/mb/mbutils.c:713 +#: utils/mb/mbutils.c:722 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "недопустимое байтовое значение для кодировки \"%s\": 0x%02x" -#: utils/mb/mbutils.c:877 +#: utils/mb/mbutils.c:886 #, c-format msgid "invalid Unicode code point" msgstr "неверный код Unicode" -#: utils/mb/mbutils.c:1146 +#: utils/mb/mbutils.c:1272 #, c-format msgid "bind_textdomain_codeset failed" msgstr "ошибка в bind_textdomain_codeset" -#: utils/mb/mbutils.c:1667 +#: utils/mb/mbutils.c:1800 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "неверная последовательность байт для кодировки \"%s\": %s" -#: utils/mb/mbutils.c:1700 +#: utils/mb/mbutils.c:1847 #, c-format msgid "" "character with byte sequence %s in encoding \"%s\" has no equivalent in " @@ -31373,15 +31438,15 @@ msgstr "Ошибка при создании контекста памяти \"% msgid "could not attach to dynamic shared area" msgstr "не удалось подключиться к динамической разделяемой области" -#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 -#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1120 -#: utils/mmgr/mcxt.c:1156 utils/mmgr/mcxt.c:1208 utils/mmgr/mcxt.c:1243 -#: utils/mmgr/mcxt.c:1278 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:928 utils/mmgr/mcxt.c:966 +#: utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1112 utils/mmgr/mcxt.c:1143 +#: utils/mmgr/mcxt.c:1179 utils/mmgr/mcxt.c:1231 utils/mmgr/mcxt.c:1266 +#: utils/mmgr/mcxt.c:1301 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Ошибка при запросе блока размером %zu в контексте памяти \"%s\"." -#: utils/mmgr/mcxt.c:1052 +#: utils/mmgr/mcxt.c:1067 #, c-format msgid "logging memory contexts of PID %d" msgstr "вывод информации о памяти процесса с PID %d" @@ -31436,26 +31501,26 @@ msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" msgstr "" "не удалось прочитать блок %ld временного файла (прочитано байт: %zu из %zu)" -#: utils/sort/sharedtuplestore.c:431 utils/sort/sharedtuplestore.c:440 -#: utils/sort/sharedtuplestore.c:463 utils/sort/sharedtuplestore.c:480 -#: utils/sort/sharedtuplestore.c:497 +#: utils/sort/sharedtuplestore.c:432 utils/sort/sharedtuplestore.c:441 +#: utils/sort/sharedtuplestore.c:464 utils/sort/sharedtuplestore.c:481 +#: utils/sort/sharedtuplestore.c:498 #, c-format msgid "could not read from shared tuplestore temporary file" msgstr "не удалось прочитать файл общего временного хранилища кортежей" -#: utils/sort/sharedtuplestore.c:486 +#: utils/sort/sharedtuplestore.c:487 #, c-format msgid "unexpected chunk in shared tuplestore temporary file" msgstr "неожиданный фрагмент в файле общего временного хранилища кортежей" -#: utils/sort/sharedtuplestore.c:570 +#: utils/sort/sharedtuplestore.c:571 #, c-format msgid "could not seek to block %u in shared tuplestore temporary file" msgstr "" "не удалось переместиться к блоку %u в файле общего временного хранилища " "кортежей" -#: utils/sort/sharedtuplestore.c:577 +#: utils/sort/sharedtuplestore.c:578 #, c-format msgid "" "could not read from shared tuplestore temporary file: read only %zu of %zu " @@ -31679,7 +31744,7 @@ msgstr "события триггера повторяются" #: gram.y:5566 #, c-format msgid "conflicting constraint properties" -msgstr "противоречащие характеристики ограничения" +msgstr "противоречащие свойства ограничения" #: gram.y:5662 #, c-format @@ -31898,19 +31963,19 @@ msgstr "COLLATE можно указать только один раз" #: gram.y:17152 gram.y:17165 #, c-format msgid "%s constraints cannot be marked DEFERRABLE" -msgstr "ограничения %s не могут иметь характеристики DEFERRABLE" +msgstr "ограничения %s не могут иметь свойства DEFERRABLE" #. translator: %s is CHECK, UNIQUE, or similar #: gram.y:17178 #, c-format msgid "%s constraints cannot be marked NOT VALID" -msgstr "ограничения %s не могут иметь характеристики NOT VALID" +msgstr "ограничения %s не могут иметь свойства NOT VALID" #. translator: %s is CHECK, UNIQUE, or similar #: gram.y:17191 #, c-format msgid "%s constraints cannot be marked NO INHERIT" -msgstr "ограничения %s не могут иметь характеристики NO INHERIT" +msgstr "ограничения %s не могут иметь свойства NO INHERIT" #: guc-file.l:314 #, c-format @@ -32143,6 +32208,26 @@ msgstr "нестандартное использование спецсимво msgid "Use the escape string syntax for escapes, e.g., E'\\r\\n'." msgstr "Используйте для записи спецсимволов синтаксис спецстрок E'\\r\\n'." +#, c-format +#~ msgid "replication origin \"%s\" already exists" +#~ msgstr "источник репликации \"%s\" уже существует" + +#, c-format +#~ msgid "cannot create statistics on the specified relation" +#~ msgstr "создать статистику для указанного отношения нельзя" + +#, c-format +#~ msgid "oversize GSSAPI packet sent by the client (%zu > %d)" +#~ msgstr "клиент передал чрезмерно большой пакет GSSAPI (%zu > %d)" + +#, c-format +#~ msgid "" +#~ "This is known to fail occasionally during archive recovery, where it is " +#~ "harmless." +#~ msgstr "" +#~ "Это известная и безвредная ошибка, иногда возникающая при восстановлении " +#~ "архива." + #, c-format #~ msgid "Please report this to <%s>." #~ msgstr "Пожалуйста, напишите об этой ошибке по адресу <%s>." @@ -33543,9 +33628,6 @@ msgstr "Используйте для записи спецсимволов си #~ msgid "cannot copy to foreign table \"%s\"" #~ msgstr "копировать в стороннюю таблицу \"%s\" нельзя" -#~ msgid "cannot route inserted tuples to a foreign table" -#~ msgstr "направить вставляемые кортежи в стороннюю таблицу нельзя" - #~ msgid "unrecognized function attribute \"%s\" ignored" #~ msgstr "нераспознанный атрибут функции \"%s\" --- игнорируется" diff --git a/src/backend/po/sv.po b/src/backend/po/sv.po index 4cc7356079f..ff539376b22 100644 --- a/src/backend/po/sv.po +++ b/src/backend/po/sv.po @@ -23,8 +23,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-12 08:03+0000\n" -"PO-Revision-Date: 2025-02-12 20:52+0100\n" +"POT-Creation-Date: 2026-01-30 21:52+0000\n" +"PO-Revision-Date: 2026-02-02 23:02+0100\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -48,17 +48,17 @@ msgstr "kunde inte öppna filen \"%s\" för läsning: %m" #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1329 access/transam/xlog.c:3576 -#: access/transam/xlog.c:4817 access/transam/xlog.c:11662 -#: access/transam/xlog.c:11675 access/transam/xlog.c:12130 -#: access/transam/xlog.c:12210 access/transam/xlog.c:12247 -#: access/transam/xlog.c:12307 access/transam/xlogfuncs.c:703 +#: access/transam/twophase.c:1329 access/transam/xlog.c:3594 +#: access/transam/xlog.c:4843 access/transam/xlog.c:11771 +#: access/transam/xlog.c:11784 access/transam/xlog.c:12239 +#: access/transam/xlog.c:12319 access/transam/xlog.c:12356 +#: access/transam/xlog.c:12416 access/transam/xlogfuncs.c:703 #: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 #: replication/basebackup.c:2016 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4959 -#: replication/logical/snapbuild.c:1872 replication/logical/snapbuild.c:1914 -#: replication/logical/snapbuild.c:1941 replication/slot.c:1727 -#: replication/slot.c:1768 replication/walsender.c:545 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 +#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1961 +#: replication/logical/snapbuild.c:1988 replication/slot.c:1794 +#: replication/slot.c:1835 replication/walsender.c:559 #: storage/file/buffile.c:445 storage/file/copydir.c:195 #: utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format @@ -66,11 +66,11 @@ msgid "could not read file \"%s\": %m" msgstr "kunde inte läsa fil \"%s\": %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3581 access/transam/xlog.c:4822 +#: access/transam/xlog.c:3599 access/transam/xlog.c:4848 #: replication/basebackup.c:2020 replication/logical/origin.c:734 -#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1877 -#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1946 -#: replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 +#: replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 +#: replication/slot.c:1798 replication/slot.c:1839 replication/walsender.c:564 #: utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -82,16 +82,16 @@ msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" #: access/transam/timeline.c:392 access/transam/timeline.c:438 #: access/transam/timeline.c:512 access/transam/twophase.c:1341 #: access/transam/twophase.c:1753 access/transam/xlog.c:3445 -#: access/transam/xlog.c:3616 access/transam/xlog.c:3621 -#: access/transam/xlog.c:3946 access/transam/xlog.c:4787 -#: access/transam/xlog.c:5712 access/transam/xlogfuncs.c:728 +#: access/transam/xlog.c:3634 access/transam/xlog.c:3639 +#: access/transam/xlog.c:3958 access/transam/xlog.c:4813 +#: access/transam/xlog.c:5741 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5017 -#: replication/logical/snapbuild.c:1781 replication/logical/snapbuild.c:1954 -#: replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 -#: storage/file/fd.c:3537 storage/file/fd.c:3640 utils/cache/relmapper.c:759 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 +#: replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 +#: replication/slot.c:1683 replication/slot.c:1846 replication/walsender.c:574 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:735 +#: storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 #: utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" @@ -119,20 +119,20 @@ msgstr "" #: ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 -#: access/transam/xlog.c:3331 access/transam/xlog.c:3487 -#: access/transam/xlog.c:3531 access/transam/xlog.c:3726 -#: access/transam/xlog.c:3811 access/transam/xlog.c:3914 -#: access/transam/xlog.c:4807 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3332 access/transam/xlog.c:3511 +#: access/transam/xlog.c:3549 access/transam/xlog.c:3737 +#: access/transam/xlog.c:3823 access/transam/xlog.c:3926 +#: access/transam/xlog.c:4833 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 #: replication/basebackup.c:1610 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3612 -#: replication/logical/reorderbuffer.c:4163 -#: replication/logical/reorderbuffer.c:4939 -#: replication/logical/snapbuild.c:1736 replication/logical/snapbuild.c:1843 -#: replication/slot.c:1699 replication/walsender.c:518 -#: replication/walsender.c:2563 storage/file/copydir.c:161 -#: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3524 -#: storage/file/fd.c:3611 storage/smgr/md.c:506 utils/cache/relmapper.c:724 +#: replication/logical/reorderbuffer.c:3743 +#: replication/logical/reorderbuffer.c:4294 +#: replication/logical/reorderbuffer.c:5070 +#: replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 +#: replication/slot.c:1766 replication/walsender.c:532 +#: replication/walsender.c:2581 storage/file/copydir.c:161 +#: storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 +#: storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 #: utils/cache/relmapper.c:842 utils/error/elog.c:1958 #: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 #: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 @@ -142,9 +142,9 @@ msgstr "kunde inte öppna fil \"%s\": %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 #: access/transam/twophase.c:1726 access/transam/twophase.c:1735 -#: access/transam/xlog.c:11419 access/transam/xlog.c:11457 -#: access/transam/xlog.c:11870 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5686 postmaster/syslogger.c:1499 +#: access/transam/xlog.c:11528 access/transam/xlog.c:11566 +#: access/transam/xlog.c:11979 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5688 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" @@ -155,11 +155,11 @@ msgstr "kunde inte skriva fil \"%s\": %m" #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 #: access/transam/timeline.c:506 access/transam/twophase.c:1747 -#: access/transam/xlog.c:3438 access/transam/xlog.c:3610 -#: access/transam/xlog.c:4780 access/transam/xlog.c:10902 -#: access/transam/xlog.c:10943 replication/logical/snapbuild.c:1774 -#: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3632 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: access/transam/xlog.c:3438 access/transam/xlog.c:3628 +#: access/transam/xlog.c:4806 access/transam/xlog.c:11011 +#: access/transam/xlog.c:11052 replication/logical/snapbuild.c:1821 +#: replication/slot.c:1667 replication/slot.c:1776 storage/file/fd.c:727 +#: storage/file/fd.c:3623 storage/smgr/md.c:959 storage/smgr/md.c:1000 #: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" @@ -168,32 +168,32 @@ msgstr "kunde inte fsync:a fil \"%s\": %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 #: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 -#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6692 -#: lib/dshash.c:245 libpq/auth.c:1489 libpq/auth.c:1557 libpq/auth.c:2115 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2552 -#: postmaster/postmaster.c:4209 postmaster/postmaster.c:5611 -#: postmaster/postmaster.c:5975 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6721 +#: lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 +#: libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 +#: postmaster/bgworker.c:349 postmaster/bgworker.c:948 +#: postmaster/postmaster.c:2554 postmaster/postmaster.c:4211 +#: postmaster/postmaster.c:5613 postmaster/postmaster.c:5977 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 -#: replication/logical/logical.c:206 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 -#: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1472 +#: replication/logical/logical.c:206 replication/walsender.c:606 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 +#: storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 #: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 #: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 -#: tcop/postgres.c:3655 utils/adt/cryptohashfuncs.c:46 +#: tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 #: utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 #: utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 -#: utils/adt/pg_locale.c:450 utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 +#: utils/adt/pg_locale.c:451 utils/adt/pg_locale.c:615 utils/adt/regexp.c:223 #: utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 -#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5061 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 +#: utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 utils/misc/guc.c:5061 #: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 -#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 -#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 -#: utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:927 utils/mmgr/mcxt.c:965 +#: utils/mmgr/mcxt.c:1003 utils/mmgr/mcxt.c:1111 utils/mmgr/mcxt.c:1142 +#: utils/mmgr/mcxt.c:1178 utils/mmgr/mcxt.c:1230 utils/mmgr/mcxt.c:1265 +#: utils/mmgr/mcxt.c:1300 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "slut på minne" @@ -223,7 +223,7 @@ msgstr "kunde inte hitta en \"%s\" att köra" msgid "could not change directory to \"%s\": %m" msgstr "kunde inte byta katalog till \"%s\": %m" -#: ../common/exec.c:299 access/transam/xlog.c:11293 +#: ../common/exec.c:299 access/transam/xlog.c:11402 #: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" @@ -239,8 +239,8 @@ msgstr "%s() misslyckades: %m" #: ../common/fe_memutils.c:35 ../common/fe_memutils.c:75 #: ../common/fe_memutils.c:98 ../common/fe_memutils.c:162 #: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 -#: ../port/path.c:764 utils/misc/ps_status.c:208 utils/misc/ps_status.c:216 -#: utils/misc/ps_status.c:246 utils/misc/ps_status.c:254 +#: ../port/path.c:764 utils/misc/ps_status.c:210 utils/misc/ps_status.c:218 +#: utils/misc/ps_status.c:248 utils/misc/ps_status.c:256 #, c-format msgid "out of memory\n" msgstr "slut på minne\n" @@ -252,15 +252,15 @@ msgstr "kan inte duplicera null-pekare (internt fel)\n" #: ../common/file_utils.c:86 ../common/file_utils.c:446 #: ../common/file_utils.c:450 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11395 access/transam/xlog.c:11433 -#: access/transam/xlog.c:11650 access/transam/xlogarchive.c:110 +#: access/transam/xlog.c:11504 access/transam/xlog.c:11542 +#: access/transam/xlog.c:11759 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 #: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 #: commands/tablespace.c:894 guc-file.l:1062 postmaster/pgarch.c:696 #: replication/basebackup.c:439 replication/basebackup.c:622 -#: replication/basebackup.c:698 replication/logical/snapbuild.c:1653 -#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1871 -#: storage/file/fd.c:1957 storage/file/fd.c:3157 storage/file/fd.c:3360 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1700 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 +#: storage/file/fd.c:1948 storage/file/fd.c:3148 storage/file/fd.c:3351 #: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 #: utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 #, c-format @@ -268,104 +268,104 @@ msgid "could not stat file \"%s\": %m" msgstr "kunde inte göra stat() på fil \"%s\": %m" #: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1520 -#: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 +#: commands/tablespace.c:739 postmaster/postmaster.c:1522 +#: storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "kunde inte öppna katalog \"%s\": %m" -#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "kunde inte läsa katalog \"%s\": %m" #: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1793 -#: replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 -#: storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 +#: replication/slot.c:672 replication/slot.c:1550 replication/slot.c:1699 +#: storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, 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:1084 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Escape-sekvens \"\\%s\" är ogiltig." -#: ../common/jsonapi.c:1087 +#: ../common/jsonapi.c:1090 #, 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:1090 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Förväntade slut på indata, men hittade \"%s\"." -#: ../common/jsonapi.c:1093 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Färväntade array-element eller \"]\", men hittade \"%s\"." -#: ../common/jsonapi.c:1096 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Förväntade \",\" eller \"]\", men hittade \"%s\"." -#: ../common/jsonapi.c:1099 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Förväntade sig \":\" men hittade \"%s\"." -#: ../common/jsonapi.c:1102 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Förväntade JSON-värde, men hittade \"%s\"." -#: ../common/jsonapi.c:1105 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "Indatasträngen avslutades oväntat." -#: ../common/jsonapi.c:1107 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Färväntade sträng eller \"}\", men hittade \"%s\"." -#: ../common/jsonapi.c:1110 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Förväntade sig \",\" eller \"}\" men hittade \"%s\"." -#: ../common/jsonapi.c:1113 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Förväntade sträng, men hittade \"%s\"." -#: ../common/jsonapi.c:1116 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "Token \"%s\" är ogiltig." -#: ../common/jsonapi.c:1119 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 kan inte konverteras till text." -#: ../common/jsonapi.c:1121 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "\"\\u\" måste följas av fyra hexdecimala siffror." -#: ../common/jsonapi.c:1124 +#: ../common/jsonapi.c:1127 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:1126 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Unicodes övre surrogathalva får inte komma efter en övre surrogathalva." -#: ../common/jsonapi.c:1128 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:531 jsonpath_scan.l:541 #: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -401,7 +401,7 @@ msgstr "ogiltigt fork-namn" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Giltiga fork-värden är \"main\", \"fsm\", \"vm\" och \"init\"." -#: ../common/restricted_token.c:64 libpq/auth.c:1519 libpq/auth.c:2551 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "kunde inte ladda länkbibliotek \"%s\": felkod %lu" @@ -473,7 +473,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:2051 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "användaren finns inte" @@ -596,7 +596,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "förfrågan efter BRIN-intervallsummering för index \"%s\" sida %u har inte spelats in" #: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11064 access/transam/xlog.c:11601 +#: access/transam/xlog.c:11173 access/transam/xlog.c:11710 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -631,8 +631,8 @@ msgstr "kunde inte öppna föräldratabell för index \"%s\"" msgid "index \"%s\" is not valid" msgstr "index \"%s\" är inte giltigt" -#: access/brin/brin_bloom.c:753 access/brin/brin_bloom.c:795 -#: access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 +#: access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 #: statistics/dependencies.c:662 statistics/dependencies.c:715 #: statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 @@ -643,7 +643,7 @@ 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:848 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 +#: access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 #: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" @@ -758,7 +758,7 @@ 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:106 tcop/fastpath.c:453 -#: tcop/postgres.c:1922 +#: tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "ej stödd formatkod: %d" @@ -781,57 +781,62 @@ msgstr "överskriden gräns för användardefinierade relationsparametertyper" msgid "RESET must not include values for parameters" msgstr "RESET får inte ha med värden på parametrar" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "okänd parameternamnrymd \"%s\"" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12604 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "ogiltigt flaggnamn \"%s\": får inte innehålla \"=\"" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12615 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "tabeller deklarerade med WITH OIDS stöds inte" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "okänd parameter \"%s\"" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "parameter \"%s\" angiven mer än en gång" -#: access/common/reloptions.c:1592 +#: access/common/reloptions.c:1601 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "ogiltigt värde för booleansk flagga \"%s\": \"%s\"" -#: access/common/reloptions.c:1604 +#: access/common/reloptions.c:1613 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "ogiltigt värde för heltalsflagga \"%s\": \"%s\"" -#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, 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:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Giltiga värden är mellan \"%d\" och \"%d\"." -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "ogiltigt värde för flyttalsflagga \"%s\": %s" -#: access/common/reloptions.c:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Giltiga värden är mellan \"%f\" och \"%f\"." -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "ogiltigt värde för enum-flagga \"%s\": %s" @@ -846,7 +851,7 @@ msgstr "komprimeringsmetod lz4 stöds ej" 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/toast_compression.c:34 utils/adt/pg_locale.c:1589 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1592 #: utils/adt/xml.c:234 #, c-format msgid "You need to rebuild PostgreSQL using %s." @@ -888,18 +893,18 @@ msgstr "kan inte flytta temporära index tillhörande andra sessioner" msgid "failed to re-find tuple within index \"%s\"" msgstr "misslyckades att återfinna tuple i index \"%s\"" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, c-format msgid "old GIN indexes do not support whole-index scans nor searches for nulls" msgstr "gamla GIN-index stöder inte hela-index-scan eller sökningar efter null" -#: access/gin/ginscan.c:432 +#: access/gin/ginscan.c:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "För att fixa detta, kör REINDEX INDEX \"%s\"." #: access/gin/ginutil.c:145 executor/execExpr.c:2177 -#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6541 +#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6543 #: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" @@ -941,7 +946,7 @@ msgstr "Detta orsakas av en inkomplett siduppdelning under krashåterställning msgid "Please REINDEX it." msgstr "Var vänlig och kör REINDEX på det." -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "lagar ofärdig split i index \"%s\", block %u" @@ -986,7 +991,7 @@ msgstr "kunde inte bestämma vilken jämförelse (collation) som skall användas #: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 #: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1971 commands/tablecmds.c:17155 commands/view.c:86 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17208 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1004 utils/adt/varchar.c:733 @@ -1041,39 +1046,39 @@ 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:2299 +#: access/heap/heapam.c:2302 #, 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:2770 +#: access/heap/heapam.c:2773 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "kan inte radera tupler under en parallell operation" -#: access/heap/heapam.c:2816 +#: access/heap/heapam.c:2819 #, c-format msgid "attempted to delete invisible tuple" msgstr "försökte ta bort en osynlig tuple" -#: access/heap/heapam.c:3262 access/heap/heapam.c:6529 access/index/genam.c:816 +#: access/heap/heapam.c:3265 access/heap/heapam.c:6617 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "kan inte uppdatera tupler under en parallell operation" -#: access/heap/heapam.c:3449 +#: access/heap/heapam.c:3452 #, c-format msgid "attempted to update invisible tuple" msgstr "försökte uppdatera en osynlig tuple" -#: access/heap/heapam.c:4936 access/heap/heapam.c:4974 -#: access/heap/heapam.c:5239 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4941 access/heap/heapam.c:4979 +#: access/heap/heapam.c:5246 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "kunde inte låsa rad i relationen \"%s\"" -#: access/heap/heapam.c:6342 commands/trigger.c:3122 -#: executor/nodeModifyTable.c:1968 executor/nodeModifyTable.c:2058 +#: access/heap/heapam.c:6371 commands/trigger.c:3152 +#: executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 #, 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" @@ -1095,12 +1100,12 @@ msgstr "kunde inte skriva till fil \"%s\", skrev %d av %d: %m." #: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 #: access/transam/timeline.c:329 access/transam/timeline.c:481 -#: access/transam/xlog.c:3354 access/transam/xlog.c:3545 -#: access/transam/xlog.c:4759 access/transam/xlog.c:11410 -#: access/transam/xlog.c:11448 access/transam/xlog.c:11853 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4634 -#: postmaster/postmaster.c:5673 replication/logical/origin.c:587 -#: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: access/transam/xlog.c:3354 access/transam/xlog.c:3563 +#: access/transam/xlog.c:4785 access/transam/xlog.c:11519 +#: access/transam/xlog.c:11557 access/transam/xlog.c:11962 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4636 +#: postmaster/postmaster.c:5675 replication/logical/origin.c:587 +#: replication/slot.c:1611 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -1113,11 +1118,11 @@ msgstr "kunde inte trunkera fil \"%s\" till %u: %m" #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 #: access/transam/timeline.c:424 access/transam/timeline.c:498 -#: access/transam/xlog.c:3426 access/transam/xlog.c:3601 -#: access/transam/xlog.c:4771 postmaster/postmaster.c:4644 -#: postmaster/postmaster.c:4654 replication/logical/origin.c:599 +#: access/transam/xlog.c:3426 access/transam/xlog.c:3619 +#: access/transam/xlog.c:4797 postmaster/postmaster.c:4646 +#: postmaster/postmaster.c:4656 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 -#: replication/logical/snapbuild.c:1750 replication/slot.c:1586 +#: replication/logical/snapbuild.c:1797 replication/slot.c:1647 #: storage/file/buffile.c:506 storage/file/copydir.c:207 #: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 #: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 @@ -1129,11 +1134,11 @@ msgstr "kunde inte skriva till fil \"%s\": %m" #: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4432 -#: replication/logical/snapbuild.c:1695 replication/logical/snapbuild.c:2111 -#: replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 -#: storage/file/fd.c:3239 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: postmaster/postmaster.c:1098 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 +#: replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 +#: replication/slot.c:1750 storage/file/fd.c:785 storage/file/fd.c:3168 +#: storage/file/fd.c:3230 storage/file/reinit.c:250 storage/ipc/dsm.c:315 #: storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 #: utils/time/snapmgr.c:1606 #, c-format @@ -1260,8 +1265,8 @@ msgid_plural "%u frozen pages.\n" msgstr[0] "%u fryst sida.\n" msgstr[1] "%u frysta sidor.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4135 -#: commands/indexcmds.c:4154 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 +#: commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s." @@ -1418,8 +1423,8 @@ 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:208 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2799 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16851 commands/tablecmds.c:18645 +#: commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16894 commands/tablecmds.c:18710 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" är inte ett index" @@ -1465,17 +1470,17 @@ msgstr "index \"%s\" innehåller en halvdöd intern sida" 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:2680 +#: access/nbtree/nbtutils.c:2685 #, 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:2686 +#: access/nbtree/nbtutils.c:2691 #, 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:2690 +#: access/nbtree/nbtutils.c:2695 #, c-format msgid "" "Values larger than 1/3 of a buffer page cannot be indexed.\n" @@ -1517,8 +1522,8 @@ msgid "\"%s\" is an index" msgstr "\"%s\" är ett index" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13560 -#: commands/tablecmds.c:16860 +#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 +#: commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" är en composite-typ" @@ -1573,13 +1578,13 @@ msgstr "Se till att konfigurationsparametern \"%s\" är satt på primär-servern msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Se till att konfigurationsparametern \"%s\" är satt." -#: access/transam/multixact.c:1022 +#: access/transam/multixact.c:1106 #, 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\"" -#: access/transam/multixact.c:1024 access/transam/multixact.c:1031 -#: access/transam/multixact.c:1055 access/transam/multixact.c:1064 +#: access/transam/multixact.c:1108 access/transam/multixact.c:1115 +#: access/transam/multixact.c:1139 access/transam/multixact.c:1148 #, c-format msgid "" "Execute a database-wide VACUUM in that database.\n" @@ -1588,65 +1593,70 @@ msgstr "" "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:1029 +#: access/transam/multixact.c:1113 #, 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" -#: access/transam/multixact.c:1050 access/transam/multixact.c:2334 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2421 #, 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:1059 access/transam/multixact.c:2343 +#: access/transam/multixact.c:1143 access/transam/multixact.c:2430 #, 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:1120 +#: access/transam/multixact.c:1207 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "multixact \"members\"-gräns överskriden" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1208 #, 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:1126 +#: access/transam/multixact.c:1213 #, 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." -#: access/transam/multixact.c:1157 +#: access/transam/multixact.c:1244 #, 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:1162 +#: access/transam/multixact.c:1249 #, 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." -#: access/transam/multixact.c:1301 +#: access/transam/multixact.c:1388 #, 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:1307 +#: access/transam/multixact.c:1394 #, 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:2339 access/transam/multixact.c:2348 +#: access/transam/multixact.c:1469 +#, c-format +msgid "MultiXact %u has invalid next offset" +msgstr "MultiXact %u har ett ogiltigt offset till nästa" + +#: access/transam/multixact.c:2426 access/transam/multixact.c:2435 #: access/transam/varsup.c:151 access/transam/varsup.c:158 #: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format @@ -1657,61 +1667,66 @@ msgstr "" "För att undvika att databasen stängs ner, utför en hela databas-VACCUM i 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:2709 #, 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:2731 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "MultiXact-medlems wraparound-skydd är nu påslagen" -#: access/transam/multixact.c:3038 +#: access/transam/multixact.c:3125 #, 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:3056 +#: access/transam/multixact.c:3143 #, 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:3370 +#: access/transam/multixact.c:3160 +#, c-format +msgid "cannot truncate up to MultiXact %u because it has invalid offset, skipping truncation" +msgstr "kan inte trunkera upp till MultiXact %u eftersom den har ogitlig offset, skippar trunkering" + +#: access/transam/multixact.c:3498 #, c-format msgid "invalid MultiXactId: %u" msgstr "ogiltig MultiXactId: %u" -#: access/transam/parallel.c:737 access/transam/parallel.c:856 +#: access/transam/parallel.c:744 access/transam/parallel.c:863 #, c-format msgid "parallel worker failed to initialize" msgstr "parallell arbetare misslyckades med initiering" -#: access/transam/parallel.c:738 access/transam/parallel.c:857 +#: access/transam/parallel.c:745 access/transam/parallel.c:864 #, c-format msgid "More details may be available in the server log." msgstr "Fler detaljer kan finnas i serverloggen." -#: access/transam/parallel.c:918 +#: access/transam/parallel.c:925 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster avslutade under en parallell transaktion" -#: access/transam/parallel.c:1105 +#: access/transam/parallel.c:1112 #, c-format msgid "lost connection to parallel worker" msgstr "tappad kopplingen till parallell arbetare" -#: access/transam/parallel.c:1171 access/transam/parallel.c:1173 +#: access/transam/parallel.c:1178 access/transam/parallel.c:1180 msgid "parallel worker" msgstr "parallell arbetare" -#: access/transam/parallel.c:1326 +#: access/transam/parallel.c:1333 #, c-format msgid "could not map dynamic shared memory segment" msgstr "kunde inte skapa dynamiskt delat minnessegment: %m" -#: access/transam/parallel.c:1331 +#: access/transam/parallel.c:1338 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "ogiltigt magiskt nummer i dynamiskt delat minnessegment" @@ -1911,7 +1926,7 @@ msgstr "felaktig storlek lagrad i fil \"%s\"" msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "beräknad CRC-checksumma matchar inte värdet som är lagrat i filen \"%s\"" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6693 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6722 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Misslyckades vid allokering av en WAL-läs-processor." @@ -2028,563 +2043,558 @@ msgstr "databas med OID %u måste städas (vacuum) inom %u transaktioner" 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:1584 +#: access/transam/xact.c:1594 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "maximalt antal commit:ade undertransaktioner (%d) överskridet" -#: access/transam/xact.c:2435 +#: access/transam/xact.c:2445 #, 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:2445 +#: access/transam/xact.c:2455 #, 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:3416 +#: access/transam/xact.c:3426 #, 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:3426 +#: access/transam/xact.c:3436 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s kan inte köras i en undertransaktion" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3436 +#: access/transam/xact.c:3446 #, 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:3446 +#: access/transam/xact.c:3456 #, 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:3517 access/transam/xact.c:3832 -#: access/transam/xact.c:3911 access/transam/xact.c:4034 -#: access/transam/xact.c:4185 access/transam/xact.c:4254 -#: access/transam/xact.c:4365 +#: access/transam/xact.c:3527 access/transam/xact.c:3842 +#: access/transam/xact.c:3921 access/transam/xact.c:4044 +#: access/transam/xact.c:4195 access/transam/xact.c:4264 +#: access/transam/xact.c:4375 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s kan bara användas i transaktionsblock" -#: access/transam/xact.c:3718 +#: access/transam/xact.c:3728 #, c-format msgid "there is already a transaction in progress" msgstr "det är redan en transaktion igång" -#: access/transam/xact.c:3837 access/transam/xact.c:3916 -#: access/transam/xact.c:4039 +#: access/transam/xact.c:3847 access/transam/xact.c:3926 +#: access/transam/xact.c:4049 #, c-format msgid "there is no transaction in progress" msgstr "ingen transaktion pågår" -#: access/transam/xact.c:3927 +#: access/transam/xact.c:3937 #, c-format msgid "cannot commit during a parallel operation" msgstr "kan inte commit:a under en parallell operation" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4060 #, c-format msgid "cannot abort during a parallel operation" msgstr "can inte avbryta under en parallell operation" -#: access/transam/xact.c:4149 +#: access/transam/xact.c:4159 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "kan inte definiera sparpunkter under en parallell operation" -#: access/transam/xact.c:4236 +#: access/transam/xact.c:4246 #, 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:4246 access/transam/xact.c:4297 -#: access/transam/xact.c:4357 access/transam/xact.c:4406 +#: access/transam/xact.c:4256 access/transam/xact.c:4307 +#: access/transam/xact.c:4367 access/transam/xact.c:4416 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "sparpunkt \"%s\" existerar inte" -#: access/transam/xact.c:4303 access/transam/xact.c:4412 +#: access/transam/xact.c:4313 access/transam/xact.c:4422 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "sparpunkt \"%s\" finns inte inom aktuell sparpunktsnivå" -#: access/transam/xact.c:4345 +#: access/transam/xact.c:4355 #, 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:4473 +#: access/transam/xact.c:4483 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "kan inte starta subtransaktioner under en parallell operation" -#: access/transam/xact.c:4541 +#: access/transam/xact.c:4551 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "kan inte commit:a subtransaktioner undert en parallell operation" -#: access/transam/xact.c:5188 +#: access/transam/xact.c:5198 #, c-format 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/xlog.c:1839 +#: access/transam/xlog.c:1851 #, 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" -#: access/transam/xlog.c:2612 +#: access/transam/xlog.c:2622 #, 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:3489 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "This is known to fail occasionally during archive recovery, where it is harmless." -msgstr "Detta kan misslyckas ibland vid arkivåterställning men det är ofarligt i detta fall." - -#: access/transam/xlog.c:4014 access/transam/xlogutils.c:798 -#: replication/walsender.c:2557 +#: access/transam/xlog.c:4039 access/transam/xlogutils.c:798 +#: replication/walsender.c:2575 #, 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:4289 +#: access/transam/xlog.c:4315 #, c-format msgid "could not rename file \"%s\": %m" msgstr "kunde inte byta namn på fil \"%s\": %m" -#: access/transam/xlog.c:4331 access/transam/xlog.c:4341 +#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "krävd WAL-katalog \"%s\" finns inte" -#: access/transam/xlog.c:4347 +#: access/transam/xlog.c:4373 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "skapar saknad WAL-katalog \"%s\"" -#: access/transam/xlog.c:4350 commands/dbcommands.c:2295 +#: access/transam/xlog.c:4376 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "kunde inte skapa saknad katalog \"%s\": %m" -#: access/transam/xlog.c:4472 +#: access/transam/xlog.c:4498 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "oväntad tidslinje-ID %u i loggsegment %s, offset %u" -#: access/transam/xlog.c:4610 +#: access/transam/xlog.c:4636 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "ny tidslinje %u är inte ett barn till databasens systemtidslinje %u" -#: access/transam/xlog.c:4624 +#: access/transam/xlog.c:4650 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "ny tidslinje %u skapad från aktuella databasens systemtidslinje %u innan nuvarande återställningspunkt %X/%X" -#: access/transam/xlog.c:4643 +#: access/transam/xlog.c:4669 #, c-format msgid "new target timeline is %u" msgstr "ny måltidslinje är %u" -#: access/transam/xlog.c:4679 +#: access/transam/xlog.c:4705 #, c-format msgid "could not generate secret authorization token" msgstr "kunde inte generera hemligt auktorisationstoken" -#: access/transam/xlog.c:4838 access/transam/xlog.c:4847 -#: access/transam/xlog.c:4871 access/transam/xlog.c:4878 -#: access/transam/xlog.c:4885 access/transam/xlog.c:4890 +#: access/transam/xlog.c:4864 access/transam/xlog.c:4873 #: access/transam/xlog.c:4897 access/transam/xlog.c:4904 -#: access/transam/xlog.c:4911 access/transam/xlog.c:4918 -#: access/transam/xlog.c:4925 access/transam/xlog.c:4932 -#: access/transam/xlog.c:4941 access/transam/xlog.c:4948 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4916 +#: access/transam/xlog.c:4923 access/transam/xlog.c:4930 +#: access/transam/xlog.c:4937 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 access/transam/xlog.c:4958 +#: access/transam/xlog.c:4967 access/transam/xlog.c:4974 #: utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "databasfilerna är inkompatibla med servern" -#: access/transam/xlog.c:4839 +#: access/transam/xlog.c:4865 #, 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:4843 +#: access/transam/xlog.c:4869 #, 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:4848 +#: access/transam/xlog.c:4874 #, 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:4851 access/transam/xlog.c:4875 -#: access/transam/xlog.c:4882 access/transam/xlog.c:4887 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4913 #, c-format msgid "It looks like you need to initdb." msgstr "Du behöver troligen köra initdb." -#: access/transam/xlog.c:4862 +#: access/transam/xlog.c:4888 #, c-format msgid "incorrect checksum in control file" msgstr "ogiltig kontrollsumma kontrollfil" -#: access/transam/xlog.c:4872 +#: access/transam/xlog.c:4898 #, 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:4879 +#: access/transam/xlog.c:4905 #, 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:4886 +#: access/transam/xlog.c:4912 #, 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:4891 +#: access/transam/xlog.c:4917 #, 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:4894 access/transam/xlog.c:4901 -#: access/transam/xlog.c:4908 access/transam/xlog.c:4915 -#: access/transam/xlog.c:4922 access/transam/xlog.c:4929 -#: access/transam/xlog.c:4936 access/transam/xlog.c:4944 -#: access/transam/xlog.c:4951 +#: access/transam/xlog.c:4920 access/transam/xlog.c:4927 +#: access/transam/xlog.c:4934 access/transam/xlog.c:4941 +#: access/transam/xlog.c:4948 access/transam/xlog.c:4955 +#: access/transam/xlog.c:4962 access/transam/xlog.c:4970 +#: access/transam/xlog.c:4977 #, 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:4898 +#: access/transam/xlog.c:4924 #, 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:4905 +#: access/transam/xlog.c:4931 #, 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:4912 +#: access/transam/xlog.c:4938 #, 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:4919 +#: access/transam/xlog.c:4945 #, 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:4926 +#: access/transam/xlog.c:4952 #, 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:4933 +#: access/transam/xlog.c:4959 #, 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:4942 +#: access/transam/xlog.c:4968 #, 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:4949 +#: access/transam/xlog.c:4975 #, 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:4958 +#: access/transam/xlog.c:4984 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" -#: access/transam/xlog.c:4970 +#: access/transam/xlog.c:4996 #, 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:4974 +#: access/transam/xlog.c:5000 #, 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:5408 +#: access/transam/xlog.c:5438 #, 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:5416 +#: access/transam/xlog.c:5446 #, 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:5422 +#: access/transam/xlog.c:5452 #, 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:5483 +#: access/transam/xlog.c:5513 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "använda återställningskommandofil \"%s\" stöds inte" -#: access/transam/xlog.c:5548 +#: access/transam/xlog.c:5578 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "standby-läge stöd inte av enanvändarservrar" -#: access/transam/xlog.c:5565 +#: access/transam/xlog.c:5595 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "angav varken primary_conninfo eller restore_command" -#: access/transam/xlog.c:5566 +#: access/transam/xlog.c:5596 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Databasservern kommer med jämna mellanrum att poll:a pg_wal-underkatalogen för att se om filer placerats där." -#: access/transam/xlog.c:5574 +#: access/transam/xlog.c:5604 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "måste ange restore_command när standby-läge inte är påslaget" -#: access/transam/xlog.c:5612 +#: access/transam/xlog.c:5642 #, c-format msgid "recovery target timeline %u does not exist" msgstr "återställningsmåltidslinje %u finns inte" -#: access/transam/xlog.c:5734 +#: access/transam/xlog.c:5763 #, c-format msgid "archive recovery complete" msgstr "arkivåterställning klar" -#: access/transam/xlog.c:5800 access/transam/xlog.c:6076 +#: access/transam/xlog.c:5829 access/transam/xlog.c:6105 #, c-format msgid "recovery stopping after reaching consistency" msgstr "återställning stoppad efter att ha uppnått konsistens" -#: access/transam/xlog.c:5821 +#: access/transam/xlog.c:5850 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "återställning stoppad före WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5911 +#: access/transam/xlog.c:5940 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "återställning stoppad före commit av transaktion %u, tid %s" -#: access/transam/xlog.c:5918 +#: access/transam/xlog.c:5947 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "återställning stoppad före abort av transaktion %u, tid %s" -#: access/transam/xlog.c:5971 +#: access/transam/xlog.c:6000 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "återställning stoppad vid återställningspunkt \"%s\", tid %s" -#: access/transam/xlog.c:5989 +#: access/transam/xlog.c:6018 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "återställning stoppad efter WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6056 +#: access/transam/xlog.c:6085 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "återställning stoppad efter commit av transaktion %u, tid %s" -#: access/transam/xlog.c:6064 +#: access/transam/xlog.c:6093 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "återställning stoppad efter abort av transaktion %u, tid %s" -#: access/transam/xlog.c:6109 +#: access/transam/xlog.c:6138 #, c-format msgid "pausing at the end of recovery" msgstr "pausar vid slutet av återställning" -#: access/transam/xlog.c:6110 +#: access/transam/xlog.c:6139 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Kör pg_wal_replay_resume() för att befordra." -#: access/transam/xlog.c:6113 access/transam/xlog.c:6395 +#: access/transam/xlog.c:6142 access/transam/xlog.c:6424 #, c-format msgid "recovery has paused" msgstr "återställning har pausats" -#: access/transam/xlog.c:6114 +#: access/transam/xlog.c:6143 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Kör pg_wal_replay_resume() för att fortsätta." -#: access/transam/xlog.c:6386 +#: access/transam/xlog.c:6415 #, 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/xlog.c:6387 access/transam/xlog.c:6414 -#: access/transam/xlog.c:6444 +#: access/transam/xlog.c:6416 access/transam/xlog.c:6443 +#: access/transam/xlog.c:6473 #, 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/xlog.c:6396 +#: access/transam/xlog.c:6425 #, 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/xlog.c:6397 +#: access/transam/xlog.c:6426 #, 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/xlog.c:6408 +#: access/transam/xlog.c:6437 #, 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/xlog.c:6418 +#: access/transam/xlog.c:6447 #, 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/xlog.c:6442 +#: access/transam/xlog.c:6471 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "återställning avbruten på grund av otillräckliga parametervärden" -#: access/transam/xlog.c:6448 +#: access/transam/xlog.c:6477 #, 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/xlog.c:6470 +#: access/transam/xlog.c:6499 #, 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" -#: access/transam/xlog.c:6471 +#: access/transam/xlog.c:6500 #, 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." -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6501 #, 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." -#: access/transam/xlog.c:6541 +#: access/transam/xlog.c:6570 #, c-format msgid "control file contains invalid checkpoint location" msgstr "kontrollfil innehåller ogiltig checkpoint-position" -#: access/transam/xlog.c:6552 +#: access/transam/xlog.c:6581 #, c-format msgid "database system was shut down at %s" msgstr "databassystemet stängdes ner vid %s" -#: access/transam/xlog.c:6558 +#: access/transam/xlog.c:6587 #, 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:6564 +#: access/transam/xlog.c:6593 #, 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:6570 +#: access/transam/xlog.c:6599 #, 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:6572 +#: access/transam/xlog.c:6601 #, 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:6578 +#: access/transam/xlog.c:6607 #, 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:6580 +#: access/transam/xlog.c:6609 #, 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:6586 +#: access/transam/xlog.c:6615 #, 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:6592 +#: access/transam/xlog.c:6621 #, c-format msgid "control file contains invalid database cluster state" msgstr "kontrollfil innehåller ogiltigt databasklustertillstånd" -#: access/transam/xlog.c:6649 +#: access/transam/xlog.c:6678 #, c-format msgid "entering standby mode" msgstr "går in i standby-läge" -#: access/transam/xlog.c:6652 +#: access/transam/xlog.c:6681 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "startar point-in-time-återställning till XID %u" -#: access/transam/xlog.c:6656 +#: access/transam/xlog.c:6685 #, c-format msgid "starting point-in-time recovery to %s" msgstr "startar point-in-time-återställning till %s" -#: access/transam/xlog.c:6660 +#: access/transam/xlog.c:6689 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "startar point-in-time-återställning till \"%s\"" -#: access/transam/xlog.c:6664 +#: access/transam/xlog.c:6693 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "startar point-in-time-återställning till WAL-position (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6668 +#: access/transam/xlog.c:6697 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "startar point-in-time-återställning till tidigast konsistenta punkt" -#: access/transam/xlog.c:6671 +#: access/transam/xlog.c:6700 #, c-format msgid "starting archive recovery" msgstr "Startar arkivåterställning" -#: access/transam/xlog.c:6745 +#: access/transam/xlog.c:6774 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "kunde inte hitta redo-position refererad av checkpoint-post" -#: access/transam/xlog.c:6746 access/transam/xlog.c:6756 +#: access/transam/xlog.c:6775 access/transam/xlog.c:6785 #, c-format msgid "" "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" @@ -2596,300 +2606,305 @@ msgstr "" "bort filen \"%s/backup_label\". Var försiktig: borttagning av \"%s/backup_label\"\n" "kommer resultera i ett trasigt kluster om du återställer från en backup." -#: access/transam/xlog.c:6755 +#: access/transam/xlog.c:6784 #, c-format msgid "could not locate required checkpoint record" msgstr "kunde inte hitta den checkpoint-post som krävs" -#: access/transam/xlog.c:6784 commands/tablespace.c:665 +#: access/transam/xlog.c:6813 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "kan inte skapa symbolisk länk \"%s\": %m" -#: access/transam/xlog.c:6816 access/transam/xlog.c:6822 +#: access/transam/xlog.c:6845 access/transam/xlog.c:6851 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "hoppar över fil \"%s\" då ingen fil \"%s\" finns" -#: access/transam/xlog.c:6818 access/transam/xlog.c:12386 +#: access/transam/xlog.c:6847 access/transam/xlog.c:12495 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Filen \"%s\" döptes om till \"%s\"." -#: access/transam/xlog.c:6824 +#: access/transam/xlog.c:6853 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Kunde inte döpa om fil \"%s\" till \"%s\": %m" -#: access/transam/xlog.c:6875 +#: access/transam/xlog.c:6904 #, c-format msgid "could not locate a valid checkpoint record" msgstr "kunde inte hitta en giltig checkpoint-post" -#: access/transam/xlog.c:6913 +#: access/transam/xlog.c:6915 +#, c-format +msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X" +msgstr "kunde inte hitta redo-position %X/%08X refererad av checkpoint-post vid %X/%08X" + +#: access/transam/xlog.c:6952 #, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "efterfrågad tidslinje %u är inte ett barn till denna servers historik" -#: access/transam/xlog.c:6915 +#: access/transam/xlog.c:6954 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Senaste checkpoint är vid %X/%X på tidslinje %u, men i historiken för efterfrågad tidslinje så avvek servern från den tidslinjen vid %X/%X." -#: access/transam/xlog.c:6929 +#: access/transam/xlog.c:6968 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "efterfågan tidslinje %u innehåller inte minimal återställningspunkt %X/%X på tidslinje %u" -#: access/transam/xlog.c:6959 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid next transaction ID" msgstr "nästa transaktions-ID ogiltig" -#: access/transam/xlog.c:7059 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo in checkpoint record" msgstr "ogiltig redo i checkpoint-post" -#: access/transam/xlog.c:7070 +#: access/transam/xlog.c:7109 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "ogiltig redo-post i nedstängnings-checkpoint" -#: access/transam/xlog.c:7110 +#: access/transam/xlog.c:7149 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "databassystemet stängdes inte ned korrekt; automatisk återställning pågår" -#: access/transam/xlog.c:7114 +#: access/transam/xlog.c:7153 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "krashåterställning startar i tidslinje %u och har måltidslinje %u" -#: access/transam/xlog.c:7161 +#: access/transam/xlog.c:7200 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label innehåller data som inte stämmer med kontrollfil" -#: access/transam/xlog.c:7162 +#: access/transam/xlog.c:7201 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Det betyder att backup:en är trasig och du behöver använda en annan backup för att återställa." -#: access/transam/xlog.c:7389 +#: access/transam/xlog.c:7428 #, c-format msgid "redo starts at %X/%X" msgstr "redo startar vid %X/%X" -#: access/transam/xlog.c:7614 +#: access/transam/xlog.c:7653 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "efterfrågad återställningsstoppunkt är före en konsistent återställningspunkt" -#: access/transam/xlog.c:7652 +#: access/transam/xlog.c:7691 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "redo gjord vid %X/%X systemanvändning: %s" -#: access/transam/xlog.c:7658 +#: access/transam/xlog.c:7697 #, c-format msgid "last completed transaction was at log time %s" msgstr "senaste kompletta transaktionen var vid loggtid %s" -#: access/transam/xlog.c:7667 +#: access/transam/xlog.c:7706 #, c-format msgid "redo is not required" msgstr "redo behövs inte" -#: access/transam/xlog.c:7679 +#: access/transam/xlog.c:7718 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "återställning avslutades innan det konfigurerade återställningsmålet nåddes" -#: access/transam/xlog.c:7763 access/transam/xlog.c:7767 +#: access/transam/xlog.c:7802 access/transam/xlog.c:7806 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL slutar före sluttiden av online-backup:en" -#: access/transam/xlog.c:7764 +#: access/transam/xlog.c:7803 #, 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:7768 +#: access/transam/xlog.c:7807 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Online-backup startad med pg_start_backup() måste avslutas med pg_stop_backup() och alla WAL fram till den punkten måste vara tillgängliga vid återställning." -#: access/transam/xlog.c:7771 +#: access/transam/xlog.c:7810 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL avslutas innan konstistent återställningspunkt" -#: access/transam/xlog.c:7806 +#: access/transam/xlog.c:7853 #, c-format msgid "selected new timeline ID: %u" msgstr "valt nytt tidslinje-ID: %u" -#: access/transam/xlog.c:8274 +#: access/transam/xlog.c:8321 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "Oväntat katalogpost \"%s\" hittades i %s" -#: access/transam/xlog.c:8276 +#: access/transam/xlog.c:8323 #, 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/xlog.c:8277 +#: access/transam/xlog.c:8324 #, 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/xlog.c:8361 +#: access/transam/xlog.c:8408 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "konsistent återställningstillstånd uppnått vid %X/%X" -#: access/transam/xlog.c:8570 +#: access/transam/xlog.c:8617 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "ogiltig primär checkpoint-länk i kontrollfil" -#: access/transam/xlog.c:8574 +#: access/transam/xlog.c:8621 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "ogiltig checkpoint-länk i \"backup_label\"-fil" -#: access/transam/xlog.c:8592 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid primary checkpoint record" msgstr "ogiltig primär checkpoint-post" -#: access/transam/xlog.c:8596 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid checkpoint record" msgstr "ogiltig checkpoint-post" -#: access/transam/xlog.c:8607 +#: access/transam/xlog.c:8654 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "ogiltig resurshanterar-ID i primär checkpoint-post" -#: access/transam/xlog.c:8611 +#: access/transam/xlog.c:8658 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "ogiltig resurshanterar-ID i checkpoint-post" -#: access/transam/xlog.c:8624 +#: access/transam/xlog.c:8671 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "ogiltig xl_info i primär checkpoint-post" -#: access/transam/xlog.c:8628 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "ogiltig xl_info i checkpoint-post" -#: access/transam/xlog.c:8639 +#: access/transam/xlog.c:8686 #, c-format msgid "invalid length of primary checkpoint record" msgstr "ogiltig längd i primär checkpoint-post" -#: access/transam/xlog.c:8643 +#: access/transam/xlog.c:8690 #, c-format msgid "invalid length of checkpoint record" msgstr "ogiltig längd på checkpoint-post" -#: access/transam/xlog.c:8824 +#: access/transam/xlog.c:8871 #, c-format msgid "shutting down" msgstr "stänger ner" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8863 +#: access/transam/xlog.c:8910 #, 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:8875 +#: access/transam/xlog.c:8922 #, 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:8935 +#: access/transam/xlog.c:8982 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "restartpoint 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" -#: access/transam/xlog.c:8955 +#: access/transam/xlog.c:9002 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "checkpoint 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" -#: access/transam/xlog.c:9406 +#: access/transam/xlog.c:9473 #, 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:9939 +#: access/transam/xlog.c:10046 #, c-format msgid "recovery restart point at %X/%X" msgstr "återställningens omstartspunkt vid %X/%X" -#: access/transam/xlog.c:9941 +#: access/transam/xlog.c:10048 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Senaste kompletta transaktionen var vid loggtid %s" -#: access/transam/xlog.c:10187 +#: access/transam/xlog.c:10296 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "återställningspunkt \"%s\" skapad vid %X/%X" -#: access/transam/xlog.c:10332 +#: access/transam/xlog.c:10441 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "oväntad föregående tidslinje-ID %u (nuvarande tidslinje-ID %u) i checkpoint-post" -#: access/transam/xlog.c:10341 +#: access/transam/xlog.c:10450 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "oväntad tidslinje-ID %u (efter %u) i checkpoint-post" -#: access/transam/xlog.c:10357 +#: access/transam/xlog.c:10466 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "oväntad tidslinje-ID %u i checkpoint-post, innan vi nått minimal återställningspunkt %X/%X på tidslinje %u" -#: access/transam/xlog.c:10432 +#: access/transam/xlog.c:10541 #, 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:10489 access/transam/xlog.c:10545 -#: access/transam/xlog.c:10575 +#: access/transam/xlog.c:10598 access/transam/xlog.c:10654 +#: access/transam/xlog.c:10684 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "oväntad tidslinje-ID %u (skall vara %u) i checkpoint-post" -#: access/transam/xlog.c:10733 +#: access/transam/xlog.c:10842 #, 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/xlog.c:10948 +#: access/transam/xlog.c:11057 #, 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:10954 +#: access/transam/xlog.c:11063 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "kunde inte fdatasync:a fil \"%s\": %m" -#: access/transam/xlog.c:11065 access/transam/xlog.c:11602 +#: access/transam/xlog.c:11174 access/transam/xlog.c:11711 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2897,186 +2912,186 @@ msgstr "kunde inte fdatasync:a fil \"%s\": %m" msgid "WAL control functions cannot be executed during recovery." msgstr "WAL-kontrollfunktioner kan inte köras under återställning." -#: access/transam/xlog.c:11074 access/transam/xlog.c:11611 +#: access/transam/xlog.c:11183 access/transam/xlog.c:11720 #, 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:11075 access/transam/xlog.c:11612 +#: access/transam/xlog.c:11184 access/transam/xlog.c:11721 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "wal_level måste vara satt till \"replica\" eller \"logical\" vid serverstart." -#: access/transam/xlog.c:11080 +#: access/transam/xlog.c:11189 #, c-format msgid "backup label too long (max %d bytes)" msgstr "backup-etikett för lång (max %d byte)" -#: access/transam/xlog.c:11117 access/transam/xlog.c:11401 -#: access/transam/xlog.c:11439 +#: access/transam/xlog.c:11226 access/transam/xlog.c:11510 +#: access/transam/xlog.c:11548 #, c-format msgid "a backup is already in progress" msgstr "en backup är redan på gång" -#: access/transam/xlog.c:11118 +#: access/transam/xlog.c:11227 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Kör pg_stop_backup() och försök igen." -#: access/transam/xlog.c:11214 +#: access/transam/xlog.c:11323 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "WAL skapad med full_page_writes=off har återspelats sedab senaste omstartpunkten" -#: access/transam/xlog.c:11216 access/transam/xlog.c:11807 +#: access/transam/xlog.c:11325 access/transam/xlog.c:11916 #, 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." -#: access/transam/xlog.c:11300 replication/basebackup.c:1433 +#: access/transam/xlog.c:11409 replication/basebackup.c:1433 #: utils/adt/misc.c:367 #, 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:11350 commands/tablespace.c:385 +#: access/transam/xlog.c:11459 commands/tablespace.c:385 #: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "tabellutrymmen stöds inte på denna plattform" -#: access/transam/xlog.c:11402 access/transam/xlog.c:11440 +#: access/transam/xlog.c:11511 access/transam/xlog.c:11549 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Om du är säker på att det inte pågår någon backup så ta bort filen \"%s\" och försök igen." -#: access/transam/xlog.c:11627 +#: access/transam/xlog.c:11736 #, c-format msgid "exclusive backup not in progress" msgstr "exklusiv backup är inte på gång" -#: access/transam/xlog.c:11654 +#: access/transam/xlog.c:11763 #, c-format msgid "a backup is not in progress" msgstr "ingen backup är på gång" -#: access/transam/xlog.c:11740 access/transam/xlog.c:11753 -#: access/transam/xlog.c:12144 access/transam/xlog.c:12150 -#: access/transam/xlog.c:12198 access/transam/xlog.c:12278 -#: access/transam/xlog.c:12302 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11849 access/transam/xlog.c:11862 +#: access/transam/xlog.c:12253 access/transam/xlog.c:12259 +#: access/transam/xlog.c:12307 access/transam/xlog.c:12387 +#: access/transam/xlog.c:12411 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "felaktig data i fil \"%s\"" -#: access/transam/xlog.c:11757 replication/basebackup.c:1287 +#: access/transam/xlog.c:11866 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "standby:en befordrades under online-backup" -#: access/transam/xlog.c:11758 replication/basebackup.c:1288 +#: access/transam/xlog.c:11867 replication/basebackup.c:1288 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "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:11805 +#: access/transam/xlog.c:11914 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "WAL skapad med full_page_writes=off återspelades under online-backup" -#: access/transam/xlog.c:11925 +#: access/transam/xlog.c:12034 #, 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:11937 +#: access/transam/xlog.c:12046 #, 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:11939 +#: access/transam/xlog.c:12048 #, c-format msgid "Check that your archive_command is executing properly. You can safely cancel this backup, but the database backup will not be usable without all the WAL segments." msgstr "Kontrollera att ditt archive_command kör som det skall. Du kan avbryta denna backup på ett säkert sätt men databasbackup:en kommer inte vara användbart utan att alla WAL-segment finns." -#: access/transam/xlog.c:11946 +#: access/transam/xlog.c:12055 #, c-format msgid "all required WAL segments have been archived" msgstr "alla krävda WAL-segments har arkiverats" -#: access/transam/xlog.c:11950 +#: access/transam/xlog.c:12059 #, 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:12005 +#: access/transam/xlog.c:12114 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "avbryter backup på grund av att backend:en stoppades innan pg_stop_backup anropades" -#: access/transam/xlog.c:12199 +#: access/transam/xlog.c:12308 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Parsad tidslinje-ID är %u men förväntade sig %u." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12327 +#: access/transam/xlog.c:12436 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "WAL-redo vid %X/%X för %s" -#: access/transam/xlog.c:12375 +#: access/transam/xlog.c:12484 #, c-format msgid "online backup mode was not canceled" msgstr "online backupläge har ej avbrutits" -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12485 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Filen \"%s\" kunde inte döpas om till \"%s\": %m." -#: access/transam/xlog.c:12385 access/transam/xlog.c:12397 -#: access/transam/xlog.c:12407 +#: access/transam/xlog.c:12494 access/transam/xlog.c:12506 +#: access/transam/xlog.c:12516 #, c-format msgid "online backup mode canceled" msgstr "online backupläge avbrutet" -#: access/transam/xlog.c:12398 +#: access/transam/xlog.c:12507 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Filer \"%s\" och \"%s\" döptes om till \"%s\" och \"%s\", var för sig." -#: access/transam/xlog.c:12408 +#: access/transam/xlog.c:12517 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Filen \"%s\" dötes om till \"%s\", men filen \"%s\" kunde inte döpas om till \"%s\": %m." -#: access/transam/xlog.c:12541 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12650 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "kunde inte läsa från loggsegment %s, offset %u: %m" -#: access/transam/xlog.c:12547 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12656 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "kunde inte läsa från loggsegment %s, offset %u, läste %d av %zu" -#: access/transam/xlog.c:13112 +#: access/transam/xlog.c:13233 #, c-format msgid "WAL receiver process shutdown requested" msgstr "nedstängning av WAL-mottagarprocess efterfrågad" -#: access/transam/xlog.c:13207 +#: access/transam/xlog.c:13345 #, c-format msgid "received promote request" msgstr "tog emot förfrågan om befordran" -#: access/transam/xlog.c:13220 +#: access/transam/xlog.c:13358 #, c-format msgid "promote trigger file found: %s" msgstr "triggerfil för befordring hittad: %s" -#: access/transam/xlog.c:13228 +#: access/transam/xlog.c:13366 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "kunde inte göra stat() på triggerfil för befordring \"%s\": %m" @@ -3140,7 +3155,7 @@ msgstr "Menade du att använda pg_stop_backup('f')?" #: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 #: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 -#: replication/slotfuncs.c:255 replication/walsender.c:3328 +#: replication/slotfuncs.c:255 replication/walsender.c:3346 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 #: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 #: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 @@ -3158,7 +3173,7 @@ msgstr "en funktion som returnerar en mängd anropades i kontext som inte godtar #: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 #: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 -#: replication/slotfuncs.c:259 replication/walsender.c:3332 +#: replication/slotfuncs.c:259 replication/walsender.c:3350 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 @@ -3244,123 +3259,123 @@ msgstr "ogiltig postoffset vid %X/%X" msgid "contrecord is requested by %X/%X" msgstr "contrecord är begärd vid %X/%X" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ogiltig postlängd vid %X/%X: förväntade %u, fick %u" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "det finns ingen contrecord-flagga vid %X/%X" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, 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:728 +#: access/transam/xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ogiltigt resurshanterar-ID %u vid %X/%X" -#: access/transam/xlogreader.c:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, 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:795 +#: access/transam/xlogreader.c:803 #, 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:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "felaktigt magiskt nummer %04X i loggsegment %s, offset %u" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ogiltiga infobitar %04X i loggsegment %s, offset %u" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, 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:869 +#: access/transam/xlogreader.c:877 #, 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:875 +#: access/transam/xlogreader.c:883 #, 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:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "oväntad sidadress %X/%X i loggsegment %s, offset %u" # FIXME -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "\"ej i sekvens\"-fel på tidslinje-ID %u (efter %u) i loggsegment %s, offset %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, 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:1298 +#: access/transam/xlogreader.c:1306 #, 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:1305 +#: access/transam/xlogreader.c:1313 #, 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:1341 +#: access/transam/xlogreader.c:1349 #, 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:1357 +#: access/transam/xlogreader.c:1365 #, 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:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED satt, men block-image-längd %u vid %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_IS_COMPRESSED satt, men block-image-längd är %u vid %X/%X" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, 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:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ogiltig block_id %u vid %X/%X" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "post med ogiltig längd vid %X/%X" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ogiltig komprimerad image vid %X/%X, block %d" @@ -3370,12 +3385,12 @@ msgstr "ogiltig komprimerad image vid %X/%X, block %d" msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "-X kräver ett tvåpotensvärde mellan 1 MB och 1 GB" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3974 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "--%s kräver ett värde" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3979 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "-c %s kräver ett värde" @@ -3524,10 +3539,10 @@ msgid "large object %u does not exist" msgstr "stort objekt %u existerar inte" #: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 -#: commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 -#: commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 -#: commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 -#: commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 +#: commands/copy.c:402 commands/copy.c:422 commands/copy.c:432 +#: commands/copy.c:441 commands/copy.c:450 commands/copy.c:460 +#: commands/copy.c:469 commands/copy.c:478 commands/copy.c:496 +#: commands/copy.c:512 commands/copy.c:532 commands/copy.c:549 #: commands/dbcommands.c:158 commands/dbcommands.c:167 #: commands/dbcommands.c:176 commands/dbcommands.c:185 #: commands/dbcommands.c:194 commands/dbcommands.c:203 @@ -3537,12 +3552,12 @@ msgstr "stort objekt %u existerar inte" #: commands/dbcommands.c:1550 commands/dbcommands.c:1559 #: commands/dbcommands.c:1568 commands/extension.c:1757 #: commands/extension.c:1767 commands/extension.c:1777 -#: commands/extension.c:3074 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:606 +#: commands/extension.c:3074 commands/foreigncmds.c:550 +#: commands/foreigncmds.c:559 commands/functioncmds.c:606 #: commands/functioncmds.c:772 commands/functioncmds.c:781 #: commands/functioncmds.c:790 commands/functioncmds.c:799 #: commands/functioncmds.c:2097 commands/functioncmds.c:2105 -#: commands/publicationcmds.c:87 commands/publicationcmds.c:130 +#: commands/publicationcmds.c:87 commands/publicationcmds.c:135 #: commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 #: commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 #: commands/sequence.c:1334 commands/sequence.c:1344 commands/sequence.c:1354 @@ -3550,7 +3565,7 @@ msgstr "stort objekt %u existerar inte" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 #: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 -#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7684 +#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -3563,9 +3578,9 @@ msgstr "stort objekt %u existerar inte" #: commands/user.c:638 commands/user.c:647 commands/user.c:655 #: commands/user.c:663 parser/parse_utilcmd.c:402 #: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 -#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 -#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:883 -#: replication/walsender.c:894 replication/walsender.c:904 +#: replication/pgoutput/pgoutput.c:238 replication/pgoutput/pgoutput.c:248 +#: replication/pgoutput/pgoutput.c:258 replication/walsender.c:897 +#: replication/walsender.c:908 replication/walsender.c:918 #, c-format msgid "conflicting or redundant options" msgstr "motstridiga eller redundanta inställningar" @@ -3581,29 +3596,29 @@ 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:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 -#: commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 -#: commands/tablecmds.c:7147 commands/tablecmds.c:7303 -#: commands/tablecmds.c:7353 commands/tablecmds.c:7427 -#: commands/tablecmds.c:7497 commands/tablecmds.c:7609 -#: commands/tablecmds.c:7703 commands/tablecmds.c:7762 -#: commands/tablecmds.c:7851 commands/tablecmds.c:7880 -#: commands/tablecmds.c:8035 commands/tablecmds.c:8117 -#: commands/tablecmds.c:8273 commands/tablecmds.c:8395 -#: commands/tablecmds.c:11888 commands/tablecmds.c:12080 -#: commands/tablecmds.c:12240 commands/tablecmds.c:13403 -#: commands/tablecmds.c:15950 commands/trigger.c:942 parser/analyze.c:2471 +#: commands/analyze.c:390 commands/copy.c:781 commands/sequence.c:1709 +#: commands/tablecmds.c:7180 commands/tablecmds.c:7336 +#: commands/tablecmds.c:7386 commands/tablecmds.c:7460 +#: commands/tablecmds.c:7530 commands/tablecmds.c:7642 +#: commands/tablecmds.c:7736 commands/tablecmds.c:7795 +#: commands/tablecmds.c:7884 commands/tablecmds.c:7913 +#: commands/tablecmds.c:8068 commands/tablecmds.c:8150 +#: commands/tablecmds.c:8306 commands/tablecmds.c:8428 +#: commands/tablecmds.c:11908 commands/tablecmds.c:12100 +#: commands/tablecmds.c:12260 commands/tablecmds.c:13446 +#: commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 #: parser/parse_relation.c:714 parser/parse_target.c:1077 #: parser/parse_type.c:144 parser/parse_utilcmd.c:3425 -#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2845 +#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 #: utils/adt/ruleutils.c:2732 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "kolumn \"%s\" i relation \"%s\" existerar inte" #: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 -#: commands/tablecmds.c:249 commands/tablecmds.c:16824 utils/adt/acl.c:2053 -#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 -#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 +#: utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 +#: utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" msgstr "\"%s\" är inte en sekvens" @@ -4026,12 +4041,12 @@ msgstr "schema med OID %u existerar inte" msgid "tablespace with OID %u does not exist" msgstr "tabellutrymme med OID %u finns inte" -#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "främmande data-omvandlare med OID %u finns inte" -#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "främmande server med OID %u finns inte" @@ -4087,12 +4102,12 @@ msgstr "konvertering med OID %u existerar inte" msgid "extension with OID %u does not exist" msgstr "utökning med OID %u existerar inte" -#: catalog/aclchk.c:5379 commands/publicationcmds.c:818 +#: catalog/aclchk.c:5379 commands/publicationcmds.c:823 #, c-format msgid "publication with OID %u does not exist" msgstr "publicering med OID %u existerar inte" -#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "prenumeration med OID %u existerar inte" @@ -4193,12 +4208,13 @@ msgstr "kan inte ta bort %s eftersom andra objekt beror på den" #: catalog/dependency.c:1204 catalog/dependency.c:1211 #: catalog/dependency.c:1223 commands/tablecmds.c:1301 -#: commands/tablecmds.c:14021 commands/tablespace.c:464 commands/user.c:1095 -#: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 -#: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 -#: utils/misc/guc.c:7176 utils/misc/guc.c:7246 utils/misc/guc.c:11490 -#: utils/misc/guc.c:11524 utils/misc/guc.c:11558 utils/misc/guc.c:11601 -#: utils/misc/guc.c:11643 +#: commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 +#: commands/view.c:506 libpq/auth.c:346 replication/slot.c:181 +#: replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 +#: storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 +#: utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 +#: utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 +#: utils/misc/guc.c:12599 utils/misc/guc.c:12601 #, c-format msgid "%s" msgstr "%s" @@ -4242,7 +4258,7 @@ msgstr "Systemkatalogändringar är för tillfället inte tillåtna." msgid "tables can have at most %d columns" msgstr "tabeller kan ha som mest %d kolumner" -#: catalog/heap.c:527 commands/tablecmds.c:7037 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "kolumnnamn \"%s\" står i konflikt med ett systemkolumnnamn" @@ -4303,105 +4319,105 @@ msgstr "En relation har en associerad typ med samma namn så du måste använda 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:2469 +#: catalog/heap.c:2529 #, 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:2742 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "check-villkor \"%s\" finns redan" -#: catalog/heap.c:2912 catalog/index.c:886 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8769 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8802 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "integritetsvillkor \"%s\" för relation \"%s\" finns redan" -#: catalog/heap.c:2919 +#: catalog/heap.c:2974 #, 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:2930 +#: catalog/heap.c:2985 #, 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:2940 +#: catalog/heap.c:2995 #, 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:2945 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "slår samman villkor \"%s\" med ärvd definition" -#: catalog/heap.c:3050 +#: catalog/heap.c:3105 #, 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:3052 +#: catalog/heap.c:3107 #, 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:3058 +#: catalog/heap.c:3113 #, 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:3059 +#: catalog/heap.c:3114 #, 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:3114 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "genereringsuttryck är inte immutable" -#: catalog/heap.c:3142 rewrite/rewriteHandler.c:1285 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1288 #, 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:3147 commands/prepare.c:368 parser/analyze.c:2695 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 #: parser/parse_target.c:594 parser/parse_target.c:891 -#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1290 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1293 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Du måste skriva om eller typomvandla uttrycket." -#: catalog/heap.c:3194 +#: catalog/heap.c:3249 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "bara tabell \"%s\" kan refereras i check-villkoret" -#: catalog/heap.c:3492 +#: catalog/heap.c:3547 #, 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:3493 +#: catalog/heap.c:3548 #, 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:3498 +#: catalog/heap.c:3553 #, 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:3499 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Tabell \"%s\" refererar till \"%s\"." -#: catalog/heap.c:3501 +#: catalog/heap.c:3556 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Trunkera tabellen \"%s\" samtidigt, eller använd TRUNCATE ... CASCADE." @@ -4462,34 +4478,34 @@ msgstr "pg_class index OID-värde är inte satt i binärt uppgraderingsläge" 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:3653 +#: catalog/index.c:3660 #, 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:3664 commands/indexcmds.c:3555 +#: catalog/index.c:3671 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "kan inte omindexera angivet index i TOAST-tabell" -#: catalog/index.c:3680 commands/indexcmds.c:3435 commands/indexcmds.c:3579 +#: catalog/index.c:3687 commands/indexcmds.c:3469 commands/indexcmds.c:3613 #: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "kan inte flytta systemrelation \"%s\"" -#: catalog/index.c:3824 +#: catalog/index.c:3831 #, c-format msgid "index \"%s\" was reindexed" msgstr "index \"%s\" omindexerades" -#: catalog/index.c:3961 +#: catalog/index.c:3968 #, 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:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5251 +#: commands/trigger.c:5285 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "referenser till andra databaser är inte implementerat: \"%s.%s.%s\"" @@ -4520,7 +4536,7 @@ msgstr "relationen \"%s.%s\" existerar inte" msgid "relation \"%s\" does not exist" msgstr "relationen \"%s\" existerar inte" -#: catalog/namespace.c:501 catalog/namespace.c:3076 commands/extension.c:1541 +#: catalog/namespace.c:501 catalog/namespace.c:3079 commands/extension.c:1541 #: commands/extension.c:1547 #, c-format msgid "no schema has been selected to create in" @@ -4546,86 +4562,86 @@ msgstr "bara temporära relationer får skapas i temporära scheman" msgid "statistics object \"%s\" does not exist" msgstr "statistikobjektet \"%s\" existerar inte" -#: catalog/namespace.c:2391 +#: catalog/namespace.c:2394 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "textsökparser \"%s\" finns inte" -#: catalog/namespace.c:2517 +#: catalog/namespace.c:2520 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "textsökkatalog \"%s\" finns inte" -#: catalog/namespace.c:2644 +#: catalog/namespace.c:2647 #, c-format msgid "text search template \"%s\" does not exist" msgstr "textsökmall \"%s\" finns inte" -#: catalog/namespace.c:2770 commands/tsearchcmds.c:1127 +#: catalog/namespace.c:2773 commands/tsearchcmds.c:1127 #: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "textsökkonfiguration \"%s\" finns inte" -#: catalog/namespace.c:2883 parser/parse_expr.c:810 parser/parse_target.c:1269 +#: catalog/namespace.c:2886 parser/parse_expr.c:810 parser/parse_target.c:1269 #, c-format msgid "cross-database references are not implemented: %s" msgstr "referenser till andra databaser är inte implementerat: %s" -#: catalog/namespace.c:2889 gram.y:15103 gram.y:17077 parser/parse_expr.c:817 +#: catalog/namespace.c:2892 gram.y:15103 gram.y:17077 parser/parse_expr.c:817 #: parser/parse_target.c:1276 #, 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:3019 +#: catalog/namespace.c:3022 #, 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:3025 +#: catalog/namespace.c:3028 #, 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:3098 commands/schemacmds.c:263 commands/schemacmds.c:343 +#: catalog/namespace.c:3101 commands/schemacmds.c:263 commands/schemacmds.c:343 #: commands/tablecmds.c:1246 #, c-format msgid "schema \"%s\" does not exist" msgstr "schema \"%s\" existerar inte" -#: catalog/namespace.c:3129 +#: catalog/namespace.c:3132 #, 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:3696 +#: catalog/namespace.c:3699 #, 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:3751 +#: catalog/namespace.c:3754 #, c-format msgid "conversion \"%s\" does not exist" msgstr "konvertering \"%s\" finns inte" -#: catalog/namespace.c:4015 +#: catalog/namespace.c:4018 #, 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:4031 +#: catalog/namespace.c:4034 #, c-format msgid "cannot create temporary tables during recovery" msgstr "kan inte skapa temptabeller under återställning" -#: catalog/namespace.c:4037 +#: catalog/namespace.c:4040 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "kan inte skapa temporära tabeller under en parallell operation" -#: catalog/namespace.c:4338 commands/tablespace.c:1211 commands/variable.c:64 -#: tcop/postgres.c:3624 utils/misc/guc.c:11675 utils/misc/guc.c:11753 +#: catalog/namespace.c:4341 commands/tablespace.c:1211 commands/variable.c:64 +#: tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "List-syntaxen är ogiltig." @@ -4633,25 +4649,25 @@ msgstr "List-syntaxen är ogiltig." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 #: commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 #: commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 -#: commands/tablecmds.c:12016 +#: commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" är inte en tabell" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6169 commands/tablecmds.c:16829 commands/view.c:119 +#: commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" är inte en vy" #: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 -#: commands/tablecmds.c:16834 +#: commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" är inte en materialiserad vy" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6172 commands/tablecmds.c:16839 +#: commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" är inte en främmande tabell" @@ -4674,7 +4690,7 @@ msgstr "standardvärde för kolumn \"%s\" i relation \"%s\" existerar inte" #: catalog/objectaddress.c:1645 commands/functioncmds.c:139 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 -#: utils/adt/acl.c:4411 +#: utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "typen \"%s\" existerar inte" @@ -4694,8 +4710,9 @@ msgstr "funktion %d (%s, %s) för %s finns inte" 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:1861 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:733 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 +#: commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 +#: foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "server \"%s\" finns inte" @@ -5347,7 +5364,7 @@ msgid "The partition is being detached concurrently or has an unfinished detach. msgstr "Partitionen kopplas loss parallellt eller har en bortkoppling som inte är slutförd." #: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 -#: commands/tablecmds.c:15139 +#: commands/tablecmds.c:15182 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Använd ALTER TABLE ... DETACH PARTITION ... FINALIZE för att slutföra den pågående bortkopplingsoperationen." @@ -5549,8 +5566,8 @@ msgstr "Temporära och ologgade relationer kan inte replikeras." msgid "relation \"%s\" is already member of publication \"%s\"" msgstr "relationen \"%s\" är redan en medlem av publiceringen \"%s\"" -#: catalog/pg_publication.c:533 commands/publicationcmds.c:458 -#: commands/publicationcmds.c:786 +#: catalog/pg_publication.c:533 commands/publicationcmds.c:463 +#: commands/publicationcmds.c:791 #, c-format msgid "publication \"%s\" does not exist" msgstr "publiceringen \"%s\" finns inte" @@ -5624,17 +5641,17 @@ msgid "cannot reassign ownership of objects owned by %s because they are require msgstr "kan inte byta ägare på objekt som ägs av %s då dessa krävas av databassystemet" #: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 -#: commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "prenumerationen \"%s\" finns inte" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "kunde inte slänga relationsmappning för prenumeration \"%s\"" -#: catalog/pg_subscription.c:434 +#: catalog/pg_subscription.c:459 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "Tabellsynkronisering för relation \"%s\" pågår och är i läget \"%c\"." @@ -5642,7 +5659,7 @@ msgstr "Tabellsynkronisering för relation \"%s\" pågår och är i läget \"%c\ #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:441 +#: catalog/pg_subscription.c:466 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Använd %s för att slå på prenumerationen om den inte redan är på eller använd %s för att slänga prenumerationen." @@ -5693,13 +5710,13 @@ msgstr "Misslyckades vid skapande av multirange-typ för typen \"%s\"." msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Du kan manuellt ange en multirange-typ med hjälp av attributet \"multirange_type_name\"." -#: catalog/storage.c:523 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1046 #, c-format msgid "invalid page in block %u of relation %s" msgstr "ogiltig sida i block %u i relation %s" #: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 -#: commands/tablecmds.c:16694 +#: commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" är inte en tabell eller materialiserad vy" @@ -5799,12 +5816,12 @@ msgstr "parameter \"%s\" måste vara READ_ONLY, SHAREABLE eller READ_WRITE" msgid "event trigger \"%s\" already exists" msgstr "händelsetrigger \"%s\" finns redan" -#: commands/alter.c:88 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "främmande data-omvandlare \"%s\" finns redan" -#: commands/alter.c:91 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "servern \"%s\" finns redan" @@ -5814,7 +5831,7 @@ msgstr "servern \"%s\" finns redan" msgid "language \"%s\" already exists" msgstr "språk \"%s\" finns redan" -#: commands/alter.c:97 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:185 #, c-format msgid "publication \"%s\" already exists" msgstr "publicering \"%s\" finns redan" @@ -5891,7 +5908,7 @@ msgid "handler function is not specified" msgstr "hanterarfunktion ej angiven" #: commands/amcmds.c:264 commands/event_trigger.c:183 -#: commands/foreigncmds.c:489 commands/proclang.c:80 commands/trigger.c:699 +#: commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 #: parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" @@ -5942,27 +5959,27 @@ msgstr "hoppar över analys av arvsträd \"%s.%s\" --- detta arvsträd innehåll msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no analyzable child tables" msgstr "hoppar över analys av arvsträd \"%s.%s\" --- detta arvsträd innehåller inga analyserbara barntabeller" -#: commands/async.c:646 +#: commands/async.c:645 #, c-format msgid "channel name cannot be empty" msgstr "kanalnamn får inte vara tomt" -#: commands/async.c:652 +#: commands/async.c:651 #, c-format msgid "channel name too long" msgstr "kanalnamn för långt" -#: commands/async.c:657 +#: commands/async.c:656 #, c-format msgid "payload string too long" msgstr "innehållssträng är för lång" -#: commands/async.c:876 +#: commands/async.c:875 #, c-format msgid "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" msgstr "kan inte göra PREPARE på transaktion som kört LISTEN, UNLISTEN eller NOTIFY" -#: commands/async.c:980 +#: commands/async.c:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "för många notifieringar i NOTIFY-kön" @@ -6002,7 +6019,7 @@ msgstr "kan inte klustra en partitionerad tabell" msgid "there is no previously clustered index for table \"%s\"" msgstr "det finns inget tidigare klustrat index för tabell \"%s\"" -#: commands/cluster.c:187 commands/tablecmds.c:13858 commands/tablecmds.c:15718 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "index \"%s\" för tabell \"%s\" finns inte" @@ -6017,7 +6034,7 @@ msgstr "kan inte klustra en delad katalog" msgid "cannot vacuum temporary tables of other sessions" msgstr "kan inte städa temporära tabeller för andra sessioner" -#: commands/cluster.c:471 commands/tablecmds.c:15728 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" är inte ett index för tabell \"%s\"" @@ -6216,148 +6233,160 @@ msgstr "måste vara en superuser eller medlem i rollen pg_read_server_files för msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "måste vara superuser eller medlem i rollen pg_write_server_files för att göra COPY till en fil" -#: commands/copy.c:188 +#: commands/copy.c:175 +#, c-format +msgid "generated columns are not supported in COPY FROM WHERE conditions" +msgstr "genererade kolumner tillåts inte i COPY FROM WHERE-villkor" + +#: commands/copy.c:176 commands/tablecmds.c:11928 commands/tablecmds.c:17048 +#: commands/tablecmds.c:17127 commands/trigger.c:653 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:974 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "Kolumnen \"%s\" är en genererad kolumn." + +#: commands/copy.c:225 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM stöds inte med radnivåsäkerhet" -#: commands/copy.c:189 +#: commands/copy.c:226 #, c-format msgid "Use INSERT statements instead." msgstr "Använd INSERT-satser istället." -#: commands/copy.c:377 +#: commands/copy.c:414 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "COPY-format \"%s\" känns inte igen" -#: commands/copy.c:450 commands/copy.c:466 commands/copy.c:481 -#: commands/copy.c:503 +#: commands/copy.c:487 commands/copy.c:503 commands/copy.c:518 +#: commands/copy.c:540 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "argumentet till flaggan \"%s\" måste vara en lista med kolumnnamn" -#: commands/copy.c:518 +#: commands/copy.c:555 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "argumentet till flaggan \"%s\" måste vara ett giltigt kodningsnamn" -#: commands/copy.c:525 commands/dbcommands.c:254 commands/dbcommands.c:1575 +#: commands/copy.c:562 commands/dbcommands.c:254 commands/dbcommands.c:1575 #, c-format msgid "option \"%s\" not recognized" msgstr "flaggan \"%s\" känns inte igen" -#: commands/copy.c:537 +#: commands/copy.c:574 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "kan inte ange DELIMITER i läget BINARY" -#: commands/copy.c:542 +#: commands/copy.c:579 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "kan inte ange NULL i läget BINARY" -#: commands/copy.c:564 +#: commands/copy.c:601 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "COPY-separatorn måste vara ett ensamt en-byte-tecken" -#: commands/copy.c:571 +#: commands/copy.c:608 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "COPY-separatorn kan inte vara nyradstecken eller vagnretur" -#: commands/copy.c:577 +#: commands/copy.c:614 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "null-representationen för COPY kan inte använda tecknen för nyrad eller vagnretur" -#: commands/copy.c:594 +#: commands/copy.c:631 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "COPY-separatorn kan inte vara \"%s\"" -#: commands/copy.c:600 +#: commands/copy.c:637 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER kan bara användas i CSV-läge" -#: commands/copy.c:606 +#: commands/copy.c:643 #, c-format msgid "COPY quote available only in CSV mode" msgstr "COPY-quote kan bara användas i CSV-läge" -#: commands/copy.c:611 +#: commands/copy.c:648 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "COPY-quote måste vara ett ensamt en-byte-tecken" -#: commands/copy.c:616 +#: commands/copy.c:653 #, c-format msgid "COPY delimiter and quote must be different" msgstr "COPY-separator och quote måste vara olika" -#: commands/copy.c:622 +#: commands/copy.c:659 #, c-format msgid "COPY escape available only in CSV mode" msgstr "COPY-escape kan bara användas i CSV-läge" -#: commands/copy.c:627 +#: commands/copy.c:664 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "COPY-escape måste vara ett ensamt en-byte-tecken" -#: commands/copy.c:633 +#: commands/copy.c:670 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "COPY-force-quote kan bara användas i CSV-läge" -#: commands/copy.c:637 +#: commands/copy.c:674 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "COPY-force-quote kan bara användas med COPY TO" -#: commands/copy.c:643 +#: commands/copy.c:680 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "COPY-force-not-null kan bara användas i CSV-läge" -#: commands/copy.c:647 +#: commands/copy.c:684 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "COPY-force-not-null kan bara används med COPY FROM" -#: commands/copy.c:653 +#: commands/copy.c:690 #, c-format msgid "COPY force null available only in CSV mode" msgstr "COPY-force-null kan bara användas i CSV-läge" -#: commands/copy.c:658 +#: commands/copy.c:695 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "COPY-force-null kan bara används med COPY FROM" -#: commands/copy.c:664 +#: commands/copy.c:701 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "COPY-avdelaren kan inte vara i NULL-specifikationen" -#: commands/copy.c:671 +#: commands/copy.c:708 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "CSV-citattecken kan inte vara i NULL-specifikationen" -#: commands/copy.c:732 +#: commands/copy.c:769 #, c-format msgid "column \"%s\" is a generated column" msgstr "kolumnen \"%s\" är en genererad kolumn" -#: commands/copy.c:734 +#: commands/copy.c:771 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Genererade kolumner kan inte användas i COPY." -#: commands/copy.c:749 commands/indexcmds.c:1842 commands/statscmds.c:245 +#: commands/copy.c:786 commands/indexcmds.c:1842 commands/statscmds.c:265 #: commands/tablecmds.c:2344 commands/tablecmds.c:3000 #: commands/tablecmds.c:3508 parser/parse_relation.c:3651 #: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 @@ -6365,7 +6394,7 @@ msgstr "Genererade kolumner kan inte användas i COPY." msgid "column \"%s\" does not exist" msgstr "kolumnen \"%s\" existerar inte" -#: commands/copy.c:756 commands/tablecmds.c:2370 commands/trigger.c:951 +#: commands/copy.c:793 commands/tablecmds.c:2370 commands/trigger.c:951 #: parser/parse_target.c:1093 parser/parse_target.c:1104 #, c-format msgid "column \"%s\" specified more than once" @@ -6446,7 +6475,7 @@ msgstr "FORCE_NOT_NULL-kolumnen \"%s\" refereras inte till av COPY" msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "FORCE_NULL-kolumnen \"%s\" refereras inte till av COPY" -#: commands/copyfrom.c:1343 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1343 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" @@ -7047,7 +7076,7 @@ msgstr "Använd DROP AGGREGATE för att ta bort aggregatfunktioner." #: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 #: commands/tablecmds.c:3750 commands/tablecmds.c:3803 -#: commands/tablecmds.c:16145 tcop/utility.c:1324 +#: commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "relation \"%s\" finns inte, hoppar över" @@ -7077,7 +7106,7 @@ msgstr "jämförelse \"%s\" finns inte, hoppar över" msgid "conversion \"%s\" does not exist, skipping" msgstr "konvertering \"%s\" finns inte, hoppar över" -#: commands/dropcmds.c:293 commands/statscmds.c:674 +#: commands/dropcmds.c:293 commands/statscmds.c:694 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "statistikobjekt \"%s\" finns inte, hoppar över" @@ -7172,7 +7201,7 @@ msgstr "regel \"%s\" för relation \"%s\" finns inte, hoppar över" msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "främmande data-omvandlare \"%s\" finns inte, hoppar över" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "servern \"%s\" finns inte, hoppar över" @@ -7532,102 +7561,102 @@ msgstr "kan inte lägga till schema \"%s\" till utökningen \"%s\" eftersom sche msgid "file \"%s\" is too large" msgstr "filen \"%s\" är för stor" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "flaggan \"%s\" hittades inte" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "flaggan \"%s\" angiven mer än en gång" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "rättighet saknas för att byta ägare på främmande data-omvandlare \"%s\"" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "Måste vara superuser för att byta ägare på en främmande data-omvandlare." -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Ägaren av en främmande data-omvandlare måste vara en superuser." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:711 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "främmande data-omvandlare \"%s\" finns inte" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "rättighet saknas för att skapa främmande data-omvandlare \"%s\"" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Måste vara superuser för att skapa främmande data-omvandlare." -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "rättighet saknas för att ändra främmande data-omvandlare \"%s\"" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Måste vara superuser för att ändra främmande data-omvandlare." -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "att ändra främmande data-omvandlares hanterare kan byta beteende på existerande främmande tabeller" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "att ändra främmande data-omvandlares validator kan göra att flaggor för beroende objekt invalideras" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "server \"%s\" finns redan, hoppar över" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "användarmappning för \"%s\" finns redan för server \"%s\", hoppar över" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "användarmappning för \"%s\" finns redan för server \"%s\"" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "användarmappning för \"%s\" finns inte för servern \"%s\"" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "användarmappning för \"%s\" finns inte för servern \"%s\", hoppar över" -#: commands/foreigncmds.c:1511 foreign/foreign.c:399 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "främmande data-omvandlare \"%s\" har ingen hanterare" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "främmande data-omvandlare \"%s\" stöder inte IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "importerar främmande tabell \"%s\"" @@ -8146,8 +8175,8 @@ msgstr "inkluderad kolumn stöder inte NULLS FIRST/LAST-flaggor" msgid "could not determine which collation to use for index expression" msgstr "kunde inte bestämma vilken jämförelse (collation) som skulle användas för indexuttryck" -#: commands/indexcmds.c:1978 commands/tablecmds.c:17162 commands/typecmds.c:810 -#: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17215 commands/typecmds.c:810 +#: parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 #: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" @@ -8183,8 +8212,8 @@ msgstr "accessmetod \"%s\" stöder inte ASC/DESC-flaggor" msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "accessmetod \"%s\" stöder inte NULLS FIRST/LAST-flaggor" -#: commands/indexcmds.c:2160 commands/tablecmds.c:17187 -#: commands/tablecmds.c:17193 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17240 +#: commands/tablecmds.c:17246 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "datatyp %s har ingen standardoperatorklass för accessmetod \"%s\"" @@ -8210,78 +8239,78 @@ msgstr "operatorklass \"%s\" accepterar inte datatypen %s" msgid "there are multiple default operator classes for data type %s" msgstr "det finns flera standardoperatorklasser för datatypen %s" -#: commands/indexcmds.c:2631 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "okänd REINDEX-flagga \"%s\"" -#: commands/indexcmds.c:2855 +#: commands/indexcmds.c:2889 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "tabell \"%s\" har inga index som kan reindexeras parallellt" -#: commands/indexcmds.c:2869 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "tabell \"%s\" har inga index som kan omindexeras" -#: commands/indexcmds.c:2909 commands/indexcmds.c:3416 -#: commands/indexcmds.c:3544 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 +#: commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "kan inte omindexera systemkataloger parallellt" -#: commands/indexcmds.c:2932 +#: commands/indexcmds.c:2966 #, c-format msgid "can only reindex the currently open database" msgstr "kan bara omindexera den aktiva databasen" -#: commands/indexcmds.c:3020 +#: commands/indexcmds.c:3054 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "kan inte omindexera systemkataloger parallellt, hoppar över alla" -#: commands/indexcmds.c:3053 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "kan inte flytta systemrelationer, hoppar över alla" -#: commands/indexcmds.c:3100 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "vid omindexering av partitionerad tabell \"%s.%s\"" -#: commands/indexcmds.c:3103 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "vid omindexering av partitionerat index \"%s.%s\"" -#: commands/indexcmds.c:3296 commands/indexcmds.c:4152 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "tabell \"%s.%s\" omindexerades" -#: commands/indexcmds.c:3448 commands/indexcmds.c:3500 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "kan inte parallellt omindexera ogiltigt index \"%s.%s\", hoppar över" -#: commands/indexcmds.c:3454 +#: commands/indexcmds.c:3488 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "kan inte parallellt omindexera uteslutningsvillkorsindex \"%s.%s\", hoppar över" -#: commands/indexcmds.c:3609 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "kan inte parallellt omindexera denna sorts relation" -#: commands/indexcmds.c:3630 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "kan inte flytta ickedelad relation till tabellutryumme \"%s\"" -#: commands/indexcmds.c:4133 commands/indexcmds.c:4145 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "index \"%s.%s\" omindexerades" @@ -8407,7 +8436,7 @@ msgstr "index-operatorer måste vara binära" #: commands/opclasscmds.c:1174 #, c-format msgid "access method \"%s\" does not support ordering operators" -msgstr "accessmetod \"%s\" stöder inte sorteringsoperatorer" +msgstr "accessmetod \"%s\" stöder inte ordningsoperatorer" #: commands/opclasscmds.c:1185 #, c-format @@ -8594,11 +8623,11 @@ msgstr "join-uppskattningsfunktion %s måste returnera typ %s" msgid "operator attribute \"%s\" cannot be changed" msgstr "operatorattribut \"%s\" kan inte ändras" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:157 #: commands/tablecmds.c:1582 commands/tablecmds.c:2162 #: commands/tablecmds.c:3402 commands/tablecmds.c:6112 -#: commands/tablecmds.c:9048 commands/tablecmds.c:16750 -#: commands/tablecmds.c:16785 commands/trigger.c:313 commands/trigger.c:1289 +#: commands/tablecmds.c:9081 commands/tablecmds.c:16793 +#: commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 #: commands/trigger.c:1398 rewrite/rewriteDefine.c:278 #: rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format @@ -8651,7 +8680,7 @@ msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "kan inte skapa en WITH HOLD-markör i en säkerhetsbegränsad operation" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2643 utils/adt/xml.c:2813 +#: executor/execCurrent.c:70 utils/adt/xml.c:2637 utils/adt/xml.c:2807 #, c-format msgid "cursor \"%s\" does not exist" msgstr "markör \"%s\" existerar inte" @@ -8661,7 +8690,7 @@ msgstr "markör \"%s\" existerar inte" msgid "invalid statement name: must not be empty" msgstr "ogiltigt sats-namn: får inte vara tomt" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1483 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "kunde inte lista ut datatypen för parameter $%d" @@ -8706,57 +8735,57 @@ msgstr "preparerad sats \"%s\" finns inte" msgid "must be superuser to create custom procedural language" msgstr "måste vara en superuser för att skapa ett eget procedurspråk" -#: commands/publicationcmds.c:104 +#: commands/publicationcmds.c:109 #, c-format msgid "invalid list syntax for \"publish\" option" msgstr "ogiltigt listsyntax för flaggan \"publish\"" -#: commands/publicationcmds.c:122 +#: commands/publicationcmds.c:127 #, c-format msgid "unrecognized \"publish\" value: \"%s\"" msgstr "okänt \"publish\"-värde: \"%s\"" -#: commands/publicationcmds.c:137 +#: commands/publicationcmds.c:142 #, c-format msgid "unrecognized publication parameter: \"%s\"" msgstr "okänd publiceringsparameter: \"%s\"" -#: commands/publicationcmds.c:169 +#: commands/publicationcmds.c:174 #, c-format msgid "must be superuser to create FOR ALL TABLES publication" msgstr "måste vara en superuser för att skapa en FOR ALL TABLES-publicering" -#: commands/publicationcmds.c:250 +#: commands/publicationcmds.c:255 #, c-format msgid "wal_level is insufficient to publish logical changes" msgstr "wal_level är otillräckligt för att publicera logiska ändringar" -#: commands/publicationcmds.c:251 +#: commands/publicationcmds.c:256 #, c-format msgid "Set wal_level to logical before creating subscriptions." msgstr "Sätt wal_level till logical innan prenumerationer skapas." -#: commands/publicationcmds.c:376 +#: commands/publicationcmds.c:381 #, c-format msgid "publication \"%s\" is defined as FOR ALL TABLES" msgstr "publicering \"%s\" är definierad som FOR ALL TABLES" -#: commands/publicationcmds.c:378 +#: commands/publicationcmds.c:383 #, c-format msgid "Tables cannot be added to or dropped from FOR ALL TABLES publications." msgstr "Tabeller kan inte läggas till eller tas bort från FOR ALL TABLES-publiceringar." -#: commands/publicationcmds.c:707 +#: commands/publicationcmds.c:712 #, c-format msgid "relation \"%s\" is not part of the publication" msgstr "relation \"%s\" är inte en del av publiceringen" -#: commands/publicationcmds.c:750 +#: commands/publicationcmds.c:755 #, c-format msgid "permission denied to change owner of publication \"%s\"" msgstr "rättighet saknas för att byta ägare på publicering \"%s\"" -#: commands/publicationcmds.c:752 +#: commands/publicationcmds.c:757 #, c-format msgid "The owner of a FOR ALL TABLES publication must be a superuser." msgstr "Ägaren av en FOR ALL TABLES-publicering måste vara en superuser." @@ -8916,13 +8945,13 @@ msgstr "tabellen måste vara i samma schema som tabellen den är länkad till" msgid "cannot change ownership of identity sequence" msgstr "kan inte byta ägare på identitetssekvens" -#: commands/sequence.c:1725 commands/tablecmds.c:13550 -#: commands/tablecmds.c:16165 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 +#: commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Sekvens \"%s\" är länkad till tabell \"%s\"" -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "bara en enda relation tillåts i CREATE STATISTICS" @@ -8932,72 +8961,72 @@ msgstr "bara en enda relation tillåts i CREATE STATISTICS" msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "relationen \"%s\" är inte en tabell, främmande tabell eller materialiserad vy" -#: commands/statscmds.c:193 +#: commands/statscmds.c:213 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "statistikobjekt \"%s\" finns redan, hoppar över" -#: commands/statscmds.c:201 +#: commands/statscmds.c:221 #, c-format msgid "statistics object \"%s\" already exists" msgstr "statistikobjekt \"%s\" finns redan" -#: commands/statscmds.c:212 +#: commands/statscmds.c:232 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "kan inte ha mer än %d kolumner i statistiken" -#: commands/statscmds.c:253 commands/statscmds.c:276 commands/statscmds.c:309 +#: commands/statscmds.c:273 commands/statscmds.c:296 commands/statscmds.c:329 #, c-format msgid "statistics creation on system columns is not supported" msgstr "skapa statistik för systemkolumner stöds inte" -#: commands/statscmds.c:260 commands/statscmds.c:283 +#: commands/statscmds.c:280 commands/statscmds.c:303 #, c-format msgid "column \"%s\" cannot be used in statistics because its type %s has no default btree operator class" msgstr "kolumnen \"%s\" kan inte användas i statistiken då dess typ %s inte har någon standard btree-operatorklass" -#: commands/statscmds.c:326 +#: commands/statscmds.c:346 #, c-format msgid "expression cannot be used in multivariate statistics because its type %s has no default btree operator class" msgstr "uttryck kan inte användas i multivariat statistik då dess type %s inte har någon default btree operatorklass" -#: commands/statscmds.c:347 +#: commands/statscmds.c:367 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "vid skapande av statistik för ett ensamt uttryck så kan inte statistiktyp anges" -#: commands/statscmds.c:376 +#: commands/statscmds.c:396 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "okänd statistiktyp \"%s\"" -#: commands/statscmds.c:405 +#: commands/statscmds.c:425 #, c-format msgid "extended statistics require at least 2 columns" msgstr "utökad statistik kräver minst två kolumner" -#: commands/statscmds.c:423 +#: commands/statscmds.c:443 #, c-format msgid "duplicate column name in statistics definition" msgstr "duplicerade kolumnnamn i statistikdefinition" -#: commands/statscmds.c:458 +#: commands/statscmds.c:478 #, c-format msgid "duplicate expression in statistics definition" msgstr "duplicerade uttryck i statistikdefinition" -#: commands/statscmds.c:639 commands/tablecmds.c:8014 +#: commands/statscmds.c:659 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "statistikmålet %d är för lågt" -#: commands/statscmds.c:647 commands/tablecmds.c:8022 +#: commands/statscmds.c:667 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "minskar statistikmålet till %d" -#: commands/statscmds.c:670 +#: commands/statscmds.c:690 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "statistikobjekt \"%s.%s\" finns inte, hoppar över" @@ -9027,7 +9056,7 @@ msgid "must be superuser to create subscriptions" msgstr "måste vara en superuser för att skapa prenumerationer" #: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 -#: replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "kunde inte ansluta till publicerare: %s" @@ -9068,63 +9097,63 @@ msgstr "Använd ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH tillåts inte för avstängda prenumerationer" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "prenumeration \"%s\" finns inte, hoppar över" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "slängde replikerings-slot \"%s\" på publicerare" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "kunde inte slänga replikeringsslotten \"%s\" på publicerare: %s" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "rättighet saknas för att byta ägare på prenumeration \"%s\"" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Ägaren av en prenumeration måste vara en superuser." -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "kunde inte ta emot lista med replikerade tabeller från publiceraren: %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, c-format msgid "could not connect to publisher when attempting to drop replication slot \"%s\": %s" msgstr "kunde inte ansluta till publicerare vid försök att slänga replikeringsslot \"%s\": %s" #. translator: %s is an SQL ALTER command -#: commands/subscriptioncmds.c:1581 +#: commands/subscriptioncmds.c:1583 #, c-format msgid "Use %s to disable the subscription, and then use %s to disassociate it from the slot." msgstr "Använd %s för att stänga av prenumerationen och sedan %s för att dissociera den från slotten." -#: commands/subscriptioncmds.c:1612 +#: commands/subscriptioncmds.c:1614 #, c-format msgid "publication name \"%s\" used more than once" msgstr "publiceringsnamn \"%s\" använt mer än en gång" -#: commands/subscriptioncmds.c:1656 +#: commands/subscriptioncmds.c:1658 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "publicering \"%s\" finns redan i prenumerationen \"%s\"" -#: commands/subscriptioncmds.c:1670 +#: commands/subscriptioncmds.c:1672 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "publicering \"%s\" finns inte i prenumerationen \"%s\"" -#: commands/subscriptioncmds.c:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "kan inte slänga alla publiceringar från en prenumeration" @@ -9185,7 +9214,7 @@ msgstr "materialiserad vy \"%s\" finns inte, hoppar över" msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Använd DROP MATERIALIZED VIEW för att ta bort en materialiserad vy." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18688 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18753 #: parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" @@ -9209,8 +9238,8 @@ msgstr "\"%s\" är inte en typ" msgid "Use DROP TYPE to remove a type." msgstr "Använd DROP TYPE för att ta bort en typ." -#: commands/tablecmds.c:277 commands/tablecmds.c:13389 -#: commands/tablecmds.c:15868 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 +#: commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "främmande tabell \"%s\" finns inte" @@ -9234,7 +9263,7 @@ msgstr "ON COMMIT kan bara användas på temporära tabeller" msgid "cannot create temporary table within security-restricted operation" msgstr "kan inte skapa temporär tabell i en säkerhetsbegränsad operation" -#: commands/tablecmds.c:738 commands/tablecmds.c:14675 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "relationen \"%s\" skulle ärvas mer än en gång" @@ -9304,7 +9333,7 @@ msgstr "kan inte trunkera främmande tabell \"%s\"" msgid "cannot truncate temporary tables of other sessions" msgstr "kan inte trunkera temporära tabeller tillhörande andra sessioner" -#: commands/tablecmds.c:2427 commands/tablecmds.c:14572 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "kan inte ärva från partitionerad tabell \"%s\"" @@ -9325,12 +9354,12 @@ msgstr "ärvd relation \"%s\" är inte en tabell eller främmande tabell" msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "kan inte skapa en temporär relation som partition till en permanent relation \"%s\"" -#: commands/tablecmds.c:2461 commands/tablecmds.c:14551 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "kan inte ärva från en temporär relation \"%s\"" -#: commands/tablecmds.c:2471 commands/tablecmds.c:14559 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "kan inte ärva från en temporär relation i en annan session" @@ -9385,7 +9414,7 @@ msgid "inherited column \"%s\" has a generation conflict" msgstr "ärvd kolumn \"%s\" har en genereringskonflikt" #: commands/tablecmds.c:2682 commands/tablecmds.c:2737 -#: commands/tablecmds.c:12114 parser/parse_utilcmd.c:1260 +#: commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 #: parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 #: parser/parse_utilcmd.c:1857 #, c-format @@ -9669,12 +9698,12 @@ msgstr "kan inte lägga till kolumn till typad tabell" msgid "cannot add column to a partition" msgstr "kan inte lägga till kolumn till partition" -#: commands/tablecmds.c:6657 commands/tablecmds.c:14802 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "barntabell \"%s\" har annan typ på kolumn \"%s\"" -#: commands/tablecmds.c:6663 commands/tablecmds.c:14809 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "barntabell \"%s\" har annan jämförelse (collation) på kolumn \"%s\"" @@ -9689,928 +9718,921 @@ msgstr "slår samman definitionen av kolumn \"%s\" för barn \"%s\"" msgid "cannot recursively add identity column to table that has child tables" msgstr "kan inte rekursivt lägga till identitetskolumn till tabell som har barntabeller" -#: commands/tablecmds.c:6967 +#: commands/tablecmds.c:7000 #, c-format msgid "column must be added to child tables too" msgstr "kolumnen måste läggas till i barntabellerna också" -#: commands/tablecmds.c:7045 +#: commands/tablecmds.c:7078 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "kolumn \"%s\" i relation \"%s\" finns redan, hoppar över" -#: commands/tablecmds.c:7052 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "kolumn \"%s\" i relation \"%s\" finns redan" -#: commands/tablecmds.c:7118 commands/tablecmds.c:11742 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "kan inte ta bort villkor från bara den partitionerade tabellen när partitioner finns" -#: commands/tablecmds.c:7119 commands/tablecmds.c:7436 -#: commands/tablecmds.c:8463 commands/tablecmds.c:11743 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 +#: commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Ange inte nyckelordet ONLY." -#: commands/tablecmds.c:7156 commands/tablecmds.c:7362 -#: commands/tablecmds.c:7504 commands/tablecmds.c:7618 -#: commands/tablecmds.c:7712 commands/tablecmds.c:7771 -#: commands/tablecmds.c:7889 commands/tablecmds.c:8055 -#: commands/tablecmds.c:8125 commands/tablecmds.c:8281 -#: commands/tablecmds.c:11897 commands/tablecmds.c:13412 -#: commands/tablecmds.c:15959 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 +#: commands/tablecmds.c:7537 commands/tablecmds.c:7651 +#: commands/tablecmds.c:7745 commands/tablecmds.c:7804 +#: commands/tablecmds.c:7922 commands/tablecmds.c:8088 +#: commands/tablecmds.c:8158 commands/tablecmds.c:8314 +#: commands/tablecmds.c:11917 commands/tablecmds.c:13455 +#: commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "kan inte ändra systemkolumn \"%s\"" -#: commands/tablecmds.c:7162 commands/tablecmds.c:7510 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "kolumn \"%s\" i relation \"%s\" är en identitetskolumn" -#: commands/tablecmds.c:7205 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "kolumn \"%s\" är del av en primärnyckel" -#: commands/tablecmds.c:7210 +#: commands/tablecmds.c:7243 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "kolumnen \"%s\" finns i ett index som används som replikaidentitet" -#: commands/tablecmds.c:7233 +#: commands/tablecmds.c:7266 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "kolumn \"%s\" är markerad NOT NULL i föräldratabellen" -#: commands/tablecmds.c:7433 commands/tablecmds.c:8946 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, c-format msgid "constraint must be added to child tables too" msgstr "villkoret måste läggas till i barntabellerna också" -#: commands/tablecmds.c:7434 +#: commands/tablecmds.c:7467 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Kolumn \"%s\" i relation \"%s\" är inte redan NOT NULL." -#: commands/tablecmds.c:7512 +#: commands/tablecmds.c:7545 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Använd ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY istället." -#: commands/tablecmds.c:7517 +#: commands/tablecmds.c:7550 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "kolumn \"%s\" i relation \"%s\" är en genererad kolumn" -#: commands/tablecmds.c:7520 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." msgstr "Använd ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION istället." -#: commands/tablecmds.c:7629 +#: commands/tablecmds.c:7662 #, c-format msgid "column \"%s\" of relation \"%s\" must be declared NOT NULL before identity can be added" msgstr "kolumn \"%s\" i relation \"%s\" måste deklareras NOT NULL innan identitet kan läggas till" -#: commands/tablecmds.c:7635 +#: commands/tablecmds.c:7668 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "kolumn \"%s\" i relation \"%s\" är redan en identitetskolumn" -#: commands/tablecmds.c:7641 +#: commands/tablecmds.c:7674 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "kolumn \"%s\" i relation \"%s\" har redan ett standardvärde" -#: commands/tablecmds.c:7718 commands/tablecmds.c:7779 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "kolumn \"%s\" i relation \"%s\" är inte en identitetkolumn" -#: commands/tablecmds.c:7784 +#: commands/tablecmds.c:7817 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "kolumn \"%s\" i relation \"%s\" är inte en identitetkolumn, hoppar över" -#: commands/tablecmds.c:7837 +#: commands/tablecmds.c:7870 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION måste appliceras på barntabellerna också" -#: commands/tablecmds.c:7859 +#: commands/tablecmds.c:7892 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "kan inte slänga genererat uttryck på ärvd kolumn" -#: commands/tablecmds.c:7897 +#: commands/tablecmds.c:7930 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "kolumn \"%s\" i relation \"%s\" är inte en lagrad genererad kolumn" -#: commands/tablecmds.c:7902 +#: commands/tablecmds.c:7935 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "kolumn \"%s\" i relation \"%s\" är inte en lagrad genererad kolumn, hoppar över" -#: commands/tablecmds.c:8002 +#: commands/tablecmds.c:8035 #, c-format msgid "cannot refer to non-index column by number" msgstr "kan inte referera per nummer till en icke-index-kolumn " -#: commands/tablecmds.c:8045 +#: commands/tablecmds.c:8078 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "kolumnnummer %d i relation \"%s\" finns inte" -#: commands/tablecmds.c:8064 +#: commands/tablecmds.c:8097 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "kan inte ändra statistik på inkluderad kolumn \"%s\" i index \"%s\"" -#: commands/tablecmds.c:8069 +#: commands/tablecmds.c:8102 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "kan inte ändra statistik på icke-villkorskolumn \"%s\" i index \"%s\"" -#: commands/tablecmds.c:8071 +#: commands/tablecmds.c:8104 #, c-format msgid "Alter statistics on table column instead." msgstr "Ändra statistik på tabellkolumn istället." -#: commands/tablecmds.c:8261 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "ogiltig lagringstyp \"%s\"" -#: commands/tablecmds.c:8293 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "kolumndatatyp %s kan bara ha lagringsmetod PLAIN" -#: commands/tablecmds.c:8338 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "kan inte ta bort kolumn från typad tabell" -#: commands/tablecmds.c:8401 +#: commands/tablecmds.c:8434 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "kolumn \"%s\" i relation \"%s\" finns inte, hoppar över" -#: commands/tablecmds.c:8414 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "kan inte ta bort systemkolumn \"%s\"" -#: commands/tablecmds.c:8424 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "kan inte ta bort ärvd kolumn \"%s\"" -#: commands/tablecmds.c:8437 +#: commands/tablecmds.c:8470 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "kan inte slänga kolumnen \"%s\" då den är del av partitionsnyckeln för relationen \"%s\"" -#: commands/tablecmds.c:8462 +#: commands/tablecmds.c:8495 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "kan inte slänga kolumn från bara den partitionerade tabellen när partitioner finns" -#: commands/tablecmds.c:8666 +#: commands/tablecmds.c:8699 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX is not supported on partitioned tables" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX stöds inte på partionerade tabeller" -#: commands/tablecmds.c:8691 +#: commands/tablecmds.c:8724 #, c-format msgid "ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index \"%s\" to \"%s\"" msgstr "ALTER TABLE / ADD CONSTRAINT USING INDEX kommer byta namn på index \"%s\" till \"%s\"" -#: commands/tablecmds.c:9026 +#: commands/tablecmds.c:9059 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "kan inte använda ONLY på främmande nyckel för partitionerad tabell \"%s\" som refererar till relationen \"%s\"" -#: commands/tablecmds.c:9032 +#: commands/tablecmds.c:9065 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "kan inte lägga till NOT VALID främmande nyckel till partitionerad tabell \"%s\" som refererar till relationen \"%s\"" -#: commands/tablecmds.c:9035 +#: commands/tablecmds.c:9068 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Denna finess stöds inte än på partitionerade tabeller." -#: commands/tablecmds.c:9042 commands/tablecmds.c:9447 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "refererad relation \"%s\" är inte en tabell" -#: commands/tablecmds.c:9065 +#: commands/tablecmds.c:9098 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "villkor på permanenta tabeller får bara referera till permanenta tabeller" -#: commands/tablecmds.c:9072 +#: commands/tablecmds.c:9105 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "villkor på ologgade tabeller får bara referera till permanenta eller ologgade tabeller" -#: commands/tablecmds.c:9078 +#: commands/tablecmds.c:9111 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "villkor på temporära tabeller får bara referera till temporära tabeller" -#: commands/tablecmds.c:9082 +#: commands/tablecmds.c:9115 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "villkor på temporära tabeller får bara ta med temporära tabeller från denna session" -#: commands/tablecmds.c:9148 commands/tablecmds.c:9154 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "ogiltig %s-aktion för främmande nyckelvillkor som innehåller genererad kolumn" -#: commands/tablecmds.c:9170 +#: commands/tablecmds.c:9203 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "antalet refererande och refererade kolumner för främmande nyckel stämmer ej överens" -#: commands/tablecmds.c:9277 +#: commands/tablecmds.c:9310 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "främmande nyckelvillkor \"%s\" kan inte implementeras" -#: commands/tablecmds.c:9279 +#: commands/tablecmds.c:9312 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Nyckelkolumner \"%s\" och \"%s\" har inkompatibla typer %s och %s." -#: commands/tablecmds.c:9642 commands/tablecmds.c:10072 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 #: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "främmande nyckel-villkor stöds inte för främmande tabeller" -#: commands/tablecmds.c:10055 +#: commands/tablecmds.c:10075 #, c-format msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" msgstr "kan inte ansluta tabell \"%s\" som en partition då den refereras av främmande nyckel \"%s\"" -#: commands/tablecmds.c:10525 commands/tablecmds.c:10806 -#: commands/tablecmds.c:11699 commands/tablecmds.c:11774 +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 +#: commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "villkor \"%s\" i relation \"%s\" finns inte" -#: commands/tablecmds.c:10532 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "villkor \"%s\" i relation \"%s\" är inte ett främmande nyckelvillkor" -#: commands/tablecmds.c:10570 +#: commands/tablecmds.c:10590 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "kan inte ändra villkoret \"%s\" i relation \"%s\"" -#: commands/tablecmds.c:10573 +#: commands/tablecmds.c:10593 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "Villkoret \"%s\" är härlett från villkoret \"%s\" i relation \"%s\"" -#: commands/tablecmds.c:10575 +#: commands/tablecmds.c:10595 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Du kan istället ändra på villkoret det är härlett från." -#: commands/tablecmds.c:10814 +#: commands/tablecmds.c:10834 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "villkor \"%s\" i relation \"%s\" är inte en främmande nyckel eller ett check-villkor" -#: commands/tablecmds.c:10892 +#: commands/tablecmds.c:10912 #, c-format msgid "constraint must be validated on child tables too" msgstr "villkoret måste valideras för barntabellerna också" -#: commands/tablecmds.c:10982 +#: commands/tablecmds.c:11002 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "kolumn \"%s\" som refereras till i främmande nyckelvillkor finns inte" -#: commands/tablecmds.c:10988 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "systemkolumner kan inte användas i främmande nycklar" -#: commands/tablecmds.c:10992 +#: commands/tablecmds.c:11012 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "kan inte ha mer än %d nycklar i en främmande nyckel" -#: commands/tablecmds.c:11057 +#: commands/tablecmds.c:11077 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "kan inte använda en \"deferrable\" primärnyckel för refererad tabell \"%s\"" -#: commands/tablecmds.c:11074 +#: commands/tablecmds.c:11094 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "det finns ingen primärnyckel för refererad tabell \"%s\"" -#: commands/tablecmds.c:11143 +#: commands/tablecmds.c:11163 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "främmande nyckel-refererade kolumnlistor får inte innehålla duplikat" -#: commands/tablecmds.c:11237 +#: commands/tablecmds.c:11257 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "kan inte använda ett \"deferrable\" unikt integritetsvillkor för refererad tabell \"%s\"" -#: commands/tablecmds.c:11242 +#: commands/tablecmds.c:11262 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "finns inget unique-villkor som matchar de givna nycklarna i den refererade tabellen \"%s\"" -#: commands/tablecmds.c:11655 +#: commands/tablecmds.c:11675 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "kan inte ta bort ärvt villkor \"%s\" i relation \"%s\"" -#: commands/tablecmds.c:11705 +#: commands/tablecmds.c:11725 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "villkor \"%s\" i relation \"%s\" finns inte, hoppar över" -#: commands/tablecmds.c:11881 +#: commands/tablecmds.c:11901 #, c-format msgid "cannot alter column type of typed table" msgstr "kan inte ändra kolumntyp på typad tabell" -#: commands/tablecmds.c:11907 +#: commands/tablecmds.c:11927 #, c-format msgid "cannot specify USING when altering type of generated column" msgstr "kan inte ange USING när man ändrar typ på en genererad kolumn" -#: commands/tablecmds.c:11908 commands/tablecmds.c:17005 -#: commands/tablecmds.c:17095 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:936 rewrite/rewriteHandler.c:971 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "Kolumnen \"%s\" är en genererad kolumn." - -#: commands/tablecmds.c:11918 +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "kan inte ändra ärvd kolumn \"%s\"" -#: commands/tablecmds.c:11927 +#: commands/tablecmds.c:11947 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "kan inte ändra kolumnen \"%s\" då den är del av partitionsnyckeln för relationen \"%s\"" -#: commands/tablecmds.c:11977 +#: commands/tablecmds.c:11997 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "resultatet av USING-klausul för kolumn \"%s\" kan inte automatiskt typomvandlas till typen %s" -#: commands/tablecmds.c:11980 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "Du kan behöva lägga till en explicit typomvandling." -#: commands/tablecmds.c:11984 +#: commands/tablecmds.c:12004 #, c-format msgid "column \"%s\" cannot be cast automatically to type %s" msgstr "kolumn \"%s\" kan inte automatiskt typomvandlas till typ %s" #. translator: USING is SQL, don't translate it -#: commands/tablecmds.c:11988 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Du kan behöva ange \"USING %s::%s\"." -#: commands/tablecmds.c:12087 +#: commands/tablecmds.c:12107 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "kan inte ändra ärvd kolumn \"%s\" i relation \"%s\"" -#: commands/tablecmds.c:12115 +#: commands/tablecmds.c:12135 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "USING-uttryck innehåller en hela-raden-tabellreferens." -#: commands/tablecmds.c:12126 +#: commands/tablecmds.c:12146 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "typen av den ärvda kolumnen \"%s\" måste ändras i barntabellerna också" -#: commands/tablecmds.c:12251 +#: commands/tablecmds.c:12271 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "kan inte ändra typen på kolumn \"%s\" två gånger" -#: commands/tablecmds.c:12289 +#: commands/tablecmds.c:12309 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "genereringsuttryck för kolumn \"%s\" kan inte automatiskt typomvandlas till typ %s" -#: commands/tablecmds.c:12294 +#: commands/tablecmds.c:12314 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "\"default\" för kolumn \"%s\" kan inte automatiskt typomvandlas till typ \"%s\"" -#: commands/tablecmds.c:12372 +#: commands/tablecmds.c:12392 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "kan inte ändra typ på en kolumn som används av en genererad kolumn" -#: commands/tablecmds.c:12373 +#: commands/tablecmds.c:12393 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Kolumn \"%s\" används av genererad kolumn \"%s\"." -#: commands/tablecmds.c:12401 +#: commands/tablecmds.c:12421 #, c-format msgid "cannot alter type of a column used by a function or procedure" msgstr "kan inte ändra typ på en kolumn som används av en funktion eller procedur" -#: commands/tablecmds.c:12402 commands/tablecmds.c:12416 -#: commands/tablecmds.c:12435 commands/tablecmds.c:12453 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 +#: commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s beror på kolumn \"%s\"" -#: commands/tablecmds.c:12415 +#: commands/tablecmds.c:12435 #, c-format msgid "cannot alter type of a column used by a view or rule" msgstr "kan inte ändra typ på en kolumn som används av en vy eller en regel" -#: commands/tablecmds.c:12434 +#: commands/tablecmds.c:12454 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "kan inte ändra typ på en kolumn som används i en triggerdefinition" -#: commands/tablecmds.c:12452 +#: commands/tablecmds.c:12472 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "kan inte ändra typ på en kolumn som används av i en policydefinition" -#: commands/tablecmds.c:13520 commands/tablecmds.c:13532 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "kan inte byta ägare på index \"%s\"" -#: commands/tablecmds.c:13522 commands/tablecmds.c:13534 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Byt ägare på indexets tabell istället." -#: commands/tablecmds.c:13548 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "kan inte byta ägare på sekvens \"%s\"" -#: commands/tablecmds.c:13562 commands/tablecmds.c:16861 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "Använd ALTER TYPE istället." -#: commands/tablecmds.c:13571 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\" är inte en tabell, vy, sekvens eller främmande tabell" -#: commands/tablecmds.c:13910 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "kan inte ha flera underkommandon SET TABLESPACE" -#: commands/tablecmds.c:13987 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy eller en TOAST-tabell" -#: commands/tablecmds.c:14020 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION stöds bara på automatiskt uppdateringsbara vyer" -#: commands/tablecmds.c:14273 +#: commands/tablecmds.c:14316 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "bara tabeller, index och materialiserade vyer finns i tablespace:er" -#: commands/tablecmds.c:14285 +#: commands/tablecmds.c:14328 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "kan inte flytta relationer in eller ut från tablespace pg_global" -#: commands/tablecmds.c:14377 +#: commands/tablecmds.c:14420 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "avbryter då lås på relation \"%s.%s\" inte är tillgängligt" -#: commands/tablecmds.c:14393 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr "inga matchande relationer i tablespace \"%s\" hittades" -#: commands/tablecmds.c:14510 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "kan inte ändra arv på en typad tabell" -#: commands/tablecmds.c:14515 commands/tablecmds.c:15071 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "kan inte ändra arv på en partition" -#: commands/tablecmds.c:14520 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "kan inte ändra arv på en partitionerad tabell" -#: commands/tablecmds.c:14566 +#: commands/tablecmds.c:14609 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "kan inte ärva av en temporär tabell för en annan session" -#: commands/tablecmds.c:14579 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "kan inte ärva från en partition" -#: commands/tablecmds.c:14601 commands/tablecmds.c:17507 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17560 #, c-format msgid "circular inheritance not allowed" msgstr "cirkulärt arv är inte tillåtet" -#: commands/tablecmds.c:14602 commands/tablecmds.c:17508 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17561 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" är redan ett barn till \"%s\"" -#: commands/tablecmds.c:14615 +#: commands/tablecmds.c:14658 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "trigger \"%s\" förhindrar tabell \"%s\" från att bli ett arvsbarn" -#: commands/tablecmds.c:14617 +#: commands/tablecmds.c:14660 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "ROW-triggrar med övergångstabeller stöds inte i arvshierarkier." -#: commands/tablecmds.c:14820 +#: commands/tablecmds.c:14863 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "kolumn \"%s\" i barntabell måste vara markerad NOT NULL" -#: commands/tablecmds.c:14829 +#: commands/tablecmds.c:14872 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "kolumn \"%s\" i barntabell måste vara en genererad kolumn" -#: commands/tablecmds.c:14879 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "kolumn \"%s\" i barntabell har ett motstridigt genereringsuttryck" -#: commands/tablecmds.c:14907 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "barntabell saknar kolumn \"%s\"" -#: commands/tablecmds.c:14995 +#: commands/tablecmds.c:15038 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "barntabell \"%s\" har annan definition av check-villkor \"%s\"" -#: commands/tablecmds.c:15003 +#: commands/tablecmds.c:15046 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "villkor \"%s\" står i konflikt med icke-ärvt villkor på barntabell \"%s\"" -#: commands/tablecmds.c:15014 +#: commands/tablecmds.c:15057 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "villkor \"%s\" står i konflikt med NOT VALID-villkor på barntabell \"%s\"" -#: commands/tablecmds.c:15049 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "barntabell saknar riktighetsvillkor \"%s\"" -#: commands/tablecmds.c:15135 +#: commands/tablecmds.c:15178 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "partition \"%s\" har redan en pågående bortkoppling i partitionerad tabell \"%s.%s\"" -#: commands/tablecmds.c:15164 commands/tablecmds.c:15212 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "relationen \"%s\" är inte partition av relationen \"%s\"" -#: commands/tablecmds.c:15218 +#: commands/tablecmds.c:15261 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "relationen \"%s\" är inte en förälder till relationen \"%s\"" -#: commands/tablecmds.c:15446 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "typade tabeller kan inte ärva" -#: commands/tablecmds.c:15476 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "tabell saknar kolumn \"%s\"" -#: commands/tablecmds.c:15487 +#: commands/tablecmds.c:15530 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "tabell har kolumn \"%s\" där typen kräver \"%s\"" -#: commands/tablecmds.c:15496 +#: commands/tablecmds.c:15539 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "tabell \"%s\" har annan typ på kolumn \"%s\"" -#: commands/tablecmds.c:15510 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "tabell har extra kolumn \"%s\"" -#: commands/tablecmds.c:15562 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" är inte en typad tabell" -#: commands/tablecmds.c:15736 +#: commands/tablecmds.c:15779 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "kan inte använda icke-unikt index \"%s\" som replikaidentitet" -#: commands/tablecmds.c:15742 +#: commands/tablecmds.c:15785 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "kan inte använda icke-immediate-index \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:15748 +#: commands/tablecmds.c:15791 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "kan inte använda uttrycksindex \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:15754 +#: commands/tablecmds.c:15797 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "kan inte använda partiellt index \"%s\" som replikaidentitiet" -#: commands/tablecmds.c:15771 +#: commands/tablecmds.c:15814 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "index \"%s\" kan inte användas som replikaidentitet då kolumn %d är en systemkolumn" -#: commands/tablecmds.c:15778 +#: commands/tablecmds.c:15821 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "index \"%s\" kan inte användas som replikaidentitet då kolumn \"%s\" kan vare null" -#: commands/tablecmds.c:16025 +#: commands/tablecmds.c:16068 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "kan inte ändra loggningsstatus för tabell \"%s\" då den är temporär" -#: commands/tablecmds.c:16049 +#: commands/tablecmds.c:16092 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "kan inte ändra tabell \"%s\" till ologgad då den är del av en publicering" -#: commands/tablecmds.c:16051 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Ologgade relatrioner kan inte replikeras." -#: commands/tablecmds.c:16096 +#: commands/tablecmds.c:16139 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "kunde inte ändra tabell \"%s\" till loggad då den refererar till ologgad tabell \"%s\"" -#: commands/tablecmds.c:16106 +#: commands/tablecmds.c:16149 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "kunde inte ändra tabell \"%s\" till ologgad då den refererar till loggad tabell \"%s\"" -#: commands/tablecmds.c:16164 +#: commands/tablecmds.c:16207 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "kan inte flytta en ägd sekvens till ett annan schema." -#: commands/tablecmds.c:16269 +#: commands/tablecmds.c:16312 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "relationen \"%s\" finns redan i schema \"%s\"" -#: commands/tablecmds.c:16844 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" är inte en composite-typ" -#: commands/tablecmds.c:16876 +#: commands/tablecmds.c:16919 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "\"%s\" är inte en tabell, vy, materialiserad vy, sekvens eller främmande tabell" -#: commands/tablecmds.c:16911 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "okänd partitioneringsstrategi \"%s\"" -#: commands/tablecmds.c:16919 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "kan inte använda list-partioneringsstrategi med mer än en kolumn" -#: commands/tablecmds.c:16985 +#: commands/tablecmds.c:17028 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "kolumn \"%s\" angiven i partitioneringsnyckel existerar inte" -#: commands/tablecmds.c:16993 +#: commands/tablecmds.c:17036 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "kan inte använda systemkolumn \"%s\" i partitioneringsnyckel" -#: commands/tablecmds.c:17004 commands/tablecmds.c:17094 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17126 #, c-format msgid "cannot use generated column in partition key" msgstr "kan inte använda genererad kolumn i partitioneringsnyckel" -#: commands/tablecmds.c:17077 +#: commands/tablecmds.c:17116 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "partitioneringsnyckeluttryck kan inte innehålla systemkolumnreferenser" -#: commands/tablecmds.c:17124 +#: commands/tablecmds.c:17177 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "funktioner i partitioneringsuttryck måste vara markerade IMMUTABLE" -#: commands/tablecmds.c:17133 +#: commands/tablecmds.c:17186 #, c-format msgid "cannot use constant expression as partition key" msgstr "kan inte använda konstant uttryck som partitioneringsnyckel" -#: commands/tablecmds.c:17154 +#: commands/tablecmds.c:17207 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "kunde inte lista vilken jämförelse (collation) som skulle användas för partitionsuttryck" -#: commands/tablecmds.c:17189 +#: commands/tablecmds.c:17242 #, c-format msgid "You must specify a hash operator class or define a default hash operator class for the data type." msgstr "Du måste ange en hash-operatorklass eller definiera en default hash-operatorklass för datatypen." -#: commands/tablecmds.c:17195 +#: commands/tablecmds.c:17248 #, c-format msgid "You must specify a btree operator class or define a default btree operator class for the data type." msgstr "Du måste ange en btree-operatorklass eller definiera en default btree-operatorklass för datatypen." -#: commands/tablecmds.c:17447 +#: commands/tablecmds.c:17500 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" är redan en partition" -#: commands/tablecmds.c:17453 +#: commands/tablecmds.c:17506 #, c-format msgid "cannot attach a typed table as partition" msgstr "kan inte ansluta en typad tabell som partition" -#: commands/tablecmds.c:17469 +#: commands/tablecmds.c:17522 #, c-format msgid "cannot attach inheritance child as partition" msgstr "kan inte ansluta ett arvsbarn som partition" -#: commands/tablecmds.c:17483 +#: commands/tablecmds.c:17536 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "kan inte ansluta en arvsförälder som partition" -#: commands/tablecmds.c:17517 +#: commands/tablecmds.c:17570 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "kan inte ansluta en temporär relation som partition till en permanent relation \"%s\"" -#: commands/tablecmds.c:17525 +#: commands/tablecmds.c:17578 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "kan inte ansluta en permanent relation som partition till en temporär relation \"%s\"" -#: commands/tablecmds.c:17533 +#: commands/tablecmds.c:17586 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "kan inte ansluta en partition från en temporär relation som tillhör en annan session" -#: commands/tablecmds.c:17540 +#: commands/tablecmds.c:17593 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "kan inte ansluta en temporär relation tillhörande en annan session som partition" -#: commands/tablecmds.c:17560 +#: commands/tablecmds.c:17613 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "tabell \"%s\" innehåller kolumn \"%s\" som inte finns i föräldern \"%s\"" -#: commands/tablecmds.c:17563 +#: commands/tablecmds.c:17616 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Den nya partitionen får bara innehålla kolumner som finns i föräldern." -#: commands/tablecmds.c:17575 +#: commands/tablecmds.c:17628 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "trigger \"%s\" förhindrar att tabell \"%s\" blir en partition" -#: commands/tablecmds.c:17577 commands/trigger.c:459 +#: commands/tablecmds.c:17630 commands/trigger.c:459 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "ROW-triggrar med övergångstabeller stöds inte för partitioner" -#: commands/tablecmds.c:17756 +#: commands/tablecmds.c:17809 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "kan inte ansluta främmande tabell \"%s\" som en partition till partitionerad tabell \"%s\"" -#: commands/tablecmds.c:17759 +#: commands/tablecmds.c:17812 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Partitionerad tabell \"%s\" innehåller unika index." -#: commands/tablecmds.c:18083 +#: commands/tablecmds.c:18137 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "kan inte parallellt koppla bort en partitionerad tabell när en default-partition finns" -#: commands/tablecmds.c:18192 +#: commands/tablecmds.c:18249 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "partitionerad tabell \"%s\" togs bort parallellt" -#: commands/tablecmds.c:18198 +#: commands/tablecmds.c:18255 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "partition \"%s\" togs bort parallellt" -#: commands/tablecmds.c:18722 commands/tablecmds.c:18742 -#: commands/tablecmds.c:18762 commands/tablecmds.c:18781 -#: commands/tablecmds.c:18823 +#: commands/tablecmds.c:18787 commands/tablecmds.c:18807 +#: commands/tablecmds.c:18827 commands/tablecmds.c:18846 +#: commands/tablecmds.c:18888 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "kan inte ansluta index \"%s\" som en partition till index \"%s\"" -#: commands/tablecmds.c:18725 +#: commands/tablecmds.c:18790 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Index \"%s\" är redan ansluten till ett annat index." -#: commands/tablecmds.c:18745 +#: commands/tablecmds.c:18810 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Index \"%s\" är inte ett index för någon partition av tabell \"%s\"." -#: commands/tablecmds.c:18765 +#: commands/tablecmds.c:18830 #, c-format msgid "The index definitions do not match." msgstr "Indexdefinitionerna matchar inte." -#: commands/tablecmds.c:18784 +#: commands/tablecmds.c:18849 #, c-format msgid "The index \"%s\" belongs to a constraint in table \"%s\" but no constraint exists for index \"%s\"." msgstr "Indexet \"%s\" tillhör ett villkor på tabell \"%s\" men det finns inga villkor för indexet \"%s\"." -#: commands/tablecmds.c:18826 +#: commands/tablecmds.c:18891 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "Ett annat index är redan anslutet för partition \"%s\"." -#: commands/tablecmds.c:19063 +#: commands/tablecmds.c:19128 #, c-format msgid "column data type %s does not support compression" msgstr "kolumndatatypen %s stöder inte komprimering" -#: commands/tablecmds.c:19070 +#: commands/tablecmds.c:19135 #, c-format msgid "invalid compression method \"%s\"" msgstr "ogiltig komprimeringsmetod \"%s\"" #: commands/tablespace.c:161 commands/tablespace.c:177 -#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1478 +#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1538 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" @@ -10709,8 +10731,8 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "katalogen \"%s\" används redan som ett tablespace" #: commands/tablespace.c:768 commands/tablespace.c:781 -#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3169 -#: storage/file/fd.c:3560 +#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 +#: storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "kunde inte ta bort katalog \"%s\": %m" @@ -10941,59 +10963,64 @@ msgstr "trigger \"%s\" för tabell \"%s\" finns inte" msgid "permission denied: \"%s\" is a system trigger" msgstr "rättighet saknas: \"%s\" är en systemtrigger" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "triggerfunktionen %u returnerade null-värde" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 -#: commands/trigger.c:3056 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 +#: commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "BEFORE STATEMENT-trigger kan inte returnera ett värde" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, c-format msgid "moving row to another partition during a BEFORE FOR EACH ROW trigger is not supported" msgstr "flytta en rad från en annan partition under en BEFORE FOR EACH ROW-trigger stöds inte" -#: commands/trigger.c:2356 +#: commands/trigger.c:2358 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Innan exekvering av triggern \"%s\" så var raden i partition \"%s.%s\"." -#: commands/trigger.c:3123 executor/nodeModifyTable.c:1314 -#: executor/nodeModifyTable.c:1388 executor/nodeModifyTable.c:1969 -#: executor/nodeModifyTable.c:2059 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 +#, c-format +msgid "cannot collect transition tuples from child foreign tables" +msgstr "kan inte samla in övergångstupler från främmande barntabeller" + +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 +#: executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 +#: executor/nodeModifyTable.c:2079 #, c-format msgid "Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows." msgstr "Överväg att använda en AFTER-trigger istället för en BEFORE-trigger för att propagera ändringar till andra rader." -#: commands/trigger.c:3152 executor/nodeLockRows.c:229 -#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:238 -#: executor/nodeModifyTable.c:1330 executor/nodeModifyTable.c:1986 -#: executor/nodeModifyTable.c:2232 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 +#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 +#: executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 +#: executor/nodeModifyTable.c:2252 #, c-format msgid "could not serialize access due to concurrent update" msgstr "kunde inte serialisera åtkomst på grund av samtidig uppdatering" -#: commands/trigger.c:3160 executor/nodeModifyTable.c:1420 -#: executor/nodeModifyTable.c:2076 executor/nodeModifyTable.c:2256 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 +#: executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2268 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "kunde inte serialisera åtkomst på grund av samtidig borttagning" -#: commands/trigger.c:4254 +#: commands/trigger.c:4284 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "kan inte trigga uppskjuten trigger i en säkerhetsbegränsad operation" -#: commands/trigger.c:5302 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "integritetsvillkor \"%s\" är inte \"deferrable\"" -#: commands/trigger.c:5325 +#: commands/trigger.c:5359 #, c-format msgid "constraint \"%s\" does not exist" msgstr "integritetsvillkor \"%s\" existerar inte" @@ -11460,7 +11487,7 @@ msgid "permission denied to create role" msgstr "rättighet saknas för att skapa roll" #: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 gram.y:15260 -#: gram.y:15305 utils/adt/acl.c:5248 utils/adt/acl.c:5254 +#: gram.y:15305 utils/adt/acl.c:5265 utils/adt/acl.c:5271 #, c-format msgid "role name \"%s\" is reserved" msgstr "rollnamnet \"%s\" är reserverat" @@ -11531,8 +11558,8 @@ msgstr "kan inte används speciell rollangivelse i DROP ROLE" #: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 #: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 -#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:755 +#: utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 +#: utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "rollen \"%s\" finns inte" @@ -11637,107 +11664,107 @@ msgstr "roll \"%s\" är redan en medlem i rollen \"%s\"" msgid "role \"%s\" is not a member of role \"%s\"" msgstr "roll \"%s\" är inte en medlem i rollen \"%s\"" -#: commands/vacuum.c:133 +#: commands/vacuum.c:134 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "okänd ANALYZE-flagga \"%s\"" -#: commands/vacuum.c:171 +#: commands/vacuum.c:172 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "parallell-flaggan kräver ett värde mellan 0 och %d" -#: commands/vacuum.c:183 +#: commands/vacuum.c:184 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "parallella arbetare för vacuum måste vara mellan 0 och %d" -#: commands/vacuum.c:200 +#: commands/vacuum.c:201 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "okänd VACUUM-flagga \"%s\"" -#: commands/vacuum.c:223 +#: commands/vacuum.c:224 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "'VACUUM FULL kan inte köras parallellt" -#: commands/vacuum.c:239 +#: commands/vacuum.c:240 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "ANALYZE-flaggan måste anges när en kolumnlista används" -#: commands/vacuum.c:329 +#: commands/vacuum.c:330 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s kan inte köras från VACUUM eller ANALYZE" -#: commands/vacuum.c:339 +#: commands/vacuum.c:340 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "VACUUM-flagga DISABLE_PAGE_SKIPPING kan inte anges med FULL" -#: commands/vacuum.c:346 +#: commands/vacuum.c:347 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "PROCESS_TOAST krävs med VACUUM FULL" -#: commands/vacuum.c:587 +#: commands/vacuum.c:597 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "hoppar över \"%s\" --- bara en superuser kan städa den" -#: commands/vacuum.c:591 +#: commands/vacuum.c:601 #, 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" -#: commands/vacuum.c:595 +#: commands/vacuum.c:605 #, 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" -#: commands/vacuum.c:610 +#: commands/vacuum.c:620 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "hoppar över \"%s\" --- bara superuser kan analysera den" -#: commands/vacuum.c:614 +#: commands/vacuum.c:624 #, 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" -#: commands/vacuum.c:618 +#: commands/vacuum.c:628 #, 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" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:707 commands/vacuum.c:803 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "hoppar över vacuum av \"%s\" --- lås ej tillgängligt" -#: commands/vacuum.c:702 +#: commands/vacuum.c:712 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "hoppar över vacuum av \"%s\" --- relationen finns inte längre" -#: commands/vacuum.c:718 commands/vacuum.c:798 +#: commands/vacuum.c:728 commands/vacuum.c:808 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "hoppar över analys av \"%s\" --- lås ej tillgängligt" -#: commands/vacuum.c:723 +#: commands/vacuum.c:733 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "hoppar över analys av \"%s\" --- relationen finns inte längre" -#: commands/vacuum.c:1041 +#: commands/vacuum.c:1051 #, c-format msgid "oldest xmin is far in the past" msgstr "äldsta xmin är från lång tid tillbaka" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1052 #, c-format msgid "" "Close open transactions soon to avoid wraparound problems.\n" @@ -11746,32 +11773,32 @@ msgstr "" "Stäng öppna transaktioner för att undvika problem med wraparound.\n" "Du kan också behöva commit:a eller rulla tillbaka gamla förberedda transaktiooner alternativt slänga stillastående replikeringsslottar." -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1093 #, c-format msgid "oldest multixact is far in the past" msgstr "äldsta multixact är från lång tid tillbaka" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1094 #, 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\"." -#: commands/vacuum.c:1769 +#: commands/vacuum.c:1779 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "några databaser har inte städats (vacuum) på över 2 miljarder transaktioner" -#: commands/vacuum.c:1770 +#: commands/vacuum.c:1780 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Du kan redan ha fått dataförlust på grund av transaktions-wraparound." -#: commands/vacuum.c:1938 +#: commands/vacuum.c:1961 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "hoppar över \"%s\" --- kan inte köra vacuum på icke-tabeller eller speciella systemtabeller" -#: commands/variable.c:165 tcop/postgres.c:3640 utils/misc/guc.c:11715 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 #: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." @@ -11981,8 +12008,8 @@ msgstr "hittade inget värde för parameter %d" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 #: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 #: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 -#: executor/nodeModifyTable.c:138 executor/nodeModifyTable.c:155 -#: executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, c-format msgid "table row type and query-specified row type do not match" msgstr "tabellens radtyp och frågans radtyp matchar inte" @@ -11992,18 +12019,18 @@ msgstr "tabellens radtyp och frågans radtyp matchar inte" msgid "Query has too many columns." msgstr "Fråga har för många kolumner." -#: executor/execExpr.c:644 executor/nodeModifyTable.c:156 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "Fråga levererar ett värde för en borttagen kolumn vid position %d." #: executor/execExpr.c:650 executor/execExprInterp.c:4063 -#: executor/nodeModifyTable.c:139 +#: executor/nodeModifyTable.c:174 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "Tabellen har typ %s vid position %d, men frågan förväntar sig %s." -#: executor/execExpr.c:1098 parser/parse_agg.c:828 +#: executor/execExpr.c:1098 parser/parse_agg.c:881 #, c-format msgid "window function calls cannot be nested" msgstr "fönsterfunktionanrop kan inte nästlas" @@ -12078,7 +12105,7 @@ msgstr "Array med elementtyp %s kan inte inkluderas i ARRAY-konstruktion med ele #: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 #: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 -#: utils/adt/arrayfuncs.c:5942 utils/adt/arraysubs.c:150 +#: utils/adt/arrayfuncs.c:5944 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" @@ -12095,8 +12122,8 @@ msgstr "flerdimensionella vektorer måste ha array-uttryck av passande dimension #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 #: utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 #: utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 -#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6034 -#: utils/adt/arrayfuncs.c:6375 utils/adt/arrayutils.c:88 +#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6036 +#: utils/adt/arrayfuncs.c:6377 utils/adt/arrayutils.c:88 #: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" @@ -12164,165 +12191,165 @@ msgstr "Nyckel %s står i konflilkt med existerande nyckel %s." msgid "Key conflicts with existing key." msgstr "Nyckel står i konflikt med existerande nyckel." -#: executor/execMain.c:1006 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "kan inte ändra sekvens \"%s\"" -#: executor/execMain.c:1012 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "kan inte ändra TOAST-relation \"%s\"" -#: executor/execMain.c:1030 rewrite/rewriteHandler.c:3141 -#: rewrite/rewriteHandler.c:3986 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3148 +#: rewrite/rewriteHandler.c:4010 #, c-format msgid "cannot insert into view \"%s\"" msgstr "kan inte sätta in i vy \"%s\"" -#: executor/execMain.c:1032 rewrite/rewriteHandler.c:3144 -#: rewrite/rewriteHandler.c:3989 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3151 +#: rewrite/rewriteHandler.c:4013 #, c-format 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." -#: executor/execMain.c:1038 rewrite/rewriteHandler.c:3149 -#: rewrite/rewriteHandler.c:3994 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3156 +#: rewrite/rewriteHandler.c:4018 #, c-format msgid "cannot update view \"%s\"" msgstr "kan inte uppdatera vy \"%s\"" -#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3152 -#: rewrite/rewriteHandler.c:3997 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:4021 #, c-format 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." -#: executor/execMain.c:1046 rewrite/rewriteHandler.c:3157 -#: rewrite/rewriteHandler.c:4002 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3164 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "cannot delete from view \"%s\"" msgstr "kan inte radera från vy \"%s\"" -#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3160 -#: rewrite/rewriteHandler.c:4005 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3167 +#: rewrite/rewriteHandler.c:4029 #, c-format 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." -#: executor/execMain.c:1059 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "kan inte ändra materialiserad vy \"%s\"" -#: executor/execMain.c:1071 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "kan inte sätta in i främmande tabell \"%s\"" -#: executor/execMain.c:1077 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "främmande tabell \"%s\" tillåter inte insättningar" -#: executor/execMain.c:1084 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "kan inte uppdatera främmande tabell \"%s\"" -#: executor/execMain.c:1090 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "främmande tabell \"%s\" tillåter inte uppdateringar" -#: executor/execMain.c:1097 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "kan inte radera från främmande tabell \"%s\"" -#: executor/execMain.c:1103 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "främmande tabell \"%s\" tillåter inte radering" -#: executor/execMain.c:1114 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "kan inte ändra relation \"%s\"" -#: executor/execMain.c:1141 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "kan inte låsa rader i sekvens \"%s\"" -#: executor/execMain.c:1148 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "kan inte låsa rader i TOAST-relation \"%s\"" -#: executor/execMain.c:1155 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "kan inte låsa rader i vy \"%s\"" -#: executor/execMain.c:1163 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "kan inte låsa rader i materialiserad vy \"%s\"" -#: executor/execMain.c:1172 executor/execMain.c:2591 +#: executor/execMain.c:1192 executor/execMain.c:2613 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "kan inte låsa rader i främmande tabell \"%s\"" -#: executor/execMain.c:1178 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "kan inte låsa rader i relation \"%s\"" -#: executor/execMain.c:1807 +#: executor/execMain.c:1827 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "ny rad för relation \"%s\" bryter mot partitionesvillkoret" -#: executor/execMain.c:1809 executor/execMain.c:1892 executor/execMain.c:1942 -#: executor/execMain.c:2051 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 +#: executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "Misslyckande rad innehåller %s." -#: executor/execMain.c:1889 +#: executor/execMain.c:1909 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "null-värde i kolumn \"%s\" i relation \"%s\" bryter mot not-null-villkoret" -#: executor/execMain.c:1940 +#: executor/execMain.c:1960 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "ny rad för relation \"%s\" bryter mot check-villkor \"%s\"" -#: executor/execMain.c:2049 +#: executor/execMain.c:2069 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "ny rad bryter mot check-villkor för vy \"%s\"" -#: executor/execMain.c:2059 +#: executor/execMain.c:2079 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "ny rad bryter mot radsäkerhetspolicy \"%s\" i tabell \"%s\"" -#: executor/execMain.c:2064 +#: executor/execMain.c:2084 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "ny rad bryter mot radsäkerhetspolicy i tabell \"%s\"" -#: executor/execMain.c:2071 +#: executor/execMain.c:2091 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "ny rad bryter mot radsäkerhetspolicy \"%s\" (USING-uttryck) i tabell \"%s\"" -#: executor/execMain.c:2076 +#: executor/execMain.c:2096 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "ny rad bryter mot radsäkerhetspolicy (USING-uttryck) i tabell \"%s\"" @@ -12352,10 +12379,10 @@ msgstr "samtidig uppdatering, försöker igen" msgid "concurrent delete, retrying" msgstr "samtidig borttagning, försöker igen" -#: executor/execReplication.c:277 parser/parse_cte.c:301 +#: executor/execReplication.c:277 parser/parse_cte.c:302 #: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 #: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 -#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6255 +#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6257 #: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" @@ -12538,7 +12565,7 @@ msgstr "returtyp %s stöds inte för SQL-funktioner" msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "oväntat EOF för band %d: efterfrågade %zu byte, läste %zu byte" -#: executor/nodeAgg.c:3979 parser/parse_agg.c:670 parser/parse_agg.c:698 +#: executor/nodeAgg.c:3979 parser/parse_agg.c:677 parser/parse_agg.c:720 #, c-format msgid "aggregate function calls cannot be nested" msgstr "aggregatfunktionsanrop kan inte nästlas" @@ -12590,30 +12617,35 @@ msgstr "FULL JOIN stöds bara med merge-joinbara join-villkor" #: executor/nodeModifyTable.c:164 #, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "Fråga levererar ett värde för en genererad kolumn vid position %d." + +#: executor/nodeModifyTable.c:184 +#, c-format msgid "Query has too few columns." msgstr "Frågan har för få kolumner" -#: executor/nodeModifyTable.c:1313 executor/nodeModifyTable.c:1387 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" msgstr "tupel som skall tas bort hade redan ändrats av en operation som triggats av aktuellt kommando" -#: executor/nodeModifyTable.c:1591 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "ogiltig ON UPDATE-angivelse" -#: executor/nodeModifyTable.c:1592 +#: executor/nodeModifyTable.c:1612 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Resultattupeln kommer dyka upp i en annan partition än originaltupeln." -#: executor/nodeModifyTable.c:2211 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "kommandot ON CONFLICT DO UPDATE kan inte påverka en rad en andra gång" -#: executor/nodeModifyTable.c:2212 +#: executor/nodeModifyTable.c:2232 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Säkerställ att inga rader föreslagna för \"insert\" inom samma kommando har upprepade villkorsvärden." @@ -12628,8 +12660,8 @@ msgstr "parametern TABLESAMPLE kan inte vara null" msgid "TABLESAMPLE REPEATABLE parameter cannot be null" msgstr "parametern TABLESAMPLE REPEATABLE kan inte vara null" -#: executor/nodeSubplan.c:325 executor/nodeSubplan.c:351 -#: executor/nodeSubplan.c:405 executor/nodeSubplan.c:1174 +#: executor/nodeSubplan.c:306 executor/nodeSubplan.c:332 +#: executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "mer än en rad returnerades från underfråga som används som uttryck" @@ -12735,7 +12767,7 @@ msgstr "kan inte öppna %s-fråga som markör" msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE stöds inte" -#: executor/spi.c:1730 parser/analyze.c:2864 +#: executor/spi.c:1730 parser/analyze.c:2865 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Scrollbara markörer måste vara READ ONLY." @@ -12776,7 +12808,7 @@ msgstr "kunde inte skicka tupel till kö i delat minne: %m" msgid "user mapping not found for \"%s\"" msgstr "användarmappning hittades inte för \"%s\"" -#: foreign/foreign.c:331 optimizer/plan/createplan.c:7047 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 #: optimizer/util/plancat.c:474 #, c-format msgid "access to non-system foreign table is restricted" @@ -13090,8 +13122,8 @@ msgstr "WITH TIES kan inte anges utan en ORDER BY-klausul" msgid "improper use of \"*\"" msgstr "felaktig användning av \"*\"" -#: gram.y:16630 gram.y:16647 tsearch/spell.c:983 tsearch/spell.c:1000 -#: tsearch/spell.c:1017 tsearch/spell.c:1034 tsearch/spell.c:1099 +#: gram.y:16630 gram.y:16647 tsearch/spell.c:984 tsearch/spell.c:1001 +#: tsearch/spell.c:1018 tsearch/spell.c:1035 tsearch/spell.c:1101 #, c-format msgid "syntax error" msgstr "syntaxfel" @@ -13437,565 +13469,565 @@ msgstr "Trasigt bevis i klient-slut-meddelande." msgid "Garbage found at the end of client-final-message." msgstr "Hittade skräp i slutet av klient-slut-meddelande." -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "autentisering misslyckades för användare \"%s\": host blockerad" -#: libpq/auth.c:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "\"trust\"-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Ident-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "Peer-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "Lösenordsautentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "GSSAPI-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "SSPI-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "PAM-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "BSD-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "LDAP-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "certifikat-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "RADOUS-autentisering misslyckades för användare \"%s\"" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "autentisering misslyckades för användare \"%s\": okänd autentiseringsmetod" -#: libpq/auth.c:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "Anslutning matched rad %d i pg_hba.conf: \"%s\"" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "identifierare för autentisering satt mer än en gång" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "föregående identifierare: \"%s\"; ny identifierare: \"%s\"" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "anslutning autentiserad: identitet=\"%s\" metod=%s (%s:%d)" -#: libpq/auth.c:420 +#: libpq/auth.c:428 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "klientcertifikat kan bara kontrolleras om lagrade root-certifikat finns tillgängligt" -#: libpq/auth.c:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "Anslutning kräver ett giltigt klientcertifikat" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "GSS-kryptering" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "SSL-kryptering" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "ingen kryptering" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, c-format msgid "pg_hba.conf rejects replication connection for host \"%s\", user \"%s\", %s" msgstr "pg_hba.conf avvisar replikeringsanslutning för värd \"%s\", användare \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:480 +#: libpq/auth.c:488 #, c-format msgid "pg_hba.conf rejects connection for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "pg_hba.conf avvisar anslutning för värd \"%s\", användare \"%s\", databas \"%s\", %s" -#: libpq/auth.c:518 +#: libpq/auth.c:526 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "Klient-IP-adress uppslagen till \"%s\", skickat uppslag matchar." -#: libpq/auth.c:521 +#: libpq/auth.c:529 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "Klient-IP-adress uppslagen till \"%s\", skickat uppslag är inte kontrollerat." -#: libpq/auth.c:524 +#: libpq/auth.c:532 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "Klient-IP-adress uppslagen till \"%s\", skickat uppslag matchar inte." -#: libpq/auth.c:527 +#: libpq/auth.c:535 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "Kunde inte översätta klientvärdnamn \"%s\" till IP-adress: %s" -#: libpq/auth.c:532 +#: libpq/auth.c:540 #, c-format msgid "Could not resolve client IP address to a host name: %s." msgstr "Kunde inte slå upp klient-IP-adress och få värdnamn: %s." #. translator: last %s describes encryption state -#: libpq/auth.c:540 +#: libpq/auth.c:548 #, c-format msgid "no pg_hba.conf entry for replication connection from host \"%s\", user \"%s\", %s" msgstr "ingen rad i pg_hba.conf för replikeringsanslutning från värd \"%s\", användare \"%s\", %s" #. translator: last %s describes encryption state -#: libpq/auth.c:548 +#: libpq/auth.c:556 #, c-format msgid "no pg_hba.conf entry for host \"%s\", user \"%s\", database \"%s\", %s" msgstr "ingen rad i pg_hba.conf för värd \"%s\", användare \"%s\", databas \"%s\", %s" -#: libpq/auth.c:721 +#: libpq/auth.c:729 #, c-format msgid "expected password response, got message type %d" msgstr "förväntade lösenordssvar, fick meddelandetyp %d" -#: libpq/auth.c:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "felaktig storlek på lösenordspaket" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "tomt lösenord returnerat av klient" -#: libpq/auth.c:885 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "MD5-autentisering stöds inte när \"db_user_namespace\" är påslaget" -#: libpq/auth.c:891 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "kunde inte generera slumpmässigt MD5-salt" -#: libpq/auth.c:957 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "förväntade SASL-svar, fick meddelandetyp %d" -#: libpq/auth.c:1086 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "kunde inte sätta omgivningsvariabel: %m" -#: libpq/auth.c:1122 +#: libpq/auth.c:1130 #, c-format msgid "expected GSS response, got message type %d" msgstr "förväntade GSS-svar, fick meddelandetyp %d" -#: libpq/auth.c:1182 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "accepterande av GSS-säkerhetskontext misslyckades" -#: libpq/auth.c:1223 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "mottagande av GSS-användarnamn misslyckades" -#: libpq/auth.c:1372 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "kunde inte hämta SSPI-referenser" -#: libpq/auth.c:1397 +#: libpq/auth.c:1405 #, c-format msgid "expected SSPI response, got message type %d" msgstr "förväntade SSPI-svar, fick meddelandetyp %d" -#: libpq/auth.c:1475 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "kunde inte acceptera SSPI-säkerhetskontext" -#: libpq/auth.c:1537 +#: libpq/auth.c:1545 msgid "could not get token from SSPI security context" msgstr "kunde inte hämta token från SSPI-säkerhetskontext" -#: libpq/auth.c:1676 libpq/auth.c:1695 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "kunde inte översätta namn" -#: libpq/auth.c:1708 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "realm-namn för långt" -#: libpq/auth.c:1723 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "översatt kontonamn för långt" -#: libpq/auth.c:1904 +#: libpq/auth.c:1912 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "kunde inte skapa uttag (socket) för Ident-anslutning: %m" -#: libpq/auth.c:1919 +#: libpq/auth.c:1927 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "kunde inte binda till lokal adress \"%s\": %m" -#: libpq/auth.c:1931 +#: libpq/auth.c:1939 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "kunde inte ansluta till Ident-server på adress \"%s\", port %s: %m" -#: libpq/auth.c:1953 +#: libpq/auth.c:1961 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "kunde inte skicka fråga till Ident-server på adress \"%s\", port %s: %m" -#: libpq/auth.c:1970 +#: libpq/auth.c:1978 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "kunde inte ta emot svar från Ident-server på adress \"%s\", port %s: %m" -#: libpq/auth.c:1980 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "ogiltigt formatterat svar från Ident-server: \"%s\"" -#: libpq/auth.c:2033 +#: libpq/auth.c:2041 #, c-format msgid "peer authentication is not supported on this platform" msgstr "peer-autentisering stöds inte på denna plattform" -#: libpq/auth.c:2037 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "kunde inte hämta peer-referenser: %m" -#: libpq/auth.c:2049 +#: libpq/auth.c:2057 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "kunde inte slå upp lokalt användar-id %ld: %s" -#: libpq/auth.c:2150 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "fel från underliggande PAM-lager: %s" -#: libpq/auth.c:2161 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "ej stödd PAM-konversation: %d/\"%s\"" -#: libpq/auth.c:2221 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "kunde inte skapa PAM-autentiserare: %s" -#: libpq/auth.c:2232 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "pam_set_item(PAM_USER) misslyckades: %s" -#: libpq/auth.c:2264 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "pam_set_item(PAM_RHOST) misslyckades: %s" -#: libpq/auth.c:2276 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "pam_set_item(PAM_CONV) misslyckades: %s" -#: libpq/auth.c:2289 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "pam_authenticate misslyckades: %s" -#: libpq/auth.c:2302 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "pam_acct_mgmt misslyckades: %s" -#: libpq/auth.c:2313 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "kunde inte fria PAM-autentiserare: %s" -#: libpq/auth.c:2393 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "kunde inte initiera LDAP: felkod %d" -#: libpq/auth.c:2430 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "kunde inte extrahera domännamn från ldapbasedn" -#: libpq/auth.c:2438 +#: libpq/auth.c:2446 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "LDAP-autentisering kunde inte hitta DNS SRV-poster för \"%s\"" -#: libpq/auth.c:2440 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Ange LDAP-servernamnet explicit." -#: libpq/auth.c:2492 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "kunde inte initiera LDAP: %s" -#: libpq/auth.c:2502 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "ldaps stöds inte med detta LDAP-bibliotek" -#: libpq/auth.c:2510 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "kunde inte initiera LDAP: %m" -#: libpq/auth.c:2520 +#: libpq/auth.c:2528 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "kunde inte sätta LDAP-protokollversion: %s" -#: libpq/auth.c:2560 +#: libpq/auth.c:2568 #, 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" -#: libpq/auth.c:2561 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "LDAP över SSL stöds inte på denna plattform" -#: libpq/auth.c:2577 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "kunde inte starta LDAP TLS-session: %s" -#: libpq/auth.c:2648 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "LDAP-server inte angiven och ingen ldapbasedn" -#: libpq/auth.c:2655 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "LDAP-server inte angiven" -#: libpq/auth.c:2717 +#: libpq/auth.c:2725 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "ogiltigt tecken i användarnamn för LDAP-autentisering" -#: libpq/auth.c:2734 +#: libpq/auth.c:2742 #, c-format msgid "could not perform initial LDAP bind for ldapbinddn \"%s\" on server \"%s\": %s" msgstr "kunde inte utföra initial LDAP-bindning med ldapbinddn \"%s\" på server \"%s\": %s" -#: libpq/auth.c:2763 +#: libpq/auth.c:2771 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "kunde inte söka i LDAP med filter \"%s\" på server \"%s\": %s" -#: libpq/auth.c:2777 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-användare \"%s\" finns inte" -#: libpq/auth.c:2778 +#: libpq/auth.c:2786 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-sökning med filter \"%s\" på server \"%s\" returnerade inga poster." -#: libpq/auth.c:2782 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-användare \"%s\" är inte unik" -#: libpq/auth.c:2783 +#: libpq/auth.c:2791 #, 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ökning med filter \"%s\" på server \"%s\" returnerade %d post." msgstr[1] "LDAP-sökning med filter \"%s\" på server \"%s\" returnerade %d poster." -#: libpq/auth.c:2803 +#: libpq/auth.c:2811 #, c-format msgid "could not get dn for the first entry matching \"%s\" on server \"%s\": %s" msgstr "kunde inte hämta dn för första posten som matchar \"%s\" på värd \"%s\": %s" -#: libpq/auth.c:2824 +#: libpq/auth.c:2832 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "kunde inte avbinda efter att ha sökt efter användare \"%s\" på värd \"%s\"" -#: libpq/auth.c:2855 +#: libpq/auth.c:2863 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "LDAP-inloggning misslyckades för användare \"%s\" på värd \"%s\": %s" -#: libpq/auth.c:2887 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "LDAP-diagnostik: %s" -#: libpq/auth.c:2925 +#: libpq/auth.c:2933 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "certifikatautentisering misslyckades för användare \"%s\": klientcertifikatet innehåller inget användarnamn" -#: libpq/auth.c:2946 +#: libpq/auth.c:2954 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "certifikat-autentisering misslyckades för användare \"%s\": kan inte hämta subject DN" -#: libpq/auth.c:2969 +#: libpq/auth.c:2977 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "certifikat-validering (clientcert=verify-full) misslyckades för användare \"%s\": DN matchade inte" -#: libpq/auth.c:2974 +#: libpq/auth.c:2982 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "certifikat-validering (clientcert=verify-full) misslyckades för användare \"%s\": CN matchade inte" -#: libpq/auth.c:3076 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-server inte angiven" -#: libpq/auth.c:3083 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "RADIUS-hemlighet inte angiven" -#: libpq/auth.c:3097 +#: libpq/auth.c:3105 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "RADIUS-autentisering stöder inte längre lösenord än %d tecken" -#: libpq/auth.c:3204 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "kunde inte översätta RADIUS-värdnamn \"%s\" till adress: %s" -#: libpq/auth.c:3218 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "kunde inte generera slumpad kodningsvektor" -#: libpq/auth.c:3252 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "kunde inte utföra MD5-kryptering av lösenord" -#: libpq/auth.c:3278 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "kunde inte skapa RADIUS-uttag (socket): %m" -#: libpq/auth.c:3300 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "kunde inte binda lokalt RADIUS-uttag (socket): %m" -#: libpq/auth.c:3310 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "kan inte skicka RADIUS-paketet: %m" -#: libpq/auth.c:3343 libpq/auth.c:3369 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "timeout vid väntande på RADIUS-svar från %s" -#: libpq/auth.c:3362 +#: libpq/auth.c:3370 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "kunde inte kontrollera status på RADIUS-uttag (socket): %m" -#: libpq/auth.c:3392 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "kunde inte läsa RADIUS-svar: %m" -#: libpq/auth.c:3405 libpq/auth.c:3409 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "RADIUS-svar från %s skickades från fel port: %d" -#: libpq/auth.c:3418 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "RADIUS-svar från %s är för kort: %d" -#: libpq/auth.c:3425 +#: libpq/auth.c:3433 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "RADIUS-svar från %s har felaktig längd: %d (riktig längd %d)" -#: libpq/auth.c:3433 +#: libpq/auth.c:3441 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "RADIUS-svar från %s tillhör en annan förfrågan: %d (skall vara %d)" -#: libpq/auth.c:3458 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "kunde inte utföra MD5-kryptering på mottaget paket" -#: libpq/auth.c:3467 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "RADIUS-svar från %s har inkorrekt MD5-signatur" -#: libpq/auth.c:3485 +#: libpq/auth.c:3493 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "RADIUS-svar från %s har ogiltig kod (%d) för användare \"%s\"" @@ -14100,44 +14132,39 @@ msgstr "privat nyckelfil \"%s\" har grupp eller världsaccess" 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 "Filen måste ha rättigheterna u=rw (0600) eller mindre om den ägs av databasanvändaren eller rättigheterna u=rw,g=r (0640) eller mindre om den ägs av root." -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:208 msgid "GSSAPI wrap error" msgstr "GSSAPI-fel vid inpackning" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "utående GSSAPI-meddelande skulle inte använda sekretess" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, c-format msgid "server tried to send oversize GSSAPI packet (%zu > %zu)" msgstr "servern försöke skicka för stort GSSAPI-paket (%zu > %zu)" -#: libpq/be-secure-gssapi.c:351 +#: libpq/be-secure-gssapi.c:358 libpq/be-secure-gssapi.c:580 #, c-format msgid "oversize GSSAPI packet sent by the client (%zu > %zu)" msgstr "för stort GSSAPI-paket skickat av klienten (%zu > %zu)" -#: libpq/be-secure-gssapi.c:389 +#: libpq/be-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "GSSAPI-fel vid uppackning" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "inkommande GSSAPI-meddelande använde inte sekretess" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "för stort GSSAPI-paket skickat av klienten (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "kunde inte acceptera GSSSPI-säkerhetskontext" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "GSSAPI-fel vid kontroll av storlek" @@ -14883,7 +14910,7 @@ msgstr "det finns ingen klientanslutning" msgid "could not receive data from client: %m" msgstr "kunde inte ta emot data från klient: %m" -#: libpq/pqcomm.c:1179 tcop/postgres.c:4409 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "stänger anslutning då protokollsynkroniseringen tappades" @@ -15245,14 +15272,14 @@ msgstr "utökningsbar nodtyp \"%s\" finns redan" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "ExtensibleNodeMethods \"%s\" har inte registerats" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "relationen \"%s\" har ingen composite-typ" #: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 #: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 -#: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 +#: parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 #: utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" @@ -15280,49 +15307,49 @@ 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:1316 parser/analyze.c:1720 parser/analyze.c:1976 -#: parser/analyze.c:3155 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 +#: parser/analyze.c:3156 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s tillåts inte med UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3630 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "kunde inte implementera GROUP BY" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3631 -#: optimizer/plan/planner.c:4388 optimizer/prep/prepunion.c:1045 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 +#: optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Några av datatyperna stöder bara hash:ning medan andra bara stöder sortering." -#: optimizer/plan/planner.c:4387 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "kunde inte implementera DISTINCT" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "kunde inte implementera fönster-PARTITION BY" -#: optimizer/plan/planner.c:5236 +#: optimizer/plan/planner.c:5266 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Fönsterpartitioneringskolumner måsta ha en sorterbar datatyp." -#: optimizer/plan/planner.c:5240 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "kunde inte implementera fönster-ORDER BY" -#: optimizer/plan/planner.c:5241 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Fönsterordningskolumner måste ha en sorterbar datatyp." -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "för många element i \"range table\"" @@ -15358,22 +15385,22 @@ msgstr "kan inte öppna relationen \"%s\"" 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:702 +#: optimizer/util/plancat.c:707 #, 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:719 +#: optimizer/util/plancat.c:724 #, 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:769 +#: optimizer/util/plancat.c:774 #, 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:879 +#: optimizer/util/plancat.c:884 #, 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" @@ -15404,7 +15431,7 @@ 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:1623 parser/analyze.c:3366 +#: parser/analyze.c:1623 parser/analyze.c:3367 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s kan inte appliceras på VÄRDEN" @@ -15457,455 +15484,465 @@ 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:2814 parser/analyze.c:2822 +#: parser/analyze.c:2815 parser/analyze.c:2823 #, c-format msgid "cannot specify both %s and %s" msgstr "kan inte ange både %s och %s" -#: parser/analyze.c:2842 +#: parser/analyze.c:2843 #, 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:2850 +#: parser/analyze.c:2851 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s stöds inte" -#: parser/analyze.c:2853 +#: parser/analyze.c:2854 #, 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:2861 +#: parser/analyze.c:2862 #, 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:2872 +#: parser/analyze.c:2873 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s är inte giltig" -#: parser/analyze.c:2875 +#: parser/analyze.c:2876 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Okänsliga markörer måste vara READ ONLY." -#: parser/analyze.c:2941 +#: parser/analyze.c:2942 #, 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:2951 +#: parser/analyze.c:2952 #, 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:2961 +#: parser/analyze.c:2962 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "materialiserade vyer kan inte defineras med bundna parametrar" -#: parser/analyze.c:2973 +#: parser/analyze.c:2974 #, 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:3162 +#: parser/analyze.c:3163 #, 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:3169 +#: parser/analyze.c:3170 #, 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:3176 +#: parser/analyze.c:3177 #, 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:3183 +#: parser/analyze.c:3184 #, 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:3190 +#: parser/analyze.c:3191 #, 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:3197 +#: parser/analyze.c:3198 #, 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:3289 +#: parser/analyze.c:3290 #, 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:3339 +#: parser/analyze.c:3340 #, 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:3348 +#: parser/analyze.c:3349 #, 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:3357 +#: parser/analyze.c:3358 #, 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:3375 +#: parser/analyze.c:3376 #, 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:3384 +#: parser/analyze.c:3385 #, 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:3404 +#: parser/analyze.c:3405 #, 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:208 parser/parse_oper.c:227 +#: parser/parse_agg.c:211 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" -msgstr "kunde inte identifiera en jämförelseoperator för typ %s" +msgstr "kunde inte hitta en ordningsoperator för typ %s" -#: parser/parse_agg.c:210 +#: parser/parse_agg.c:213 #, 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:268 +#: parser/parse_agg.c:271 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING måste ha färre än 32 argument" -#: parser/parse_agg.c:371 +#: parser/parse_agg.c:375 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "aggregatfunktioner tillåts inte i JOIN-villkor" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:377 msgid "grouping operations are not allowed in JOIN conditions" msgstr "gruppoperationer tillåts inte i JOIN-villkor" -#: parser/parse_agg.c:383 +#: parser/parse_agg.c:387 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:385 +#: parser/parse_agg.c:389 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:390 +#: parser/parse_agg.c:394 msgid "aggregate functions are not allowed in functions in FROM" msgstr "aggregatfunktioner tillåts inte i funktioner i FROM" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:396 msgid "grouping operations are not allowed in functions in FROM" msgstr "gruppoperationer tillåts inte i funktioner i FROM" -#: parser/parse_agg.c:400 +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in policy expressions" msgstr "aggregatfunktioner tillåts inte i policyuttryck" -#: parser/parse_agg.c:402 +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in policy expressions" msgstr "gruppoperationer tillåts inte i policyuttryck" -#: parser/parse_agg.c:419 +#: parser/parse_agg.c:423 msgid "aggregate functions are not allowed in window RANGE" msgstr "aggregatfunktioner tillåts inte i fönster-RANGE" -#: parser/parse_agg.c:421 +#: parser/parse_agg.c:425 msgid "grouping operations are not allowed in window RANGE" msgstr "grupperingsoperationer tillåts inte i fönster-RANGE" -#: parser/parse_agg.c:426 +#: parser/parse_agg.c:430 msgid "aggregate functions are not allowed in window ROWS" msgstr "aggregatfunktioner tillåts inte i fönster-RADER" -#: parser/parse_agg.c:428 +#: parser/parse_agg.c:432 msgid "grouping operations are not allowed in window ROWS" msgstr "grupperingsfunktioner tillåts inte i fönster-RADER" -#: parser/parse_agg.c:433 +#: parser/parse_agg.c:437 msgid "aggregate functions are not allowed in window GROUPS" msgstr "aggregatfunktioner tillåts inte i fönster-GROUPS" -#: parser/parse_agg.c:435 +#: parser/parse_agg.c:439 msgid "grouping operations are not allowed in window GROUPS" msgstr "grupperingsfunktioner tillåts inte i fönster-GROUPS" -#: parser/parse_agg.c:469 +#: parser/parse_agg.c:473 msgid "aggregate functions are not allowed in check constraints" msgstr "aggregatfunktioner tillåts inte i check-villkor" -#: parser/parse_agg.c:471 +#: parser/parse_agg.c:475 msgid "grouping operations are not allowed in check constraints" msgstr "gruppoperationer tillåts inte i check-villkor" -#: parser/parse_agg.c:478 +#: parser/parse_agg.c:482 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "aggregatfunktioner tillåts inte i DEFAULT-uttryck" -#: parser/parse_agg.c:480 +#: parser/parse_agg.c:484 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "grupperingsoperationer tillåts inte i DEFAULT-uttryck" -#: parser/parse_agg.c:485 +#: parser/parse_agg.c:489 msgid "aggregate functions are not allowed in index expressions" msgstr "aggregatfunktioner tillåts inte i indexuttryck" -#: parser/parse_agg.c:487 +#: parser/parse_agg.c:491 msgid "grouping operations are not allowed in index expressions" msgstr "gruppoperationer tillåts inte i indexuttryck" -#: parser/parse_agg.c:492 +#: parser/parse_agg.c:496 msgid "aggregate functions are not allowed in index predicates" msgstr "aggregatfunktionsanrop tillåts inte i indexpredikat" -#: parser/parse_agg.c:494 +#: parser/parse_agg.c:498 msgid "grouping operations are not allowed in index predicates" msgstr "gruppoperationer tillåts inte i indexpredikat" -#: parser/parse_agg.c:499 +#: parser/parse_agg.c:503 msgid "aggregate functions are not allowed in statistics expressions" msgstr "aggregatfunktioner tillåts inte i statistikuttryck" -#: parser/parse_agg.c:501 +#: parser/parse_agg.c:505 msgid "grouping operations are not allowed in statistics expressions" msgstr "gruppoperationer tillåts inte i statistikuttryck" -#: parser/parse_agg.c:506 +#: parser/parse_agg.c:510 msgid "aggregate functions are not allowed in transform expressions" msgstr "aggregatfunktioner tillåts inte i transform-uttryck" -#: parser/parse_agg.c:508 +#: parser/parse_agg.c:512 msgid "grouping operations are not allowed in transform expressions" msgstr "gruppoperationer tillåts inte i transforme-uttryck" -#: parser/parse_agg.c:513 +#: parser/parse_agg.c:517 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "aggregatfunktioner tillåts inte i EXECUTE-parametrar" -#: parser/parse_agg.c:515 +#: parser/parse_agg.c:519 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "gruppoperationer tillåts inte i EXECUTE-parametrar" -#: parser/parse_agg.c:520 +#: parser/parse_agg.c:524 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "aggregatfunktioner tillåts inte i WHEN-villkor" -#: parser/parse_agg.c:522 +#: parser/parse_agg.c:526 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "gruppoperationer tillåts inte i WHEN-villkor" -#: parser/parse_agg.c:527 +#: parser/parse_agg.c:531 msgid "aggregate functions are not allowed in partition bound" msgstr "aggregatfunktioner tillåts inte i partitionsgräns" -#: parser/parse_agg.c:529 +#: parser/parse_agg.c:533 msgid "grouping operations are not allowed in partition bound" msgstr "gruppoperationer tillåts inte i partitionsgräns" -#: parser/parse_agg.c:534 +#: parser/parse_agg.c:538 msgid "aggregate functions are not allowed in partition key expressions" msgstr "aggregatfunktioner tillåts inte i partitionsnyckeluttryck" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:540 msgid "grouping operations are not allowed in partition key expressions" msgstr "gruppoperationer tillåts inte i partitionsnyckeluttryck" -#: parser/parse_agg.c:542 +#: parser/parse_agg.c:546 msgid "aggregate functions are not allowed in column generation expressions" msgstr "aggregatfunktioner tillåts inte i kolumngenereringsuttryck" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:548 msgid "grouping operations are not allowed in column generation expressions" msgstr "gruppoperationer tillåts inte i kolumngenereringsuttryck" -#: parser/parse_agg.c:550 +#: parser/parse_agg.c:554 msgid "aggregate functions are not allowed in CALL arguments" msgstr "aggregatfunktioner tillåts inte i CALL-argument" -#: parser/parse_agg.c:552 +#: parser/parse_agg.c:556 msgid "grouping operations are not allowed in CALL arguments" msgstr "gruppoperationer tillåts inte i CALL-argument" -#: parser/parse_agg.c:558 +#: parser/parse_agg.c:562 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:560 +#: parser/parse_agg.c:564 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:587 parser/parse_clause.c:1834 +#: parser/parse_agg.c:591 parser/parse_clause.c:1834 #, 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:590 +#: parser/parse_agg.c:594 #, c-format msgid "grouping operations are not allowed in %s" msgstr "gruppoperationer tillåts inte i %s" -#: parser/parse_agg.c:691 +#: parser/parse_agg.c:690 parser/parse_agg.c:727 +#, c-format +msgid "outer-level aggregate cannot use a nested CTE" +msgstr "aggregat på yttre nivå kan inte använda en nästlad CTE" + +#: parser/parse_agg.c:691 parser/parse_agg.c:728 +#, c-format +msgid "CTE \"%s\" is below the aggregate's semantic level." +msgstr "CTE \"%s\" är under aggregatets semantiska nivå." + +#: parser/parse_agg.c:713 #, 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:769 +#: parser/parse_agg.c:798 #, 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:770 parser/parse_expr.c:1678 parser/parse_expr.c:2159 +#: parser/parse_agg.c:799 parser/parse_expr.c:1678 parser/parse_expr.c:2167 #: parser/parse_func.c:883 #, 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:775 +#: parser/parse_agg.c:804 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "aggregatfunktionsanrop kan inte innehålla fönsterfunktionanrop" -#: parser/parse_agg.c:854 +#: parser/parse_agg.c:907 msgid "window functions are not allowed in JOIN conditions" msgstr "fönsterfunktioner tillåts inte i JOIN-villkor" -#: parser/parse_agg.c:861 +#: parser/parse_agg.c:914 msgid "window functions are not allowed in functions in FROM" msgstr "fönsterfunktioner tillåts inte i funktioner i FROM" -#: parser/parse_agg.c:867 +#: parser/parse_agg.c:920 msgid "window functions are not allowed in policy expressions" msgstr "fönsterfunktioner tillåts inte i policy-uttryck" -#: parser/parse_agg.c:880 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in window definitions" msgstr "fönsterfunktioner tillåts inte i fönsterdefinitioner" -#: parser/parse_agg.c:912 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in check constraints" msgstr "fönsterfunktioner tillåts inte i check-villkor" -#: parser/parse_agg.c:916 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in DEFAULT expressions" msgstr "fönsterfunktioner tillåts inte i DEFAULT-uttryck" -#: parser/parse_agg.c:919 +#: parser/parse_agg.c:972 msgid "window functions are not allowed in index expressions" msgstr "fönsterfunktioner tillåts inte i indexuttryck" -#: parser/parse_agg.c:922 +#: parser/parse_agg.c:975 msgid "window functions are not allowed in statistics expressions" msgstr "fönsterfunktioner tillåts inte i statistikuttryck" -#: parser/parse_agg.c:925 +#: parser/parse_agg.c:978 msgid "window functions are not allowed in index predicates" msgstr "fönsterfunktioner tillåts inte i indexpredikat" -#: parser/parse_agg.c:928 +#: parser/parse_agg.c:981 msgid "window functions are not allowed in transform expressions" msgstr "fönsterfunktioner tillåts inte i transform-uttrycket" -#: parser/parse_agg.c:931 +#: parser/parse_agg.c:984 msgid "window functions are not allowed in EXECUTE parameters" msgstr "fönsterfunktioner tillåts inte i EXECUTE-parametrar" -#: parser/parse_agg.c:934 +#: parser/parse_agg.c:987 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "fönsterfunktioner tillåts inte i WHEN-villkor" -#: parser/parse_agg.c:937 +#: parser/parse_agg.c:990 msgid "window functions are not allowed in partition bound" msgstr "fönsterfunktioner tillåts inte i partitiongräns" -#: parser/parse_agg.c:940 +#: parser/parse_agg.c:993 msgid "window functions are not allowed in partition key expressions" msgstr "fönsterfunktioner tillåts inte i partitionsnyckeluttryck" -#: parser/parse_agg.c:943 +#: parser/parse_agg.c:996 msgid "window functions are not allowed in CALL arguments" msgstr "fönsterfunktioner tillåts inte i CALL-argument" -#: parser/parse_agg.c:946 +#: parser/parse_agg.c:999 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:949 +#: parser/parse_agg.c:1002 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:972 parser/parse_clause.c:1843 +#: parser/parse_agg.c:1025 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "fönsterfunktioner tillåts inte i %s" -#: parser/parse_agg.c:1006 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1059 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "fönster \"%s\" finns inte" -#: parser/parse_agg.c:1090 +#: parser/parse_agg.c:1143 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "för många grupperingsmängder (maximalt 4096)" -#: parser/parse_agg.c:1230 +#: parser/parse_agg.c:1283 #, 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:1423 +#: parser/parse_agg.c:1476 #, 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:1426 +#: parser/parse_agg.c:1479 #, 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:1431 +#: parser/parse_agg.c:1484 #, 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:1595 +#: parser/parse_agg.c:1648 #, 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" @@ -16149,12 +16186,12 @@ msgstr "ON CONFLICT stöds inte på tabell \"%s\" som används som katalogtabell #: parser/parse_clause.c:3334 #, c-format msgid "operator %s is not a valid ordering operator" -msgstr "operator %s är inte en giltig sorteringsoperator" +msgstr "operator %s är inte en giltig ordningsoperator" #: parser/parse_clause.c:3336 #, c-format msgid "Ordering operators must be \"<\" or \">\" members of btree operator families." -msgstr "Sorteringsoperationer måste vara \"<\"- eller \">\"-medlemmar i btree-operatorfamiljer." +msgstr "Ordningspperationer måste vara \"<\"- eller \">\"-medlemmar i btree-operatorfamiljer." #: parser/parse_clause.c:3647 #, c-format @@ -16183,7 +16220,7 @@ 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:2060 parser/parse_expr.c:2662 parser/parse_target.c:1008 +#: parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "kan inte omvandla typ %s till %s" @@ -16378,147 +16415,147 @@ 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:136 +#: parser/parse_cte.c:137 #, 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:307 +#: 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:334 +#: 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:383 +#: 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:389 +#: 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:394 +#: 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:398 +#: 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:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "WITH-fråga är inte rekursiv" -#: parser/parse_cte.c:450 +#: 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:455 +#: 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:470 +#: 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:477 +#: 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:486 +#: 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:503 +#: 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:510 +#: 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:519 +#: 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:526 +#: 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:534 +#: 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:544 +#: 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:551 +#: 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:635 +#: 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:815 +#: parser/parse_cte.c:868 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "ömsesidig rekursion mellan WITH-poster är inte implementerat" -#: parser/parse_cte.c:867 +#: parser/parse_cte.c:920 #, 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:875 +#: parser/parse_cte.c:928 #, 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:910 +#: parser/parse_cte.c:963 #, 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:916 +#: parser/parse_cte.c:969 #, 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:922 +#: parser/parse_cte.c:975 #, 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:928 +#: parser/parse_cte.c:981 #, 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:1007 +#: parser/parse_cte.c:1060 #, 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" @@ -16580,7 +16617,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF kräver att =-operatorn returnerar boolean" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%s får inte returnera en mängd" @@ -16596,7 +16633,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex 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:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "mängdreturnerande funktioner tillåts inte i %s" @@ -16668,82 +16705,82 @@ msgstr "underfråga har för många kolumner" msgid "subquery has too few columns" msgstr "underfråga har för få kolumner" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, c-format msgid "cannot determine type of empty array" msgstr "kan inte bestämma typen av en tom array" -#: parser/parse_expr.c:2001 +#: parser/parse_expr.c:2009 #, 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:2015 +#: parser/parse_expr.c:2023 #, 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:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW-uttryck kan ha som mest %d poster" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, 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:2304 +#: parser/parse_expr.c:2312 #, 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:2319 +#: parser/parse_expr.c:2327 #, 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:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "kan inte typomvandla XMLSERIALIZE-resultat till %s" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "olika antal element i raduttryck" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "kan inte jämföra rader med längden noll" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, 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:2777 +#: parser/parse_expr.c:2785 #, 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:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, 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:2838 +#: parser/parse_expr.c:2846 #, 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:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Det finns flera lika sannolika kandidater." -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM kräver att operatorn = ger tillbaka en boolean" @@ -17684,22 +17721,22 @@ msgstr "FROM måste ge exakt ett värde per partitionerande kolumn" 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:4240 +#: parser/parse_utilcmd.c:4242 #, c-format msgid "cannot specify NULL in range bound" msgstr "kan inte ange NULL i range-gräns" -#: parser/parse_utilcmd.c:4289 +#: parser/parse_utilcmd.c:4290 #, 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:4296 +#: parser/parse_utilcmd.c:4297 #, 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:4339 +#: parser/parse_utilcmd.c:4340 #, 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\"" @@ -17805,7 +17842,7 @@ msgid "column %d of the partition key has type \"%s\", but supplied value is of 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:678 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "kunde inte göra stat() på datakatalog \"%s\": %m" @@ -17877,24 +17914,24 @@ msgstr "redan existerande delat minnesblock (nyckel %lu, ID %lu) används fortfa 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:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "kan inte skapa semafor: %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, 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:129 +#: port/sysv_sema.c:144 #, 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 "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:159 +#: port/sysv_sema.c:174 #, 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." @@ -18034,27 +18071,27 @@ msgstr "kunde inte starta autovacuum-arbetsprocess: %m" msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "autovacuum: slänger övergiven temptabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2548 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "automatisk vacuum av tabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2551 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "automatisk analys av tabell \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2744 +#: postmaster/autovacuum.c:2754 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "processar arbetspost för relation \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3430 +#: postmaster/autovacuum.c:3440 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "autovacuum har inte startats på grund av en felkonfigurering" -#: postmaster/autovacuum.c:3431 +#: postmaster/autovacuum.c:3441 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Slå på flaggan \"track_counts\"." @@ -18084,7 +18121,7 @@ msgstr "bakgrundsarbetare \"%s\": ogiltigt omstartsintervall" 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:723 tcop/postgres.c:3229 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "terminerar bakgrundsarbetare \"%s\" pga administratörskommando" @@ -18116,24 +18153,24 @@ msgstr[1] "Upp till %d bakgrundsarbetare kan registreras med nuvarande inställn msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Överväg att öka konfigurationsparametern \"max_worker_processes\"." -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, 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:432 +#: 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:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "checkpoint-behgäran misslyckades" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Se senaste meddelanden i serverloggen för mer information." @@ -18174,7 +18211,7 @@ msgstr "Det misslyckade arkiveringskommandot var: %s" msgid "archive command was terminated by exception 0x%X" msgstr "arkiveringskommandot terminerades med avbrott 0x%X" -#: postmaster/pgarch.c:597 postmaster/postmaster.c:3759 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3761 #, 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." @@ -18366,103 +18403,103 @@ msgstr "WAL-strömning (max_wal_senders > 0) kräver wal_level \"replica\" eller msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: ogiltiga datumtokentabeller, det behöver lagas\n" -#: postmaster/postmaster.c:1052 +#: postmaster/postmaster.c:1054 #, 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:1128 +#: postmaster/postmaster.c:1130 #, c-format msgid "ending log output to stderr" msgstr "avslutar loggutmatning till stderr" -#: postmaster/postmaster.c:1129 +#: postmaster/postmaster.c:1131 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "Framtida loggutmatning kommer gå till logg-destination \"%s\"." -#: postmaster/postmaster.c:1140 +#: postmaster/postmaster.c:1142 #, c-format msgid "starting %s" msgstr "startar %s" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 +#: postmaster/postmaster.c:1163 postmaster/postmaster.c:1262 #: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "ogiltigt listsyntax för parameter \"%s\"" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1194 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "kunde inte skapa lyssnande uttag (socket) för \"%s\"" -#: postmaster/postmaster.c:1198 +#: postmaster/postmaster.c:1200 #, c-format msgid "could not create any TCP/IP sockets" msgstr "kunde inte skapa TCP/IP-uttag (socket)" -#: postmaster/postmaster.c:1230 +#: postmaster/postmaster.c:1232 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "DNSServiceRegister() misslyckades: felkod %ld" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1284 #, 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:1288 +#: postmaster/postmaster.c:1290 #, c-format msgid "could not create any Unix-domain sockets" msgstr "kunde inte skapa något Unix-domän-uttag (socket)" -#: postmaster/postmaster.c:1300 +#: postmaster/postmaster.c:1302 #, c-format msgid "no socket created for listening" msgstr "inget uttag (socket) skapat för lyssnande" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1333 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: kunde inte ändra rättigheter på extern PID-fil \"%s\": %s\n" -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1337 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: kunde inte skriva extern PID-fil \"%s\": %s\n" -#: postmaster/postmaster.c:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1370 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "kunde inte ladda pg_hba.conf" -#: postmaster/postmaster.c:1396 +#: postmaster/postmaster.c:1398 #, c-format msgid "postmaster became multithreaded during startup" msgstr "postmaster blev flertrådad under uppstart" -#: postmaster/postmaster.c:1397 postmaster/postmaster.c:5148 +#: postmaster/postmaster.c:1399 postmaster/postmaster.c:5150 #, 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:1492 +#: postmaster/postmaster.c:1494 #, 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:1499 +#: postmaster/postmaster.c:1501 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: kunde inte hitta matchande postgres-binär" -#: postmaster/postmaster.c:1522 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1524 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Detta tyder på en inkomplett PostgreSQL-installation alternativt att filen \"%s\" har flyttats bort från sin korrekta plats." -#: postmaster/postmaster.c:1549 +#: postmaster/postmaster.c:1551 #, c-format msgid "" "%s: could not find the database system\n" @@ -18473,476 +18510,476 @@ msgstr "" "Förväntade mig att hitta det i katalogen \"%s\",\n" "men kunde inte öppna filen \"%s\": %s\n" -#: postmaster/postmaster.c:1726 +#: postmaster/postmaster.c:1728 #, c-format msgid "select() failed in postmaster: %m" msgstr "select() misslyckades i postmaster: %m" -#: postmaster/postmaster.c:1862 +#: postmaster/postmaster.c:1864 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "skickar SIGKILL till motsträviga barn" -#: postmaster/postmaster.c:1883 +#: postmaster/postmaster.c:1885 #, 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:1986 postmaster/postmaster.c:2014 +#: postmaster/postmaster.c:1988 postmaster/postmaster.c:2016 #, c-format msgid "incomplete startup packet" msgstr "ofullständigt startuppaket" -#: postmaster/postmaster.c:1998 postmaster/postmaster.c:2031 +#: postmaster/postmaster.c:2000 postmaster/postmaster.c:2033 #, c-format msgid "invalid length of startup packet" msgstr "ogiltig längd på startuppaket" -#: postmaster/postmaster.c:2060 +#: postmaster/postmaster.c:2062 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "misslyckades att skicka SSL-förhandlingssvar: %m" -#: postmaster/postmaster.c:2078 +#: postmaster/postmaster.c:2080 #, c-format msgid "received unencrypted data after SSL request" msgstr "tog emot okrypterad data efter SSL-förfrågan" -#: postmaster/postmaster.c:2079 postmaster/postmaster.c:2123 +#: postmaster/postmaster.c:2081 postmaster/postmaster.c:2125 #, 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:2104 +#: postmaster/postmaster.c:2106 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "misslyckades att skicka GSSAPI-förhandlingssvar: %m" -#: postmaster/postmaster.c:2122 +#: postmaster/postmaster.c:2124 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "tog emot okrypterad data efter GSSAPI-krypteringsförfrågan" -#: postmaster/postmaster.c:2146 +#: postmaster/postmaster.c:2148 #, 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:2210 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: postmaster/postmaster.c:2212 utils/misc/guc.c:7138 utils/misc/guc.c:7174 #: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 #: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "ogiltigt värde för parameter \"%s\": \"%s\"" -#: postmaster/postmaster.c:2213 +#: postmaster/postmaster.c:2215 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Giltiga värden är: \"false\", 0, \"true\", 1, \"database\"." -#: postmaster/postmaster.c:2258 +#: postmaster/postmaster.c:2260 #, 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:2275 +#: postmaster/postmaster.c:2277 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "inget PostgreSQL-användarnamn angivet i startuppaketet" -#: postmaster/postmaster.c:2339 +#: postmaster/postmaster.c:2341 #, c-format msgid "the database system is starting up" msgstr "databassystemet startar upp" -#: postmaster/postmaster.c:2345 +#: postmaster/postmaster.c:2347 #, c-format msgid "the database system is not yet accepting connections" msgstr "databassystemet tar ännu inte emot anslutningar" -#: postmaster/postmaster.c:2346 +#: postmaster/postmaster.c:2348 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "Konsistent återställningstillstånd har ännu inte uppnåtts." -#: postmaster/postmaster.c:2350 +#: postmaster/postmaster.c:2352 #, c-format msgid "the database system is not accepting connections" msgstr "databassystemet tar inte emot anslutningar" -#: postmaster/postmaster.c:2351 +#: postmaster/postmaster.c:2353 #, c-format msgid "Hot standby mode is disabled." msgstr "Hot standby-läge är avstängt." -#: postmaster/postmaster.c:2356 +#: postmaster/postmaster.c:2358 #, c-format msgid "the database system is shutting down" msgstr "databassystemet stänger ner" -#: postmaster/postmaster.c:2361 +#: postmaster/postmaster.c:2363 #, c-format msgid "the database system is in recovery mode" msgstr "databassystemet är återställningsläge" -#: postmaster/postmaster.c:2366 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2368 storage/ipc/procarray.c:499 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "ledsen, för många klienter" -#: postmaster/postmaster.c:2456 +#: postmaster/postmaster.c:2458 #, c-format msgid "wrong key in cancel request for process %d" msgstr "fel nyckel i avbrytbegäran för process %d" -#: postmaster/postmaster.c:2468 +#: postmaster/postmaster.c:2470 #, 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:2721 +#: postmaster/postmaster.c:2723 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "mottog SIGHUP, läser om konfigurationsfiler" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2747 postmaster/postmaster.c:2751 +#: postmaster/postmaster.c:2749 postmaster/postmaster.c:2753 #, c-format msgid "%s was not reloaded" msgstr "%s laddades inte om" -#: postmaster/postmaster.c:2761 +#: postmaster/postmaster.c:2763 #, c-format msgid "SSL configuration was not reloaded" msgstr "SSL-konfiguration laddades inte om" -#: postmaster/postmaster.c:2817 +#: postmaster/postmaster.c:2819 #, c-format msgid "received smart shutdown request" msgstr "tog emot förfrågan om att stänga ner smart" -#: postmaster/postmaster.c:2863 +#: postmaster/postmaster.c:2865 #, c-format msgid "received fast shutdown request" msgstr "tog emot förfrågan om att stänga ner snabbt" -#: postmaster/postmaster.c:2881 +#: postmaster/postmaster.c:2883 #, c-format msgid "aborting any active transactions" msgstr "avbryter aktiva transaktioner" -#: postmaster/postmaster.c:2905 +#: postmaster/postmaster.c:2907 #, c-format msgid "received immediate shutdown request" msgstr "mottog begäran för omedelbar nedstängning" -#: postmaster/postmaster.c:2982 +#: postmaster/postmaster.c:2984 #, c-format msgid "shutdown at recovery target" msgstr "nedstängs vid återställningsmål" -#: postmaster/postmaster.c:3000 postmaster/postmaster.c:3036 +#: postmaster/postmaster.c:3002 postmaster/postmaster.c:3038 msgid "startup process" msgstr "uppstartprocess" -#: postmaster/postmaster.c:3003 +#: postmaster/postmaster.c:3005 #, c-format msgid "aborting startup due to startup process failure" msgstr "avbryter uppstart på grund av fel i startprocessen" -#: postmaster/postmaster.c:3078 +#: postmaster/postmaster.c:3080 #, c-format msgid "database system is ready to accept connections" msgstr "databassystemet är redo att ta emot anslutningar" -#: postmaster/postmaster.c:3099 +#: postmaster/postmaster.c:3101 msgid "background writer process" msgstr "bakgrundsskrivarprocess" -#: postmaster/postmaster.c:3153 +#: postmaster/postmaster.c:3155 msgid "checkpointer process" msgstr "checkpoint-process" -#: postmaster/postmaster.c:3169 +#: postmaster/postmaster.c:3171 msgid "WAL writer process" msgstr "WAL-skrivarprocess" -#: postmaster/postmaster.c:3184 +#: postmaster/postmaster.c:3186 msgid "WAL receiver process" msgstr "WAL-mottagarprocess" -#: postmaster/postmaster.c:3199 +#: postmaster/postmaster.c:3201 msgid "autovacuum launcher process" msgstr "autovacuum-startprocess" -#: postmaster/postmaster.c:3217 +#: postmaster/postmaster.c:3219 msgid "archiver process" msgstr "arkiveringsprocess" -#: postmaster/postmaster.c:3232 +#: postmaster/postmaster.c:3234 msgid "statistics collector process" msgstr "statistikinsamlingsprocess" -#: postmaster/postmaster.c:3246 +#: postmaster/postmaster.c:3248 msgid "system logger process" msgstr "system-logg-process" -#: postmaster/postmaster.c:3310 +#: postmaster/postmaster.c:3312 #, c-format msgid "background worker \"%s\"" msgstr "bakgrundsarbetare \"%s\"" -#: postmaster/postmaster.c:3394 postmaster/postmaster.c:3414 -#: postmaster/postmaster.c:3421 postmaster/postmaster.c:3439 +#: postmaster/postmaster.c:3396 postmaster/postmaster.c:3416 +#: postmaster/postmaster.c:3423 postmaster/postmaster.c:3441 msgid "server process" msgstr "serverprocess" -#: postmaster/postmaster.c:3493 +#: postmaster/postmaster.c:3495 #, 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:3746 +#: postmaster/postmaster.c:3748 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) avslutade med felkod %d" -#: postmaster/postmaster.c:3748 postmaster/postmaster.c:3760 -#: postmaster/postmaster.c:3770 postmaster/postmaster.c:3781 +#: postmaster/postmaster.c:3750 postmaster/postmaster.c:3762 +#: postmaster/postmaster.c:3772 postmaster/postmaster.c:3783 #, 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:3757 +#: postmaster/postmaster.c:3759 #, 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:3767 +#: postmaster/postmaster.c:3769 #, 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:3779 +#: postmaster/postmaster.c:3781 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) avslutade med okänd status %d" -#: postmaster/postmaster.c:3993 +#: postmaster/postmaster.c:3995 #, c-format msgid "abnormal database system shutdown" msgstr "ej normal databasnedstängning" -#: postmaster/postmaster.c:4031 +#: postmaster/postmaster.c:4033 #, c-format msgid "shutting down due to startup process failure" msgstr "stänger ner på grund av fel i startprocessen" -#: postmaster/postmaster.c:4037 +#: postmaster/postmaster.c:4039 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "stänger ner då restart_after_crash är av" -#: postmaster/postmaster.c:4049 +#: postmaster/postmaster.c:4051 #, c-format msgid "all server processes terminated; reinitializing" msgstr "alla serverprocesser är avslutade; initierar på nytt" -#: postmaster/postmaster.c:4223 postmaster/postmaster.c:5575 -#: postmaster/postmaster.c:5966 +#: postmaster/postmaster.c:4225 postmaster/postmaster.c:5577 +#: postmaster/postmaster.c:5968 #, c-format msgid "could not generate random cancel key" msgstr "kunde inte skapa slumpad avbrytningsnyckel" -#: postmaster/postmaster.c:4277 +#: postmaster/postmaster.c:4279 #, c-format msgid "could not fork new process for connection: %m" msgstr "kunde inte fork():a ny process for uppkoppling: %m" -#: postmaster/postmaster.c:4319 +#: postmaster/postmaster.c:4321 msgid "could not fork new process for connection: " msgstr "kunde inte fork():a ny process for uppkoppling: " -#: postmaster/postmaster.c:4425 +#: postmaster/postmaster.c:4427 #, c-format msgid "connection received: host=%s port=%s" msgstr "ansluting mottagen: värd=%s port=%s" -#: postmaster/postmaster.c:4430 +#: postmaster/postmaster.c:4432 #, c-format msgid "connection received: host=%s" msgstr "ansluting mottagen: värd=%s" -#: postmaster/postmaster.c:4673 +#: postmaster/postmaster.c:4675 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "kunde inte köra serverprocess \"%s\": %m" -#: postmaster/postmaster.c:4731 +#: postmaster/postmaster.c:4733 #, 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:4740 +#: postmaster/postmaster.c:4742 #, 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:4767 +#: postmaster/postmaster.c:4769 #, c-format msgid "subprocess command line too long" msgstr "subprocessens kommando är för långt" -#: postmaster/postmaster.c:4785 +#: postmaster/postmaster.c:4787 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "Anrop till CreateProcess() misslyckades: %m (felkod %lu)" -#: postmaster/postmaster.c:4812 +#: postmaster/postmaster.c:4814 #, 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:4816 +#: postmaster/postmaster.c:4818 #, 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:4838 +#: postmaster/postmaster.c:4840 #, 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:4839 +#: postmaster/postmaster.c:4841 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Detta kan orsakas av ASLR eller antivirusprogram." -#: postmaster/postmaster.c:5021 +#: postmaster/postmaster.c:5023 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "SSL-konfigurering kunde inte laddas i barnprocess" -#: postmaster/postmaster.c:5147 +#: postmaster/postmaster.c:5149 #, c-format msgid "postmaster became multithreaded" msgstr "postmaster blev flertrådad" -#: postmaster/postmaster.c:5235 +#: postmaster/postmaster.c:5237 #, 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:5499 +#: postmaster/postmaster.c:5501 #, c-format msgid "could not fork startup process: %m" msgstr "kunde inte starta startup-processen: %m" -#: postmaster/postmaster.c:5503 +#: postmaster/postmaster.c:5505 #, c-format msgid "could not fork archiver process: %m" msgstr "kunde inte fork:a arkivprocess: %m" -#: postmaster/postmaster.c:5507 +#: postmaster/postmaster.c:5509 #, c-format msgid "could not fork background writer process: %m" msgstr "kunde inte starta process för bakgrundsskrivare: %m" -#: postmaster/postmaster.c:5511 +#: postmaster/postmaster.c:5513 #, c-format msgid "could not fork checkpointer process: %m" msgstr "kunde inte fork:a bakgrundsprocess: %m" -#: postmaster/postmaster.c:5515 +#: postmaster/postmaster.c:5517 #, c-format msgid "could not fork WAL writer process: %m" msgstr "kunde inte fork:a WAL-skrivprocess: %m" -#: postmaster/postmaster.c:5519 +#: postmaster/postmaster.c:5521 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "kunde inte fork:a WAL-mottagarprocess: %m" -#: postmaster/postmaster.c:5523 +#: postmaster/postmaster.c:5525 #, c-format msgid "could not fork process: %m" msgstr "kunde inte fork:a process: %m" -#: postmaster/postmaster.c:5724 postmaster/postmaster.c:5747 +#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 #, c-format msgid "database connection requirement not indicated during registration" msgstr "krav på databasanslutning fanns inte med vid registering" -#: postmaster/postmaster.c:5731 postmaster/postmaster.c:5754 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "invalid processing mode in background worker" msgstr "ogiltigt processläge i bakgrundsarbetare" -#: postmaster/postmaster.c:5839 +#: postmaster/postmaster.c:5841 #, c-format msgid "could not fork worker process: %m" msgstr "kunde inte starta (fork) arbetarprocess: %m" -#: postmaster/postmaster.c:5952 +#: postmaster/postmaster.c:5954 #, c-format msgid "no slot available for new worker process" msgstr "ingen slot tillgänglig för ny arbetsprocess" -#: postmaster/postmaster.c:6286 +#: postmaster/postmaster.c:6288 #, 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:6318 +#: postmaster/postmaster.c:6320 #, 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:6347 +#: postmaster/postmaster.c:6349 #, 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:6354 +#: postmaster/postmaster.c:6356 #, 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:6363 +#: postmaster/postmaster.c:6365 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "kunde inte ta bort fil \"%s\": %s\n" -#: postmaster/postmaster.c:6380 +#: postmaster/postmaster.c:6382 #, 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:6389 +#: postmaster/postmaster.c:6391 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "kunde inte avmappa vy för bakgrundsvariabler: felkod %lu\n" -#: postmaster/postmaster.c:6396 +#: postmaster/postmaster.c:6398 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "kunde inte stänga \"handle\" till backend:ens parametervariabler: felkod %lu\n" -#: postmaster/postmaster.c:6558 +#: postmaster/postmaster.c:6560 #, c-format msgid "could not read exit code for process\n" msgstr "kunde inte läsa avslutningskod för process\n" -#: postmaster/postmaster.c:6600 +#: postmaster/postmaster.c:6602 #, c-format msgid "could not post child completion status\n" msgstr "kunde inte skicka barnets avslutningsstatus\n" @@ -19208,7 +19245,7 @@ msgid "error reading result of streaming command: %s" msgstr "fel vid läsning av resultat från strömningskommando: %s" #: replication/libpqwalreceiver/libpqwalreceiver.c:570 -#: replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "oväntat resultat efter CommandComplete: %s" @@ -19223,43 +19260,43 @@ msgstr "kan inte ta emot fil med tidslinjehistorik från primära servern: %s" 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:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:824 -#: replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 +#: replication/libpqwalreceiver/libpqwalreceiver.c:821 +#: replication/libpqwalreceiver/libpqwalreceiver.c:828 #, 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:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, 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:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "kunde inte skapa replikeringsslot \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "ogiltigt frågerespons" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Förväntade %d fält, fick %d fält." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, c-format msgid "the query interface requires a database connection" msgstr "frågeinterface:et kräver en databasanslutning" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "tom fråga" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "oväntat pipeline-läge" @@ -19313,12 +19350,12 @@ msgstr "logisk avkodning kräver en databasanslutning" msgid "logical decoding cannot be used while in recovery" msgstr "logisk avkodning kan inte användas under återställning" -#: replication/logical/logical.c:350 replication/logical/logical.c:502 +#: replication/logical/logical.c:350 replication/logical/logical.c:504 #, 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:355 replication/logical/logical.c:507 +#: replication/logical/logical.c:355 replication/logical/logical.c:509 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "replikeringsslot \"%s\" har inte skapats i denna databasen" @@ -19328,40 +19365,40 @@ msgstr "replikeringsslot \"%s\" har inte skapats i denna databasen" 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:552 +#: replication/logical/logical.c:554 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "startar logisk avkodning för slot \"%s\"" -#: replication/logical/logical.c:554 +#: replication/logical/logical.c:556 #, 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:699 +#: replication/logical/logical.c:701 #, 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:705 +#: replication/logical/logical.c:707 #, 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:876 replication/logical/logical.c:921 -#: replication/logical/logical.c:966 replication/logical/logical.c:1012 +#: replication/logical/logical.c:878 replication/logical/logical.c:923 +#: replication/logical/logical.c:968 replication/logical/logical.c:1014 #, 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:1244 replication/logical/logical.c:1293 -#: replication/logical/logical.c:1334 replication/logical/logical.c:1420 -#: replication/logical/logical.c:1469 +#: replication/logical/logical.c:1246 replication/logical/logical.c:1295 +#: replication/logical/logical.c:1336 replication/logical/logical.c:1422 +#: replication/logical/logical.c:1471 #, c-format msgid "logical streaming requires a %s callback" msgstr "logisk strömning kräven en %s-callback" -#: replication/logical/logical.c:1379 +#: replication/logical/logical.c:1381 #, 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" @@ -19473,7 +19510,7 @@ msgid "could not find free replication state slot for replication origin with OI msgstr "kunde inte hitta ledig replikerings-state-slot för replikerings-origin med OID %u" #: replication/logical/origin.c:941 replication/logical/origin.c:1128 -#: replication/slot.c:1867 +#: replication/slot.c:1934 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Öka max_replication_slots och försök igen." @@ -19526,29 +19563,29 @@ msgstr "destinationsrelation \"%s.%s\" för logisk replikering använder systemk msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "destinationsrelation \"%s.%s\" för logisk replikering finns inte" -#: replication/logical/reorderbuffer.c:3842 +#: replication/logical/reorderbuffer.c:3973 #, 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:4188 -#: replication/logical/reorderbuffer.c:4213 +#: replication/logical/reorderbuffer.c:4319 +#: replication/logical/reorderbuffer.c:4344 #, 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:4192 -#: replication/logical/reorderbuffer.c:4217 +#: replication/logical/reorderbuffer.c:4323 +#: replication/logical/reorderbuffer.c:4348 #, 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:4467 +#: replication/logical/reorderbuffer.c:4598 #, 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:4966 +#: replication/logical/reorderbuffer.c:5097 #, 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" @@ -19565,58 +19602,58 @@ 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:1374 replication/logical/snapbuild.c:1486 -#: replication/logical/snapbuild.c:2017 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 +#: replication/logical/snapbuild.c:2068 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "logisk avkodning hittade konsistent punkt vid %X/%X" -#: replication/logical/snapbuild.c:1376 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "Det finns inga körande transaktioner." -#: replication/logical/snapbuild.c:1437 +#: replication/logical/snapbuild.c:1484 #, 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:1439 replication/logical/snapbuild.c:1463 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, 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:1461 +#: replication/logical/snapbuild.c:1508 #, 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:1488 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "Det finns inte längre några gamla transaktioner." -#: replication/logical/snapbuild.c:1885 +#: replication/logical/snapbuild.c:1932 #, 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:1891 +#: replication/logical/snapbuild.c:1938 #, 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:1962 +#: replication/logical/snapbuild.c:2009 #, 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:2019 +#: replication/logical/snapbuild.c:2070 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Logisk avkodning kommer starta med sparat snapshot." -#: replication/logical/snapbuild.c:2091 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "kunde inte parsa filnamn \"%s\"" @@ -19626,32 +19663,27 @@ msgstr "kunde inte parsa filnamn \"%s\"" 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:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, 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:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "tabell \"%s.%s\" hittades inte hos publicerare" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, 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:1069 +#: replication/logical/tablesync.c:1104 #, 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:1110 -#, c-format -msgid "replication origin \"%s\" already exists" -msgstr "replikeringsurspring \"%s\" finns redan" - -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1142 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "tabellkopiering kunde inte slutföra transaktion på publiceraren: %s" @@ -19711,27 +19743,27 @@ msgstr "arbetarprocess för uppspelning av logisk replikering av prenumeration \ 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" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "logisk replikerings uppspelningsarbetare för prenumeration %u kommer inte starta då prenumerationen togs bort under uppstart" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "logisk replikerings uppspelningsarbetare för prenumeration \"%s\" kommer inte starta då prenumerationen stänges av under uppstart" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, 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:3170 +#: replication/logical/worker.c:3177 #, 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:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "prenumeration har ingen replikeringsslot angiven" @@ -19746,148 +19778,147 @@ msgstr "ogiltig proto_version" msgid "proto_version \"%s\" out of range" msgstr "proto_version \"%s\" är utanför giltigt intervall" -#: replication/pgoutput/pgoutput.c:227 +#: replication/pgoutput/pgoutput.c:231 #, c-format msgid "invalid publication_names syntax" msgstr "ogiltig publication_names-syntax" -#: replication/pgoutput/pgoutput.c:324 +#: replication/pgoutput/pgoutput.c:328 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "klienten skickade proto_version=%d men vi stöder bara protokoll %d eller lägre" -#: replication/pgoutput/pgoutput.c:330 +#: replication/pgoutput/pgoutput.c:334 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "klienten skickade proto_version=%d men vi stöder bara protokoll %d eller högre" -#: replication/pgoutput/pgoutput.c:336 +#: replication/pgoutput/pgoutput.c:340 #, c-format msgid "publication_names parameter missing" msgstr "saknar parameter publication_names" -#: replication/pgoutput/pgoutput.c:349 +#: replication/pgoutput/pgoutput.c:353 #, 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:354 +#: replication/pgoutput/pgoutput.c:358 #, 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/slot.c:180 +#: replication/slot.c:212 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "replikeringsslotnamn \"%s\" är för kort" -#: replication/slot.c:189 +#: replication/slot.c:220 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "replikeringsslotnamn \"%s\" är för långt" -#: replication/slot.c:202 +#: replication/slot.c:232 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "replikeringsslotnamn \"%s\" innehåller ogiltiga tecken" -#: replication/slot.c:204 -#, c-format +#: replication/slot.c:233 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:258 +#: replication/slot.c:287 #, c-format msgid "replication slot \"%s\" already exists" msgstr "replikeringsslot \"%s\" finns redan" -#: replication/slot.c:268 +#: replication/slot.c:297 #, c-format msgid "all replication slots are in use" msgstr "alla replikeringsslots används" -#: replication/slot.c:269 +#: replication/slot.c:298 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Frigör en eller öka max_replication_slots." -#: replication/slot.c:402 replication/slotfuncs.c:761 +#: replication/slot.c:431 replication/slotfuncs.c:761 #: utils/adt/pgstatfuncs.c:2228 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "replikeringsslot \"%s\" existerar inte" -#: replication/slot.c:448 replication/slot.c:1025 +#: replication/slot.c:477 replication/slot.c:1083 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "replikeringsslot \"%s\" är aktiv för PID %d" -#: replication/slot.c:676 replication/slot.c:1419 replication/slot.c:1802 +#: replication/slot.c:705 replication/slot.c:1479 replication/slot.c:1869 #, c-format msgid "could not remove directory \"%s\"" msgstr "kunde inte ta bort katalog \"%s\"" -#: replication/slot.c:1060 +#: replication/slot.c:1118 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "replikeringsslots kan bara användas om max_replication_slots > 0" -#: replication/slot.c:1065 +#: replication/slot.c:1123 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "replikeringsslots kan bara användas om wal_level >= replica" -#: replication/slot.c:1250 +#: replication/slot.c:1310 #, 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:1288 +#: replication/slot.c:1348 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "invaliderar slot \"%s\" då dess restart_lsn %X/%X överskrider max_slot_wal_keep_size" -#: replication/slot.c:1740 +#: replication/slot.c:1807 #, 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:1747 +#: replication/slot.c:1814 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "replikeringsslotfil \"%s\" har en icke stödd version %u" -#: replication/slot.c:1754 +#: replication/slot.c:1821 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "replikeringsslotfil \"%s\" har felaktig längd %u" -#: replication/slot.c:1790 +#: replication/slot.c:1857 #, 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:1824 +#: replication/slot.c:1891 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "logisk replikeringsslot \"%s\" finns men wal_level < replica" -#: replication/slot.c:1826 +#: replication/slot.c:1893 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Ändra wal_level till logical eller högre." -#: replication/slot.c:1830 +#: replication/slot.c:1897 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "fysisk replikeringsslot \"%s\" finns men wal_level < replica" -#: replication/slot.c:1832 +#: replication/slot.c:1899 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Ändra wal_level till replica eller högre." -#: replication/slot.c:1866 +#: replication/slot.c:1933 #, c-format msgid "too many replication slots active before shutdown" msgstr "för många aktiva replikeringsslottar innan nerstängning" @@ -19942,37 +19973,37 @@ msgstr "kan inte kopiera ej slutförd replikeringsslot \"%s\"" 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:268 +#: replication/syncrep.c:311 #, 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:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, 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:285 +#: replication/syncrep.c:328 #, 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:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "standby \"%s\" är nu en synkron standby med prioritet %u" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, 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:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "synchronous_standby_names-parser misslyckades" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "antal synkrona standbys (%d) måste vara fler än noll" @@ -20037,7 +20068,7 @@ msgstr "avslutar wal-mottagare på grund av timeout" msgid "primary server contains no more WAL on requested timeline %u" msgstr "primär server har ingen mer WAL på efterfrågad tidslinje %u" -#: replication/walreceiver.c:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "kunde inte stänga loggsegment %s: %m" @@ -20047,129 +20078,129 @@ msgstr "kunde inte stänga loggsegment %s: %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "hämtar tidslinjehistorikfil för tidslinje %u från primära servern" -#: replication/walreceiver.c:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "kunde inte skriva till loggfilsegment %s på offset %u, längd %lu: %m" -#: replication/walsender.c:525 storage/smgr/md.c:1336 +#: replication/walsender.c:539 storage/smgr/md.c:1339 #, 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:529 +#: replication/walsender.c:543 #, 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:580 +#: replication/walsender.c:594 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "IDENTIFY_SYSTEM har inte körts före START_REPLICATION" -#: replication/walsender.c:609 +#: replication/walsender.c:623 #, 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:678 +#: replication/walsender.c:692 #, 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:681 +#: replication/walsender.c:695 #, 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:725 +#: replication/walsender.c:739 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "efterfrågad startpunkt %X/%X är längre fram än denna servers flush:ade WAL-skrivposition %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:975 +#: replication/walsender.c:989 #, 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:985 +#: replication/walsender.c:999 #, 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:991 +#: replication/walsender.c:1005 #, 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:997 +#: replication/walsender.c:1011 #, 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:1003 +#: replication/walsender.c:1017 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s får inte anropas i en undertransaktion" -#: replication/walsender.c:1146 +#: replication/walsender.c:1160 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "kan inte läsa från logisk replikeringsslot \"%s\"" -#: replication/walsender.c:1148 +#: replication/walsender.c:1162 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Denna slot har invaliderats då den överskred maximal reserverad storlek." -#: replication/walsender.c:1158 +#: replication/walsender.c:1172 #, c-format msgid "terminating walsender process after promotion" msgstr "stänger ner walsender-process efter befordran" -#: replication/walsender.c:1552 +#: replication/walsender.c:1566 #, 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:1587 +#: replication/walsender.c:1601 #, 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:1620 +#: replication/walsender.c:1634 #, c-format msgid "received replication command: %s" msgstr "tog emot replikeringskommando: %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1081 -#: tcop/postgres.c:1440 tcop/postgres.c:1713 tcop/postgres.c:2194 -#: tcop/postgres.c:2627 tcop/postgres.c:2706 +#: replication/walsender.c:1642 tcop/fastpath.c:208 tcop/postgres.c:1046 +#: tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 +#: tcop/postgres.c:2592 tcop/postgres.c:2671 #, 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:1763 replication/walsender.c:1798 +#: replication/walsender.c:1777 replication/walsender.c:1812 #, c-format msgid "unexpected EOF on standby connection" msgstr "oväntat EOF från standby-anslutning" -#: replication/walsender.c:1786 +#: replication/walsender.c:1800 #, c-format msgid "invalid standby message type \"%c\"" msgstr "ogiltigt standby-meddelandetyp \"%c\"" -#: replication/walsender.c:1875 +#: replication/walsender.c:1889 #, c-format msgid "unexpected message type \"%c\"" msgstr "oväntad meddelandetyp \"%c\"" -#: replication/walsender.c:2288 +#: replication/walsender.c:2306 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "avslutar walsender-process på grund av replikerings-timeout" @@ -20395,198 +20426,198 @@ msgstr "byta namn på en ON SELECT-regel tillåts inte" 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:613 #, 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:666 #, 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:898 rewrite/rewriteHandler.c:937 #, 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:900 rewrite/rewriteHandler.c:966 #, 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:902 #, 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:964 rewrite/rewriteHandler.c:972 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "kolumn \"%s\" kan bara uppdateras till DEFAULT" -#: rewrite/rewriteHandler.c:1104 rewrite/rewriteHandler.c:1122 +#: rewrite/rewriteHandler.c:1107 rewrite/rewriteHandler.c:1125 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "flera tilldelningar till samma kolumn \"%s\"" -#: rewrite/rewriteHandler.c:1723 rewrite/rewriteHandler.c:3174 +#: rewrite/rewriteHandler.c:1726 rewrite/rewriteHandler.c:3181 #, c-format msgid "access to non-system view \"%s\" is restricted" msgstr "access till icke-system vy \"%s\" är begränsad" -#: rewrite/rewriteHandler.c:2151 rewrite/rewriteHandler.c:4060 +#: rewrite/rewriteHandler.c:2158 rewrite/rewriteHandler.c:4084 #, 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:2256 +#: rewrite/rewriteHandler.c:2263 #, 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:2586 +#: rewrite/rewriteHandler.c:2593 msgid "Junk view columns are not updatable." msgstr "Skräpkolumner i vy är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2591 +#: rewrite/rewriteHandler.c:2598 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:2594 +#: rewrite/rewriteHandler.c:2601 msgid "View columns that refer to system columns are not updatable." msgstr "Vykolumner som refererar till systemkolumner är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2597 +#: rewrite/rewriteHandler.c:2604 msgid "View columns that return whole-row references are not updatable." msgstr "Vykolumner som returnerar hel-rad-referenser är inte uppdateringsbara." -#: rewrite/rewriteHandler.c:2658 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Vyer som innehåller DISTINCT är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2661 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Vyer som innehåller GROUP BY är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2664 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing HAVING are not automatically updatable." msgstr "Vyer som innehåller HAVING är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2667 +#: rewrite/rewriteHandler.c:2674 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:2670 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing WITH are not automatically updatable." msgstr "Vyer som innehåller WITH är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2673 +#: rewrite/rewriteHandler.c:2680 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:2685 +#: rewrite/rewriteHandler.c:2692 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Vyer som returnerar aggregatfunktioner är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2688 +#: rewrite/rewriteHandler.c:2695 msgid "Views that return window functions are not automatically updatable." msgstr "Vyer som returnerar fönsterfunktioner uppdateras inte automatiskt." -#: rewrite/rewriteHandler.c:2691 +#: rewrite/rewriteHandler.c:2698 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:2698 rewrite/rewriteHandler.c:2702 -#: rewrite/rewriteHandler.c:2710 +#: rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2709 +#: rewrite/rewriteHandler.c:2717 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:2713 +#: rewrite/rewriteHandler.c:2720 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Vyer som innehåller TABLESAMPLE är inte automatiskt uppdateringsbara." -#: rewrite/rewriteHandler.c:2737 +#: rewrite/rewriteHandler.c:2744 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:3234 +#: rewrite/rewriteHandler.c:3241 #, 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:3242 +#: rewrite/rewriteHandler.c:3249 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "kan inte uppdatera kolumn \"%s\" i view \"%s\"" -#: rewrite/rewriteHandler.c:3724 +#: rewrite/rewriteHandler.c:3747 #, 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:3735 +#: rewrite/rewriteHandler.c:3758 #, 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:3749 +#: rewrite/rewriteHandler.c:3772 #, 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:3753 +#: rewrite/rewriteHandler.c:3776 #, 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:3758 +#: rewrite/rewriteHandler.c:3781 #, 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:3988 rewrite/rewriteHandler.c:3996 -#: rewrite/rewriteHandler.c:4004 +#: rewrite/rewriteHandler.c:4012 rewrite/rewriteHandler.c:4020 +#: rewrite/rewriteHandler.c:4028 #, c-format 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:4109 +#: rewrite/rewriteHandler.c:4134 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "kan inte utföra INSERT RETURNING på relation \"%s\"" -#: rewrite/rewriteHandler.c:4111 +#: rewrite/rewriteHandler.c:4136 #, 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:4116 +#: rewrite/rewriteHandler.c:4141 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "kan inte utföra UPDATE RETURNING på relation \"%s\"" -#: rewrite/rewriteHandler.c:4118 +#: rewrite/rewriteHandler.c:4143 #, 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:4123 +#: rewrite/rewriteHandler.c:4148 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "kan inte utföra DELETE RETURNING på relation \"%s\"" -#: rewrite/rewriteHandler.c:4125 +#: rewrite/rewriteHandler.c:4150 #, 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:4143 +#: rewrite/rewriteHandler.c:4168 #, 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:4200 +#: rewrite/rewriteHandler.c:4225 #, 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" @@ -20746,47 +20777,47 @@ msgstr "statistikobjekt \"%s.%s\" kunde inte beräknas för relation \"%s.%s\"" 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:598 storage/buffer/bufmgr.c:765 +#: storage/buffer/bufmgr.c:605 storage/buffer/bufmgr.c:772 #, 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:843 +#: storage/buffer/bufmgr.c:850 #, 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:930 +#: storage/buffer/bufmgr.c:937 #, 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:932 +#: storage/buffer/bufmgr.c:939 #, 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:1031 +#: storage/buffer/bufmgr.c:1038 #, 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:4533 +#: storage/buffer/bufmgr.c:4600 #, c-format msgid "could not write block %u of %s" msgstr "kunde inte skriva block %u av %s" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4602 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Multipla fel --- skrivfelet kan vara permanent." -#: storage/buffer/bufmgr.c:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4623 storage/buffer/bufmgr.c:4642 #, c-format msgid "writing block %u of relation %s" msgstr "skriver block %u i relation %s" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4946 #, c-format msgid "snapshot too old" msgstr "snapshot för gammal" @@ -20816,114 +20847,114 @@ msgstr "kunde inte bestämma storlek på temporär fil \"%s\" från BufFile \"%s msgid "could not delete shared fileset \"%s\": %m" msgstr "kunde inte radera delad filmängd \"%s\": %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:874 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "kunde inte trunkera fil \"%s\": %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "kunde inte flush:a smutsig data: %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, c-format msgid "could not determine dirty data size: %m" msgstr "kunde inte lista ut storlek på smutsig data: %m" -#: storage/file/fd.c:597 +#: storage/file/fd.c:594 #, 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:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "kunde inte länka fil \"%s\" till \"%s\": %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "getrlimit misslyckades: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, 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:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "Systemet tillåter %d, vi behöver minst %d." -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 -#: storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 +#: storage/file/fd.c:2668 #, 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:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "temporär fil: sökväg \"%s\", storlek %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "kunde inte skapa temporär katalog \"%s\": %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "kunde inte skapa temporär underkatalog \"%s\": %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "kan inte skapa temporär fil \"%s\": %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, 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:1859 +#: storage/file/fd.c:1850 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "kunde inte unlink:a temporär fil \"%s\": %m" -#: storage/file/fd.c:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "kunde inte radera fil \"%s\": %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, 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:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, 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:2496 +#: storage/file/fd.c:2487 #, 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:2653 +#: storage/file/fd.c:2644 #, 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:3183 +#: storage/file/fd.c:3174 #, 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:3312 +#: storage/file/fd.c:3303 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "kan inte synkronisera filsystemet för fil \"%s\": %m" @@ -21127,12 +21158,12 @@ msgstr "återställning väntar fortfarande efter %ld.%03d ms: %s" 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:883 tcop/postgres.c:3358 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "avbryter sats på grund av konflikt med återställning" -#: storage/ipc/standby.c:884 tcop/postgres.c:2512 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Användartransaktion orsakade deadlock för buffer vid återställning." @@ -21205,102 +21236,102 @@ msgstr "deadlock upptäckt" msgid "See server log for query details." msgstr "Se server-logg för frågedetaljer." -#: storage/lmgr/lmgr.c:825 +#: storage/lmgr/lmgr.c:831 #, 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:828 +#: storage/lmgr/lmgr.c:834 #, 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:831 +#: storage/lmgr/lmgr.c:837 #, 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:834 +#: storage/lmgr/lmgr.c:840 #, 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:837 +#: storage/lmgr/lmgr.c:843 #, 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:840 +#: storage/lmgr/lmgr.c:846 #, 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:843 +#: storage/lmgr/lmgr.c:849 #, 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:846 +#: storage/lmgr/lmgr.c:852 #, 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:1139 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "relation %u i databasen %u" -#: storage/lmgr/lmgr.c:1145 +#: storage/lmgr/lmgr.c:1151 #, c-format msgid "extension of relation %u of database %u" msgstr "utökning av relation %u i databas %u" -#: storage/lmgr/lmgr.c:1151 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid för databas %u" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "page %u of relation %u of database %u" msgstr "sida %u i relation %u i databas %u" -#: storage/lmgr/lmgr.c:1163 +#: storage/lmgr/lmgr.c:1169 #, 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:1171 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "transaktion %u" -#: storage/lmgr/lmgr.c:1176 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "vituell transaktion %d/%u" -#: storage/lmgr/lmgr.c:1182 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "spekulativ token %u för transaktion %u" -#: storage/lmgr/lmgr.c:1188 +#: storage/lmgr/lmgr.c:1194 #, c-format msgid "object %u of class %u of database %u" msgstr "objekt %u av klass %u i databas %u" -#: storage/lmgr/lmgr.c:1196 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "användarlås [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1203 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "rådgivande lås [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1211 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "okänd låsetikettyp %d" @@ -21489,22 +21520,22 @@ msgstr "kunde inte skriva block %u i fil \"%s\": %m" 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" -#: storage/smgr/md.c:842 +#: storage/smgr/md.c:845 #, 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:897 +#: storage/smgr/md.c:900 #, 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:1301 +#: storage/smgr/md.c:1304 #, 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:1315 +#: storage/smgr/md.c:1318 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "kunde inte öppna fil \"%s\" (målblock %u): %m" @@ -21519,8 +21550,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:312 tcop/postgres.c:1308 tcop/postgres.c:1566 -#: tcop/postgres.c:2037 tcop/postgres.c:2293 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 +#: tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "varaktighet %s ms" @@ -21550,295 +21581,295 @@ 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:449 tcop/postgres.c:4836 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "ogiltig frontend-meddelandetyp %d" -#: tcop/postgres.c:1018 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "sats: %s" -#: tcop/postgres.c:1313 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "varaktighet: %s ms sats: %s" -#: tcop/postgres.c:1419 +#: tcop/postgres.c:1384 #, 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:1571 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "varaktighet: %s ms parse %s: %s" -#: tcop/postgres.c:1638 tcop/postgres.c:2608 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "förberedd sats utan namn existerar inte" -#: tcop/postgres.c:1690 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "bind-meddelande har %d parameterformat men %d parametrar" -#: tcop/postgres.c:1696 +#: tcop/postgres.c:1661 #, 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:1915 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "inkorrekt binärdataformat i bind-parameter %d" -#: tcop/postgres.c:2042 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "varaktighet: %s ms bind %s%s%s: %s" -#: tcop/postgres.c:2093 tcop/postgres.c:2692 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "portal \"%s\" existerar inte" -#: tcop/postgres.c:2173 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2175 tcop/postgres.c:2301 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "kör hämtning från" -#: tcop/postgres.c:2176 tcop/postgres.c:2302 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "kör" -#: tcop/postgres.c:2298 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "varaktighet: %s ms %s %s%s%s: %s" -#: tcop/postgres.c:2444 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "prepare: %s" -#: tcop/postgres.c:2469 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "parametrar: %s" -#: tcop/postgres.c:2484 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "abortskäl: återställningskonflikt" -#: tcop/postgres.c:2500 +#: tcop/postgres.c:2465 #, 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:2503 +#: tcop/postgres.c:2468 #, 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:2506 +#: tcop/postgres.c:2471 #, 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:2509 +#: tcop/postgres.c:2474 #, 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:2515 +#: tcop/postgres.c:2480 #, 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:2554 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "portal \"%s\" parameter $%d = %s" -#: tcop/postgres.c:2557 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "portal \"%s\" parameter $%d" -#: tcop/postgres.c:2563 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "ej namngiven portalparameter $%d = %s" -#: tcop/postgres.c:2566 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "ej namngiven portalparameter $%d" -#: tcop/postgres.c:2912 +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "stänger anslutning på grund av oväntad SIGQUIT-signal" -#: tcop/postgres.c:2918 +#: tcop/postgres.c:2883 #, 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:2919 +#: tcop/postgres.c:2884 #, 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:2923 tcop/postgres.c:3284 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, 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:2930 +#: tcop/postgres.c:2895 #, 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:3016 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "flyttalsavbrott" -#: tcop/postgres.c:3017 +#: tcop/postgres.c:2982 #, 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:3188 +#: tcop/postgres.c:3153 #, c-format msgid "canceling authentication due to timeout" msgstr "avbryter autentisering på grund av timeout" -#: tcop/postgres.c:3192 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "avslutar autovacuum-process på grund av ett administratörskommando" -#: tcop/postgres.c:3196 +#: tcop/postgres.c:3161 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "avslutar logisk replikeringsarbetare på grund av ett administratörskommando" -#: tcop/postgres.c:3213 tcop/postgres.c:3223 tcop/postgres.c:3282 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "avslutar anslutning på grund av konflikt med återställning" -#: tcop/postgres.c:3234 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "avslutar anslutning på grund av ett administratörskommando" -#: tcop/postgres.c:3265 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "anslutning till klient har brutits" -#: tcop/postgres.c:3335 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "avbryter sats på grund av lås-timeout" -#: tcop/postgres.c:3342 +#: tcop/postgres.c:3307 #, c-format msgid "canceling statement due to statement timeout" msgstr "avbryter sats på grund av sats-timeout" -#: tcop/postgres.c:3349 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "avbryter autovacuum-uppgift" -#: tcop/postgres.c:3372 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "avbryter sats på användares begäran" -#: tcop/postgres.c:3386 +#: tcop/postgres.c:3351 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "terminerar anslutning på grund av idle-in-transaction-timeout" -#: tcop/postgres.c:3397 +#: tcop/postgres.c:3362 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "stänger anslutning på grund av idle-session-timeout" -#: tcop/postgres.c:3526 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "maximalt stackdjup överskridet" -#: tcop/postgres.c:3527 +#: tcop/postgres.c:3492 #, 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:3590 +#: tcop/postgres.c:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "\"max_stack_depth\" får ej överskrida %ldkB." -#: tcop/postgres.c:3592 +#: tcop/postgres.c:3557 #, 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:4013 +#: tcop/postgres.c:3978 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "ogiltigt kommandoradsargument för serverprocess: %s" -#: tcop/postgres.c:4014 tcop/postgres.c:4020 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Försök med \"%s --help\" för mer information." -#: tcop/postgres.c:4018 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: ogiltigt kommandoradsargument: %s" -#: tcop/postgres.c:4081 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: ingen databas eller användarnamn angivet" -#: tcop/postgres.c:4738 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "ogiltig subtyp %d för CLOSE-meddelande" -#: tcop/postgres.c:4773 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "ogiltig subtyp %d för DESCRIBE-meddelande" -#: tcop/postgres.c:4857 +#: tcop/postgres.c:4822 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "fastpath-funktionsanrop stöds inte i en replikeringsanslutning" -#: tcop/postgres.c:4861 +#: tcop/postgres.c:4826 #, 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:5038 +#: tcop/postgres.c:5003 #, 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" @@ -21848,12 +21879,12 @@ 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:939 tcop/pquery.c:1698 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "markör kan bara hoppa framåt" -#: tcop/pquery.c:940 tcop/pquery.c:1699 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, 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." @@ -21893,6 +21924,11 @@ msgstr "kan inte köra %s i en bakgrundsprocess" msgid "must be superuser to do CHECKPOINT" msgstr "måste vara superuser för att göra CHECKPOINT" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS stöder bara relationsnamn i FROM-klausulen" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -22013,69 +22049,69 @@ msgstr "okänd synonymordboksparameter: \"%s\"" msgid "missing Dictionary parameter" msgstr "saknar ordlistparameter" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 -#: tsearch/spell.c:1063 +#: tsearch/spell.c:382 tsearch/spell.c:399 tsearch/spell.c:408 +#: tsearch/spell.c:1065 #, c-format msgid "invalid affix flag \"%s\"" msgstr "ogiltig affix-flagga \"%s\"" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:386 tsearch/spell.c:1069 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "affix-flaggan \"%s\" är utanför giltigt intervall" -#: tsearch/spell.c:415 +#: tsearch/spell.c:416 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "ogiltigt tecken i affix-flagga \"%s\"" -#: tsearch/spell.c:435 +#: tsearch/spell.c:436 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "ogiltig affix-flagga \"%s\" med flaggvärdet \"long\"" -#: tsearch/spell.c:525 +#: tsearch/spell.c:526 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "kunde inte öppna ordboksfil \"%s\": %m" -#: tsearch/spell.c:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:765 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "ogiltigt reguljärt uttryck: %s" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 -#: tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1193 tsearch/spell.c:1205 tsearch/spell.c:1765 +#: tsearch/spell.c:1770 tsearch/spell.c:1775 #, c-format msgid "invalid affix alias \"%s\"" msgstr "ogiltigt affix-alias \"%s\"" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1246 tsearch/spell.c:1317 tsearch/spell.c:1466 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "kunde inte öppna affix-fil \"%s\": %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1300 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Ispell-ordbok stöder bara flaggorna \"default\", \"long\" och \"num\"" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1344 #, c-format msgid "invalid number of flag vector aliases" msgstr "ogiltigt antal alias i flaggvektor" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1367 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "antalet alias överskriver angivet antal %d" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1582 #, c-format 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:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "strängen är för lång för tsvector (%d byte, max %d byte)" @@ -22142,112 +22178,112 @@ msgstr "ShortWord skall vara >= 0" msgid "MaxFragments should be >= 0" msgstr "MaxFragments skall vara >= 0" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "identifieraren för lång" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 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:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "okänt nyckelord: \"%s\"" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "ACL-nyckelord måste vara \"group\" eller \"user\"." -#: utils/adt/acl.c:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "namn saknas" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, 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:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "saknar \"=\"-tecken" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, 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:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "ett namn måste följa på tecknet \"/\"" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "sätter fullmaktsgivaranvändar-ID till standardvärdet %u" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "ACL-array innehåller fel datatyp" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "ACL-array:er måste vara endimensionella" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, 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:563 +#: utils/adt/acl.c:580 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "skräp vid slutet av ACL-angivelse" -#: utils/adt/acl.c:1198 +#: utils/adt/acl.c:1215 #, 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:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "det finns beroende privilegier" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Använd CASCADE för att återkalla dem med." -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert stöds inte länge" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove stöds inte längre" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "okänd privilegietyp: \"%s\"" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "funktionen \"%s\" finns inte" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "måste vara medlem i rollen \"%s\"" @@ -22273,7 +22309,7 @@ msgstr "indatatyp är inte en array" #: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 #: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 #: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 -#: utils/adt/int8.c:1299 utils/adt/numeric.c:1783 utils/adt/numeric.c:4246 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 #: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 #: utils/adt/varlena.c:3422 #, c-format @@ -22409,7 +22445,7 @@ msgid "Junk after closing right brace." msgstr "Skräp efter avslutande höger parentes." #: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 -#: utils/adt/arrayfuncs.c:5938 +#: utils/adt/arrayfuncs.c:5940 #, c-format msgid "invalid number of dimensions: %d" msgstr "felaktigt antal dimensioner: %d" @@ -22448,8 +22484,8 @@ msgstr "slice av fixlängd-array är inte implementerat" #: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 #: utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 -#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5924 -#: utils/adt/arrayfuncs.c:5950 utils/adt/arrayfuncs.c:5961 +#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5926 +#: utils/adt/arrayfuncs.c:5952 utils/adt/arrayfuncs.c:5963 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 #: utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 @@ -22531,42 +22567,42 @@ msgstr "kan inte ackumulera tomma array:er" msgid "cannot accumulate arrays of different dimensionality" msgstr "kan inte ackumulera arrayer med olika dimensioner" -#: utils/adt/arrayfuncs.c:5822 utils/adt/arrayfuncs.c:5862 +#: utils/adt/arrayfuncs.c:5824 utils/adt/arrayfuncs.c:5864 #, 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:5925 utils/adt/arrayfuncs.c:5951 +#: utils/adt/arrayfuncs.c:5927 utils/adt/arrayfuncs.c:5953 #, c-format msgid "Dimension array must be one dimensional." msgstr "Dimensionsarray måste vara endimensionell." -#: utils/adt/arrayfuncs.c:5930 utils/adt/arrayfuncs.c:5956 +#: utils/adt/arrayfuncs.c:5932 utils/adt/arrayfuncs.c:5958 #, c-format msgid "dimension values cannot be null" msgstr "dimensionsvärden kan inte vara null" -#: utils/adt/arrayfuncs.c:5962 +#: utils/adt/arrayfuncs.c:5964 #, 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:6240 +#: utils/adt/arrayfuncs.c:6242 #, 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:6517 +#: utils/adt/arrayfuncs.c:6519 #, c-format msgid "thresholds must be one-dimensional array" msgstr "gränsvärden måste vara en endimensionell array" -#: utils/adt/arrayfuncs.c:6522 +#: utils/adt/arrayfuncs.c:6524 #, 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:6755 +#: utils/adt/arrayfuncs.c:6757 #, 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" @@ -22618,8 +22654,8 @@ msgstr "kodningskonvertering från %s till ASCII stöds inte" #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 #: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 -#: utils/adt/numeric.c:720 utils/adt/numeric.c:6901 utils/adt/numeric.c:6925 -#: utils/adt/numeric.c:6949 utils/adt/numeric.c:7907 utils/adt/numutils.c:116 +#: utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 +#: utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 utils/adt/numutils.c:116 #: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 #: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 #: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 @@ -22640,9 +22676,9 @@ msgstr "money utanför giltigt intervall" #: utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 #: utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 #: utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 -#: utils/adt/numeric.c:3046 utils/adt/numeric.c:3069 utils/adt/numeric.c:3154 -#: utils/adt/numeric.c:3172 utils/adt/numeric.c:3268 utils/adt/numeric.c:8456 -#: utils/adt/numeric.c:8746 utils/adt/numeric.c:10392 +#: utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 +#: utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 utils/adt/numeric.c:8457 +#: utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 #: utils/adt/timestamp.c:3317 #, c-format msgid "division by zero" @@ -22685,7 +22721,7 @@ msgid "date out of range: \"%s\"" msgstr "datum utanför giltigt intervall \"%s\"" #: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 -#: utils/adt/xml.c:2259 +#: utils/adt/xml.c:2253 #, c-format msgid "date out of range" msgstr "datum utanför giltigt intervall" @@ -22747,8 +22783,8 @@ msgstr "datumenheten \"%s\" är okänd" #: utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 #: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 #: utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 -#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2281 -#: utils/adt/xml.c:2288 utils/adt/xml.c:2308 utils/adt/xml.c:2315 +#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2275 +#: utils/adt/xml.c:2282 utils/adt/xml.c:2302 utils/adt/xml.c:2309 #, c-format msgid "timestamp out of range" msgstr "timestamp utanför giltigt intervall" @@ -22765,7 +22801,7 @@ msgstr "time-värde utanför giltigt område: %d:%02d:%02g" #: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 #: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 -#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2450 +#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2451 #: utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 #: utils/adt/timestamp.c:3450 #, c-format @@ -22950,34 +22986,34 @@ msgstr "\"%s\" är utanför giltigt intervall för typen double precision" #: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 #: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 #: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 -#: utils/adt/int8.c:1320 utils/adt/numeric.c:4358 utils/adt/numeric.c:4363 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "smallint utanför sitt intervall" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3564 utils/adt/numeric.c:9339 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, c-format msgid "cannot take square root of a negative number" msgstr "kan inte ta kvadratroten av ett negativt tal" -#: utils/adt/float.c:1526 utils/adt/numeric.c:3839 utils/adt/numeric.c:3951 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, 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:1530 utils/adt/numeric.c:3843 utils/adt/numeric.c:10244 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, 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:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3751 -#: utils/adt/numeric.c:10017 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 +#: utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "kan inte ta logartimen av noll" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3689 -#: utils/adt/numeric.c:3746 utils/adt/numeric.c:10021 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 +#: utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "kan inte ta logaritmen av ett negativt tal" @@ -22996,22 +23032,22 @@ msgstr "indata är utanför giltigt intervall" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "setseed-parameter %g är utanför giltigt intervall [-1,1]" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1723 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "antal måste vara större än noll" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1734 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "operand, undre gräns och övre gräns kan inte vara NaN" -#: utils/adt/float.c:4041 utils/adt/numeric.c:1739 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "undre och övre gräns måste vara ändliga" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1753 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "undre gräns kan inte vara samma som övre gräns" @@ -23421,7 +23457,7 @@ msgstr "stegstorleken kan inte vara noll" #: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 #: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 #: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 -#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4317 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 #: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" @@ -23539,23 +23575,23 @@ msgstr "kan inte typomvandla jsonb-objekt till typ %s" 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:751 +#: utils/adt/jsonb_util.c:748 #, 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:792 +#: utils/adt/jsonb_util.c:789 #, 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:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "total storlek på elementen i jsonb-array överskrider maximala %u byte" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 -#: utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 +#: utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "total storlek på element i jsonb-objekt överskrider maximum på %u byte" @@ -23958,12 +23994,12 @@ 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:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:701 #, c-format msgid "invalid escape string" msgstr "ogiltig escape-sträng" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:702 #, c-format msgid "Escape string must be empty or one character." msgstr "Escape-sträng måste vara tom eller ett tecken." @@ -24244,46 +24280,46 @@ msgstr "stegstorlek får inte vara NaN" msgid "step size cannot be infinity" msgstr "stegstorlek får inte vara oändligt" -#: utils/adt/numeric.c:3504 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "fakultet av ett negativt tal är odefinierat" -#: utils/adt/numeric.c:3514 utils/adt/numeric.c:6964 utils/adt/numeric.c:7437 -#: utils/adt/numeric.c:9814 utils/adt/numeric.c:10302 utils/adt/numeric.c:10428 -#: utils/adt/numeric.c:10502 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 +#: utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 +#: utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "overflow på värde i formatet numeric" -#: utils/adt/numeric.c:4224 utils/adt/numeric.c:4304 utils/adt/numeric.c:4345 -#: utils/adt/numeric.c:4539 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 +#: utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "kan inte konvertera NaN till %s" -#: utils/adt/numeric.c:4228 utils/adt/numeric.c:4308 utils/adt/numeric.c:4349 -#: utils/adt/numeric.c:4543 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 +#: utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "kan inte konvertera oändlighet till %s" -#: utils/adt/numeric.c:4552 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn är utanför giltigt intervall" -#: utils/adt/numeric.c:7521 utils/adt/numeric.c:7568 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "overflow i numeric-fält" -#: utils/adt/numeric.c:7522 +#: utils/adt/numeric.c:7523 #, 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:7569 +#: utils/adt/numeric.c:7570 #, 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." @@ -24324,99 +24360,99 @@ msgstr "nolltecken tillåts inte" msgid "percentile value %g is not between 0 and 1" msgstr "percentil-värde %g är inte mellan 0 och 1" -#: utils/adt/pg_locale.c:1228 +#: utils/adt/pg_locale.c:1229 #, c-format msgid "Apply system library package updates." msgstr "Applicera paketuppdateringar för systembibliotek." -#: utils/adt/pg_locale.c:1442 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "could not create locale \"%s\": %m" msgstr "kunde inte skapa locale \"%s\": %m" -#: utils/adt/pg_locale.c:1445 +#: utils/adt/pg_locale.c:1448 #, 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:1547 +#: utils/adt/pg_locale.c:1550 #, 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:1556 +#: utils/adt/pg_locale.c:1559 #, 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:1568 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "jämförelser (collation) med olika collate- och ctype-värden stöds inte av ICU" -#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1940 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1664 +#: utils/adt/pg_locale.c:1943 #, 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:1588 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "ICU stöds inte av detta bygge" -#: utils/adt/pg_locale.c:1609 +#: utils/adt/pg_locale.c:1612 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "jämförelse (collation) \"%s\" har ingen version men en version angavs" -#: utils/adt/pg_locale.c:1616 +#: utils/adt/pg_locale.c:1619 #, 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:1618 +#: utils/adt/pg_locale.c:1621 #, 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:1621 +#: utils/adt/pg_locale.c:1624 #, 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:1692 +#: utils/adt/pg_locale.c:1695 #, c-format msgid "could not load locale \"%s\"" msgstr "kunde inte skapa locale \"%s\"" -#: utils/adt/pg_locale.c:1717 +#: utils/adt/pg_locale.c:1720 #, 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:1755 +#: utils/adt/pg_locale.c:1758 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "kodning \"%s\" stöds inte av ICU" -#: utils/adt/pg_locale.c:1762 +#: utils/adt/pg_locale.c:1765 #, 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:1793 utils/adt/pg_locale.c:1802 -#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 +#: utils/adt/pg_locale.c:1796 utils/adt/pg_locale.c:1805 +#: utils/adt/pg_locale.c:1834 utils/adt/pg_locale.c:1844 #, c-format msgid "%s failed: %s" msgstr "%s misslyckades: %s" -#: utils/adt/pg_locale.c:2113 +#: utils/adt/pg_locale.c:2116 #, c-format msgid "invalid multibyte character for locale" msgstr "ogiltigt multibyte-tecken för lokalen" -#: utils/adt/pg_locale.c:2114 +#: utils/adt/pg_locale.c:2117 #, 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." @@ -24526,7 +24562,7 @@ msgstr "För många komman." msgid "Junk after right parenthesis or bracket." msgstr "Skräp efter höger parentes eller hakparentes." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1612 utils/adt/varlena.c:4549 #, c-format msgid "regular expression failed: %s" msgstr "reguljärt uttryck misslyckades: %s" @@ -24536,23 +24572,23 @@ msgstr "reguljärt uttryck misslyckades: %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "ogiltigt flagga till reguljärt uttryck: \"%.*s\"" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:848 #, 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:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1050 utils/adt/regexp.c:1432 utils/adt/regexp.c:1487 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s stöder inte \"global\"-flaggan" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1052 #, c-format msgid "Use the regexp_matches function instead." msgstr "Använd regexp_matches-funktionen istället." -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1234 #, c-format msgid "too many regular expression matches" msgstr "för många reguljära uttryck matchar" @@ -24568,7 +24604,7 @@ msgid "more than one operator named %s" msgstr "mer än en operator med namn %s" #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9828 utils/adt/ruleutils.c:9997 +#: utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "för många argument" @@ -24980,12 +25016,12 @@ 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:215 +#: utils/adt/tsvector.c:212 #, 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:222 +#: utils/adt/tsvector.c:219 #, 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)" @@ -25283,7 +25319,7 @@ msgstr "ej stödd XML-finess" 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:253 utils/mb/mbutils.c:627 +#: utils/adt/xml.c:253 utils/mb/mbutils.c:628 #, c-format msgid "invalid encoding name \"%s\"" msgstr "ogiltigt kodningsnamn \"%s\"" @@ -25338,96 +25374,96 @@ msgstr "kunde inte ställa in XML-felhanterare" 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:1985 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "Ogiltigt teckenvärde." -#: utils/adt/xml.c:1988 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "Mellanslag krävs." -#: utils/adt/xml.c:1991 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "standalone tillåter bara 'yes' eller 'no'." -#: utils/adt/xml.c:1994 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "Felaktig deklaration: saknar version." -#: utils/adt/xml.c:1997 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "Saknar kodning i textdeklaration." -#: utils/adt/xml.c:2000 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "Parsar XML-deklaration: förväntade sig '?>'" -#: utils/adt/xml.c:2003 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Okänd libxml-felkod: %d." -#: utils/adt/xml.c:2260 +#: utils/adt/xml.c:2254 #, c-format msgid "XML does not support infinite date values." msgstr "XML stöder inte oändliga datumvärden." -#: utils/adt/xml.c:2282 utils/adt/xml.c:2309 +#: utils/adt/xml.c:2276 utils/adt/xml.c:2303 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML stöder inte oändliga timestamp-värden." -#: utils/adt/xml.c:2725 +#: utils/adt/xml.c:2719 #, c-format msgid "invalid query" msgstr "ogiltig fråga" -#: utils/adt/xml.c:2817 +#: utils/adt/xml.c:2811 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "portalen \"%s\" returnerar inga tupler" -#: utils/adt/xml.c:4069 +#: utils/adt/xml.c:4063 #, c-format msgid "invalid array for XML namespace mapping" msgstr "ogiltig array till XML-namnrymdmappning" -#: utils/adt/xml.c:4070 +#: utils/adt/xml.c:4064 #, 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:4094 +#: utils/adt/xml.c:4088 #, c-format msgid "empty XPath expression" msgstr "tomt XPath-uttryck" -#: utils/adt/xml.c:4146 +#: utils/adt/xml.c:4140 #, c-format msgid "neither namespace name nor URI may be null" msgstr "varken namnrymdnamn eller URI får vara null" -#: utils/adt/xml.c:4153 +#: utils/adt/xml.c:4147 #, 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:4510 +#: utils/adt/xml.c:4504 #, c-format msgid "DEFAULT namespace is not supported" msgstr "namnrymden DEFAULT stöds inte" -#: utils/adt/xml.c:4539 +#: utils/adt/xml.c:4533 #, 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:4573 +#: utils/adt/xml.c:4567 #, 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:4720 +#: utils/adt/xml.c:4714 #, c-format msgid "more than one value returned by column XPath expression" msgstr "mer än ett värde returnerades från kolumns XPath-uttryck" @@ -25463,17 +25499,17 @@ msgstr "operatorklass \"%s\" för accessmetod %s saknar supportfunktion %d för msgid "cached plan must not change result type" msgstr "cache:ad plan får inte ändra resultattyp" -#: utils/cache/relcache.c:6328 +#: utils/cache/relcache.c:6344 #, 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:6330 +#: utils/cache/relcache.c:6346 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Fortsätter ändå, trots att något är fel." -#: utils/cache/relcache.c:6652 +#: utils/cache/relcache.c:6668 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "kunde inte ta bort cache-fil \"%s\": %m" @@ -26084,48 +26120,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:297 utils/mb/mbutils.c:900 +#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 #, c-format msgid "conversion between %s and %s is not supported" msgstr "konvertering mellan %s och %s stöds inte" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 -#: utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 +#: utils/mb/mbutils.c:843 #, 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:568 +#: utils/mb/mbutils.c:569 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "ogiltigt källkodningsnamn \"%s\"" -#: utils/mb/mbutils.c:573 +#: utils/mb/mbutils.c:574 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "ogiltigt målkodningsnamn \"%s\"" -#: utils/mb/mbutils.c:713 +#: utils/mb/mbutils.c:714 #, 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:877 +#: utils/mb/mbutils.c:878 #, c-format msgid "invalid Unicode code point" msgstr "ogiltig Unicode-kodpunkt" -#: utils/mb/mbutils.c:1146 +#: utils/mb/mbutils.c:1147 #, c-format msgid "bind_textdomain_codeset failed" msgstr "bind_textdomain_codeset misslyckades" -#: utils/mb/mbutils.c:1667 +#: utils/mb/mbutils.c:1668 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "ogiltigt byte-sekvens för kodning \"%s\": %s" -#: utils/mb/mbutils.c:1700 +#: utils/mb/mbutils.c:1709 #, 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\"" @@ -26160,7 +26196,7 @@ msgstr "Resursanvändning / Disk" #: utils/misc/guc.c:735 msgid "Resource Usage / Kernel Resources" -msgstr "Resursanvändning / Kärnresurser" +msgstr "Resursanvändning / Kernel-resurser" #: utils/misc/guc.c:737 msgid "Resource Usage / Cost-Based Vacuum Delay" @@ -27293,7 +27329,7 @@ msgstr "Tid att sova mellan körningar av autovacuum." #: utils/misc/guc.c:3251 msgid "Minimum number of tuple updates or deletes prior to vacuum." -msgstr "Minst antal tupel-uppdateringar eller raderingar innan vacuum." +msgstr "Minsta antal tupel-uppdateringar eller raderingar innan vacuum." #: utils/misc/guc.c:3260 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." @@ -28369,15 +28405,15 @@ msgstr "Misslyckades vid skapande av minneskontext \"%s\"." msgid "could not attach to dynamic shared area" msgstr "kunde inte ansluta till dynamisk delad area" -#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 -#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1120 -#: utils/mmgr/mcxt.c:1156 utils/mmgr/mcxt.c:1208 utils/mmgr/mcxt.c:1243 -#: utils/mmgr/mcxt.c:1278 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:928 utils/mmgr/mcxt.c:966 +#: utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1112 utils/mmgr/mcxt.c:1143 +#: utils/mmgr/mcxt.c:1179 utils/mmgr/mcxt.c:1231 utils/mmgr/mcxt.c:1266 +#: utils/mmgr/mcxt.c:1301 #, 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:1052 +#: utils/mmgr/mcxt.c:1067 #, c-format msgid "logging memory contexts of PID %d" msgstr "loggar minneskontext för PID %d" diff --git a/src/backend/po/uk.po b/src/backend/po/uk.po index db14ec38b4a..2ab87eec1b4 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: 2023-12-17 22:41+0000\n" -"PO-Revision-Date: 2023-12-18 17:41\n" +"POT-Creation-Date: 2025-12-31 03:18+0000\n" +"PO-Revision-Date: 2026-01-02 12:56\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -32,29 +32,29 @@ msgstr "не вдалося відкрити файл \"%s\" для читанн #: ../common/controldata_utils.c:96 ../common/controldata_utils.c:99 #: access/transam/timeline.c:143 access/transam/timeline.c:362 -#: access/transam/twophase.c:1329 access/transam/xlog.c:3575 -#: access/transam/xlog.c:4819 access/transam/xlog.c:11631 -#: access/transam/xlog.c:11644 access/transam/xlog.c:12099 -#: access/transam/xlog.c:12179 access/transam/xlog.c:12216 -#: access/transam/xlog.c:12276 access/transam/xlogfuncs.c:703 +#: access/transam/twophase.c:1329 access/transam/xlog.c:3594 +#: access/transam/xlog.c:4843 access/transam/xlog.c:11747 +#: access/transam/xlog.c:11760 access/transam/xlog.c:12215 +#: access/transam/xlog.c:12295 access/transam/xlog.c:12332 +#: access/transam/xlog.c:12392 access/transam/xlogfuncs.c:703 #: access/transam/xlogfuncs.c:722 commands/extension.c:3492 libpq/hba.c:534 -#: replication/basebackup.c:2026 replication/logical/origin.c:729 -#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:4951 -#: replication/logical/snapbuild.c:1863 replication/logical/snapbuild.c:1905 -#: replication/logical/snapbuild.c:1932 replication/slot.c:1727 -#: replication/slot.c:1768 replication/walsender.c:545 +#: replication/basebackup.c:2016 replication/logical/origin.c:729 +#: replication/logical/origin.c:765 replication/logical/reorderbuffer.c:5090 +#: replication/logical/snapbuild.c:1919 replication/logical/snapbuild.c:1961 +#: replication/logical/snapbuild.c:1988 replication/slot.c:1792 +#: replication/slot.c:1833 replication/walsender.c:559 #: storage/file/buffile.c:445 storage/file/copydir.c:195 -#: utils/adt/genfile.c:202 utils/adt/misc.c:888 utils/cache/relmapper.c:744 +#: utils/adt/genfile.c:202 utils/adt/misc.c:881 utils/cache/relmapper.c:744 #, c-format msgid "could not read file \"%s\": %m" msgstr "не вдалося прочитати файл \"%s\": %m" #: ../common/controldata_utils.c:107 ../common/controldata_utils.c:111 -#: access/transam/xlog.c:3580 access/transam/xlog.c:4824 -#: replication/basebackup.c:2030 replication/logical/origin.c:734 -#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1868 -#: replication/logical/snapbuild.c:1910 replication/logical/snapbuild.c:1937 -#: replication/slot.c:1731 replication/slot.c:1772 replication/walsender.c:550 +#: access/transam/xlog.c:3599 access/transam/xlog.c:4848 +#: replication/basebackup.c:2020 replication/logical/origin.c:734 +#: replication/logical/origin.c:773 replication/logical/snapbuild.c:1924 +#: replication/logical/snapbuild.c:1966 replication/logical/snapbuild.c:1993 +#: replication/slot.c:1796 replication/slot.c:1837 replication/walsender.c:564 #: utils/cache/relmapper.c:748 #, c-format msgid "could not read file \"%s\": read %d of %zu" @@ -64,18 +64,18 @@ msgstr "не вдалося прочитати файл \"%s\": прочитан #: ../common/controldata_utils.c:286 ../common/controldata_utils.c:289 #: access/heap/rewriteheap.c:1178 access/heap/rewriteheap.c:1281 #: access/transam/timeline.c:392 access/transam/timeline.c:438 -#: access/transam/timeline.c:516 access/transam/twophase.c:1341 -#: access/transam/twophase.c:1746 access/transam/xlog.c:3444 -#: access/transam/xlog.c:3615 access/transam/xlog.c:3620 -#: access/transam/xlog.c:3948 access/transam/xlog.c:4789 -#: access/transam/xlog.c:5714 access/transam/xlogfuncs.c:728 +#: access/transam/timeline.c:512 access/transam/twophase.c:1341 +#: access/transam/twophase.c:1753 access/transam/xlog.c:3445 +#: access/transam/xlog.c:3634 access/transam/xlog.c:3639 +#: access/transam/xlog.c:3958 access/transam/xlog.c:4813 +#: access/transam/xlog.c:5741 access/transam/xlogfuncs.c:728 #: commands/copyfrom.c:1586 commands/copyto.c:328 libpq/be-fsstubs.c:455 #: libpq/be-fsstubs.c:525 replication/logical/origin.c:667 -#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5009 -#: replication/logical/snapbuild.c:1772 replication/logical/snapbuild.c:1945 -#: replication/slot.c:1618 replication/slot.c:1779 replication/walsender.c:560 -#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:738 -#: storage/file/fd.c:3542 storage/file/fd.c:3645 utils/cache/relmapper.c:759 +#: replication/logical/origin.c:806 replication/logical/reorderbuffer.c:5148 +#: replication/logical/snapbuild.c:1828 replication/logical/snapbuild.c:2001 +#: replication/slot.c:1681 replication/slot.c:1844 replication/walsender.c:574 +#: storage/file/copydir.c:218 storage/file/copydir.c:223 storage/file/fd.c:735 +#: storage/file/fd.c:3528 storage/file/fd.c:3631 utils/cache/relmapper.c:759 #: utils/cache/relmapper.c:898 #, c-format msgid "could not close file \"%s\": %m" @@ -95,85 +95,85 @@ msgstr "можлива помилка у послідовності байтів "Порядок байтів, що використовують для зберігання файлу pg_control, може не відповідати тому, який використовується цією програмою. У такому випадку результати нижче будуть неправильним, і інсталяція PostgreSQL буде несумісною з цим каталогом даних." #: ../common/controldata_utils.c:227 ../common/controldata_utils.c:233 -#: ../common/file_utils.c:232 ../common/file_utils.c:291 -#: ../common/file_utils.c:365 access/heap/rewriteheap.c:1264 +#: ../common/file_utils.c:227 ../common/file_utils.c:286 +#: ../common/file_utils.c:360 access/heap/rewriteheap.c:1264 #: access/transam/timeline.c:111 access/transam/timeline.c:251 #: access/transam/timeline.c:348 access/transam/twophase.c:1285 -#: access/transam/xlog.c:3330 access/transam/xlog.c:3486 -#: access/transam/xlog.c:3530 access/transam/xlog.c:3728 -#: access/transam/xlog.c:3813 access/transam/xlog.c:3916 -#: access/transam/xlog.c:4809 access/transam/xlogutils.c:803 +#: access/transam/xlog.c:3332 access/transam/xlog.c:3511 +#: access/transam/xlog.c:3549 access/transam/xlog.c:3737 +#: access/transam/xlog.c:3823 access/transam/xlog.c:3926 +#: access/transam/xlog.c:4833 access/transam/xlogutils.c:803 #: postmaster/syslogger.c:1488 replication/basebackup.c:616 -#: replication/basebackup.c:1616 replication/logical/origin.c:719 -#: replication/logical/reorderbuffer.c:3604 -#: replication/logical/reorderbuffer.c:4155 -#: replication/logical/reorderbuffer.c:4931 -#: replication/logical/snapbuild.c:1727 replication/logical/snapbuild.c:1834 -#: replication/slot.c:1699 replication/walsender.c:518 -#: replication/walsender.c:2563 storage/file/copydir.c:161 -#: storage/file/fd.c:713 storage/file/fd.c:3306 storage/file/fd.c:3529 -#: storage/file/fd.c:3616 storage/smgr/md.c:506 utils/cache/relmapper.c:724 -#: utils/cache/relmapper.c:842 utils/error/elog.c:1938 -#: utils/init/miscinit.c:1359 utils/init/miscinit.c:1493 -#: utils/init/miscinit.c:1570 utils/misc/guc.c:8618 utils/misc/guc.c:8650 +#: replication/basebackup.c:1610 replication/logical/origin.c:719 +#: replication/logical/reorderbuffer.c:3743 +#: replication/logical/reorderbuffer.c:4294 +#: replication/logical/reorderbuffer.c:5070 +#: replication/logical/snapbuild.c:1783 replication/logical/snapbuild.c:1890 +#: replication/slot.c:1764 replication/walsender.c:532 +#: replication/walsender.c:2581 storage/file/copydir.c:161 +#: storage/file/fd.c:710 storage/file/fd.c:3297 storage/file/fd.c:3515 +#: storage/file/fd.c:3602 storage/smgr/md.c:506 utils/cache/relmapper.c:724 +#: utils/cache/relmapper.c:842 utils/error/elog.c:1958 +#: utils/init/miscinit.c:1403 utils/init/miscinit.c:1537 +#: utils/init/miscinit.c:1614 utils/misc/guc.c:8682 utils/misc/guc.c:8714 #, c-format msgid "could not open file \"%s\": %m" msgstr "не можливо відкрити файл \"%s\": %m" #: ../common/controldata_utils.c:251 ../common/controldata_utils.c:254 -#: access/transam/twophase.c:1719 access/transam/twophase.c:1728 -#: access/transam/xlog.c:11388 access/transam/xlog.c:11426 -#: access/transam/xlog.c:11839 access/transam/xlogfuncs.c:782 -#: postmaster/postmaster.c:5684 postmaster/syslogger.c:1499 +#: access/transam/twophase.c:1726 access/transam/twophase.c:1735 +#: access/transam/xlog.c:11504 access/transam/xlog.c:11542 +#: access/transam/xlog.c:11955 access/transam/xlogfuncs.c:782 +#: postmaster/postmaster.c:5688 postmaster/syslogger.c:1499 #: postmaster/syslogger.c:1512 utils/cache/relmapper.c:876 #, c-format msgid "could not write file \"%s\": %m" msgstr "не вдалося записати файл \"%s\": %m" #: ../common/controldata_utils.c:269 ../common/controldata_utils.c:275 -#: ../common/file_utils.c:303 ../common/file_utils.c:373 +#: ../common/file_utils.c:298 ../common/file_utils.c:368 #: access/heap/rewriteheap.c:960 access/heap/rewriteheap.c:1172 #: access/heap/rewriteheap.c:1275 access/transam/timeline.c:432 -#: access/transam/timeline.c:510 access/transam/twophase.c:1740 -#: access/transam/xlog.c:3437 access/transam/xlog.c:3609 -#: access/transam/xlog.c:4782 access/transam/xlog.c:10871 -#: access/transam/xlog.c:10912 replication/logical/snapbuild.c:1765 -#: replication/slot.c:1604 replication/slot.c:1709 storage/file/fd.c:730 -#: storage/file/fd.c:3637 storage/smgr/md.c:954 storage/smgr/md.c:995 -#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8405 +#: access/transam/timeline.c:506 access/transam/twophase.c:1747 +#: access/transam/xlog.c:3438 access/transam/xlog.c:3628 +#: access/transam/xlog.c:4806 access/transam/xlog.c:10987 +#: access/transam/xlog.c:11028 replication/logical/snapbuild.c:1821 +#: replication/slot.c:1665 replication/slot.c:1774 storage/file/fd.c:727 +#: storage/file/fd.c:3623 storage/smgr/md.c:956 storage/smgr/md.c:997 +#: storage/sync/sync.c:454 utils/cache/relmapper.c:891 utils/misc/guc.c:8469 #, c-format msgid "could not fsync file \"%s\": %m" msgstr "не вдалося fsync файл \"%s\": %m" #: ../common/cryptohash_openssl.c:104 ../common/exec.c:560 ../common/exec.c:605 #: ../common/exec.c:697 ../common/hmac_openssl.c:101 ../common/psprintf.c:143 -#: ../common/stringinfo.c:305 ../port/path.c:630 ../port/path.c:668 -#: ../port/path.c:685 access/transam/twophase.c:1399 access/transam/xlog.c:6694 -#: lib/dshash.c:245 libpq/auth.c:1491 libpq/auth.c:1559 libpq/auth.c:2117 -#: libpq/be-secure-gssapi.c:520 postmaster/bgworker.c:349 -#: postmaster/bgworker.c:948 postmaster/postmaster.c:2550 -#: postmaster/postmaster.c:4208 postmaster/postmaster.c:5609 -#: postmaster/postmaster.c:5973 +#: ../common/stringinfo.c:305 ../port/path.c:707 ../port/path.c:745 +#: ../port/path.c:762 access/transam/twophase.c:1399 access/transam/xlog.c:6721 +#: lib/dshash.c:245 libpq/auth.c:1497 libpq/auth.c:1565 libpq/auth.c:2123 +#: libpq/be-secure-gssapi.c:530 libpq/be-secure-gssapi.c:702 +#: postmaster/bgworker.c:349 postmaster/bgworker.c:948 +#: postmaster/postmaster.c:2554 postmaster/postmaster.c:4211 +#: postmaster/postmaster.c:5613 postmaster/postmaster.c:5977 #: replication/libpqwalreceiver/libpqwalreceiver.c:287 -#: replication/logical/logical.c:205 replication/walsender.c:592 -#: storage/buffer/localbuf.c:442 storage/file/fd.c:888 storage/file/fd.c:1360 -#: storage/file/fd.c:1521 storage/file/fd.c:2329 storage/ipc/procarray.c:1460 -#: storage/ipc/procarray.c:2281 storage/ipc/procarray.c:2288 -#: storage/ipc/procarray.c:2793 storage/ipc/procarray.c:3470 -#: utils/adt/cryptohashfuncs.c:46 utils/adt/cryptohashfuncs.c:66 -#: utils/adt/formatting.c:1699 utils/adt/formatting.c:1823 -#: utils/adt/formatting.c:1948 utils/adt/pg_locale.c:450 -#: utils/adt/pg_locale.c:614 utils/adt/regexp.c:223 utils/fmgr/dfmgr.c:229 -#: utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 -#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:401 utils/mb/mbutils.c:429 -#: utils/mb/mbutils.c:814 utils/mb/mbutils.c:841 utils/misc/guc.c:5049 -#: utils/misc/guc.c:5065 utils/misc/guc.c:5078 utils/misc/guc.c:8383 +#: replication/logical/logical.c:206 replication/walsender.c:606 +#: storage/buffer/localbuf.c:442 storage/file/fd.c:879 storage/file/fd.c:1351 +#: storage/file/fd.c:1512 storage/file/fd.c:2320 storage/ipc/procarray.c:1472 +#: storage/ipc/procarray.c:2293 storage/ipc/procarray.c:2300 +#: storage/ipc/procarray.c:2805 storage/ipc/procarray.c:3482 +#: tcop/postgres.c:3620 utils/adt/cryptohashfuncs.c:46 +#: utils/adt/cryptohashfuncs.c:66 utils/adt/formatting.c:1699 +#: utils/adt/formatting.c:1823 utils/adt/formatting.c:1948 +#: utils/adt/pg_locale.c:451 utils/adt/pg_locale.c:615 utils/adt/regexp.c:223 +#: utils/fmgr/dfmgr.c:229 utils/hash/dynahash.c:513 utils/hash/dynahash.c:613 +#: utils/hash/dynahash.c:1116 utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 +#: utils/mb/mbutils.c:815 utils/mb/mbutils.c:842 utils/misc/guc.c:5061 +#: utils/misc/guc.c:5077 utils/misc/guc.c:5090 utils/misc/guc.c:8447 #: utils/misc/tzparser.c:476 utils/mmgr/aset.c:476 utils/mmgr/dsa.c:702 #: utils/mmgr/dsa.c:724 utils/mmgr/dsa.c:805 utils/mmgr/generation.c:234 -#: utils/mmgr/mcxt.c:888 utils/mmgr/mcxt.c:924 utils/mmgr/mcxt.c:962 -#: utils/mmgr/mcxt.c:1000 utils/mmgr/mcxt.c:1088 utils/mmgr/mcxt.c:1119 -#: utils/mmgr/mcxt.c:1155 utils/mmgr/mcxt.c:1207 utils/mmgr/mcxt.c:1242 -#: utils/mmgr/mcxt.c:1277 utils/mmgr/slab.c:238 +#: utils/mmgr/mcxt.c:891 utils/mmgr/mcxt.c:927 utils/mmgr/mcxt.c:965 +#: utils/mmgr/mcxt.c:1003 utils/mmgr/mcxt.c:1111 utils/mmgr/mcxt.c:1142 +#: utils/mmgr/mcxt.c:1178 utils/mmgr/mcxt.c:1230 utils/mmgr/mcxt.c:1265 +#: utils/mmgr/mcxt.c:1300 utils/mmgr/slab.c:238 #, c-format msgid "out of memory" msgstr "недостатньо пам'яті" @@ -198,29 +198,29 @@ msgstr "неможливо прочитати бінарний файл \"%s\"" msgid "could not find a \"%s\" to execute" msgstr "неможливо знайти \"%s\" для виконання" -#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:424 +#: ../common/exec.c:282 ../common/exec.c:321 utils/init/miscinit.c:425 #, c-format msgid "could not change directory to \"%s\": %m" msgstr "не вдалося змінити каталог на \"%s\": %m" -#: ../common/exec.c:299 access/transam/xlog.c:11262 -#: replication/basebackup.c:1434 utils/adt/misc.c:369 +#: ../common/exec.c:299 access/transam/xlog.c:11378 +#: replication/basebackup.c:1428 utils/adt/misc.c:362 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "не можливо прочитати символічне послання \"%s\": %m" -#: ../common/exec.c:422 libpq/pqcomm.c:746 storage/ipc/latch.c:1085 -#: storage/ipc/latch.c:1254 storage/ipc/latch.c:1483 storage/ipc/latch.c:1636 -#: storage/ipc/latch.c:1752 +#: ../common/exec.c:422 libpq/pqcomm.c:742 storage/ipc/latch.c:1091 +#: storage/ipc/latch.c:1260 storage/ipc/latch.c:1489 storage/ipc/latch.c:1642 +#: storage/ipc/latch.c:1758 #, 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:162 -#: ../common/psprintf.c:145 ../port/path.c:632 ../port/path.c:670 -#: ../port/path.c:687 utils/misc/ps_status.c:181 utils/misc/ps_status.c:189 -#: utils/misc/ps_status.c:219 utils/misc/ps_status.c:227 +#: ../common/psprintf.c:145 ../port/path.c:709 ../port/path.c:747 +#: ../port/path.c:764 utils/misc/ps_status.c:210 utils/misc/ps_status.c:218 +#: utils/misc/ps_status.c:248 utils/misc/ps_status.c:256 #, c-format msgid "out of memory\n" msgstr "недостатньо пам'яті\n" @@ -230,122 +230,123 @@ msgstr "недостатньо пам'яті\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n" -#: ../common/file_utils.c:87 ../common/file_utils.c:451 -#: ../common/file_utils.c:455 access/transam/twophase.c:1297 -#: access/transam/xlog.c:11364 access/transam/xlog.c:11402 -#: access/transam/xlog.c:11619 access/transam/xlogarchive.c:110 +#: ../common/file_utils.c:86 ../common/file_utils.c:446 +#: ../common/file_utils.c:450 access/transam/twophase.c:1297 +#: access/transam/xlog.c:11480 access/transam/xlog.c:11518 +#: access/transam/xlog.c:11735 access/transam/xlogarchive.c:110 #: access/transam/xlogarchive.c:227 commands/copyfrom.c:1536 -#: commands/copyto.c:726 commands/extension.c:3471 commands/tablespace.c:806 -#: commands/tablespace.c:897 replication/basebackup.c:439 -#: replication/basebackup.c:622 replication/basebackup.c:698 -#: replication/logical/snapbuild.c:1644 storage/file/copydir.c:68 -#: storage/file/copydir.c:107 storage/file/fd.c:1871 storage/file/fd.c:1957 -#: storage/file/fd.c:3157 storage/file/fd.c:3361 utils/adt/dbsize.c:70 -#: utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 utils/adt/genfile.c:418 -#: utils/adt/genfile.c:644 utils/adt/misc.c:354 guc-file.l:1062 +#: commands/copyto.c:730 commands/extension.c:3471 commands/tablespace.c:805 +#: commands/tablespace.c:894 postmaster/pgarch.c:696 +#: replication/basebackup.c:439 replication/basebackup.c:622 +#: replication/basebackup.c:698 replication/logical/snapbuild.c:1700 +#: storage/file/copydir.c:68 storage/file/copydir.c:107 storage/file/fd.c:1862 +#: storage/file/fd.c:1948 storage/file/fd.c:3148 storage/file/fd.c:3351 +#: utils/adt/dbsize.c:70 utils/adt/dbsize.c:222 utils/adt/dbsize.c:302 +#: utils/adt/genfile.c:418 utils/adt/genfile.c:644 utils/adt/misc.c:348 +#: guc-file.l:1062 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не вдалося отримати інформацію від файлу \"%s\": %m" -#: ../common/file_utils.c:166 ../common/pgfnames.c:48 commands/tablespace.c:729 -#: commands/tablespace.c:739 postmaster/postmaster.c:1518 -#: storage/file/fd.c:2732 storage/file/reinit.c:122 utils/adt/misc.c:263 +#: ../common/file_utils.c:161 ../common/pgfnames.c:48 commands/tablespace.c:729 +#: commands/tablespace.c:739 postmaster/postmaster.c:1522 +#: storage/file/fd.c:2723 storage/file/reinit.c:122 utils/adt/misc.c:263 #: utils/misc/tzparser.c:338 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не вдалося відкрити каталог \"%s\": %m" -#: ../common/file_utils.c:200 ../common/pgfnames.c:69 storage/file/fd.c:2744 +#: ../common/file_utils.c:195 ../common/pgfnames.c:69 storage/file/fd.c:2735 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не вдалося прочитати каталог \"%s\": %m" -#: ../common/file_utils.c:383 access/transam/xlogarchive.c:412 -#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1784 -#: replication/slot.c:643 replication/slot.c:1490 replication/slot.c:1632 -#: storage/file/fd.c:748 storage/file/fd.c:849 utils/time/snapmgr.c:1282 +#: ../common/file_utils.c:378 access/transam/xlogarchive.c:412 +#: postmaster/syslogger.c:1523 replication/logical/snapbuild.c:1840 +#: replication/slot.c:672 replication/slot.c:1548 replication/slot.c:1697 +#: storage/file/fd.c:745 storage/file/fd.c:843 utils/time/snapmgr.c:1282 #, c-format msgid "could not rename file \"%s\" to \"%s\": %m" msgstr "не вдалося перейменувати файл \"%s\" на \"%s\": %m" -#: ../common/jsonapi.c:1083 +#: ../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Неприпустима спеціальна послідовність \"\\%s\"." -#: ../common/jsonapi.c:1086 +#: ../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ зі значенням 0x%02x повинен бути пропущений." -#: ../common/jsonapi.c:1089 +#: ../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Очікувався кінець введення, але знайдено \"%s\"." -#: ../common/jsonapi.c:1092 +#: ../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Очікувався елемент масиву або \"]\", але знайдено \"%s\"." -#: ../common/jsonapi.c:1095 +#: ../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Очікувалось \",\" або \"]\", але знайдено \"%s\"." -#: ../common/jsonapi.c:1098 +#: ../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Очікувалось \":\", але знайдено \"%s\"." -#: ../common/jsonapi.c:1101 +#: ../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Очікувалось значення JSON, але знайдено \"%s\"." -#: ../common/jsonapi.c:1104 +#: ../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "Несподіваний кінець вхідного рядка." -#: ../common/jsonapi.c:1106 +#: ../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Очікувався рядок або \"}\", але знайдено \"%s\"." -#: ../common/jsonapi.c:1109 +#: ../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Очікувалось \",\" або \"}\", але знайдено \"%s\"." -#: ../common/jsonapi.c:1112 +#: ../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Очікувався рядок, але знайдено \"%s\"." -#: ../common/jsonapi.c:1115 +#: ../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "Неприпустимий маркер \"%s\"." -#: ../common/jsonapi.c:1118 jsonpath_scan.l:499 +#: ../common/jsonapi.c:1122 jsonpath_scan.l:499 #, c-format msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 не можна перетворити в текст." -#: ../common/jsonapi.c:1120 +#: ../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" повинні прямувати чотири шістнадцяткових числа." -#: ../common/jsonapi.c:1123 +#: ../common/jsonapi.c:1127 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:1125 jsonpath_scan.l:520 +#: ../common/jsonapi.c:1129 jsonpath_scan.l:520 #, c-format msgid "Unicode high surrogate must not follow a high surrogate." msgstr "Старший сурогат Unicode не повинен прямувати за іншим старшим сурогатом." -#: ../common/jsonapi.c:1127 jsonpath_scan.l:531 jsonpath_scan.l:541 +#: ../common/jsonapi.c:1131 jsonpath_scan.l:531 jsonpath_scan.l:541 #: jsonpath_scan.l:583 #, c-format msgid "Unicode low surrogate must follow a high surrogate." @@ -381,7 +382,7 @@ msgstr "неприпустима назва відгалуження" msgid "Valid fork names are \"main\", \"fsm\", \"vm\", and \"init\"." msgstr "Дозволені назви відгалуження: \"main\", \"fsm\", \"vm\" або \"init\"." -#: ../common/restricted_token.c:64 libpq/auth.c:1521 libpq/auth.c:2553 +#: ../common/restricted_token.c:64 libpq/auth.c:1527 libpq/auth.c:2559 #, c-format msgid "could not load library \"%s\": error code %lu" msgstr "не вдалося завантажити бібліотеку \"%s\": код помилки %lu" @@ -449,7 +450,7 @@ msgstr "недостатньо пам'яті\n\n" msgid "could not look up effective user ID %ld: %s" msgstr "не можу знайти користувача з ефективним ID %ld: %s" -#: ../common/username.c:45 libpq/auth.c:2053 +#: ../common/username.c:45 libpq/auth.c:2059 msgid "user does not exist" msgstr "користувача не існує" @@ -498,50 +499,50 @@ msgstr "не вдалося визначити кодування для наб msgid "could not determine encoding for locale \"%s\": codeset is \"%s\"" msgstr "не вдалося визначити кодування для докалі \"%s\": набір символів \"%s\"" -#: ../port/dirmod.c:218 +#: ../port/dirmod.c:244 #, c-format msgid "could not set junction for \"%s\": %s" msgstr "не вдалося встановити сполучення для \"%s\": %s" -#: ../port/dirmod.c:221 +#: ../port/dirmod.c:247 #, c-format msgid "could not set junction for \"%s\": %s\n" msgstr "не вдалося встановити сполучення для \"%s\": %s\n" -#: ../port/dirmod.c:295 +#: ../port/dirmod.c:321 #, c-format msgid "could not get junction for \"%s\": %s" msgstr "не вдалося встановити сполучення для \"%s\": %s" -#: ../port/dirmod.c:298 +#: ../port/dirmod.c:324 #, c-format msgid "could not get junction for \"%s\": %s\n" msgstr "не вдалося встановити сполучення для \"%s\": %s\n" -#: ../port/open.c:126 +#: ../port/open.c:117 #, c-format msgid "could not open file \"%s\": %s" msgstr "не вдалося відкрити файл \"%s\": %s" -#: ../port/open.c:127 +#: ../port/open.c:118 msgid "lock violation" msgstr "порушення блокування" -#: ../port/open.c:127 +#: ../port/open.c:118 msgid "sharing violation" msgstr "порушення спільного доступу" -#: ../port/open.c:128 +#: ../port/open.c:119 #, c-format msgid "Continuing to retry for 30 seconds." msgstr "Продовжую спроби протягом 30 секунд." -#: ../port/open.c:129 +#: ../port/open.c:120 #, c-format msgid "You might have antivirus, backup, or similar software interfering with the database system." msgstr "Ви можливо маєте антивірус, резервне копіювання або аналогічне програмне забезпечення, що втручається у роботу системи бази даних." -#: ../port/path.c:654 +#: ../port/path.c:731 #, c-format msgid "could not get current working directory: %s\n" msgstr "не вдалося отримати поточний робочий каталог: %s\n" @@ -572,7 +573,7 @@ msgid "request for BRIN range summarization for index \"%s\" page %u was not rec msgstr "запит на підсумок діапазону BRIN для індексу «%s» сторінки %u не вдалося записати" #: access/brin/brin.c:1036 access/brin/brin.c:1146 access/gin/ginfast.c:1042 -#: access/transam/xlog.c:11033 access/transam/xlog.c:11570 +#: access/transam/xlog.c:11149 access/transam/xlog.c:11686 #: access/transam/xlogfuncs.c:274 access/transam/xlogfuncs.c:301 #: access/transam/xlogfuncs.c:340 access/transam/xlogfuncs.c:361 #: access/transam/xlogfuncs.c:382 access/transam/xlogfuncs.c:452 @@ -602,13 +603,13 @@ msgid "could not open parent table of index \"%s\"" msgstr "не вдалося відкрити батьківську таблицю індексу \"%s\"" #: access/brin/brin.c:1114 access/brin/brin.c:1213 access/gin/ginfast.c:1087 -#: parser/parse_utilcmd.c:2284 +#: parser/parse_utilcmd.c:2291 #, c-format msgid "index \"%s\" is not valid" msgstr "індекс \"%s\" не є припустимим" -#: access/brin/brin_bloom.c:750 access/brin/brin_bloom.c:792 -#: access/brin/brin_minmax_multi.c:2986 access/brin/brin_minmax_multi.c:3129 +#: access/brin/brin_bloom.c:755 access/brin/brin_bloom.c:797 +#: access/brin/brin_minmax_multi.c:2977 access/brin/brin_minmax_multi.c:3120 #: statistics/dependencies.c:662 statistics/dependencies.c:715 #: statistics/mcv.c:1483 statistics/mcv.c:1514 statistics/mvdistinct.c:343 #: statistics/mvdistinct.c:396 utils/adt/pseudotypes.c:43 @@ -619,7 +620,7 @@ msgstr "не можна прийняти значення типу %s" #: access/brin/brin_pageops.c:76 access/brin/brin_pageops.c:362 #: access/brin/brin_pageops.c:848 access/gin/ginentrypage.c:110 -#: access/gist/gist.c:1461 access/spgist/spgdoinsert.c:2000 +#: access/gist/gist.c:1468 access/spgist/spgdoinsert.c:2000 #: access/spgist/spgdoinsert.c:2275 #, c-format msgid "index row size %zu exceeds maximum %zu for index \"%s\"" @@ -728,13 +729,13 @@ msgstr "кількість стовпців (%d) перевищує обмеже msgid "number of index columns (%d) exceeds limit (%d)" msgstr "кількість індексних стовпців (%d) перевищує обмеження (%d)" -#: access/common/indextuple.c:190 access/spgist/spgutils.c:959 +#: access/common/indextuple.c:190 access/spgist/spgutils.c:977 #, c-format msgid "index row requires %zu bytes, maximum size is %zu" msgstr "індексний рядок вимагає %zu байтів, максимальний розмір %zu" #: access/common/printtup.c:292 tcop/fastpath.c:106 tcop/fastpath.c:453 -#: tcop/postgres.c:1906 +#: tcop/postgres.c:1887 #, c-format msgid "unsupported format code: %d" msgstr "цей формат коду не підтримується:%d" @@ -757,57 +758,62 @@ msgstr "перевищено встановлене користувачем о msgid "RESET must not include values for parameters" msgstr "RESET не має містити значення для параметрів" -#: access/common/reloptions.c:1257 +#: access/common/reloptions.c:1258 #, c-format msgid "unrecognized parameter namespace \"%s\"" msgstr "нерозпізнаний параметр простору імен \"%s\"" -#: access/common/reloptions.c:1294 utils/misc/guc.c:12546 +#: access/common/reloptions.c:1288 commands/foreigncmds.c:86 +#, c-format +msgid "invalid option name \"%s\": must not contain \"=\"" +msgstr "неприпустиме ім'я параметра \"%s\": не може містити \"=\"" + +#: access/common/reloptions.c:1303 utils/misc/guc.c:12615 #, c-format msgid "tables declared WITH OIDS are not supported" msgstr "таблиці, позначені WITH OIDS, не підтримуються" -#: access/common/reloptions.c:1464 +#: access/common/reloptions.c:1473 #, c-format msgid "unrecognized parameter \"%s\"" msgstr "нерозпізнаний параметр \"%s\"" -#: access/common/reloptions.c:1576 +#: access/common/reloptions.c:1585 #, c-format msgid "parameter \"%s\" specified more than once" msgstr "параметр «%s» вказано кілька разів" -#: access/common/reloptions.c:1592 +#: access/common/reloptions.c:1601 #, c-format msgid "invalid value for boolean option \"%s\": %s" msgstr "неприпустиме значення для булевого параметра \"%s\": %s" -#: access/common/reloptions.c:1604 +#: access/common/reloptions.c:1613 #, c-format msgid "invalid value for integer option \"%s\": %s" msgstr "неприпустиме значення для цілого параметра \"%s\": %s" -#: access/common/reloptions.c:1610 access/common/reloptions.c:1630 +#: access/common/reloptions.c:1619 access/common/reloptions.c:1639 #, c-format msgid "value %s out of bounds for option \"%s\"" msgstr "значення %s поза допустимими межами для параметра \"%s\"" -#: access/common/reloptions.c:1612 +#: access/common/reloptions.c:1621 #, c-format msgid "Valid values are between \"%d\" and \"%d\"." msgstr "Припустимі значення знаходяться між \"%d\" і \"%d\"." -#: access/common/reloptions.c:1624 +#: access/common/reloptions.c:1633 #, c-format msgid "invalid value for floating point option \"%s\": %s" msgstr "неприпустиме значення для числа з плавучою точкою параметра \"%s\": %s" -#: access/common/reloptions.c:1632 +#: access/common/reloptions.c:1641 #, c-format msgid "Valid values are between \"%f\" and \"%f\"." msgstr "Припустимі значення знаходяться між \"%f\" і \"%f\"." -#: access/common/reloptions.c:1654 +#: access/common/reloptions.c:1663 #, c-format msgid "invalid value for enum option \"%s\": %s" msgstr "недійсне значення для параметра перерахування \"%s\": %s" @@ -822,8 +828,8 @@ msgstr "метод стискання lz4 не підтримується" msgid "This functionality requires the server to be built with lz4 support." msgstr "Ця функціональність потребує, щоб сервер був побудований з підтримкою lz4." -#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1589 -#: utils/adt/xml.c:224 +#: access/common/toast_compression.c:34 utils/adt/pg_locale.c:1592 +#: utils/adt/xml.c:234 #, c-format msgid "You need to rebuild PostgreSQL using %s." msgstr "Вам потрібно перебудувати PostgreSQL за допомогою %s." @@ -864,18 +870,18 @@ msgstr "доступ до тимчасових індексів з інших с msgid "failed to re-find tuple within index \"%s\"" msgstr "не вдалося повторно знайти кортеж в межах індексу \"%s\"" -#: access/gin/ginscan.c:431 +#: access/gin/ginscan.c:479 #, 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:480 #, c-format msgid "To fix this, do REINDEX INDEX \"%s\"." msgstr "Щоб виправити це, зробіть REINDEX INDEX \"%s\"." -#: access/gin/ginutil.c:145 executor/execExpr.c:2169 -#: utils/adt/arrayfuncs.c:3866 utils/adt/arrayfuncs.c:6534 +#: access/gin/ginutil.c:145 executor/execExpr.c:2177 +#: utils/adt/arrayfuncs.c:3873 utils/adt/arrayfuncs.c:6543 #: utils/adt/rowtypes.c:957 #, c-format msgid "could not identify a comparison function for type %s" @@ -917,7 +923,7 @@ msgstr "Це викликано неповним поділом сторінки msgid "Please REINDEX it." msgstr "Будь ласка, виконайте REINDEX." -#: access/gist/gist.c:1194 +#: access/gist/gist.c:1201 #, c-format msgid "fixing incomplete split in index \"%s\", block %u" msgstr "виправлення неповного розділу в індексі \"%s\", блок %u" @@ -960,9 +966,9 @@ msgstr "сімейство операторів \"%s\" з методом дос msgid "could not determine which collation to use for string hashing" msgstr "не вдалося визначити, який параметр сортування використати для обчислення хешу рядків" -#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:711 -#: catalog/heap.c:717 commands/createas.c:206 commands/createas.c:515 -#: commands/indexcmds.c:1964 commands/tablecmds.c:16959 commands/view.c:86 +#: access/hash/hashfunc.c:279 access/hash/hashfunc.c:336 catalog/heap.c:714 +#: catalog/heap.c:720 commands/createas.c:206 commands/createas.c:515 +#: commands/indexcmds.c:1971 commands/tablecmds.c:17208 commands/view.c:86 #: regex/regc_pg_locale.c:263 utils/adt/formatting.c:1666 #: utils/adt/formatting.c:1790 utils/adt/formatting.c:1915 utils/adt/like.c:194 #: utils/adt/like_support.c:1004 utils/adt/varchar.c:733 @@ -977,7 +983,7 @@ msgid "index row size %zu exceeds hash maximum %zu" msgstr "індексний рядок розміру %zu перевищує максимальний хеш %zu" #: access/hash/hashinsert.c:84 access/spgist/spgdoinsert.c:2004 -#: access/spgist/spgdoinsert.c:2279 access/spgist/spgutils.c:1020 +#: access/spgist/spgdoinsert.c:2279 access/spgist/spgutils.c:1038 #, c-format msgid "Values larger than a buffer page cannot be indexed." msgstr "Значення, що перевищують буфер сторінки, не можна індексувати." @@ -1017,37 +1023,43 @@ msgstr "сімейство операторів \"%s\" з методом дос msgid "operator family \"%s\" of access method %s is missing cross-type operator(s)" msgstr "сімейство операторів \"%s\" з методом доступу %s не містить міжтипового оператора (ів)" -#: access/heap/heapam.c:2288 +#: access/heap/heapam.c:2302 #, c-format msgid "cannot insert tuples in a parallel worker" msgstr "не вдалося вставити кортежі в паралельного працівника" -#: access/heap/heapam.c:2759 +#: access/heap/heapam.c:2773 #, c-format msgid "cannot delete tuples during a parallel operation" msgstr "не вдалося видалити кортежі під час паралельної операції" -#: access/heap/heapam.c:2805 +#: access/heap/heapam.c:2819 #, c-format msgid "attempted to delete invisible tuple" msgstr "спроба видалити невидимий кортеж" -#: access/heap/heapam.c:3251 access/heap/heapam.c:6113 +#: access/heap/heapam.c:3265 access/heap/heapam.c:6617 access/index/genam.c:816 #, c-format msgid "cannot update tuples during a parallel operation" msgstr "неможливо оновити кортежі під час паралельної операції" -#: access/heap/heapam.c:3392 +#: access/heap/heapam.c:3452 #, c-format msgid "attempted to update invisible tuple" msgstr "спроба оновити невидимий кортеж" -#: access/heap/heapam.c:4757 access/heap/heapam.c:4795 -#: access/heap/heapam.c:5060 access/heap/heapam_handler.c:457 +#: access/heap/heapam.c:4941 access/heap/heapam.c:4979 +#: access/heap/heapam.c:5246 access/heap/heapam_handler.c:457 #, c-format msgid "could not obtain lock on row in relation \"%s\"" msgstr "не вдалося отримати блокування у рядку стосовно \"%s\"" +#: access/heap/heapam.c:6371 commands/trigger.c:3152 +#: executor/nodeModifyTable.c:1988 executor/nodeModifyTable.c:2078 +#, c-format +msgid "tuple to be updated was already modified by an operation triggered by the current command" +msgstr "кортеж, який повинен бути оновленим, вже змінений в операції, яка викликана поточною командою" + #: access/heap/heapam_handler.c:401 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update" @@ -1064,13 +1076,13 @@ msgid "could not write to file \"%s\", wrote %d of %d: %m" msgstr "не вдалося записати до файлу \"%s\", записано %d з %d: %m" #: access/heap/rewriteheap.c:1013 access/heap/rewriteheap.c:1131 -#: access/transam/timeline.c:329 access/transam/timeline.c:485 -#: access/transam/xlog.c:3353 access/transam/xlog.c:3544 -#: access/transam/xlog.c:4761 access/transam/xlog.c:11379 -#: access/transam/xlog.c:11417 access/transam/xlog.c:11822 -#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4633 -#: postmaster/postmaster.c:5671 replication/logical/origin.c:587 -#: replication/slot.c:1551 storage/file/copydir.c:167 storage/smgr/md.c:218 +#: access/transam/timeline.c:329 access/transam/timeline.c:481 +#: access/transam/xlog.c:3354 access/transam/xlog.c:3563 +#: access/transam/xlog.c:4785 access/transam/xlog.c:11495 +#: access/transam/xlog.c:11533 access/transam/xlog.c:11938 +#: access/transam/xlogfuncs.c:776 postmaster/postmaster.c:4636 +#: postmaster/postmaster.c:5675 replication/logical/origin.c:587 +#: replication/slot.c:1609 storage/file/copydir.c:167 storage/smgr/md.c:218 #: utils/time/snapmgr.c:1261 #, c-format msgid "could not create file \"%s\": %m" @@ -1082,28 +1094,28 @@ msgid "could not truncate file \"%s\" to %u: %m" msgstr "не вдалося скоротити файл \"%s\" до потрібного розміру %u: %m" #: access/heap/rewriteheap.c:1159 access/transam/timeline.c:384 -#: access/transam/timeline.c:424 access/transam/timeline.c:502 -#: access/transam/xlog.c:3425 access/transam/xlog.c:3600 -#: access/transam/xlog.c:4773 postmaster/postmaster.c:4643 -#: postmaster/postmaster.c:4653 replication/logical/origin.c:599 +#: access/transam/timeline.c:424 access/transam/timeline.c:498 +#: access/transam/xlog.c:3426 access/transam/xlog.c:3619 +#: access/transam/xlog.c:4797 postmaster/postmaster.c:4646 +#: postmaster/postmaster.c:4656 replication/logical/origin.c:599 #: replication/logical/origin.c:641 replication/logical/origin.c:660 -#: replication/logical/snapbuild.c:1741 replication/slot.c:1586 +#: replication/logical/snapbuild.c:1797 replication/slot.c:1645 #: storage/file/buffile.c:506 storage/file/copydir.c:207 -#: utils/init/miscinit.c:1434 utils/init/miscinit.c:1445 -#: utils/init/miscinit.c:1453 utils/misc/guc.c:8366 utils/misc/guc.c:8397 -#: utils/misc/guc.c:10324 utils/misc/guc.c:10338 utils/time/snapmgr.c:1266 +#: utils/init/miscinit.c:1478 utils/init/miscinit.c:1489 +#: utils/init/miscinit.c:1497 utils/misc/guc.c:8430 utils/misc/guc.c:8461 +#: utils/misc/guc.c:10388 utils/misc/guc.c:10402 utils/time/snapmgr.c:1266 #: utils/time/snapmgr.c:1273 #, c-format msgid "could not write to file \"%s\": %m" msgstr "неможливо записати до файлу \"%s\": %m" -#: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1679 +#: access/heap/rewriteheap.c:1249 access/transam/twophase.c:1686 #: access/transam/xlogarchive.c:118 access/transam/xlogarchive.c:422 -#: postmaster/postmaster.c:1096 postmaster/syslogger.c:1465 -#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4424 -#: replication/logical/snapbuild.c:1686 replication/logical/snapbuild.c:2102 -#: replication/slot.c:1683 storage/file/fd.c:788 storage/file/fd.c:3177 -#: storage/file/fd.c:3239 storage/file/reinit.c:250 storage/ipc/dsm.c:315 +#: postmaster/postmaster.c:1098 postmaster/syslogger.c:1465 +#: replication/logical/origin.c:575 replication/logical/reorderbuffer.c:4563 +#: replication/logical/snapbuild.c:1742 replication/logical/snapbuild.c:2162 +#: replication/slot.c:1748 storage/file/fd.c:785 storage/file/fd.c:3168 +#: storage/file/fd.c:3230 storage/file/reinit.c:250 storage/ipc/dsm.c:315 #: storage/smgr/md.c:347 storage/smgr/md.c:397 storage/sync/sync.c:250 #: utils/time/snapmgr.c:1606 #, c-format @@ -1171,17 +1183,17 @@ msgstr "%u сторінок з таблиці (%.2f%% від загальної 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:846 commands/analyze.c:814 +#: access/heap/vacuumlazy.c:846 commands/analyze.c:819 #, c-format msgid "I/O timings: read: %.3f ms, write: %.3f ms\n" msgstr "час вводу-виведення: читання %.3f мс, запис: %.3f мс\n" -#: access/heap/vacuumlazy.c:849 commands/analyze.c:817 +#: access/heap/vacuumlazy.c:849 commands/analyze.c:822 #, c-format msgid "avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n" msgstr "середня швидкість читання: %.3f МБ/с, середня швидкість запису: %.3f МБ/с\n" -#: access/heap/vacuumlazy.c:852 commands/analyze.c:819 +#: access/heap/vacuumlazy.c:852 commands/analyze.c:824 #, c-format msgid "buffer usage: %lld hits, %lld misses, %lld dirtied\n" msgstr "використання буфера: %lld звернень, %lld промахів, %lld, брудних записів\n" @@ -1191,7 +1203,7 @@ msgstr "використання буфера: %lld звернень, %lld пр msgid "WAL usage: %lld records, %lld full page images, %llu bytes\n" msgstr "Використання WAL: %lld записів, %lld зображень на повну сторінку, %llu байтів\n" -#: access/heap/vacuumlazy.c:861 commands/analyze.c:823 +#: access/heap/vacuumlazy.c:861 commands/analyze.c:828 #, c-format msgid "system usage: %s" msgstr "використання системи: %s" @@ -1234,8 +1246,8 @@ msgstr[1] "%u заморожені сторінки.\n" msgstr[2] "%u заморожених сторінок.\n" msgstr[3] "%u заморожених сторінок.\n" -#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4128 -#: commands/indexcmds.c:4147 +#: access/heap/vacuumlazy.c:1666 commands/indexcmds.c:4177 +#: commands/indexcmds.c:4196 #, c-format msgid "%s." msgstr "%s." @@ -1381,19 +1393,24 @@ msgstr "метод доступу \"%s\" не є типу %s" msgid "index access method \"%s\" does not have a handler" msgstr "для методу доступу індекса \"%s\" не заданий обробник" -#: access/index/genam.c:486 +#: access/index/genam.c:487 #, c-format msgid "transaction aborted during system catalog scan" msgstr "транзакцію перервано під час сканування системного каталогу" -#: access/index/indexam.c:142 catalog/objectaddress.c:1355 -#: commands/indexcmds.c:2792 commands/tablecmds.c:267 commands/tablecmds.c:291 -#: commands/tablecmds.c:16655 commands/tablecmds.c:18408 +#: access/index/genam.c:655 access/index/indexam.c:87 +#, c-format +msgid "cannot access index \"%s\" while it is being reindexed" +msgstr "неможливо отримати доступ до індекса \"%s\" в процесі реіндексації" + +#: access/index/indexam.c:208 catalog/objectaddress.c:1355 +#: commands/indexcmds.c:2833 commands/tablecmds.c:267 commands/tablecmds.c:291 +#: commands/tablecmds.c:16894 commands/tablecmds.c:18710 #, c-format msgid "\"%s\" is not an index" msgstr "\"%s\" не є індексом" -#: access/index/indexam.c:973 +#: access/index/indexam.c:1015 #, c-format msgid "operator class %s has no options" msgstr "клас операторів %s без параметрів" @@ -1414,7 +1431,7 @@ msgid "This may be because of a non-immutable index expression." msgstr "Можливо, це викликано змінною природою індексного вираження." #: access/nbtree/nbtpage.c:159 access/nbtree/nbtpage.c:608 -#: parser/parse_utilcmd.c:2330 +#: parser/parse_utilcmd.c:2337 #, c-format msgid "index \"%s\" is not a btree" msgstr "індекс \"%s\" не є b-деревом" @@ -1434,17 +1451,17 @@ msgstr "індекс \"%s\" містить наполовину мертву в 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:2680 +#: access/nbtree/nbtutils.c:2685 #, 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:2686 +#: access/nbtree/nbtutils.c:2691 #, c-format msgid "Index row references tuple (%u,%u) in relation \"%s\"." msgstr "Рядок індексу посилається на кортеж (%u,,%u) у відношенні \"%s\"." -#: access/nbtree/nbtutils.c:2690 +#: access/nbtree/nbtutils.c:2695 #, c-format msgid "Values larger than 1/3 of a buffer page cannot be indexed.\n" "Consider a function index of an MD5 hash of the value, or use full text indexing." @@ -1456,12 +1473,12 @@ msgstr "Значення, що займають більше, ніж 1/3 сто 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:244 +#: access/spgist/spgutils.c:242 #, 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:1035 #, c-format msgid "SP-GiST inner tuple size %zu exceeds maximum %zu" msgstr "Внутрішній розмір кортежу SP-GiST %zu перевищує максимальний %zu" @@ -1477,14 +1494,14 @@ msgid "operator family \"%s\" of access method %s is missing support function %d msgstr "сімейство операторів \"%s\" методу доступу %s не має опорної функції для типів %d для типу %s" #: access/table/table.c:49 access/table/table.c:83 access/table/table.c:112 -#: access/table/table.c:145 catalog/aclchk.c:1792 +#: access/table/table.c:145 catalog/aclchk.c:1793 #, c-format msgid "\"%s\" is an index" msgstr "\"%s\" є індексом" #: access/table/table.c:54 access/table/table.c:88 access/table/table.c:117 -#: access/table/table.c:150 catalog/aclchk.c:1799 commands/tablecmds.c:13367 -#: commands/tablecmds.c:16664 +#: access/table/table.c:150 catalog/aclchk.c:1800 commands/tablecmds.c:13603 +#: commands/tablecmds.c:16903 #, c-format msgid "\"%s\" is a composite type" msgstr "\"%s\" це складений тип" @@ -1499,7 +1516,7 @@ msgstr "невірний tid (%u, %u) для відношення \"%s\"" msgid "%s cannot be empty." msgstr "%s не може бути пустим." -#: access/table/tableamapi.c:122 utils/misc/guc.c:12470 +#: access/table/tableamapi.c:122 utils/misc/guc.c:12528 #, c-format msgid "%s is too long (maximum %d characters)." msgstr "%s занадто довгий (максимум %d символів)." @@ -1539,25 +1556,25 @@ msgstr "Переконайтесь, що в конфігурації основ msgid "Make sure the configuration parameter \"%s\" is set." msgstr "Переконайтесь, що в конфігурації встановлений параметр \"%s\"." -#: access/transam/multixact.c:1022 +#: access/transam/multixact.c:1106 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database \"%s\"" msgstr "щоб уникнути втрат даних у базі даних \"%s\", база даних не приймає команди, що створюють нові MultiXactIds" -#: access/transam/multixact.c:1024 access/transam/multixact.c:1031 -#: access/transam/multixact.c:1055 access/transam/multixact.c:1064 +#: access/transam/multixact.c:1108 access/transam/multixact.c:1115 +#: access/transam/multixact.c:1139 access/transam/multixact.c:1148 #, c-format msgid "Execute a database-wide VACUUM in that database.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." msgstr "Виконати очистку (VACUUM) по всій базі даних.\n" "Можливо, вам доведеться зафіксувати, відкотити назад старі підготовані транзакції або видалити застарілі слоти реплікації." -#: access/transam/multixact.c:1029 +#: access/transam/multixact.c:1113 #, c-format msgid "database is not accepting commands that generate new MultiXactIds to avoid wraparound data loss in database with OID %u" msgstr "щоб уникнути втрат даних в базі даних з OID %u, база даних не приймає команди, що створюють нові MultiXactIds" -#: access/transam/multixact.c:1050 access/transam/multixact.c:2334 +#: access/transam/multixact.c:1134 access/transam/multixact.c:2421 #, 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" @@ -1566,7 +1583,7 @@ msgstr[1] "бази даних \"%s\" повинні бути очищені (va msgstr[2] "баз даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactIds буде використано (%u)" msgstr[3] "баз даних \"%s\" повинні бути очищені (vacuumed) перед тим, як більшість MultiXactId буде використано (%u)" -#: access/transam/multixact.c:1059 access/transam/multixact.c:2343 +#: access/transam/multixact.c:1143 access/transam/multixact.c:2430 #, 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" @@ -1575,12 +1592,12 @@ msgstr[1] "бази даних з OID %u повинні бути очищені msgstr[2] "баз даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactIds буде використано (%u)" msgstr[3] "баз даних з OID %u повинні бути очищені (vacuumed), перед тим як більшість MultiXactId буде використано (%u)" -#: access/transam/multixact.c:1120 +#: access/transam/multixact.c:1207 #, c-format msgid "multixact \"members\" limit exceeded" msgstr "перевищено ліміт членів мультитранзакції" -#: access/transam/multixact.c:1121 +#: access/transam/multixact.c:1208 #, 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." @@ -1589,12 +1606,12 @@ msgstr[1] "Мультитранзакція створена цією коман msgstr[2] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." msgstr[3] "Мультитранзакція створена цією командою з %u членів, але місця вистачає лише для %u членів." -#: access/transam/multixact.c:1126 +#: access/transam/multixact.c:1213 #, c-format msgid "Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Виконати очистку (VACUUM) по всій базі даних з OID %u зі зменшенням значення vacuum_multixact_freeze_min_age та vacuum_multixact_freeze_table_age settings." -#: access/transam/multixact.c:1157 +#: access/transam/multixact.c:1244 #, 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" @@ -1603,22 +1620,27 @@ msgstr[1] "база даних з OID %u повинна бути очищена msgstr[2] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" msgstr[3] "база даних з OID %u повинна бути очищена перед використанням додаткових членів мультитранзакції (%d)" -#: access/transam/multixact.c:1162 +#: access/transam/multixact.c:1249 #, c-format msgid "Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings." msgstr "Виконати очищення (VACUUM) по всій цій базі даних зі зменшенням значення vacuum_multixact_freeze_min_age та vacuum_multixact_freeze_table_age settings." -#: access/transam/multixact.c:1301 +#: access/transam/multixact.c:1388 #, c-format msgid "MultiXactId %u does no longer exist -- apparent wraparound" msgstr "MultiXactId %u припинив існування -- очевидно відбулося зациклення" -#: access/transam/multixact.c:1307 +#: access/transam/multixact.c:1394 #, c-format msgid "MultiXactId %u has not been created yet -- apparent wraparound" msgstr "MultiXactId %u ще не був створений -- очевидно відбулося зациклення" -#: access/transam/multixact.c:2339 access/transam/multixact.c:2348 +#: access/transam/multixact.c:1469 +#, c-format +msgid "MultiXact %u has invalid next offset" +msgstr "У MultiXact %u є недійсне наступне зміщення" + +#: access/transam/multixact.c:2426 access/transam/multixact.c:2435 #: access/transam/varsup.c:151 access/transam/varsup.c:158 #: access/transam/varsup.c:466 access/transam/varsup.c:473 #, c-format @@ -1627,61 +1649,61 @@ msgid "To avoid a database shutdown, execute a database-wide VACUUM in that data msgstr "Щоб уникнути вимкнення бази даних, виконайте VACUUM для всієї бази даних.\n" "Можливо, вам доведеться зафіксувати або відкотити назад старі підготовленні транзакції або видалити застарілі слоти реплікації." -#: access/transam/multixact.c:2622 +#: access/transam/multixact.c:2709 #, 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:2731 #, c-format msgid "MultiXact member wraparound protections are now enabled" msgstr "Захист від зациклення члену MultiXact наразі ввімкнена" -#: access/transam/multixact.c:3031 +#: access/transam/multixact.c:3125 #, c-format msgid "oldest MultiXact %u not found, earliest MultiXact %u, skipping truncation" msgstr "найстарішу MultiXact %u не знайдено, найновіша MultiXact %u, скорочення пропускається" -#: access/transam/multixact.c:3049 +#: access/transam/multixact.c:3143 #, 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:3363 +#: access/transam/multixact.c:3481 #, c-format msgid "invalid MultiXactId: %u" msgstr "неприпустимий MultiXactId: %u" -#: access/transam/parallel.c:718 access/transam/parallel.c:837 +#: access/transam/parallel.c:744 access/transam/parallel.c:863 #, c-format msgid "parallel worker failed to initialize" msgstr "не вдалося виконати ініціалізацію паралельного виконавця" -#: access/transam/parallel.c:719 access/transam/parallel.c:838 +#: access/transam/parallel.c:745 access/transam/parallel.c:864 #, c-format msgid "More details may be available in the server log." msgstr "Більше деталей можуть бути доступні в журналі серверу." -#: access/transam/parallel.c:899 +#: access/transam/parallel.c:925 #, c-format msgid "postmaster exited during a parallel transaction" msgstr "postmaster завершився під час паралельної транзакції" -#: access/transam/parallel.c:1086 +#: access/transam/parallel.c:1112 #, c-format msgid "lost connection to parallel worker" msgstr "втрачено зв'язок з паралельним виконавцем" -#: access/transam/parallel.c:1152 access/transam/parallel.c:1154 +#: access/transam/parallel.c:1178 access/transam/parallel.c:1180 msgid "parallel worker" msgstr "паралельний виконавець" -#: access/transam/parallel.c:1307 +#: access/transam/parallel.c:1333 #, c-format msgid "could not map dynamic shared memory segment" msgstr "не вдалося відобразити динамічний сегмент спільної пам'яті" -#: access/transam/parallel.c:1312 +#: access/transam/parallel.c:1338 #, c-format msgid "invalid magic number in dynamic shared memory segment" msgstr "неприпустиме магічне число в динамічному сегменті спільної пам'яті" @@ -1779,7 +1801,7 @@ msgstr "неприпустимі дані у файлу історії \"%s\"" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Ідентифікатори ліній часу повинні бути меншими від ідентифікатора дочірньої лінії." -#: access/transam/timeline.c:597 +#: access/transam/timeline.c:589 #, c-format msgid "requested timeline %u is not in this server's history" msgstr "в історії даного серверу немає запитаної лінії часу %u" @@ -1804,12 +1826,12 @@ msgstr "Встановіть ненульове значення парамет msgid "transaction identifier \"%s\" is already in use" msgstr "ідентифікатор транзакції \"%s\" вже використовується" -#: access/transam/twophase.c:417 access/transam/twophase.c:2484 +#: access/transam/twophase.c:417 access/transam/twophase.c:2490 #, c-format msgid "maximum number of prepared transactions reached" msgstr "досягнуто максимального числа підготованих транзакцій" -#: access/transam/twophase.c:418 access/transam/twophase.c:2485 +#: access/transam/twophase.c:418 access/transam/twophase.c:2491 #, c-format msgid "Increase max_prepared_transactions (currently %d)." msgstr "Збільшіть max_prepared_transactions (наразі %d)." @@ -1883,7 +1905,7 @@ msgstr "неприпустимий розмір, збережений у фай msgid "calculated CRC checksum does not match value stored in file \"%s\"" msgstr "обчислена контрольна сума CRC не відповідає значенню, збереженому у файлі \"%s\"" -#: access/transam/twophase.c:1400 access/transam/xlog.c:6695 +#: access/transam/twophase.c:1400 access/transam/xlog.c:6722 #, c-format msgid "Failed while allocating a WAL reading processor." msgstr "Не вдалося розмістити обробник журналу транзакцій." @@ -1903,12 +1925,12 @@ msgstr "не вдалося прочитати 2-фазовий стан з WAL msgid "expected two-phase state data is not present in WAL at %X/%X" msgstr "очікувані дані 2-фазного стану відсутні в WAL при %X/%X" -#: access/transam/twophase.c:1707 +#: access/transam/twophase.c:1714 #, c-format msgid "could not recreate file \"%s\": %m" msgstr "не вдалося відтворити файл \"%s\": %m" -#: access/transam/twophase.c:1834 +#: access/transam/twophase.c:1841 #, 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" @@ -1917,52 +1939,52 @@ msgstr[1] "%u 2-фазовий стан файлів був записаний msgstr[2] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" msgstr[3] "%u 2-фазовий стан файлів був записаний завдяки довготривалим підготовленим транзакціям" -#: access/transam/twophase.c:2068 +#: access/transam/twophase.c:2074 #, c-format msgid "recovering prepared transaction %u from shared memory" msgstr "відновлення підготовленої транзакції %u із спільної пам'яті" -#: access/transam/twophase.c:2159 +#: access/transam/twophase.c:2165 #, c-format msgid "removing stale two-phase state file for transaction %u" msgstr "видалення застарілого файла 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2166 +#: access/transam/twophase.c:2172 #, c-format msgid "removing stale two-phase state from memory for transaction %u" msgstr "видалення з пам'яті застарілого 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2179 +#: access/transam/twophase.c:2185 #, c-format msgid "removing future two-phase state file for transaction %u" msgstr "видалення файлу майбутнього 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2186 +#: access/transam/twophase.c:2192 #, c-format msgid "removing future two-phase state from memory for transaction %u" msgstr "видалення з пам'яті майбутнього 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2211 +#: access/transam/twophase.c:2217 #, c-format msgid "corrupted two-phase state file for transaction %u" msgstr "пошкоджений файл двофазного стану для транзакції %u" -#: access/transam/twophase.c:2216 +#: access/transam/twophase.c:2222 #, c-format msgid "corrupted two-phase state in memory for transaction %u" msgstr "пошкоджена пам'ять двофазного стану для транзакції %u" -#: access/transam/twophase.c:2467 +#: access/transam/twophase.c:2473 #, c-format msgid "could not recover two-phase state file for transaction %u" msgstr "не вдалося відновити файл 2-фазового стану для транзакції %u" -#: access/transam/twophase.c:2469 +#: access/transam/twophase.c:2475 #, 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:2477 jit/jit.c:205 utils/fmgr/dfmgr.c:209 +#: access/transam/twophase.c:2483 jit/jit.c:205 utils/fmgr/dfmgr.c:209 #: utils/fmgr/dfmgr.c:417 utils/fmgr/dfmgr.c:465 #, c-format msgid "could not access file \"%s\": %m" @@ -2000,290 +2022,285 @@ msgstr "база даних з OID %u повинна бути очищена (г msgid "cannot have more than 2^32-2 commands in a transaction" msgstr "в одній транзакції не може бути більше 2^32-2 команд" -#: access/transam/xact.c:1584 +#: access/transam/xact.c:1594 #, c-format msgid "maximum number of committed subtransactions (%d) exceeded" msgstr "перевищено межу числа зафіксованих підтранзакцій (%d)" -#: access/transam/xact.c:2435 +#: access/transam/xact.c:2445 #, c-format msgid "cannot PREPARE a transaction that has operated on temporary objects" msgstr "неможливо виконати PREPARE для транзакції, що здійснювалася на тимчасових об'єктах" -#: access/transam/xact.c:2445 +#: access/transam/xact.c:2455 #, c-format msgid "cannot PREPARE a transaction that has exported snapshots" msgstr "не можна виконати PREPARE для транзакції, яка має експортовані знімки" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3416 +#: access/transam/xact.c:3426 #, c-format msgid "%s cannot run inside a transaction block" msgstr "%s неможливо запустити всередині блоку транзакції" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3426 +#: access/transam/xact.c:3436 #, c-format msgid "%s cannot run inside a subtransaction" msgstr "%s неможливо запустити всередині підтранзакції" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3436 +#: access/transam/xact.c:3446 #, c-format msgid "%s cannot be executed within a pipeline" msgstr "%s не можна використовувати в межах конвеєра" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3446 +#: access/transam/xact.c:3456 #, c-format msgid "%s cannot be executed from a function" msgstr "%s неможливо виконати з функції" #. translator: %s represents an SQL statement name -#: access/transam/xact.c:3517 access/transam/xact.c:3832 -#: access/transam/xact.c:3911 access/transam/xact.c:4034 -#: access/transam/xact.c:4185 access/transam/xact.c:4254 -#: access/transam/xact.c:4365 +#: access/transam/xact.c:3527 access/transam/xact.c:3842 +#: access/transam/xact.c:3921 access/transam/xact.c:4044 +#: access/transam/xact.c:4195 access/transam/xact.c:4264 +#: access/transam/xact.c:4375 #, c-format msgid "%s can only be used in transaction blocks" msgstr "%s може використовуватися тільки в блоках транзакції" -#: access/transam/xact.c:3718 +#: access/transam/xact.c:3728 #, c-format msgid "there is already a transaction in progress" msgstr "транзакція вже виконується" -#: access/transam/xact.c:3837 access/transam/xact.c:3916 -#: access/transam/xact.c:4039 +#: access/transam/xact.c:3847 access/transam/xact.c:3926 +#: access/transam/xact.c:4049 #, c-format msgid "there is no transaction in progress" msgstr "немає незавершеної транзакції" -#: access/transam/xact.c:3927 +#: access/transam/xact.c:3937 #, c-format msgid "cannot commit during a parallel operation" msgstr "не можна фіксувати транзакції під час паралельних операцій" -#: access/transam/xact.c:4050 +#: access/transam/xact.c:4060 #, c-format msgid "cannot abort during a parallel operation" msgstr "не можна перервати під час паралельних операцій" -#: access/transam/xact.c:4149 +#: access/transam/xact.c:4159 #, c-format msgid "cannot define savepoints during a parallel operation" msgstr "не можна визначати точки збереження під час паралельних операцій" -#: access/transam/xact.c:4236 +#: access/transam/xact.c:4246 #, c-format msgid "cannot release savepoints during a parallel operation" msgstr "не можна вивільняти точки збереження під час паралельних транзакцій" -#: access/transam/xact.c:4246 access/transam/xact.c:4297 -#: access/transam/xact.c:4357 access/transam/xact.c:4406 +#: access/transam/xact.c:4256 access/transam/xact.c:4307 +#: access/transam/xact.c:4367 access/transam/xact.c:4416 #, c-format msgid "savepoint \"%s\" does not exist" msgstr "точка збереження \"%s\" не існує" -#: access/transam/xact.c:4303 access/transam/xact.c:4412 +#: access/transam/xact.c:4313 access/transam/xact.c:4422 #, c-format msgid "savepoint \"%s\" does not exist within current savepoint level" msgstr "точка збереження \"%s\" не існує на поточному рівні збереження точок" -#: access/transam/xact.c:4345 +#: access/transam/xact.c:4355 #, c-format msgid "cannot rollback to savepoints during a parallel operation" msgstr "не можна відкотити назад до точки збереження під час паралельних операцій" -#: access/transam/xact.c:4473 +#: access/transam/xact.c:4483 #, c-format msgid "cannot start subtransactions during a parallel operation" msgstr "не можна запустити підтранзакцію під час паралельних операцій" -#: access/transam/xact.c:4541 +#: access/transam/xact.c:4551 #, c-format msgid "cannot commit subtransactions during a parallel operation" msgstr "не можна визначити підтранзакцію під час паралельних операцій" -#: access/transam/xact.c:5188 +#: access/transam/xact.c:5198 #, c-format msgid "cannot have more than 2^32-1 subtransactions in a transaction" msgstr "в одній транзакції не може бути більше 2^32-1 підтранзакцій" -#: access/transam/xlog.c:1838 +#: access/transam/xlog.c:1851 #, 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:2611 +#: access/transam/xlog.c:2622 #, 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:3488 storage/file/fd.c:839 storage/file/fd.c:852 -#, c-format -msgid "This is known to fail occasionally during archive recovery, where it is harmless." -msgstr "Відомо, що можливі помилки під час відновлення архіву, коли це не шкодить." - -#: access/transam/xlog.c:4016 access/transam/xlogutils.c:798 -#: replication/walsender.c:2557 +#: access/transam/xlog.c:4039 access/transam/xlogutils.c:798 +#: replication/walsender.c:2575 #, c-format msgid "requested WAL segment %s has already been removed" msgstr "запитуваний сегмент WAL %s вже видалений" -#: access/transam/xlog.c:4291 +#: access/transam/xlog.c:4315 #, c-format msgid "could not rename file \"%s\": %m" msgstr "не вдалося перейменувати файл \"%s\": %m" -#: access/transam/xlog.c:4333 access/transam/xlog.c:4343 +#: access/transam/xlog.c:4357 access/transam/xlog.c:4367 #, c-format msgid "required WAL directory \"%s\" does not exist" msgstr "необхідний каталог WAL \"%s\" не існує" -#: access/transam/xlog.c:4349 +#: access/transam/xlog.c:4373 #, c-format msgid "creating missing WAL directory \"%s\"" msgstr "створюється відсутній каталог WAL \"%s\"" -#: access/transam/xlog.c:4352 commands/dbcommands.c:2278 +#: access/transam/xlog.c:4376 commands/dbcommands.c:2295 #, c-format msgid "could not create missing directory \"%s\": %m" msgstr "не вдалося створити відстуній каталог \"%s\": %m" -#: access/transam/xlog.c:4474 +#: access/transam/xlog.c:4498 #, c-format msgid "unexpected timeline ID %u in log segment %s, offset %u" msgstr "неочіукваний ID лінії часу %u в сегменті журналу %s, зсув %u" -#: access/transam/xlog.c:4612 +#: access/transam/xlog.c:4636 #, c-format msgid "new timeline %u is not a child of database system timeline %u" msgstr "нова лінія часу %u не є дочірньою для лінії часу системи бази даних %u" -#: access/transam/xlog.c:4626 +#: access/transam/xlog.c:4650 #, c-format msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X" msgstr "нова лінія часу %u відгалузилась від поточної лінії часу бази даних %u до поточної точки відновлення %X/%X" -#: access/transam/xlog.c:4645 +#: access/transam/xlog.c:4669 #, c-format msgid "new target timeline is %u" msgstr "нова цільова лінія часу %u" -#: access/transam/xlog.c:4681 +#: access/transam/xlog.c:4705 #, c-format msgid "could not generate secret authorization token" msgstr "не вдалося згенерувати секретний токен для авторизації" -#: access/transam/xlog.c:4840 access/transam/xlog.c:4849 -#: access/transam/xlog.c:4873 access/transam/xlog.c:4880 -#: access/transam/xlog.c:4887 access/transam/xlog.c:4892 -#: access/transam/xlog.c:4899 access/transam/xlog.c:4906 -#: access/transam/xlog.c:4913 access/transam/xlog.c:4920 -#: access/transam/xlog.c:4927 access/transam/xlog.c:4934 -#: access/transam/xlog.c:4943 access/transam/xlog.c:4950 -#: utils/init/miscinit.c:1591 +#: access/transam/xlog.c:4864 access/transam/xlog.c:4873 +#: access/transam/xlog.c:4897 access/transam/xlog.c:4904 +#: access/transam/xlog.c:4911 access/transam/xlog.c:4916 +#: access/transam/xlog.c:4923 access/transam/xlog.c:4930 +#: access/transam/xlog.c:4937 access/transam/xlog.c:4944 +#: access/transam/xlog.c:4951 access/transam/xlog.c:4958 +#: access/transam/xlog.c:4967 access/transam/xlog.c:4974 +#: utils/init/miscinit.c:1635 #, c-format msgid "database files are incompatible with server" msgstr "файли бази даних є несумісними з даним сервером" -#: access/transam/xlog.c:4841 +#: access/transam/xlog.c:4865 #, 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:4845 +#: access/transam/xlog.c:4869 #, 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:4850 +#: access/transam/xlog.c:4874 #, 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:4853 access/transam/xlog.c:4877 -#: access/transam/xlog.c:4884 access/transam/xlog.c:4889 +#: access/transam/xlog.c:4877 access/transam/xlog.c:4901 +#: access/transam/xlog.c:4908 access/transam/xlog.c:4913 #, c-format msgid "It looks like you need to initdb." msgstr "Здається, Вам треба виконати initdb." -#: access/transam/xlog.c:4864 +#: access/transam/xlog.c:4888 #, c-format msgid "incorrect checksum in control file" msgstr "помилка контрольної суми у файлі pg_control" -#: access/transam/xlog.c:4874 +#: access/transam/xlog.c:4898 #, 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:4881 +#: access/transam/xlog.c:4905 #, 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:4888 +#: access/transam/xlog.c:4912 #, c-format msgid "The database cluster appears to use a different floating-point number format than the server executable." msgstr "Здається, в кластері баз даних і в програмі сервера використовуються різні формати чисел з плаваючою точкою." -#: access/transam/xlog.c:4893 +#: access/transam/xlog.c:4917 #, 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:4896 access/transam/xlog.c:4903 -#: access/transam/xlog.c:4910 access/transam/xlog.c:4917 -#: access/transam/xlog.c:4924 access/transam/xlog.c:4931 -#: access/transam/xlog.c:4938 access/transam/xlog.c:4946 -#: access/transam/xlog.c:4953 +#: access/transam/xlog.c:4920 access/transam/xlog.c:4927 +#: access/transam/xlog.c:4934 access/transam/xlog.c:4941 +#: access/transam/xlog.c:4948 access/transam/xlog.c:4955 +#: access/transam/xlog.c:4962 access/transam/xlog.c:4970 +#: access/transam/xlog.c:4977 #, c-format msgid "It looks like you need to recompile or initdb." msgstr "Здається, вам потрібно перекомпілювати сервер або виконати initdb." -#: access/transam/xlog.c:4900 +#: access/transam/xlog.c:4924 #, 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:4907 +#: access/transam/xlog.c:4931 #, 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:4914 +#: access/transam/xlog.c:4938 #, 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:4921 +#: access/transam/xlog.c:4945 #, 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:4928 +#: access/transam/xlog.c:4952 #, 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:4935 +#: access/transam/xlog.c:4959 #, 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:4944 +#: access/transam/xlog.c:4968 #, 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:4951 +#: access/transam/xlog.c:4975 #, 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:4960 +#: access/transam/xlog.c:4984 #, 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" @@ -2292,273 +2309,273 @@ msgstr[1] "Розмір сегменту WAL повинен задаватись msgstr[2] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" msgstr[3] "Розмір сегменту WAL повинен задаватись ступенем 2 в інтервалі від 1 МБ до 1 ГБ, але в керуючому файлі вказано значення %d" -#: access/transam/xlog.c:4972 +#: access/transam/xlog.c:4996 #, 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:4976 +#: access/transam/xlog.c:5000 #, 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:5410 +#: access/transam/xlog.c:5438 #, c-format msgid "could not write bootstrap write-ahead log file: %m" msgstr "не вдалося записати початкове завантаження випереджувального журналювання: %m" -#: access/transam/xlog.c:5418 +#: access/transam/xlog.c:5446 #, c-format msgid "could not fsync bootstrap write-ahead log file: %m" msgstr "не вдалося скинути на диск початкове завантаження випереджувального журналювання: %m" -#: access/transam/xlog.c:5424 +#: access/transam/xlog.c:5452 #, c-format msgid "could not close bootstrap write-ahead log file: %m" msgstr "не вдалося закрити початкове завантаження випереджувального журналювання: %m" -#: access/transam/xlog.c:5485 +#: access/transam/xlog.c:5513 #, c-format msgid "using recovery command file \"%s\" is not supported" msgstr "використання файлу команд відновлення \"%s\" не підтримується" -#: access/transam/xlog.c:5550 +#: access/transam/xlog.c:5578 #, c-format msgid "standby mode is not supported by single-user servers" msgstr "режим очікування не підтримується однокористувацьким сервером" -#: access/transam/xlog.c:5567 +#: access/transam/xlog.c:5595 #, c-format msgid "specified neither primary_conninfo nor restore_command" msgstr "не заззначено ані параметр primary_conninfo, ані параметр restore_command" -#: access/transam/xlog.c:5568 +#: access/transam/xlog.c:5596 #, c-format msgid "The database server will regularly poll the pg_wal subdirectory to check for files placed there." msgstr "Сервер бази даних буде регулярно опитувати підкатолог pg_wal і перевіряти файли, що містяться у ньому." -#: access/transam/xlog.c:5576 +#: access/transam/xlog.c:5604 #, c-format msgid "must specify restore_command when standby mode is not enabled" msgstr "необхідно вказати restore_command, якщо не ввімкнено режиму очікування" -#: access/transam/xlog.c:5614 +#: access/transam/xlog.c:5642 #, c-format msgid "recovery target timeline %u does not exist" msgstr "цільова лінія часу відновлення %u не існує" -#: access/transam/xlog.c:5736 +#: access/transam/xlog.c:5763 #, c-format msgid "archive recovery complete" msgstr "відновлення архіву завершено" -#: access/transam/xlog.c:5802 access/transam/xlog.c:6078 +#: access/transam/xlog.c:5829 access/transam/xlog.c:6105 #, c-format msgid "recovery stopping after reaching consistency" msgstr "відновлення зупиняється після досягнення узгодженості" -#: access/transam/xlog.c:5823 +#: access/transam/xlog.c:5850 #, c-format msgid "recovery stopping before WAL location (LSN) \"%X/%X\"" msgstr "відновлення зупиняється перед позицією WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:5913 +#: access/transam/xlog.c:5940 #, c-format msgid "recovery stopping before commit of transaction %u, time %s" msgstr "відновлення припиняється до підтвердження транзакції %u, час %s" -#: access/transam/xlog.c:5920 +#: access/transam/xlog.c:5947 #, c-format msgid "recovery stopping before abort of transaction %u, time %s" msgstr "відновлення припиняється до скасування транзакції %u, час %s" -#: access/transam/xlog.c:5973 +#: access/transam/xlog.c:6000 #, c-format msgid "recovery stopping at restore point \"%s\", time %s" msgstr "відновлення припиняється в точці відновлення\"%s\", час %s" -#: access/transam/xlog.c:5991 +#: access/transam/xlog.c:6018 #, c-format msgid "recovery stopping after WAL location (LSN) \"%X/%X\"" msgstr "відновлення припиняється пісня локації WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6058 +#: access/transam/xlog.c:6085 #, c-format msgid "recovery stopping after commit of transaction %u, time %s" msgstr "відновлення припиняється після підтвердження транзакції %u, час %s" -#: access/transam/xlog.c:6066 +#: access/transam/xlog.c:6093 #, c-format msgid "recovery stopping after abort of transaction %u, time %s" msgstr "відновлення припиняється після скасування транзакції %u, час %s" -#: access/transam/xlog.c:6111 +#: access/transam/xlog.c:6138 #, c-format msgid "pausing at the end of recovery" msgstr "пауза в кінці відновлення" -#: access/transam/xlog.c:6112 +#: access/transam/xlog.c:6139 #, c-format msgid "Execute pg_wal_replay_resume() to promote." msgstr "Виконайте pg_wal_replay_resume() для підвищення рівня." -#: access/transam/xlog.c:6115 access/transam/xlog.c:6397 +#: access/transam/xlog.c:6142 access/transam/xlog.c:6424 #, c-format msgid "recovery has paused" msgstr "відновлення зупинено" -#: access/transam/xlog.c:6116 +#: access/transam/xlog.c:6143 #, c-format msgid "Execute pg_wal_replay_resume() to continue." msgstr "Виконайте pg_wal_replay_resume(), щоб продовжити." -#: access/transam/xlog.c:6388 +#: access/transam/xlog.c:6415 #, c-format msgid "hot standby is not possible because of insufficient parameter settings" msgstr "hot standby неможливий через недостатнє налаштування параметрів" -#: access/transam/xlog.c:6389 access/transam/xlog.c:6416 -#: access/transam/xlog.c:6446 +#: access/transam/xlog.c:6416 access/transam/xlog.c:6443 +#: access/transam/xlog.c:6473 #, c-format msgid "%s = %d is a lower setting than on the primary server, where its value was %d." msgstr "%s = %d є нижчим параметром, ніж на основному сервері, де його значення було %d." -#: access/transam/xlog.c:6398 +#: access/transam/xlog.c:6425 #, c-format msgid "If recovery is unpaused, the server will shut down." msgstr "Якщо відновлення не буде зупинено, сервер завершить роботу." -#: access/transam/xlog.c:6399 +#: access/transam/xlog.c:6426 #, c-format msgid "You can then restart the server after making the necessary configuration changes." msgstr "Після здійснення необхідних змін у конфігурації, ви можете перезапустити сервер." -#: access/transam/xlog.c:6410 +#: access/transam/xlog.c:6437 #, c-format msgid "promotion is not possible because of insufficient parameter settings" msgstr "підвищення неможливе через недостатнє налаштування параметрів" -#: access/transam/xlog.c:6420 +#: access/transam/xlog.c:6447 #, c-format msgid "Restart the server after making the necessary configuration changes." msgstr "Перезапустити сервер після здійснення необхідних змін у конфігурації." -#: access/transam/xlog.c:6444 +#: access/transam/xlog.c:6471 #, c-format msgid "recovery aborted because of insufficient parameter settings" msgstr "відновлення перервано через недостатнє налаштування параметрів" -#: access/transam/xlog.c:6450 +#: access/transam/xlog.c:6477 #, c-format msgid "You can restart the server after making the necessary configuration changes." msgstr "Ви можете перезапустити сервер, після здійснення необхідних змін у конфігурації." -#: access/transam/xlog.c:6472 +#: access/transam/xlog.c:6499 #, c-format msgid "WAL was generated with wal_level=minimal, cannot continue recovering" msgstr "WAL був створений з параметром wal_level=minimal, неможливо продовжити відновлення" -#: access/transam/xlog.c:6473 +#: access/transam/xlog.c:6500 #, c-format msgid "This happens if you temporarily set wal_level=minimal on the server." msgstr "Це трапляється, якщо ви тимчасово встановили параметр wal_level=minimal на сервері." -#: access/transam/xlog.c:6474 +#: access/transam/xlog.c:6501 #, c-format msgid "Use a backup taken after setting wal_level to higher than minimal." msgstr "Використовуйте резервну копію, зроблену після встановлення значення wal_level, що перевищує максимальне." -#: access/transam/xlog.c:6543 +#: access/transam/xlog.c:6570 #, c-format msgid "control file contains invalid checkpoint location" msgstr "контрольний файл містить недійсне розташування контрольної точки" -#: access/transam/xlog.c:6554 +#: access/transam/xlog.c:6581 #, c-format msgid "database system was shut down at %s" msgstr "система бази даних була вимкнена %s" -#: access/transam/xlog.c:6560 +#: access/transam/xlog.c:6587 #, c-format msgid "database system was shut down in recovery at %s" msgstr "система бази даних завершила роботу у процесі відновлення %s" -#: access/transam/xlog.c:6566 +#: access/transam/xlog.c:6593 #, c-format msgid "database system shutdown was interrupted; last known up at %s" msgstr "завершення роботи бази даних було перервано; останній момент роботи %s" -#: access/transam/xlog.c:6572 +#: access/transam/xlog.c:6599 #, c-format msgid "database system was interrupted while in recovery at %s" msgstr "система бази даних була перервана в процесі відновлення %s" -#: access/transam/xlog.c:6574 +#: access/transam/xlog.c:6601 #, 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:6580 +#: access/transam/xlog.c:6607 #, c-format msgid "database system was interrupted while in recovery at log time %s" msgstr "робота системи бази даних була перервана в процесі відновлення, час в журналі %s" -#: access/transam/xlog.c:6582 +#: access/transam/xlog.c:6609 #, 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:6588 +#: access/transam/xlog.c:6615 #, c-format msgid "database system was interrupted; last known up at %s" msgstr "робота системи бази даних була перервана; останній момент роботи %s" -#: access/transam/xlog.c:6594 +#: access/transam/xlog.c:6621 #, c-format msgid "control file contains invalid database cluster state" msgstr "контрольний файл містить недійсний стан кластеру бази даних" -#: access/transam/xlog.c:6651 +#: access/transam/xlog.c:6678 #, c-format msgid "entering standby mode" msgstr "перехід у режим очікування" -#: access/transam/xlog.c:6654 +#: access/transam/xlog.c:6681 #, c-format msgid "starting point-in-time recovery to XID %u" msgstr "починається відновлення точки в часі до XID %u" -#: access/transam/xlog.c:6658 +#: access/transam/xlog.c:6685 #, c-format msgid "starting point-in-time recovery to %s" msgstr "починається відновлення точки в часі до %s" -#: access/transam/xlog.c:6662 +#: access/transam/xlog.c:6689 #, c-format msgid "starting point-in-time recovery to \"%s\"" msgstr "починається відновлення точки в часі до \"%s\"" -#: access/transam/xlog.c:6666 +#: access/transam/xlog.c:6693 #, c-format msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\"" msgstr "починається відновлення точки в часі до локації WAL (LSN) \"%X/%X\"" -#: access/transam/xlog.c:6670 +#: access/transam/xlog.c:6697 #, c-format msgid "starting point-in-time recovery to earliest consistent point" msgstr "починається відновлення даних до першої точки домовленості" -#: access/transam/xlog.c:6673 +#: access/transam/xlog.c:6700 #, c-format msgid "starting archive recovery" msgstr "початок відновлення архіву" -#: access/transam/xlog.c:6747 +#: access/transam/xlog.c:6774 #, c-format msgid "could not find redo location referenced by checkpoint record" msgstr "не вдалося знайти положення REDO, вказане записом контрольної точки" -#: access/transam/xlog.c:6748 access/transam/xlog.c:6758 +#: access/transam/xlog.c:6775 access/transam/xlog.c:6785 #, c-format msgid "If you are restoring from a backup, touch \"%s/recovery.signal\" and add required recovery options.\n" "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n" @@ -2567,300 +2584,305 @@ msgstr "Якщо ви відновлюєте з резервної копії, "Якщо ви не відновлюєте з резервної копії, спробуйте видалити файл \"%s/backup_label\".\n" "Будьте обережні: видалення \"%s/backup_label\" призведе до пошкодження кластеру при відновленні з резервної копії." -#: access/transam/xlog.c:6757 +#: access/transam/xlog.c:6784 #, c-format msgid "could not locate required checkpoint record" msgstr "не вдалося знайти запис потрібної контрольної точки" -#: access/transam/xlog.c:6786 commands/tablespace.c:665 +#: access/transam/xlog.c:6813 commands/tablespace.c:665 #, c-format msgid "could not create symbolic link \"%s\": %m" msgstr "не вдалося створити символічне послання \"%s\": %m" -#: access/transam/xlog.c:6818 access/transam/xlog.c:6824 +#: access/transam/xlog.c:6845 access/transam/xlog.c:6851 #, c-format msgid "ignoring file \"%s\" because no file \"%s\" exists" msgstr "файл \"%s\" ігнорується, тому що файлу \"%s\" не існує" -#: access/transam/xlog.c:6820 access/transam/xlog.c:12355 +#: access/transam/xlog.c:6847 access/transam/xlog.c:12471 #, c-format msgid "File \"%s\" was renamed to \"%s\"." msgstr "Файл \"%s\" був перейменований на \"%s\"." -#: access/transam/xlog.c:6826 +#: access/transam/xlog.c:6853 #, c-format msgid "Could not rename file \"%s\" to \"%s\": %m." msgstr "Неможливо перейменувати файл \"%s\" на \"%s\": %m." -#: access/transam/xlog.c:6877 +#: access/transam/xlog.c:6904 #, c-format msgid "could not locate a valid checkpoint record" msgstr "не вдалося знайти запис допустимої контрольної точки" #: access/transam/xlog.c:6915 #, c-format +msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X" +msgstr "не вдалося знайти місце перезапису %X/%08X, на який посилається запис контрольної точки в %X/%08X" + +#: access/transam/xlog.c:6952 +#, c-format msgid "requested timeline %u is not a child of this server's history" msgstr "запитувана лінія часу %u не є відгалуженням історії цього серверу" -#: access/transam/xlog.c:6917 +#: access/transam/xlog.c:6954 #, c-format msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X." msgstr "Остання контрольна точка %X/%X на лінії часу %u, але в історії запитуваної лінії часу сервер відгалузився з цієї лінії в %X/%X." -#: access/transam/xlog.c:6931 +#: access/transam/xlog.c:6968 #, c-format msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u" msgstr "запитувана лінія часу %u не містить мінімальну точку відновлення %X/%X на лінії часу %u" -#: access/transam/xlog.c:6961 +#: access/transam/xlog.c:6998 #, c-format msgid "invalid next transaction ID" msgstr "невірний ID наступної транзакції" -#: access/transam/xlog.c:7061 +#: access/transam/xlog.c:7098 #, c-format msgid "invalid redo in checkpoint record" msgstr "невірний запис REDO в контрольній точці" -#: access/transam/xlog.c:7072 +#: access/transam/xlog.c:7109 #, c-format msgid "invalid redo record in shutdown checkpoint" msgstr "невірний запис REDO в контрольній точці вимкнення" -#: access/transam/xlog.c:7112 +#: access/transam/xlog.c:7149 #, c-format msgid "database system was not properly shut down; automatic recovery in progress" msgstr "робота системи бази даних не була завершена належним чином; відбувається автоматичне відновлення" -#: access/transam/xlog.c:7116 +#: access/transam/xlog.c:7153 #, c-format msgid "crash recovery starts in timeline %u and has target timeline %u" msgstr "відновлення після збою починається на лінії часу %u і має цільову лінію часу: %u" -#: access/transam/xlog.c:7163 +#: access/transam/xlog.c:7200 #, c-format msgid "backup_label contains data inconsistent with control file" msgstr "backup_label містить дані, які не узгоджені з файлом pg_control" -#: access/transam/xlog.c:7164 +#: access/transam/xlog.c:7201 #, c-format msgid "This means that the backup is corrupted and you will have to use another backup for recovery." msgstr "Це означає, що резервна копія була пошкоджена і вам доведеться використати іншу резервну копію для відновлення." -#: access/transam/xlog.c:7390 +#: access/transam/xlog.c:7428 #, c-format msgid "redo starts at %X/%X" msgstr "запис REDO починається з %X/%X" -#: access/transam/xlog.c:7615 +#: access/transam/xlog.c:7653 #, c-format msgid "requested recovery stop point is before consistent recovery point" msgstr "запитувана точка відновлення передує узгодженій точці відновлення" -#: access/transam/xlog.c:7653 +#: access/transam/xlog.c:7691 #, c-format msgid "redo done at %X/%X system usage: %s" msgstr "повторно виконано через %X/%X системне використання: %s" -#: access/transam/xlog.c:7659 +#: access/transam/xlog.c:7697 #, c-format msgid "last completed transaction was at log time %s" msgstr "остання завершена транзакція була в %s" -#: access/transam/xlog.c:7668 +#: access/transam/xlog.c:7706 #, c-format msgid "redo is not required" msgstr "дані REDO не потрібні" -#: access/transam/xlog.c:7680 +#: access/transam/xlog.c:7718 #, c-format msgid "recovery ended before configured recovery target was reached" msgstr "відновлення завершилось до досягення налаштованої цілі відновлення" -#: access/transam/xlog.c:7764 access/transam/xlog.c:7768 +#: access/transam/xlog.c:7802 access/transam/xlog.c:7806 #, c-format msgid "WAL ends before end of online backup" msgstr "WAL завершився до завершення онлайн резервного копіювання" -#: access/transam/xlog.c:7765 +#: access/transam/xlog.c:7803 #, c-format msgid "All WAL generated while online backup was taken must be available at recovery." msgstr "Всі журнали WAL, створені під час резервного копіювання \"на ходу\", повинні бути в наявності для відновлення." -#: access/transam/xlog.c:7769 +#: access/transam/xlog.c:7807 #, c-format msgid "Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery." msgstr "Резервне копіювання БД \"на ходу\", розпочате за допомогою команди \"pg_start_backup()\", повинне завершуватися командою \"pg_stop_backup()\", і для відновлення повинні бути доступні усі журнали WAL. " -#: access/transam/xlog.c:7772 +#: access/transam/xlog.c:7810 #, c-format msgid "WAL ends before consistent recovery point" msgstr "WAL завершився до узгодженої точки відновлення" -#: access/transam/xlog.c:7807 +#: access/transam/xlog.c:7853 #, c-format msgid "selected new timeline ID: %u" msgstr "вибрано новий ID часової лінії: %u" -#: access/transam/xlog.c:8251 +#: access/transam/xlog.c:8321 #, c-format msgid "unexpected directory entry \"%s\" found in %s" msgstr "знайдено неочікуваний запис каталогу \"%s\" в %s" -#: access/transam/xlog.c:8253 +#: access/transam/xlog.c:8323 #, c-format msgid "All directory entries in pg_tblspc/ should be symbolic links." msgstr "Всі записи каталогу в pg_tblspc/ повинні бути символічними посиланнями." -#: access/transam/xlog.c:8254 +#: access/transam/xlog.c:8324 #, c-format msgid "Remove those directories, or set allow_in_place_tablespaces to ON transiently to let recovery complete." msgstr "Видаліть ті каталоги, або тимчасово встановіть для параметра allow_in_place_tablespaces значення ON, щоб завершити відновлення." -#: access/transam/xlog.c:8338 +#: access/transam/xlog.c:8408 #, c-format msgid "consistent recovery state reached at %X/%X" msgstr "узгоджений стан відновлення досягнутий %X/%X" -#: access/transam/xlog.c:8547 +#: access/transam/xlog.c:8617 #, c-format msgid "invalid primary checkpoint link in control file" msgstr "невірне посилання на первинну контрольну точку в контрольному файлі" -#: access/transam/xlog.c:8551 +#: access/transam/xlog.c:8621 #, c-format msgid "invalid checkpoint link in backup_label file" msgstr "невірне посилання на контрольну точку в файлі backup_label" -#: access/transam/xlog.c:8569 +#: access/transam/xlog.c:8639 #, c-format msgid "invalid primary checkpoint record" msgstr "невірний запис первинної контрольної точки" -#: access/transam/xlog.c:8573 +#: access/transam/xlog.c:8643 #, c-format msgid "invalid checkpoint record" msgstr "невірний запис контрольної точки" -#: access/transam/xlog.c:8584 +#: access/transam/xlog.c:8654 #, c-format msgid "invalid resource manager ID in primary checkpoint record" msgstr "невірний ID менеджера ресурсів в записі первинної контрольної точки" -#: access/transam/xlog.c:8588 +#: access/transam/xlog.c:8658 #, c-format msgid "invalid resource manager ID in checkpoint record" msgstr "невірний ID менеджера ресурсів в записі контрольної точки" -#: access/transam/xlog.c:8601 +#: access/transam/xlog.c:8671 #, c-format msgid "invalid xl_info in primary checkpoint record" msgstr "невірний xl_info у записі первинної контрольної точки" -#: access/transam/xlog.c:8605 +#: access/transam/xlog.c:8675 #, c-format msgid "invalid xl_info in checkpoint record" msgstr "невірний xl_info у записі контрольної точки" -#: access/transam/xlog.c:8616 +#: access/transam/xlog.c:8686 #, c-format msgid "invalid length of primary checkpoint record" msgstr "невірна довжина запису первинної контрольної очки" -#: access/transam/xlog.c:8620 +#: access/transam/xlog.c:8690 #, c-format msgid "invalid length of checkpoint record" msgstr "невірна довжина запису контрольної точки" -#: access/transam/xlog.c:8801 +#: access/transam/xlog.c:8871 #, c-format msgid "shutting down" msgstr "завершення роботи" #. translator: the placeholders show checkpoint options -#: access/transam/xlog.c:8840 +#: access/transam/xlog.c:8910 #, 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:8852 +#: access/transam/xlog.c:8922 #, 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:8912 +#: access/transam/xlog.c:8982 #, c-format msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "точка перезапуску завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб" -#: access/transam/xlog.c:8932 +#: access/transam/xlog.c:9002 #, c-format msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB" msgstr "контрольна точка завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб" -#: access/transam/xlog.c:9376 +#: access/transam/xlog.c:9463 #, c-format msgid "concurrent write-ahead log activity while database system is shutting down" msgstr "під час того вимкнення БД помічено конкурентну активність у випереджувальному журналюванні" -#: access/transam/xlog.c:9909 +#: access/transam/xlog.c:10022 #, c-format msgid "recovery restart point at %X/%X" msgstr "відновлення збереженої точки %X/%X" -#: access/transam/xlog.c:9911 +#: access/transam/xlog.c:10024 #, c-format msgid "Last completed transaction was at log time %s." msgstr "Остання завершена транзакція була в %s." -#: access/transam/xlog.c:10157 +#: access/transam/xlog.c:10272 #, c-format msgid "restore point \"%s\" created at %X/%X" msgstr "точка відновлення \"%s\" створена в %X/%X" -#: access/transam/xlog.c:10302 +#: access/transam/xlog.c:10417 #, c-format msgid "unexpected previous timeline ID %u (current timeline ID %u) in checkpoint record" msgstr "несподіваний ID попередньої лінії часу %u (ID теперішньої лінії часу %u) в записі контрольної точки" -#: access/transam/xlog.c:10311 +#: access/transam/xlog.c:10426 #, c-format msgid "unexpected timeline ID %u (after %u) in checkpoint record" msgstr "неочікуваний ID лінії часу %u (після %u) в записі контрольної точки" -#: access/transam/xlog.c:10327 +#: access/transam/xlog.c:10442 #, c-format msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u" msgstr "неочікуваний ID лінії часу %u в записі контрольної точки, до досягнення мінімальної точки відновлення %X/%X на лінії часу %u" -#: access/transam/xlog.c:10402 +#: access/transam/xlog.c:10517 #, c-format msgid "online backup was canceled, recovery cannot continue" msgstr "онлайн резервне копіювання скасовано, неможливо продовжити відновлення" -#: access/transam/xlog.c:10458 access/transam/xlog.c:10514 -#: access/transam/xlog.c:10544 +#: access/transam/xlog.c:10574 access/transam/xlog.c:10630 +#: access/transam/xlog.c:10660 #, c-format msgid "unexpected timeline ID %u (should be %u) in checkpoint record" msgstr "несподіваний ID лінії часу %u (повинен бути %u) в записі контрольної точки" -#: access/transam/xlog.c:10702 +#: access/transam/xlog.c:10818 #, c-format msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s" msgstr "успішно пропущений відсутній contrecord при %X/%X, перезаписано на %s" -#: access/transam/xlog.c:10917 +#: access/transam/xlog.c:11033 #, c-format msgid "could not fsync write-through file \"%s\": %m" msgstr "не вдалосьясинхронізувати файл наскрізного запису %s: %m" -#: access/transam/xlog.c:10923 +#: access/transam/xlog.c:11039 #, c-format msgid "could not fdatasync file \"%s\": %m" msgstr "не вдалося fdatasync файл \"%s\": %m" -#: access/transam/xlog.c:11034 access/transam/xlog.c:11571 +#: access/transam/xlog.c:11150 access/transam/xlog.c:11687 #: access/transam/xlogfuncs.c:275 access/transam/xlogfuncs.c:302 #: access/transam/xlogfuncs.c:341 access/transam/xlogfuncs.c:362 #: access/transam/xlogfuncs.c:383 @@ -2868,186 +2890,186 @@ msgstr "не вдалося fdatasync файл \"%s\": %m" msgid "WAL control functions cannot be executed during recovery." msgstr "Функції управління WAL не можна використовувати під час відновлення." -#: access/transam/xlog.c:11043 access/transam/xlog.c:11580 +#: access/transam/xlog.c:11159 access/transam/xlog.c:11696 #, c-format msgid "WAL level not sufficient for making an online backup" msgstr "Обраний рівень WAL недостатній для резервного копіювання \"на ходу\"" -#: access/transam/xlog.c:11044 access/transam/xlog.c:11581 +#: access/transam/xlog.c:11160 access/transam/xlog.c:11697 #: access/transam/xlogfuncs.c:308 #, c-format msgid "wal_level must be set to \"replica\" or \"logical\" at server start." msgstr "встановіть wal_level \"replica\" або \"logical\" при запуску серверу." -#: access/transam/xlog.c:11049 +#: access/transam/xlog.c:11165 #, c-format msgid "backup label too long (max %d bytes)" msgstr "мітка резервного копіювання задовга (максимум %d байт)" -#: access/transam/xlog.c:11086 access/transam/xlog.c:11370 -#: access/transam/xlog.c:11408 +#: access/transam/xlog.c:11202 access/transam/xlog.c:11486 +#: access/transam/xlog.c:11524 #, c-format msgid "a backup is already in progress" msgstr "резервне копіювання вже триває" -#: access/transam/xlog.c:11087 +#: access/transam/xlog.c:11203 #, c-format msgid "Run pg_stop_backup() and try again." msgstr "Запустіть pg_stop_backup() і спробуйте знову." -#: access/transam/xlog.c:11183 +#: access/transam/xlog.c:11299 #, c-format msgid "WAL generated with full_page_writes=off was replayed since last restartpoint" msgstr "Після останньої точки відновлення був відтворений WAL, створений в режимі full_page_writes=off" -#: access/transam/xlog.c:11185 access/transam/xlog.c:11776 +#: access/transam/xlog.c:11301 access/transam/xlog.c:11892 #, 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:11269 replication/basebackup.c:1439 -#: utils/adt/misc.c:374 +#: access/transam/xlog.c:11385 replication/basebackup.c:1433 +#: utils/adt/misc.c:367 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "таргет символічного посилання \"%s\" задовгий" -#: access/transam/xlog.c:11319 commands/tablespace.c:385 -#: commands/tablespace.c:561 replication/basebackup.c:1454 utils/adt/misc.c:382 +#: access/transam/xlog.c:11435 commands/tablespace.c:385 +#: commands/tablespace.c:561 replication/basebackup.c:1448 utils/adt/misc.c:375 #, c-format msgid "tablespaces are not supported on this platform" msgstr "табличний простір не підтримується на цій платформі" -#: access/transam/xlog.c:11371 access/transam/xlog.c:11409 +#: access/transam/xlog.c:11487 access/transam/xlog.c:11525 #, c-format msgid "If you're sure there is no backup in progress, remove file \"%s\" and try again." msgstr "Якщо ви вважаєте, що жодне резервне копіювання не триває, видаліть файл \"%s\" і спробуйте знову." -#: access/transam/xlog.c:11596 +#: access/transam/xlog.c:11712 #, c-format msgid "exclusive backup not in progress" msgstr "ексклюзивне резервне копіювання не виконується" -#: access/transam/xlog.c:11623 +#: access/transam/xlog.c:11739 #, c-format msgid "a backup is not in progress" msgstr "резервне копіювання не виконується" -#: access/transam/xlog.c:11709 access/transam/xlog.c:11722 -#: access/transam/xlog.c:12113 access/transam/xlog.c:12119 -#: access/transam/xlog.c:12167 access/transam/xlog.c:12247 -#: access/transam/xlog.c:12271 access/transam/xlogfuncs.c:733 +#: access/transam/xlog.c:11825 access/transam/xlog.c:11838 +#: access/transam/xlog.c:12229 access/transam/xlog.c:12235 +#: access/transam/xlog.c:12283 access/transam/xlog.c:12363 +#: access/transam/xlog.c:12387 access/transam/xlogfuncs.c:733 #, c-format msgid "invalid data in file \"%s\"" msgstr "невірні дані у файлі \"%s\"" -#: access/transam/xlog.c:11726 replication/basebackup.c:1287 +#: access/transam/xlog.c:11842 replication/basebackup.c:1287 #, c-format msgid "the standby was promoted during online backup" msgstr "режим очікування було підвищено у процесі резервного копіювання \"на ходу\"" -#: access/transam/xlog.c:11727 replication/basebackup.c:1288 +#: access/transam/xlog.c:11843 replication/basebackup.c:1288 #, c-format msgid "This means that the backup being taken is corrupt and should not be used. Try taking another online backup." msgstr "Це означає, що вибрана резервна копія є пошкодженою і її не слід використовувати. Спробуйте використати іншу онлайн резервну копію." -#: access/transam/xlog.c:11774 +#: access/transam/xlog.c:11890 #, c-format msgid "WAL generated with full_page_writes=off was replayed during online backup" msgstr "У процесі резервного копіювання \"на ходу\" був відтворений WAL, створений в режимі full_page_writes=off" -#: access/transam/xlog.c:11894 +#: access/transam/xlog.c:12010 #, c-format msgid "base backup done, waiting for required WAL segments to be archived" msgstr "резервне копіювання виконане, очікуються необхідні сегменти WAL для архівації" -#: access/transam/xlog.c:11906 +#: access/transam/xlog.c:12022 #, c-format msgid "still waiting for all required WAL segments to be archived (%d seconds elapsed)" msgstr "все ще чекає на необхідні сегменти WAL для архівації (%d секунд пройшло)" -#: access/transam/xlog.c:11908 +#: access/transam/xlog.c:12024 #, 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:11915 +#: access/transam/xlog.c:12031 #, c-format msgid "all required WAL segments have been archived" msgstr "усі необхідні сегменти WAL архівовані" -#: access/transam/xlog.c:11919 +#: access/transam/xlog.c:12035 #, 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:11974 +#: access/transam/xlog.c:12090 #, c-format msgid "aborting backup due to backend exiting before pg_stop_backup was called" msgstr "припинення резервного копіювання через завершення обслуговуючого процесу до виклику pg_stop_backup" -#: access/transam/xlog.c:12168 +#: access/transam/xlog.c:12284 #, c-format msgid "Timeline ID parsed is %u, but expected %u." msgstr "Проаналізовано ID часової лінії %u, очіувалося %u." #. translator: %s is a WAL record description -#: access/transam/xlog.c:12296 +#: access/transam/xlog.c:12412 #, c-format msgid "WAL redo at %X/%X for %s" msgstr "запис REDO в WAL в позиції %X/%X для %s" -#: access/transam/xlog.c:12344 +#: access/transam/xlog.c:12460 #, c-format msgid "online backup mode was not canceled" msgstr "режим копіювання онлайн не був відмінений" -#: access/transam/xlog.c:12345 +#: access/transam/xlog.c:12461 #, c-format msgid "File \"%s\" could not be renamed to \"%s\": %m." msgstr "Файл \"%s\" не може бути перейменований на \"%s\": %m." -#: access/transam/xlog.c:12354 access/transam/xlog.c:12366 -#: access/transam/xlog.c:12376 +#: access/transam/xlog.c:12470 access/transam/xlog.c:12482 +#: access/transam/xlog.c:12492 #, c-format msgid "online backup mode canceled" msgstr "режим копіювання онлайн був відмінений" -#: access/transam/xlog.c:12367 +#: access/transam/xlog.c:12483 #, c-format msgid "Files \"%s\" and \"%s\" were renamed to \"%s\" and \"%s\", respectively." msgstr "Файли \"%s\" і \"%s\" було перейменовано на \"%s\" і \"%s\" відповідно." -#: access/transam/xlog.c:12377 +#: access/transam/xlog.c:12493 #, c-format msgid "File \"%s\" was renamed to \"%s\", but file \"%s\" could not be renamed to \"%s\": %m." msgstr "Файл \"%s\" було перейменовано на \"%s\", але файл \"%s\" не можливо перейменувати на \"%s\": %m." -#: access/transam/xlog.c:12510 access/transam/xlogutils.c:967 +#: access/transam/xlog.c:12626 access/transam/xlogutils.c:967 #, c-format msgid "could not read from log segment %s, offset %u: %m" msgstr "не вдалося прочитати сегмент журналу %s, зсув %u: %m" -#: access/transam/xlog.c:12516 access/transam/xlogutils.c:974 +#: access/transam/xlog.c:12632 access/transam/xlogutils.c:974 #, c-format msgid "could not read from log segment %s, offset %u: read %d of %zu" msgstr "не вдалося прочитати сегмент журналу %s, зсув %u: прочитано %d з %zu" -#: access/transam/xlog.c:13081 +#: access/transam/xlog.c:13209 #, c-format msgid "WAL receiver process shutdown requested" msgstr "Запит на вимкнення процесу приймача WAL" -#: access/transam/xlog.c:13176 +#: access/transam/xlog.c:13321 #, c-format msgid "received promote request" msgstr "отримано запит підвищення статусу" -#: access/transam/xlog.c:13189 +#: access/transam/xlog.c:13334 #, c-format msgid "promote trigger file found: %s" msgstr "знайдено файл тригера підвищення: %s" -#: access/transam/xlog.c:13197 +#: access/transam/xlog.c:13342 #, c-format msgid "could not stat promote trigger file \"%s\": %m" msgstr "не вдалося отримати інформацію про файл тригера підвищення \"%s\": %m" @@ -3080,12 +3102,12 @@ msgstr "неможливо відновити файл \"%s\" з архіву: % msgid "%s \"%s\": %s" msgstr "%s \"%s\": %s" -#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:543 +#: access/transam/xlogarchive.c:479 access/transam/xlogarchive.c:557 #, c-format msgid "could not create archive status file \"%s\": %m" msgstr "неможливо створити файл статусу архіву \"%s\": %m" -#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:551 +#: access/transam/xlogarchive.c:487 access/transam/xlogarchive.c:565 #, c-format msgid "could not write archive status file \"%s\": %m" msgstr "неможливо записати файл архівного статусу \"%s\": %m" @@ -3108,17 +3130,17 @@ msgstr "Ви мали на увазі використаня pg_stop_backup('f') #: access/transam/xlogfuncs.c:185 commands/event_trigger.c:1311 #: commands/event_trigger.c:1869 commands/extension.c:1966 #: commands/extension.c:2074 commands/extension.c:2359 commands/prepare.c:713 -#: executor/execExpr.c:2510 executor/execSRF.c:738 executor/functions.c:1073 -#: foreign/foreign.c:520 libpq/hba.c:2722 replication/logical/launcher.c:937 +#: executor/execExpr.c:2518 executor/execSRF.c:738 executor/functions.c:1074 +#: foreign/foreign.c:530 libpq/hba.c:2726 replication/logical/launcher.c:937 #: replication/logical/logicalfuncs.c:157 replication/logical/origin.c:1494 -#: replication/slotfuncs.c:255 replication/walsender.c:3328 +#: replication/slotfuncs.c:255 replication/walsender.c:3346 #: storage/ipc/shmem.c:554 utils/adt/datetime.c:4812 utils/adt/genfile.c:507 #: utils/adt/genfile.c:590 utils/adt/jsonfuncs.c:1944 #: utils/adt/jsonfuncs.c:2056 utils/adt/jsonfuncs.c:2244 #: utils/adt/jsonfuncs.c:2353 utils/adt/jsonfuncs.c:3814 #: utils/adt/mcxtfuncs.c:132 utils/adt/misc.c:219 utils/adt/pgstatfuncs.c:477 #: utils/adt/pgstatfuncs.c:587 utils/adt/pgstatfuncs.c:1887 -#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10024 +#: utils/adt/varlena.c:4821 utils/fmgr/funcapi.c:74 utils/misc/guc.c:10088 #: utils/mmgr/portalmem.c:1145 #, c-format msgid "set-valued function called in context that cannot accept a set" @@ -3127,13 +3149,13 @@ msgstr "функція \"set-valued\" викликана в контексті, #: access/transam/xlogfuncs.c:189 commands/event_trigger.c:1315 #: commands/event_trigger.c:1873 commands/extension.c:1970 #: commands/extension.c:2078 commands/extension.c:2363 commands/prepare.c:717 -#: foreign/foreign.c:525 libpq/hba.c:2726 replication/logical/launcher.c:941 +#: foreign/foreign.c:535 libpq/hba.c:2730 replication/logical/launcher.c:941 #: replication/logical/logicalfuncs.c:161 replication/logical/origin.c:1498 -#: replication/slotfuncs.c:259 replication/walsender.c:3332 +#: replication/slotfuncs.c:259 replication/walsender.c:3350 #: storage/ipc/shmem.c:558 utils/adt/datetime.c:4816 utils/adt/genfile.c:511 #: utils/adt/genfile.c:594 utils/adt/mcxtfuncs.c:136 utils/adt/misc.c:223 #: utils/adt/pgstatfuncs.c:481 utils/adt/pgstatfuncs.c:591 -#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10028 +#: utils/adt/pgstatfuncs.c:1891 utils/adt/varlena.c:4825 utils/misc/guc.c:10092 #: utils/misc/pg_config.c:43 utils/mmgr/portalmem.c:1149 #, c-format msgid "materialize mode required, but it is not allowed in this context" @@ -3217,122 +3239,122 @@ msgstr "невірний зсув запису: %X/%X" msgid "contrecord is requested by %X/%X" msgstr "по зсуву %X/%X запитано продовження запису" -#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:720 +#: access/transam/xlogreader.c:372 access/transam/xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "невірна довжина запису по зсуву %X/%X: очікувалось %u, отримано %u" -#: access/transam/xlogreader.c:442 +#: access/transam/xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "немає позначки contrecord в позиції %X/%X" -#: access/transam/xlogreader.c:455 +#: access/transam/xlogreader.c:456 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%X" -#: access/transam/xlogreader.c:728 +#: access/transam/xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "невірний ID менеджера ресурсів %u в %X/%X" -#: access/transam/xlogreader.c:741 access/transam/xlogreader.c:757 +#: access/transam/xlogreader.c:749 access/transam/xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X" -#: access/transam/xlogreader.c:795 +#: access/transam/xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X" -#: access/transam/xlogreader.c:832 +#: access/transam/xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "невірне магічне число %04X в сегменті журналу %s, зсув %u" -#: access/transam/xlogreader.c:846 access/transam/xlogreader.c:887 +#: access/transam/xlogreader.c:854 access/transam/xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "невірні інформаційні біти %04X в сегменті журналу %s, зсув %u" -#: access/transam/xlogreader.c:861 +#: access/transam/xlogreader.c:869 #, 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:869 +#: access/transam/xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "Файл WAL належить іншій системі баз даних: некоректний розмір сегменту в заголовку сторінки" -#: access/transam/xlogreader.c:875 +#: access/transam/xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "Файл WAL належить іншій системі баз даних: некоректний XLOG_BLCKSZ в заголовку сторінки" -#: access/transam/xlogreader.c:906 +#: access/transam/xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неочікуваний pageaddr %X/%X в сегменті журналу %s, зсув %u" -#: access/transam/xlogreader.c:931 +#: access/transam/xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "порушення послідовності ID лінії часу %u (після %u) в сегменті журналу %s, зсув %u" -#: access/transam/xlogreader.c:1276 +#: access/transam/xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X" -#: access/transam/xlogreader.c:1298 +#: access/transam/xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X" -#: access/transam/xlogreader.c:1305 +#: access/transam/xlogreader.c:1313 #, 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:1341 +#: access/transam/xlogreader.c:1349 #, 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:1357 +#: access/transam/xlogreader.c:1365 #, 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:1372 +#: access/transam/xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X" -#: access/transam/xlogreader.c:1387 +#: access/transam/xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_IS_COMPRESSED не встановлені, але довжина образу блока дорвінює %u в позиції %X/%X" -#: access/transam/xlogreader.c:1403 +#: access/transam/xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X" -#: access/transam/xlogreader.c:1415 +#: access/transam/xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "невірний ідентифікатор блоку %u в позиції %X/%X" -#: access/transam/xlogreader.c:1502 +#: access/transam/xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "запис з невірною довжиною на %X/%X" -#: access/transam/xlogreader.c:1591 +#: access/transam/xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "невірно стиснутий образ в позиції %X/%X, блок %d" @@ -3342,12 +3364,12 @@ msgstr "невірно стиснутий образ в позиції %X/%X, б msgid "-X requires a power of two value between 1 MB and 1 GB" msgstr "для -X необхідне число, яке дорівнює ступеню 2 в інтервалі від 1 МБ до 1 ГБ" -#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3881 +#: bootstrap/bootstrap.c:287 postmaster/postmaster.c:847 tcop/postgres.c:3939 #, c-format msgid "--%s requires a value" msgstr "--%s необхідне значення" -#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3886 +#: bootstrap/bootstrap.c:292 postmaster/postmaster.c:852 tcop/postgres.c:3944 #, c-format msgid "-c %s requires a value" msgstr "-c %s необхідне значення" @@ -3363,157 +3385,157 @@ msgstr "Спробуйте \"%s --help\" для додаткової інфор msgid "%s: invalid command-line arguments\n" msgstr "%s: невірні аргументи командного рядка\n" -#: catalog/aclchk.c:181 +#: catalog/aclchk.c:182 #, c-format msgid "grant options can only be granted to roles" msgstr "право надання прав можна надавати тільки ролям" -#: catalog/aclchk.c:300 +#: catalog/aclchk.c:301 #, c-format msgid "no privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" не призначено ніяких прав" -#: catalog/aclchk.c:305 +#: catalog/aclchk.c:306 #, c-format msgid "no privileges were granted for \"%s\"" msgstr "для \"%s\" не призначено ніяких прав" -#: catalog/aclchk.c:313 +#: catalog/aclchk.c:314 #, c-format msgid "not all privileges were granted for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" призначено не всі права" -#: catalog/aclchk.c:318 +#: catalog/aclchk.c:319 #, c-format msgid "not all privileges were granted for \"%s\"" msgstr "для \"%s\" призначено не всі права" -#: catalog/aclchk.c:329 +#: catalog/aclchk.c:330 #, c-format msgid "no privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" жодні права не можуть бути відкликані" -#: catalog/aclchk.c:334 +#: catalog/aclchk.c:335 #, c-format msgid "no privileges could be revoked for \"%s\"" msgstr "для \"%s\" жодні права не можуть бути відкликані" -#: catalog/aclchk.c:342 +#: catalog/aclchk.c:343 #, c-format msgid "not all privileges could be revoked for column \"%s\" of relation \"%s\"" msgstr "для стовпця \"%s\" відношення \"%s\" не всі права можуть бути відкликані" -#: catalog/aclchk.c:347 +#: catalog/aclchk.c:348 #, c-format msgid "not all privileges could be revoked for \"%s\"" msgstr "для \"%s\" не всі права можуть бути відкликані" -#: catalog/aclchk.c:379 +#: catalog/aclchk.c:380 #, c-format msgid "grantor must be current user" msgstr "грантодавець повинен бути поточним користувачем" -#: catalog/aclchk.c:446 catalog/aclchk.c:989 +#: catalog/aclchk.c:447 catalog/aclchk.c:990 #, c-format msgid "invalid privilege type %s for relation" msgstr "недійсний тип права %s для відношення" -#: catalog/aclchk.c:450 catalog/aclchk.c:993 +#: catalog/aclchk.c:451 catalog/aclchk.c:994 #, c-format msgid "invalid privilege type %s for sequence" msgstr "невірний тип права %s для послідовності" -#: catalog/aclchk.c:454 +#: catalog/aclchk.c:455 #, c-format msgid "invalid privilege type %s for database" msgstr "недійсний тип права %s для бази даних" -#: catalog/aclchk.c:458 +#: catalog/aclchk.c:459 #, c-format msgid "invalid privilege type %s for domain" msgstr "недійсний тип права %s для домену" -#: catalog/aclchk.c:462 catalog/aclchk.c:997 +#: catalog/aclchk.c:463 catalog/aclchk.c:998 #, c-format msgid "invalid privilege type %s for function" msgstr "недійсний тип права %s для функції" -#: catalog/aclchk.c:466 +#: catalog/aclchk.c:467 #, c-format msgid "invalid privilege type %s for language" msgstr "недійсний тип права %s для мови" -#: catalog/aclchk.c:470 +#: catalog/aclchk.c:471 #, c-format msgid "invalid privilege type %s for large object" msgstr "недійсний тип права %s для великого об'єкту" -#: catalog/aclchk.c:474 catalog/aclchk.c:1013 +#: catalog/aclchk.c:475 catalog/aclchk.c:1014 #, c-format msgid "invalid privilege type %s for schema" msgstr "недійсний тип привілеїв %s для схеми" -#: catalog/aclchk.c:478 catalog/aclchk.c:1001 +#: catalog/aclchk.c:479 catalog/aclchk.c:1002 #, c-format msgid "invalid privilege type %s for procedure" msgstr "недійсний тип привілеїв %s для процедури" -#: catalog/aclchk.c:482 catalog/aclchk.c:1005 +#: catalog/aclchk.c:483 catalog/aclchk.c:1006 #, c-format msgid "invalid privilege type %s for routine" msgstr "недійсний тип привілею %s для підпрограми" -#: catalog/aclchk.c:486 +#: catalog/aclchk.c:487 #, c-format msgid "invalid privilege type %s for tablespace" msgstr "недійсний тип привілеїв %s для табличного простору" -#: catalog/aclchk.c:490 catalog/aclchk.c:1009 +#: catalog/aclchk.c:491 catalog/aclchk.c:1010 #, c-format msgid "invalid privilege type %s for type" msgstr "недійсний тип привілею %s для типу" -#: catalog/aclchk.c:494 +#: catalog/aclchk.c:495 #, c-format msgid "invalid privilege type %s for foreign-data wrapper" msgstr "недійсний тип привілею %s для джерела сторонніх даних" -#: catalog/aclchk.c:498 +#: catalog/aclchk.c:499 #, c-format msgid "invalid privilege type %s for foreign server" -msgstr "недійсний тип привілею%s для стороннього серверу" +msgstr "недійсний тип привілею %s для стороннього серверу" -#: catalog/aclchk.c:537 +#: catalog/aclchk.c:538 #, c-format msgid "column privileges are only valid for relations" msgstr "привілеї стовпця дійсні лише для зв'язків" -#: catalog/aclchk.c:697 catalog/aclchk.c:4164 catalog/aclchk.c:4985 +#: catalog/aclchk.c:698 catalog/aclchk.c:4169 catalog/aclchk.c:4990 #: catalog/objectaddress.c:1060 catalog/pg_largeobject.c:116 #: storage/large_object/inv_api.c:287 #, c-format msgid "large object %u does not exist" msgstr "великого об'єкту %u не існує" -#: catalog/aclchk.c:926 catalog/aclchk.c:935 commands/collationcmds.c:119 -#: commands/copy.c:365 commands/copy.c:385 commands/copy.c:395 -#: commands/copy.c:404 commands/copy.c:413 commands/copy.c:423 -#: commands/copy.c:432 commands/copy.c:441 commands/copy.c:459 -#: commands/copy.c:475 commands/copy.c:495 commands/copy.c:512 +#: catalog/aclchk.c:927 catalog/aclchk.c:936 commands/collationcmds.c:119 +#: commands/copy.c:402 commands/copy.c:422 commands/copy.c:432 +#: commands/copy.c:441 commands/copy.c:450 commands/copy.c:460 +#: commands/copy.c:469 commands/copy.c:478 commands/copy.c:496 +#: commands/copy.c:512 commands/copy.c:532 commands/copy.c:549 #: commands/dbcommands.c:158 commands/dbcommands.c:167 #: commands/dbcommands.c:176 commands/dbcommands.c:185 #: commands/dbcommands.c:194 commands/dbcommands.c:203 #: commands/dbcommands.c:212 commands/dbcommands.c:221 #: commands/dbcommands.c:230 commands/dbcommands.c:239 -#: commands/dbcommands.c:261 commands/dbcommands.c:1529 -#: commands/dbcommands.c:1538 commands/dbcommands.c:1547 -#: commands/dbcommands.c:1556 commands/extension.c:1757 +#: commands/dbcommands.c:261 commands/dbcommands.c:1541 +#: commands/dbcommands.c:1550 commands/dbcommands.c:1559 +#: commands/dbcommands.c:1568 commands/extension.c:1757 #: commands/extension.c:1767 commands/extension.c:1777 -#: commands/extension.c:3074 commands/foreigncmds.c:539 -#: commands/foreigncmds.c:548 commands/functioncmds.c:605 -#: commands/functioncmds.c:771 commands/functioncmds.c:780 -#: commands/functioncmds.c:789 commands/functioncmds.c:798 -#: commands/functioncmds.c:2096 commands/functioncmds.c:2104 +#: commands/extension.c:3074 commands/foreigncmds.c:550 +#: commands/foreigncmds.c:559 commands/functioncmds.c:606 +#: commands/functioncmds.c:772 commands/functioncmds.c:781 +#: commands/functioncmds.c:790 commands/functioncmds.c:799 +#: commands/functioncmds.c:2097 commands/functioncmds.c:2105 #: commands/publicationcmds.c:87 commands/publicationcmds.c:130 #: commands/sequence.c:1274 commands/sequence.c:1284 commands/sequence.c:1294 #: commands/sequence.c:1304 commands/sequence.c:1314 commands/sequence.c:1324 @@ -3522,7 +3544,7 @@ msgstr "великого об'єкту %u не існує" #: commands/subscriptioncmds.c:144 commands/subscriptioncmds.c:154 #: commands/subscriptioncmds.c:170 commands/subscriptioncmds.c:181 #: commands/subscriptioncmds.c:195 commands/subscriptioncmds.c:205 -#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7629 +#: commands/subscriptioncmds.c:215 commands/tablecmds.c:7717 #: commands/typecmds.c:335 commands/typecmds.c:1416 commands/typecmds.c:1425 #: commands/typecmds.c:1433 commands/typecmds.c:1441 commands/typecmds.c:1449 #: commands/typecmds.c:1457 commands/user.c:133 commands/user.c:147 @@ -3533,553 +3555,553 @@ msgstr "великого об'єкту %u не існує" #: commands/user.c:590 commands/user.c:598 commands/user.c:606 #: commands/user.c:614 commands/user.c:622 commands/user.c:630 #: commands/user.c:638 commands/user.c:647 commands/user.c:655 -#: commands/user.c:663 parser/parse_utilcmd.c:408 -#: replication/pgoutput/pgoutput.c:190 replication/pgoutput/pgoutput.c:211 -#: replication/pgoutput/pgoutput.c:225 replication/pgoutput/pgoutput.c:235 -#: replication/pgoutput/pgoutput.c:245 replication/walsender.c:883 -#: replication/walsender.c:894 replication/walsender.c:904 +#: commands/user.c:663 parser/parse_utilcmd.c:402 +#: replication/pgoutput/pgoutput.c:199 replication/pgoutput/pgoutput.c:220 +#: replication/pgoutput/pgoutput.c:234 replication/pgoutput/pgoutput.c:244 +#: replication/pgoutput/pgoutput.c:254 replication/walsender.c:897 +#: replication/walsender.c:908 replication/walsender.c:918 #, c-format msgid "conflicting or redundant options" msgstr "конфліктуючі або надлишкові параметри" -#: catalog/aclchk.c:1046 +#: catalog/aclchk.c:1047 #, c-format msgid "default privileges cannot be set for columns" msgstr "права за замовчуванням не можна встановити для стовпців" -#: catalog/aclchk.c:1206 +#: catalog/aclchk.c:1207 #, c-format msgid "cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS" msgstr "речення IN SCHEMA не можна використати в GRANT/REVOKE ON SCHEMAS" -#: catalog/aclchk.c:1544 catalog/catalog.c:557 catalog/objectaddress.c:1522 -#: commands/analyze.c:390 commands/copy.c:744 commands/sequence.c:1709 -#: commands/tablecmds.c:7092 commands/tablecmds.c:7248 -#: commands/tablecmds.c:7298 commands/tablecmds.c:7372 -#: commands/tablecmds.c:7442 commands/tablecmds.c:7554 -#: commands/tablecmds.c:7648 commands/tablecmds.c:7707 -#: commands/tablecmds.c:7796 commands/tablecmds.c:7825 -#: commands/tablecmds.c:7980 commands/tablecmds.c:8062 -#: commands/tablecmds.c:8218 commands/tablecmds.c:8336 -#: commands/tablecmds.c:11726 commands/tablecmds.c:11907 -#: commands/tablecmds.c:12067 commands/tablecmds.c:13210 -#: commands/tablecmds.c:15756 commands/trigger.c:942 parser/analyze.c:2460 -#: parser/parse_relation.c:714 parser/parse_target.c:1063 -#: parser/parse_type.c:144 parser/parse_utilcmd.c:3432 -#: parser/parse_utilcmd.c:3468 parser/parse_utilcmd.c:3510 utils/adt/acl.c:2845 -#: utils/adt/ruleutils.c:2734 +#: catalog/aclchk.c:1545 catalog/catalog.c:587 catalog/objectaddress.c:1522 +#: commands/analyze.c:390 commands/copy.c:781 commands/sequence.c:1709 +#: commands/tablecmds.c:7180 commands/tablecmds.c:7336 +#: commands/tablecmds.c:7386 commands/tablecmds.c:7460 +#: commands/tablecmds.c:7530 commands/tablecmds.c:7642 +#: commands/tablecmds.c:7736 commands/tablecmds.c:7795 +#: commands/tablecmds.c:7884 commands/tablecmds.c:7913 +#: commands/tablecmds.c:8068 commands/tablecmds.c:8150 +#: commands/tablecmds.c:8306 commands/tablecmds.c:8428 +#: commands/tablecmds.c:11908 commands/tablecmds.c:12100 +#: commands/tablecmds.c:12260 commands/tablecmds.c:13446 +#: commands/tablecmds.c:15993 commands/trigger.c:942 parser/analyze.c:2471 +#: parser/parse_relation.c:714 parser/parse_target.c:1077 +#: parser/parse_type.c:144 parser/parse_utilcmd.c:3425 +#: parser/parse_utilcmd.c:3461 parser/parse_utilcmd.c:3503 utils/adt/acl.c:2862 +#: utils/adt/ruleutils.c:2732 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist" msgstr "стовпець \"%s\" зв'язку \"%s\" не існує" -#: catalog/aclchk.c:1807 catalog/objectaddress.c:1362 commands/sequence.c:1147 -#: commands/tablecmds.c:249 commands/tablecmds.c:16628 utils/adt/acl.c:2053 -#: utils/adt/acl.c:2083 utils/adt/acl.c:2115 utils/adt/acl.c:2147 -#: utils/adt/acl.c:2175 utils/adt/acl.c:2205 +#: catalog/aclchk.c:1808 catalog/objectaddress.c:1362 commands/sequence.c:1147 +#: commands/tablecmds.c:249 commands/tablecmds.c:16867 utils/adt/acl.c:2070 +#: utils/adt/acl.c:2100 utils/adt/acl.c:2132 utils/adt/acl.c:2164 +#: utils/adt/acl.c:2192 utils/adt/acl.c:2222 #, c-format msgid "\"%s\" is not a sequence" -msgstr "\"%s\" не послідовність" +msgstr "\"%s\" не є послідовністю" -#: catalog/aclchk.c:1845 +#: catalog/aclchk.c:1846 #, c-format msgid "sequence \"%s\" only supports USAGE, SELECT, and UPDATE privileges" msgstr "послідовність \"%s\" підтримує лише привілеї USAGE, SELECT та UPDATE" -#: catalog/aclchk.c:1862 +#: catalog/aclchk.c:1863 #, c-format msgid "invalid privilege type %s for table" msgstr "недійсний тип привілею %s для таблиці" -#: catalog/aclchk.c:2028 +#: catalog/aclchk.c:2032 #, c-format msgid "invalid privilege type %s for column" -msgstr "недійсний тип права %s для стовпця" +msgstr "недійсний тип привілею %s для стовпця" -#: catalog/aclchk.c:2041 +#: catalog/aclchk.c:2045 #, c-format msgid "sequence \"%s\" only supports SELECT column privileges" -msgstr "послідовність \"%s\" підтримує тільки право стовпця SELECT" +msgstr "послідовність \"%s\" підтримує тільки привілей стовпця SELECT" -#: catalog/aclchk.c:2623 +#: catalog/aclchk.c:2628 #, c-format msgid "language \"%s\" is not trusted" msgstr "мова \"%s\" не є довіреною" -#: catalog/aclchk.c:2625 +#: catalog/aclchk.c:2630 #, c-format msgid "GRANT and REVOKE are not allowed on untrusted languages, because only superusers can use untrusted languages." -msgstr "GRANT і REVOKE не допустимі для недовірених мов, тому що тільки суперкористувачі можуть використовувати недовірені мови." +msgstr "GRANT і REVOKE не є допустимими для недовірених мов, тому що тільки суперкористувачі можуть використовувати недовірені мови." -#: catalog/aclchk.c:3139 +#: catalog/aclchk.c:3144 #, c-format msgid "cannot set privileges of array types" msgstr "не можна встановити права для типів масивів" -#: catalog/aclchk.c:3140 +#: catalog/aclchk.c:3145 #, c-format msgid "Set the privileges of the element type instead." msgstr "Замість цього встановіть права для типу елементу." -#: catalog/aclchk.c:3147 catalog/objectaddress.c:1656 +#: catalog/aclchk.c:3152 catalog/objectaddress.c:1656 #, c-format msgid "\"%s\" is not a domain" msgstr "\"%s\" не є доменом" -#: catalog/aclchk.c:3267 +#: catalog/aclchk.c:3272 #, c-format msgid "unrecognized privilege type \"%s\"" -msgstr "нерозпізнане право \"%s\"" +msgstr "нерозпізнаний привілей \"%s\"" -#: catalog/aclchk.c:3328 +#: catalog/aclchk.c:3333 #, c-format msgid "permission denied for aggregate %s" msgstr "немає дозволу для агрегату %s" -#: catalog/aclchk.c:3331 +#: catalog/aclchk.c:3336 #, c-format msgid "permission denied for collation %s" msgstr "немає дозволу для сортування %s" -#: catalog/aclchk.c:3334 +#: catalog/aclchk.c:3339 #, c-format msgid "permission denied for column %s" msgstr "немає дозволу для стовпця %s" -#: catalog/aclchk.c:3337 +#: catalog/aclchk.c:3342 #, c-format msgid "permission denied for conversion %s" msgstr "немає дозволу для перетворення %s" -#: catalog/aclchk.c:3340 +#: catalog/aclchk.c:3345 #, c-format msgid "permission denied for database %s" msgstr "немає доступу для бази даних %s" -#: catalog/aclchk.c:3343 +#: catalog/aclchk.c:3348 #, c-format msgid "permission denied for domain %s" msgstr "немає дозволу для домену %s" -#: catalog/aclchk.c:3346 +#: catalog/aclchk.c:3351 #, c-format msgid "permission denied for event trigger %s" msgstr "немає дозволу для тригера подій %s" -#: catalog/aclchk.c:3349 +#: catalog/aclchk.c:3354 #, c-format msgid "permission denied for extension %s" msgstr "немає дозволу для розширення %s" -#: catalog/aclchk.c:3352 +#: catalog/aclchk.c:3357 #, c-format msgid "permission denied for foreign-data wrapper %s" msgstr "немає дозволу для джерела сторонніх даних %s" -#: catalog/aclchk.c:3355 +#: catalog/aclchk.c:3360 #, c-format msgid "permission denied for foreign server %s" msgstr "немає дозволу для стороннього серверу %s" -#: catalog/aclchk.c:3358 +#: catalog/aclchk.c:3363 #, c-format msgid "permission denied for foreign table %s" msgstr "немає дозволу для сторонньої таблиці %s" -#: catalog/aclchk.c:3361 +#: catalog/aclchk.c:3366 #, c-format msgid "permission denied for function %s" msgstr "немає дозволу для функції %s" -#: catalog/aclchk.c:3364 +#: catalog/aclchk.c:3369 #, c-format msgid "permission denied for index %s" msgstr "немає дозволу для індексу %s" -#: catalog/aclchk.c:3367 +#: catalog/aclchk.c:3372 #, c-format msgid "permission denied for language %s" msgstr "немає дозволу для мови %s" -#: catalog/aclchk.c:3370 +#: catalog/aclchk.c:3375 #, c-format msgid "permission denied for large object %s" msgstr "немає дозволу для великого об'єкту %s" -#: catalog/aclchk.c:3373 +#: catalog/aclchk.c:3378 #, c-format msgid "permission denied for materialized view %s" msgstr "немає дозволу для матеріалізованого подання %s" -#: catalog/aclchk.c:3376 +#: catalog/aclchk.c:3381 #, c-format msgid "permission denied for operator class %s" msgstr "немає дозволу для класу операторів %s" -#: catalog/aclchk.c:3379 +#: catalog/aclchk.c:3384 #, c-format msgid "permission denied for operator %s" msgstr "немає дозволу для оператора %s" -#: catalog/aclchk.c:3382 +#: catalog/aclchk.c:3387 #, c-format msgid "permission denied for operator family %s" msgstr "немає дозволу для сімейства операторів %s" -#: catalog/aclchk.c:3385 +#: catalog/aclchk.c:3390 #, c-format msgid "permission denied for policy %s" msgstr "немає дозволу для політики %s" -#: catalog/aclchk.c:3388 +#: catalog/aclchk.c:3393 #, c-format msgid "permission denied for procedure %s" msgstr "немає дозволу для процедури %s" -#: catalog/aclchk.c:3391 +#: catalog/aclchk.c:3396 #, c-format msgid "permission denied for publication %s" msgstr "немає дозволу для публікації %s" -#: catalog/aclchk.c:3394 +#: catalog/aclchk.c:3399 #, c-format msgid "permission denied for routine %s" msgstr "немає дозволу для підпрограми %s" -#: catalog/aclchk.c:3397 +#: catalog/aclchk.c:3402 #, c-format msgid "permission denied for schema %s" msgstr "немає дозволу для схеми %s" -#: catalog/aclchk.c:3400 commands/sequence.c:618 commands/sequence.c:852 +#: catalog/aclchk.c:3405 commands/sequence.c:618 commands/sequence.c:852 #: commands/sequence.c:894 commands/sequence.c:935 commands/sequence.c:1807 -#: commands/sequence.c:1871 +#: commands/sequence.c:1868 #, c-format msgid "permission denied for sequence %s" msgstr "немає дозволу для послідовності %s" -#: catalog/aclchk.c:3403 +#: catalog/aclchk.c:3408 #, c-format msgid "permission denied for statistics object %s" msgstr "немає дозволу для об'єкту статистики %s" -#: catalog/aclchk.c:3406 +#: catalog/aclchk.c:3411 #, c-format msgid "permission denied for subscription %s" msgstr "немає дозволу для підписки %s" -#: catalog/aclchk.c:3409 +#: catalog/aclchk.c:3414 #, c-format msgid "permission denied for table %s" msgstr "немає дозволу для таблиці %s" -#: catalog/aclchk.c:3412 +#: catalog/aclchk.c:3417 #, c-format msgid "permission denied for tablespace %s" msgstr "немає дозволу для табличного простору %s" -#: catalog/aclchk.c:3415 +#: catalog/aclchk.c:3420 #, c-format msgid "permission denied for text search configuration %s" msgstr "немає дозволу для конфігурації текстового пошуку %s" -#: catalog/aclchk.c:3418 +#: catalog/aclchk.c:3423 #, c-format msgid "permission denied for text search dictionary %s" msgstr "немає дозволу для словника текстового пошуку %s" -#: catalog/aclchk.c:3421 +#: catalog/aclchk.c:3426 #, c-format msgid "permission denied for type %s" msgstr "немає дозволу для типу %s" -#: catalog/aclchk.c:3424 +#: catalog/aclchk.c:3429 #, c-format msgid "permission denied for view %s" msgstr "немає дозволу для подання %s" -#: catalog/aclchk.c:3459 +#: catalog/aclchk.c:3464 #, c-format msgid "must be owner of aggregate %s" msgstr "треба бути власником агрегату %s" -#: catalog/aclchk.c:3462 +#: catalog/aclchk.c:3467 #, c-format msgid "must be owner of collation %s" msgstr "треба бути власником правил сортування %s" -#: catalog/aclchk.c:3465 +#: catalog/aclchk.c:3470 #, c-format msgid "must be owner of conversion %s" msgstr "треба бути власником перетворення %s" -#: catalog/aclchk.c:3468 +#: catalog/aclchk.c:3473 #, c-format msgid "must be owner of database %s" msgstr "треба бути власником бази даних %s" -#: catalog/aclchk.c:3471 +#: catalog/aclchk.c:3476 #, c-format msgid "must be owner of domain %s" msgstr "треба бути власником домену %s" -#: catalog/aclchk.c:3474 +#: catalog/aclchk.c:3479 #, c-format msgid "must be owner of event trigger %s" msgstr "треба бути власником тригеру подій %s" -#: catalog/aclchk.c:3477 +#: catalog/aclchk.c:3482 #, c-format msgid "must be owner of extension %s" msgstr "треба бути власником розширення %s" -#: catalog/aclchk.c:3480 +#: catalog/aclchk.c:3485 #, c-format msgid "must be owner of foreign-data wrapper %s" msgstr "треба бути власником джерела сторонніх даних %s" -#: catalog/aclchk.c:3483 +#: catalog/aclchk.c:3488 #, c-format msgid "must be owner of foreign server %s" msgstr "треба бути власником стороннього серверу %s" -#: catalog/aclchk.c:3486 +#: catalog/aclchk.c:3491 #, c-format msgid "must be owner of foreign table %s" msgstr "треба бути власником сторонньої таблиці %s" -#: catalog/aclchk.c:3489 +#: catalog/aclchk.c:3494 #, c-format msgid "must be owner of function %s" msgstr "треба бути власником функції %s" -#: catalog/aclchk.c:3492 +#: catalog/aclchk.c:3497 #, c-format msgid "must be owner of index %s" msgstr "треба бути власником індексу %s" -#: catalog/aclchk.c:3495 +#: catalog/aclchk.c:3500 #, c-format msgid "must be owner of language %s" msgstr "треба бути власником мови %s" -#: catalog/aclchk.c:3498 +#: catalog/aclchk.c:3503 #, c-format msgid "must be owner of large object %s" msgstr "треба бути власником великого об'єкту %s" -#: catalog/aclchk.c:3501 +#: catalog/aclchk.c:3506 #, c-format msgid "must be owner of materialized view %s" msgstr "треба бути власником матеріалізованого подання %s" -#: catalog/aclchk.c:3504 +#: catalog/aclchk.c:3509 #, c-format msgid "must be owner of operator class %s" msgstr "треба бути власником класу операторів %s" -#: catalog/aclchk.c:3507 +#: catalog/aclchk.c:3512 #, c-format msgid "must be owner of operator %s" msgstr "треба бути власником оператора %s" -#: catalog/aclchk.c:3510 +#: catalog/aclchk.c:3515 #, c-format msgid "must be owner of operator family %s" msgstr "треба бути власником сімейства операторів %s" -#: catalog/aclchk.c:3513 +#: catalog/aclchk.c:3518 #, c-format msgid "must be owner of procedure %s" msgstr "треба бути власником процедури %s" -#: catalog/aclchk.c:3516 +#: catalog/aclchk.c:3521 #, c-format msgid "must be owner of publication %s" msgstr "треба бути власником публікації %s" -#: catalog/aclchk.c:3519 +#: catalog/aclchk.c:3524 #, c-format msgid "must be owner of routine %s" msgstr "треба бути власником підпрограми %s" -#: catalog/aclchk.c:3522 +#: catalog/aclchk.c:3527 #, c-format msgid "must be owner of sequence %s" msgstr "треба бути власником послідовності %s" -#: catalog/aclchk.c:3525 +#: catalog/aclchk.c:3530 #, c-format msgid "must be owner of subscription %s" msgstr "треба бути власником підписки %s" -#: catalog/aclchk.c:3528 +#: catalog/aclchk.c:3533 #, c-format msgid "must be owner of table %s" msgstr "треба бути власником таблиці %s" -#: catalog/aclchk.c:3531 +#: catalog/aclchk.c:3536 #, c-format msgid "must be owner of type %s" msgstr "треба бути власником типу %s" -#: catalog/aclchk.c:3534 +#: catalog/aclchk.c:3539 #, c-format msgid "must be owner of view %s" msgstr "треба бути власником подання %s" -#: catalog/aclchk.c:3537 +#: catalog/aclchk.c:3542 #, c-format msgid "must be owner of schema %s" msgstr "треба бути власником схеми %s" -#: catalog/aclchk.c:3540 +#: catalog/aclchk.c:3545 #, c-format msgid "must be owner of statistics object %s" msgstr "треба бути власником об'єкту статистики %s" -#: catalog/aclchk.c:3543 +#: catalog/aclchk.c:3548 #, c-format msgid "must be owner of tablespace %s" msgstr "треба бути власником табличного простору %s" -#: catalog/aclchk.c:3546 +#: catalog/aclchk.c:3551 #, c-format msgid "must be owner of text search configuration %s" msgstr "треба бути власником конфігурації текстового пошуку %s" -#: catalog/aclchk.c:3549 +#: catalog/aclchk.c:3554 #, c-format msgid "must be owner of text search dictionary %s" msgstr "треба бути власником словника текстового пошуку %s" -#: catalog/aclchk.c:3563 +#: catalog/aclchk.c:3568 #, c-format msgid "must be owner of relation %s" msgstr "треба бути власником відношення %s" -#: catalog/aclchk.c:3607 +#: catalog/aclchk.c:3612 #, c-format msgid "permission denied for column \"%s\" of relation \"%s\"" msgstr "немає дозволу для стовпця \"%s\" відношення \"%s\"" -#: catalog/aclchk.c:3750 catalog/aclchk.c:3769 +#: catalog/aclchk.c:3755 catalog/aclchk.c:3774 #, c-format msgid "attribute %d of relation with OID %u does not exist" msgstr "атрибут %d відношення з OID %u не існує" -#: catalog/aclchk.c:3864 catalog/aclchk.c:4836 +#: catalog/aclchk.c:3869 catalog/aclchk.c:4841 #, c-format msgid "relation with OID %u does not exist" msgstr "відношення з OID %u не існує" -#: catalog/aclchk.c:3977 catalog/aclchk.c:5254 +#: catalog/aclchk.c:3982 catalog/aclchk.c:5259 #, c-format msgid "database with OID %u does not exist" msgstr "база даних з OID %u не існує" -#: catalog/aclchk.c:4031 catalog/aclchk.c:4914 tcop/fastpath.c:141 +#: catalog/aclchk.c:4036 catalog/aclchk.c:4919 tcop/fastpath.c:141 #: utils/fmgr/fmgr.c:2051 #, c-format msgid "function with OID %u does not exist" msgstr "функція з OID %u не існує" -#: catalog/aclchk.c:4085 catalog/aclchk.c:4940 +#: catalog/aclchk.c:4090 catalog/aclchk.c:4945 #, c-format msgid "language with OID %u does not exist" msgstr "мова з OID %u не існує" -#: catalog/aclchk.c:4249 catalog/aclchk.c:5012 commands/collationcmds.c:536 +#: catalog/aclchk.c:4254 catalog/aclchk.c:5017 commands/collationcmds.c:536 #, c-format msgid "schema with OID %u does not exist" msgstr "схема з OID %u не існує" -#: catalog/aclchk.c:4313 catalog/aclchk.c:5039 utils/adt/genfile.c:688 +#: catalog/aclchk.c:4318 catalog/aclchk.c:5044 utils/adt/genfile.c:688 #, c-format msgid "tablespace with OID %u does not exist" msgstr "табличний простір з OID %u не існує" -#: catalog/aclchk.c:4372 catalog/aclchk.c:5173 commands/foreigncmds.c:325 +#: catalog/aclchk.c:4377 catalog/aclchk.c:5178 commands/foreigncmds.c:336 #, c-format msgid "foreign-data wrapper with OID %u does not exist" msgstr "джерело сторонніх даних з OID %u не існує" -#: catalog/aclchk.c:4434 catalog/aclchk.c:5200 commands/foreigncmds.c:462 +#: catalog/aclchk.c:4439 catalog/aclchk.c:5205 commands/foreigncmds.c:473 #, c-format msgid "foreign server with OID %u does not exist" msgstr "стороннього серверу з OID %u не усніє" -#: catalog/aclchk.c:4494 catalog/aclchk.c:4862 utils/cache/typcache.c:389 +#: catalog/aclchk.c:4499 catalog/aclchk.c:4867 utils/cache/typcache.c:389 #: utils/cache/typcache.c:444 #, c-format msgid "type with OID %u does not exist" msgstr "тип з OID %u не існує" -#: catalog/aclchk.c:4888 +#: catalog/aclchk.c:4893 #, c-format msgid "operator with OID %u does not exist" msgstr "оператора з OID %u не існує" -#: catalog/aclchk.c:5065 +#: catalog/aclchk.c:5070 #, c-format msgid "operator class with OID %u does not exist" msgstr "класу операторів з OID %u не існує" -#: catalog/aclchk.c:5092 +#: catalog/aclchk.c:5097 #, c-format msgid "operator family with OID %u does not exist" msgstr "сімейства операторів з OID %u не існує" -#: catalog/aclchk.c:5119 +#: catalog/aclchk.c:5124 #, c-format msgid "text search dictionary with OID %u does not exist" msgstr "словник текстового пошуку з OID %u не існує" -#: catalog/aclchk.c:5146 +#: catalog/aclchk.c:5151 #, c-format msgid "text search configuration with OID %u does not exist" msgstr "конфігурація текстового пошуку %u з OID не існує" -#: catalog/aclchk.c:5227 commands/event_trigger.c:453 +#: catalog/aclchk.c:5232 commands/event_trigger.c:453 #, c-format msgid "event trigger with OID %u does not exist" msgstr "тригер подій %u з OID не існує" -#: catalog/aclchk.c:5280 commands/collationcmds.c:387 +#: catalog/aclchk.c:5285 commands/collationcmds.c:387 #, c-format msgid "collation with OID %u does not exist" msgstr "порядку сортування %u з OID не існує" -#: catalog/aclchk.c:5306 +#: catalog/aclchk.c:5311 #, c-format msgid "conversion with OID %u does not exist" msgstr "перетворення %u з OID не існує" -#: catalog/aclchk.c:5347 +#: catalog/aclchk.c:5352 #, c-format msgid "extension with OID %u does not exist" msgstr "розширення %u з OID не існує" -#: catalog/aclchk.c:5374 commands/publicationcmds.c:818 +#: catalog/aclchk.c:5379 commands/publicationcmds.c:818 #, c-format msgid "publication with OID %u does not exist" msgstr "публікації %u з OID не існує" -#: catalog/aclchk.c:5400 commands/subscriptioncmds.c:1463 +#: catalog/aclchk.c:5405 commands/subscriptioncmds.c:1465 #, c-format msgid "subscription with OID %u does not exist" msgstr "підписки %u з OID не існує" -#: catalog/aclchk.c:5426 +#: catalog/aclchk.c:5431 #, c-format msgid "statistics object with OID %u does not exist" msgstr "об'єкту статистики %u з OID не існує" -#: catalog/catalog.c:378 +#: catalog/catalog.c:408 #, c-format msgid "still searching for an unused OID in relation \"%s\"" msgstr "все ще шукаю невикористаний OID у відношенні \"%s\"" -#: catalog/catalog.c:380 +#: catalog/catalog.c:410 #, 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." @@ -4088,7 +4110,7 @@ msgstr[1] "OID кандидати буле перевірені %llu рази, msgstr[2] "OID кандидати буле перевірені %llu разів, але невикористаного OID все ще не знайдено." msgstr[3] "OID кандидати буле перевірені %llu разів, але невикористаного OID все ще не знайдено." -#: catalog/catalog.c:405 +#: catalog/catalog.c:435 #, 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" @@ -4097,57 +4119,57 @@ msgstr[1] "новий OID було призначено у відношенні msgstr[2] "новий OID було призначено у відношенні \"%s\" після %llu повторних спроб" msgstr[3] "новий OID було призначено у відношенні \"%s\" після %llu повторних спроб" -#: catalog/catalog.c:536 +#: catalog/catalog.c:566 #, c-format msgid "must be superuser to call pg_nextoid()" msgstr "для виклику pg_nextoid() потрібно бути суперкористувачем" -#: catalog/catalog.c:544 +#: catalog/catalog.c:574 #, c-format msgid "pg_nextoid() can only be used on system catalogs" msgstr "pg_nextoid() можна використовувати лише для системних каталогів" -#: catalog/catalog.c:549 parser/parse_utilcmd.c:2277 +#: catalog/catalog.c:579 parser/parse_utilcmd.c:2284 #, c-format msgid "index \"%s\" does not belong to table \"%s\"" msgstr "індекс \"%s\" не належить таблиці \"%s\"" -#: catalog/catalog.c:566 +#: catalog/catalog.c:596 #, c-format msgid "column \"%s\" is not of type oid" msgstr "стовпець \"%s\" повинен мати тип oid" -#: catalog/catalog.c:573 +#: catalog/catalog.c:603 #, c-format msgid "index \"%s\" is not the index for column \"%s\"" msgstr "індекс \"%s\" не є індексом для стовпця \"%s\"" -#: catalog/dependency.c:821 catalog/dependency.c:1060 +#: catalog/dependency.c:828 catalog/dependency.c:1067 #, c-format msgid "cannot drop %s because %s requires it" msgstr "не вдалося видалити %s, оскільки %s потребує його" -#: catalog/dependency.c:823 catalog/dependency.c:1062 +#: catalog/dependency.c:830 catalog/dependency.c:1069 #, c-format msgid "You can drop %s instead." msgstr "Ви можете видалити %s замість цього." -#: catalog/dependency.c:931 catalog/pg_shdepend.c:697 +#: catalog/dependency.c:938 catalog/pg_shdepend.c:697 #, c-format msgid "cannot drop %s because it is required by the database system" msgstr "не вдалося видалити %s, оскільки він потрібний системі бази даних" -#: catalog/dependency.c:1141 catalog/dependency.c:1150 +#: catalog/dependency.c:1148 catalog/dependency.c:1157 #, c-format msgid "%s depends on %s" msgstr "%s залежить від %s" -#: catalog/dependency.c:1165 catalog/dependency.c:1174 +#: catalog/dependency.c:1172 catalog/dependency.c:1181 #, c-format msgid "drop cascades to %s" msgstr "видалення поширюється (cascades) на об'єкт %s" -#: catalog/dependency.c:1182 catalog/pg_shdepend.c:826 +#: catalog/dependency.c:1189 catalog/pg_shdepend.c:826 #, c-format msgid "\n" "and %d other object (see server log for list)" @@ -4160,37 +4182,38 @@ msgstr[1] "\n" msgstr[2] "\n" "і ще %d інших об'єктів (див. список у протоколі серверу)" msgstr[3] "\n" -"і ще %d інші об'єкти (див. список у протоколі сервера)" +"і ще %d інших об'єктів (див. список у протоколі серверу)" -#: catalog/dependency.c:1194 +#: catalog/dependency.c:1201 #, c-format msgid "cannot drop %s because other objects depend on it" msgstr "неможливо видалити %s, тому що від нього залежать інші об'єкти" -#: catalog/dependency.c:1197 catalog/dependency.c:1204 -#: catalog/dependency.c:1216 commands/tablecmds.c:1304 -#: commands/tablecmds.c:13828 commands/tablespace.c:464 commands/user.c:1095 -#: commands/view.c:506 libpq/auth.c:338 replication/syncrep.c:1043 -#: storage/lmgr/deadlock.c:1151 storage/lmgr/proc.c:1447 utils/misc/guc.c:7128 -#: utils/misc/guc.c:7164 utils/misc/guc.c:7234 utils/misc/guc.c:11432 -#: utils/misc/guc.c:11466 utils/misc/guc.c:11500 utils/misc/guc.c:11543 -#: utils/misc/guc.c:11585 +#: catalog/dependency.c:1204 catalog/dependency.c:1211 +#: catalog/dependency.c:1223 commands/tablecmds.c:1301 +#: commands/tablecmds.c:14064 commands/tablespace.c:464 commands/user.c:1095 +#: commands/view.c:506 libpq/auth.c:346 replication/slot.c:181 +#: replication/syncrep.c:1110 storage/lmgr/deadlock.c:1151 +#: storage/lmgr/proc.c:1447 utils/misc/guc.c:7140 utils/misc/guc.c:7176 +#: utils/misc/guc.c:7246 utils/misc/guc.c:11490 utils/misc/guc.c:11524 +#: utils/misc/guc.c:11558 utils/misc/guc.c:11601 utils/misc/guc.c:11643 +#: utils/misc/guc.c:12599 utils/misc/guc.c:12601 #, c-format msgid "%s" msgstr "%s" -#: catalog/dependency.c:1198 catalog/dependency.c:1205 +#: catalog/dependency.c:1205 catalog/dependency.c:1212 #, c-format msgid "Use DROP ... CASCADE to drop the dependent objects too." msgstr "Використайте DROP ... CASCADE для видалення залежних об'єктів також." -#: catalog/dependency.c:1202 +#: catalog/dependency.c:1209 #, c-format msgid "cannot drop desired object(s) because other objects depend on them" msgstr "не можна видалити бажаний(-і) об'єкт(-и) тому, що інші об'єкти залежні від нього(них)" #. translator: %d always has a value larger than 1 -#: catalog/dependency.c:1211 +#: catalog/dependency.c:1218 #, c-format msgid "drop cascades to %d other object" msgid_plural "drop cascades to %d other objects" @@ -4199,7 +4222,7 @@ msgstr[1] "видалення поширюється (cascades) на ще %d і msgstr[2] "видалення поширюється (cascades) на ще %d інших об'єктів" msgstr[3] "видалення поширюється (cascades) на ще %d інших об'єктів" -#: catalog/dependency.c:1882 +#: catalog/dependency.c:1891 #, c-format msgid "constant of the type %s cannot be used here" msgstr "константа типу %s не може бути використана тут" @@ -4214,13 +4237,13 @@ msgstr "немає дозволу для створення \"%s.%s\"" msgid "System catalog modifications are currently disallowed." msgstr "Змінення системного каталогу наразі заборонено." -#: catalog/heap.c:509 commands/tablecmds.c:2316 commands/tablecmds.c:2953 -#: commands/tablecmds.c:6683 +#: catalog/heap.c:509 commands/tablecmds.c:2313 commands/tablecmds.c:2950 +#: commands/tablecmds.c:6738 #, c-format msgid "tables can have at most %d columns" msgstr "таблиці можуть містити максимум %d стовпців" -#: catalog/heap.c:527 commands/tablecmds.c:6982 +#: catalog/heap.c:527 commands/tablecmds.c:7070 #, c-format msgid "column name \"%s\" conflicts with a system column name" msgstr "ім'я стовпця \"%s\" конфліктує з системним іменем стовпця" @@ -4231,39 +4254,39 @@ msgid "column name \"%s\" specified more than once" msgstr "ім'я стовпця \"%s\" вказано кілька разів" #. translator: first %s is an integer not a name -#: catalog/heap.c:618 +#: catalog/heap.c:621 #, c-format msgid "partition key column %s has pseudo-type %s" msgstr "стовпець ключа секціонування %s має псевдотип %s" -#: catalog/heap.c:623 +#: catalog/heap.c:626 #, c-format msgid "column \"%s\" has pseudo-type %s" msgstr "стовпець \"%s\" має псевдо-тип %s" -#: catalog/heap.c:654 +#: catalog/heap.c:657 #, 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:709 +#: catalog/heap.c:712 #, c-format msgid "no collation was derived for partition key column %s with collatable type %s" msgstr "для стовпця ключа секціонування \"%s\" з сортируючим типом %s не вдалося отримати параметри сортування" -#: catalog/heap.c:715 commands/createas.c:203 commands/createas.c:512 +#: catalog/heap.c:718 commands/createas.c:203 commands/createas.c:512 #, c-format msgid "no collation was derived for column \"%s\" with collatable type %s" msgstr "для стовпця \"%s\" із сортувальним типом %s не вдалося отримати параметри сортування" -#: catalog/heap.c:1200 catalog/index.c:872 commands/createas.c:408 -#: commands/tablecmds.c:3858 +#: catalog/heap.c:1203 catalog/index.c:872 commands/createas.c:408 +#: commands/tablecmds.c:3872 #, c-format msgid "relation \"%s\" already exists" msgstr "відношення \"%s\" вже існує" -#: catalog/heap.c:1216 catalog/pg_type.c:436 catalog/pg_type.c:784 +#: catalog/heap.c:1219 catalog/pg_type.c:436 catalog/pg_type.c:784 #: catalog/pg_type.c:931 commands/typecmds.c:249 commands/typecmds.c:261 #: commands/typecmds.c:757 commands/typecmds.c:1172 commands/typecmds.c:1398 #: commands/typecmds.c:1590 commands/typecmds.c:2562 @@ -4271,120 +4294,120 @@ msgstr "відношення \"%s\" вже існує" msgid "type \"%s\" already exists" msgstr "тип \"%s\" вже існує" -#: catalog/heap.c:1217 +#: catalog/heap.c:1220 #, 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:1246 +#: catalog/heap.c:1249 #, c-format msgid "pg_class heap OID value not set when in binary upgrade mode" msgstr "значення OID в pg_class не задано в режимі двійкового оновлення" -#: catalog/heap.c:2459 +#: catalog/heap.c:2529 #, c-format msgid "cannot add NO INHERIT constraint to partitioned table \"%s\"" msgstr "не можна додати обмеження NO INHERIT до секціонованої таблиці \"%s\"" -#: catalog/heap.c:2732 +#: catalog/heap.c:2797 #, c-format msgid "check constraint \"%s\" already exists" msgstr "обмеження перевірки \"%s\" вже інсує" -#: catalog/heap.c:2902 catalog/index.c:886 catalog/pg_constraint.c:670 -#: commands/tablecmds.c:8710 +#: catalog/heap.c:2967 catalog/index.c:886 catalog/pg_constraint.c:670 +#: commands/tablecmds.c:8802 #, c-format msgid "constraint \"%s\" for relation \"%s\" already exists" msgstr "обмеження \"%s\" відношення \"%s\" вже існує" -#: catalog/heap.c:2909 +#: catalog/heap.c:2974 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on relation \"%s\"" msgstr "обмеження \"%s\" конфліктує з неуспадкованим обмеженням відношення \"%s\"" -#: catalog/heap.c:2920 +#: catalog/heap.c:2985 #, c-format msgid "constraint \"%s\" conflicts with inherited constraint on relation \"%s\"" msgstr "обмеження \"%s\" конфліктує з успадкованим обмеженням відношення \"%s\"" -#: catalog/heap.c:2930 +#: catalog/heap.c:2995 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on relation \"%s\"" msgstr "обмеження \"%s\" конфліктує з обмеженням NOT VALID в відношенні \"%s\"" -#: catalog/heap.c:2935 +#: catalog/heap.c:3000 #, c-format msgid "merging constraint \"%s\" with inherited definition" msgstr "злиття обмеження \"%s\" з успадкованим визначенням" -#: catalog/heap.c:3040 +#: catalog/heap.c:3105 #, c-format msgid "cannot use generated column \"%s\" in column generation expression" -msgstr "в виразі створення стовпця не можна використовувати згенерований стовпець \"%s\" " +msgstr "в виразі створення стовпця не можна використовувати згенерований стовпець \"%s\"" -#: catalog/heap.c:3042 +#: catalog/heap.c:3107 #, c-format msgid "A generated column cannot reference another generated column." msgstr "Згенерований стовпець не може посилатися на інший згенерований стовпець." -#: catalog/heap.c:3048 +#: catalog/heap.c:3113 #, c-format msgid "cannot use whole-row variable in column generation expression" msgstr "у виразі створення стовпців не можна використовувати змінну усього рядка" -#: catalog/heap.c:3049 +#: catalog/heap.c:3114 #, c-format msgid "This would cause the generated column to depend on its own value." msgstr "Це призведе до того, що згенерований стовпець буде залежати від власного значення." -#: catalog/heap.c:3104 +#: catalog/heap.c:3169 #, c-format msgid "generation expression is not immutable" msgstr "вираз генерації не є незмінним" -#: catalog/heap.c:3132 rewrite/rewriteHandler.c:1290 +#: catalog/heap.c:3197 rewrite/rewriteHandler.c:1288 #, c-format msgid "column \"%s\" is of type %s but default expression is of type %s" msgstr "стовпець \"%s\" має тип %s, але тип виразу за замовчуванням %s" -#: catalog/heap.c:3137 commands/prepare.c:368 parser/analyze.c:2684 -#: parser/parse_target.c:594 parser/parse_target.c:882 -#: parser/parse_target.c:892 rewrite/rewriteHandler.c:1295 +#: catalog/heap.c:3202 commands/prepare.c:368 parser/analyze.c:2695 +#: parser/parse_target.c:594 parser/parse_target.c:891 +#: parser/parse_target.c:901 rewrite/rewriteHandler.c:1293 #, c-format msgid "You will need to rewrite or cast the expression." msgstr "Потрібно буде переписати або привести вираз." -#: catalog/heap.c:3184 +#: catalog/heap.c:3249 #, c-format msgid "only table \"%s\" can be referenced in check constraint" msgstr "в обмеженні-перевірці можна посилатися лише на таблицю \"%s\"" -#: catalog/heap.c:3482 +#: catalog/heap.c:3547 #, c-format msgid "unsupported ON COMMIT and foreign key combination" msgstr "непідтримуване поєднання зовнішнього ключа з ON COMMIT" -#: catalog/heap.c:3483 +#: catalog/heap.c:3548 #, 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:3488 +#: catalog/heap.c:3553 #, c-format msgid "cannot truncate a table referenced in a foreign key constraint" msgstr "скоротити таблицю, на яку посилається зовнішній ключ, не можливо" -#: catalog/heap.c:3489 +#: catalog/heap.c:3554 #, c-format msgid "Table \"%s\" references \"%s\"." msgstr "Таблиця \"%s\" посилається на \"%s\"." -#: catalog/heap.c:3491 +#: catalog/heap.c:3556 #, c-format msgid "Truncate table \"%s\" at the same time, or use TRUNCATE ... CASCADE." msgstr "Скоротіть таблицю \"%s\" паралельно або використайте TRUNCATE ... CASCADE." -#: catalog/index.c:223 parser/parse_utilcmd.c:2183 +#: catalog/index.c:223 parser/parse_utilcmd.c:2190 #, c-format msgid "multiple primary keys for table \"%s\" are not allowed" msgstr "таблиця \"%s\" не може містити кілька первинних ключів" @@ -4399,7 +4422,7 @@ msgstr "первинні ключі не можуть бути виразами" msgid "primary key column \"%s\" is not marked NOT NULL" msgstr "стовпець первинного ключа \"%s\" не позначений як NOT NULL" -#: catalog/index.c:771 catalog/index.c:1934 +#: catalog/index.c:771 catalog/index.c:1935 #, c-format msgid "user-defined indexes on system catalog tables are not supported" msgstr "користувацькі індекси в таблицях системного каталогу не підтримуються" @@ -4414,7 +4437,7 @@ msgstr "недетерміновані правила сортування не msgid "concurrent index creation on system catalog tables is not supported" msgstr "паралельне створення індексу в таблицях системного каталогу не підтримується" -#: catalog/index.c:835 catalog/index.c:1286 +#: catalog/index.c:835 catalog/index.c:1287 #, c-format msgid "concurrent index creation for exclusion constraints is not supported" msgstr "парарельне створення індексу для обмежень-виключень не підтримується" @@ -4435,39 +4458,39 @@ msgstr "ввідношення \"%s\" вже існує, пропускаємо" msgid "pg_class index OID value not set when in binary upgrade mode" msgstr "значення OID індекса в pg_class не встановлено в режимі двійкового оновлення" -#: catalog/index.c:2231 +#: catalog/index.c:2232 #, c-format msgid "DROP INDEX CONCURRENTLY must be first action in transaction" msgstr "DROP INDEX CONCURRENTLY повинен бути першою дією в транзакції" -#: catalog/index.c:3637 +#: catalog/index.c:3660 #, c-format msgid "cannot reindex temporary tables of other sessions" msgstr "повторно індексувати тимчасові таблиці інших сеансів не можна" -#: catalog/index.c:3648 commands/indexcmds.c:3548 +#: catalog/index.c:3671 commands/indexcmds.c:3589 #, c-format msgid "cannot reindex invalid index on TOAST table" msgstr "переіндексувати неприпустимий індекс в таблиці TOAST не можна" -#: catalog/index.c:3664 commands/indexcmds.c:3428 commands/indexcmds.c:3572 -#: commands/tablecmds.c:3273 +#: catalog/index.c:3687 commands/indexcmds.c:3469 commands/indexcmds.c:3613 +#: commands/tablecmds.c:3282 #, c-format msgid "cannot move system relation \"%s\"" msgstr "перемістити системне відношення \"%s\" не можна" -#: catalog/index.c:3808 +#: catalog/index.c:3831 #, c-format msgid "index \"%s\" was reindexed" msgstr "індекс \"%s\" був перебудований" -#: catalog/index.c:3945 +#: catalog/index.c:3968 #, c-format msgid "cannot reindex invalid index \"%s.%s\" on TOAST table, skipping" msgstr "переіндексувати неприпустимий індекс \"%s.%s\" в таблиці TOAST не можна, пропускається" #: catalog/namespace.c:259 catalog/namespace.c:463 catalog/namespace.c:555 -#: commands/trigger.c:5233 +#: commands/trigger.c:5285 #, c-format msgid "cross-database references are not implemented: \"%s.%s.%s\"" msgstr "cross-database посилання не реалізовані: \"%s.%s.%s\"" @@ -4498,7 +4521,7 @@ msgstr "відношення \"%s.%s\" не існує" msgid "relation \"%s\" does not exist" msgstr "відношення \"%s\" не існує" -#: catalog/namespace.c:501 catalog/namespace.c:3076 commands/extension.c:1541 +#: catalog/namespace.c:501 catalog/namespace.c:3079 commands/extension.c:1541 #: commands/extension.c:1547 #, c-format msgid "no schema has been selected to create in" @@ -4524,112 +4547,112 @@ msgstr "в тимчасових схемах можуть бути створе msgid "statistics object \"%s\" does not exist" msgstr "об'єкт статистики \"%s\" не існує" -#: catalog/namespace.c:2391 +#: catalog/namespace.c:2394 #, c-format msgid "text search parser \"%s\" does not exist" msgstr "парсер текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2517 +#: catalog/namespace.c:2520 #, c-format msgid "text search dictionary \"%s\" does not exist" msgstr "словник текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2644 +#: catalog/namespace.c:2647 #, c-format msgid "text search template \"%s\" does not exist" msgstr "шаблон текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2770 commands/tsearchcmds.c:1121 +#: catalog/namespace.c:2773 commands/tsearchcmds.c:1127 #: utils/cache/ts_cache.c:613 #, c-format msgid "text search configuration \"%s\" does not exist" msgstr "конфігурація текстового пошуку \"%s\" не існує" -#: catalog/namespace.c:2883 parser/parse_expr.c:810 parser/parse_target.c:1255 +#: catalog/namespace.c:2886 parser/parse_expr.c:810 parser/parse_target.c:1269 #, c-format msgid "cross-database references are not implemented: %s" msgstr "міжбазові посилання не реалізовані: %s" -#: catalog/namespace.c:2889 parser/parse_expr.c:817 parser/parse_target.c:1262 +#: catalog/namespace.c:2892 parser/parse_expr.c:817 parser/parse_target.c:1276 #: gram.y:15103 gram.y:17077 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неправильне повне ім'я (забагато компонентів): %s" -#: catalog/namespace.c:3019 +#: catalog/namespace.c:3022 #, c-format msgid "cannot move objects into or out of temporary schemas" msgstr "не можна переміщати об'єкти в або з тимчасових схем" -#: catalog/namespace.c:3025 +#: catalog/namespace.c:3028 #, c-format msgid "cannot move objects into or out of TOAST schema" msgstr "не можна переміщати об'єкти в або з схем TOAST" -#: catalog/namespace.c:3098 commands/schemacmds.c:263 commands/schemacmds.c:343 -#: commands/tablecmds.c:1249 +#: catalog/namespace.c:3101 commands/schemacmds.c:263 commands/schemacmds.c:343 +#: commands/tablecmds.c:1246 #, c-format msgid "schema \"%s\" does not exist" msgstr "схема \"%s\" не існує" -#: catalog/namespace.c:3129 +#: catalog/namespace.c:3132 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неправильне ім'я зв'язку (забагато компонентів): %s" -#: catalog/namespace.c:3696 +#: catalog/namespace.c:3699 #, c-format msgid "collation \"%s\" for encoding \"%s\" does not exist" msgstr "правило сортування \"%s\" для кодування \"%s\" не існує" -#: catalog/namespace.c:3751 +#: catalog/namespace.c:3754 #, c-format msgid "conversion \"%s\" does not exist" msgstr "перетворення\"%s\" не існує" -#: catalog/namespace.c:4015 +#: catalog/namespace.c:4018 #, c-format msgid "permission denied to create temporary tables in database \"%s\"" msgstr "немає дозволу для створення тимчасових таблиць в базі даних \"%s\"" -#: catalog/namespace.c:4031 +#: catalog/namespace.c:4034 #, c-format msgid "cannot create temporary tables during recovery" msgstr "не можна створити тимчасові таблиці під час відновлення" -#: catalog/namespace.c:4037 +#: catalog/namespace.c:4040 #, c-format msgid "cannot create temporary tables during a parallel operation" msgstr "не можна створити тимчасові таблиці під час паралельної операції" -#: catalog/namespace.c:4338 commands/tablespace.c:1216 commands/variable.c:64 -#: utils/misc/guc.c:11617 utils/misc/guc.c:11695 +#: catalog/namespace.c:4341 commands/tablespace.c:1211 commands/variable.c:64 +#: tcop/postgres.c:3589 utils/misc/guc.c:11675 utils/misc/guc.c:11753 #, c-format msgid "List syntax is invalid." msgstr "Помилка синтаксису у списку." #: catalog/objectaddress.c:1370 catalog/pg_publication.c:58 #: commands/policy.c:96 commands/policy.c:376 commands/tablecmds.c:243 -#: commands/tablecmds.c:285 commands/tablecmds.c:2160 commands/tablecmds.c:6082 -#: commands/tablecmds.c:11843 +#: commands/tablecmds.c:285 commands/tablecmds.c:2157 commands/tablecmds.c:6130 +#: commands/tablecmds.c:12036 #, c-format msgid "\"%s\" is not a table" msgstr "\"%s\" не є таблицею" #: catalog/objectaddress.c:1377 commands/tablecmds.c:255 -#: commands/tablecmds.c:6121 commands/tablecmds.c:16633 commands/view.c:119 +#: commands/tablecmds.c:6169 commands/tablecmds.c:16872 commands/view.c:119 #, c-format msgid "\"%s\" is not a view" msgstr "\"%s\" не є поданням" #: catalog/objectaddress.c:1384 commands/matview.c:186 commands/tablecmds.c:261 -#: commands/tablecmds.c:16638 +#: commands/tablecmds.c:16877 #, c-format msgid "\"%s\" is not a materialized view" msgstr "\"%s\" не є матеріалізованим поданням" #: catalog/objectaddress.c:1391 commands/tablecmds.c:279 -#: commands/tablecmds.c:6124 commands/tablecmds.c:16643 +#: commands/tablecmds.c:6172 commands/tablecmds.c:16882 #, c-format msgid "\"%s\" is not a foreign table" msgstr "\"%s\" не є сторонньою таблицею" @@ -4649,10 +4672,10 @@ msgstr "слід вказати ім'я стовпця" msgid "default value for column \"%s\" of relation \"%s\" does not exist" msgstr "значення за замовчуванням для стовпця \"%s\" відношення \"%s\" не існує" -#: catalog/objectaddress.c:1645 commands/functioncmds.c:138 +#: catalog/objectaddress.c:1645 commands/functioncmds.c:139 #: commands/tablecmds.c:271 commands/typecmds.c:274 commands/typecmds.c:3713 #: parser/parse_type.c:243 parser/parse_type.c:272 parser/parse_type.c:791 -#: utils/adt/acl.c:4411 +#: utils/adt/acl.c:4428 #, c-format msgid "type \"%s\" does not exist" msgstr "тип \"%s\" не існує" @@ -4672,8 +4695,9 @@ msgstr "функція %d (%s, %s) з %s не існує" msgid "user mapping for user \"%s\" on server \"%s\" does not exist" msgstr "відображення користувача для користувача \"%s\" на сервері \"%s\"не існує" -#: catalog/objectaddress.c:1861 commands/foreigncmds.c:430 -#: commands/foreigncmds.c:997 commands/foreigncmds.c:1360 foreign/foreign.c:723 +#: catalog/objectaddress.c:1861 commands/foreigncmds.c:441 +#: commands/foreigncmds.c:1008 commands/foreigncmds.c:1371 +#: foreign/foreign.c:733 #, c-format msgid "server \"%s\" does not exist" msgstr "сервер \"%s\" не існує" @@ -4741,7 +4765,7 @@ msgstr "довжина списку аргументів повинна бути msgid "must be owner of large object %u" msgstr "треба бути власником великого об'єкта %u" -#: catalog/objectaddress.c:2503 commands/functioncmds.c:1583 +#: catalog/objectaddress.c:2503 commands/functioncmds.c:1584 #, c-format msgid "must be owner of type %s or type %s" msgstr "треба бути власником типу %s або типу %s" @@ -4762,74 +4786,74 @@ msgid "unrecognized object type \"%s\"" msgstr "нерозпізнаний тип об'єкту \"%s\"" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:2883 +#: catalog/objectaddress.c:2908 #, c-format msgid "column %s of %s" msgstr "стовпець %s з %s" -#: catalog/objectaddress.c:2898 +#: catalog/objectaddress.c:2923 #, c-format msgid "function %s" msgstr "функція %s" -#: catalog/objectaddress.c:2911 +#: catalog/objectaddress.c:2936 #, c-format msgid "type %s" msgstr "тип %s" -#: catalog/objectaddress.c:2948 +#: catalog/objectaddress.c:2973 #, c-format msgid "cast from %s to %s" msgstr "приведення від %s до %s" -#: catalog/objectaddress.c:2981 +#: catalog/objectaddress.c:3006 #, c-format msgid "collation %s" msgstr "сортування %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3012 +#: catalog/objectaddress.c:3037 #, c-format msgid "constraint %s on %s" msgstr "обмеження %s на %s" -#: catalog/objectaddress.c:3018 +#: catalog/objectaddress.c:3043 #, c-format msgid "constraint %s" msgstr "обмеження %s" -#: catalog/objectaddress.c:3050 +#: catalog/objectaddress.c:3075 #, c-format msgid "conversion %s" msgstr "перетворення %s" #. translator: %s is typically "column %s of table %s" -#: catalog/objectaddress.c:3096 +#: catalog/objectaddress.c:3121 #, c-format msgid "default value for %s" msgstr "значення за замовчуванням для %s" -#: catalog/objectaddress.c:3110 +#: catalog/objectaddress.c:3135 #, c-format msgid "language %s" msgstr "мова %s" -#: catalog/objectaddress.c:3118 +#: catalog/objectaddress.c:3143 #, c-format msgid "large object %u" msgstr "великий об'єкт %u" -#: catalog/objectaddress.c:3131 +#: catalog/objectaddress.c:3156 #, c-format msgid "operator %s" msgstr "оператор %s" -#: catalog/objectaddress.c:3168 +#: catalog/objectaddress.c:3193 #, c-format msgid "operator class %s for access method %s" msgstr "клас операторів %s для методу доступу %s" -#: catalog/objectaddress.c:3196 +#: catalog/objectaddress.c:3221 #, c-format msgid "access method %s" msgstr "метод доступу %s" @@ -4838,7 +4862,7 @@ msgstr "метод доступу %s" #. first two %s's are data type names, the third %s is the #. description of the operator family, and the last %s is the #. textual form of the operator with arguments. -#: catalog/objectaddress.c:3245 +#: catalog/objectaddress.c:3276 #, c-format msgid "operator %d (%s, %s) of %s: %s" msgstr "оператор %d (%s, %s) з %s: %s" @@ -4847,221 +4871,221 @@ msgstr "оператор %d (%s, %s) з %s: %s" #. are data type names, the third %s is the description of the #. operator family, and the last %s is the textual form of the #. function with arguments. -#: catalog/objectaddress.c:3302 +#: catalog/objectaddress.c:3341 #, c-format msgid "function %d (%s, %s) of %s: %s" msgstr "функція %d (%s, %s) з %s: %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3354 +#: catalog/objectaddress.c:3395 #, c-format msgid "rule %s on %s" msgstr "правило %s на %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3400 +#: catalog/objectaddress.c:3441 #, c-format msgid "trigger %s on %s" msgstr "тригер %s на %s" -#: catalog/objectaddress.c:3420 +#: catalog/objectaddress.c:3461 #, c-format msgid "schema %s" msgstr "схема %s" -#: catalog/objectaddress.c:3448 +#: catalog/objectaddress.c:3489 #, c-format msgid "statistics object %s" msgstr "об'єкт статистики %s" -#: catalog/objectaddress.c:3479 +#: catalog/objectaddress.c:3520 #, c-format msgid "text search parser %s" msgstr "парсер текстового пошуку %s" -#: catalog/objectaddress.c:3510 +#: catalog/objectaddress.c:3551 #, c-format msgid "text search dictionary %s" msgstr "словник текстового пошуку %s" -#: catalog/objectaddress.c:3541 +#: catalog/objectaddress.c:3582 #, c-format msgid "text search template %s" msgstr "шаблон текстового пошуку %s" -#: catalog/objectaddress.c:3572 +#: catalog/objectaddress.c:3613 #, c-format msgid "text search configuration %s" msgstr "конфігурація текстового пошуку %s" -#: catalog/objectaddress.c:3585 +#: catalog/objectaddress.c:3626 #, c-format msgid "role %s" msgstr "роль %s" -#: catalog/objectaddress.c:3601 +#: catalog/objectaddress.c:3642 #, c-format msgid "database %s" msgstr "база даних %s" -#: catalog/objectaddress.c:3617 +#: catalog/objectaddress.c:3658 #, c-format msgid "tablespace %s" msgstr "табличний простір %s" -#: catalog/objectaddress.c:3628 +#: catalog/objectaddress.c:3669 #, c-format msgid "foreign-data wrapper %s" msgstr "джерело сторонніх даних %s" -#: catalog/objectaddress.c:3638 +#: catalog/objectaddress.c:3679 #, c-format msgid "server %s" msgstr "сервер %s" -#: catalog/objectaddress.c:3671 +#: catalog/objectaddress.c:3712 #, c-format msgid "user mapping for %s on server %s" msgstr "зіставлення користувача для %s на сервері %s" -#: catalog/objectaddress.c:3723 +#: catalog/objectaddress.c:3764 #, c-format msgid "default privileges on new relations belonging to role %s in schema %s" msgstr "права за замовчуванням для нових відношень, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3727 +#: catalog/objectaddress.c:3768 #, c-format msgid "default privileges on new relations belonging to role %s" msgstr "права за замовчуванням для нових відношень, що належать ролі %s" -#: catalog/objectaddress.c:3733 +#: catalog/objectaddress.c:3774 #, c-format msgid "default privileges on new sequences belonging to role %s in schema %s" msgstr "права за замовчуванням для нових послідовностей, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3737 +#: catalog/objectaddress.c:3778 #, c-format msgid "default privileges on new sequences belonging to role %s" msgstr "права за замовчуванням для нових послідовностей, що належать ролі %s" -#: catalog/objectaddress.c:3743 +#: catalog/objectaddress.c:3784 #, c-format msgid "default privileges on new functions belonging to role %s in schema %s" msgstr "права за замовчуванням для нових функцій, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3747 +#: catalog/objectaddress.c:3788 #, c-format msgid "default privileges on new functions belonging to role %s" msgstr "права за замовчуванням для нових функцій, що належать ролі %s" -#: catalog/objectaddress.c:3753 +#: catalog/objectaddress.c:3794 #, c-format msgid "default privileges on new types belonging to role %s in schema %s" msgstr "права за замовчуванням для нових типів, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3757 +#: catalog/objectaddress.c:3798 #, c-format msgid "default privileges on new types belonging to role %s" msgstr "права за замовчуванням для нових типів, що належать ролі %s" -#: catalog/objectaddress.c:3763 +#: catalog/objectaddress.c:3804 #, c-format msgid "default privileges on new schemas belonging to role %s" msgstr "права за замовчуванням для нових схем, що належать ролі %s" -#: catalog/objectaddress.c:3770 +#: catalog/objectaddress.c:3811 #, c-format msgid "default privileges belonging to role %s in schema %s" msgstr "права за замовчуванням, що належать ролі %s в схемі %s" -#: catalog/objectaddress.c:3774 +#: catalog/objectaddress.c:3815 #, c-format msgid "default privileges belonging to role %s" msgstr "права за замовчуванням належать ролі %s" -#: catalog/objectaddress.c:3796 +#: catalog/objectaddress.c:3837 #, c-format msgid "extension %s" msgstr "розширення %s" -#: catalog/objectaddress.c:3813 +#: catalog/objectaddress.c:3854 #, c-format msgid "event trigger %s" msgstr "тригер подій %s" #. translator: second %s is, e.g., "table %s" -#: catalog/objectaddress.c:3857 +#: catalog/objectaddress.c:3898 #, c-format msgid "policy %s on %s" msgstr "політика %s на %s" -#: catalog/objectaddress.c:3871 +#: catalog/objectaddress.c:3912 #, c-format msgid "publication %s" msgstr "публікація %s" #. translator: first %s is, e.g., "table %s" -#: catalog/objectaddress.c:3899 +#: catalog/objectaddress.c:3940 #, c-format msgid "publication of %s in publication %s" msgstr "відношення публікації %s в публікації %s" -#: catalog/objectaddress.c:3912 +#: catalog/objectaddress.c:3953 #, c-format msgid "subscription %s" msgstr "підписка %s" -#: catalog/objectaddress.c:3933 +#: catalog/objectaddress.c:3974 #, c-format msgid "transform for %s language %s" msgstr "трансформація для %s мови %s" -#: catalog/objectaddress.c:4004 +#: catalog/objectaddress.c:4045 #, c-format msgid "table %s" msgstr "таблиця %s" -#: catalog/objectaddress.c:4009 +#: catalog/objectaddress.c:4050 #, c-format msgid "index %s" msgstr "індекс %s" -#: catalog/objectaddress.c:4013 +#: catalog/objectaddress.c:4054 #, c-format msgid "sequence %s" msgstr "послідовність %s" -#: catalog/objectaddress.c:4017 +#: catalog/objectaddress.c:4058 #, c-format msgid "toast table %s" msgstr "таблиця toast %s" -#: catalog/objectaddress.c:4021 +#: catalog/objectaddress.c:4062 #, c-format msgid "view %s" msgstr "подання %s" -#: catalog/objectaddress.c:4025 +#: catalog/objectaddress.c:4066 #, c-format msgid "materialized view %s" msgstr "матеріалізоване подання %s" -#: catalog/objectaddress.c:4029 +#: catalog/objectaddress.c:4070 #, c-format msgid "composite type %s" msgstr "складений тип %s" -#: catalog/objectaddress.c:4033 +#: catalog/objectaddress.c:4074 #, c-format msgid "foreign table %s" msgstr "зовнішня таблиця %s" -#: catalog/objectaddress.c:4038 +#: catalog/objectaddress.c:4079 #, c-format msgid "relation %s" msgstr "відношення %s" -#: catalog/objectaddress.c:4079 +#: catalog/objectaddress.c:4120 #, c-format msgid "operator family %s for access method %s" msgstr "сімейство операторів %s для методу доступу %s" @@ -5180,7 +5204,7 @@ msgstr "\"%s\" є агрегатом для гіпотетичних набор msgid "cannot change number of direct arguments of an aggregate function" msgstr "змінити кількість прямих аргументів агрегатної функції не можна" -#: catalog/pg_aggregate.c:858 commands/functioncmds.c:702 +#: catalog/pg_aggregate.c:858 commands/functioncmds.c:703 #: commands/typecmds.c:1991 commands/typecmds.c:2037 commands/typecmds.c:2089 #: commands/typecmds.c:2126 commands/typecmds.c:2160 commands/typecmds.c:2194 #: commands/typecmds.c:2228 commands/typecmds.c:2257 commands/typecmds.c:2344 @@ -5326,8 +5350,8 @@ msgstr "не можна відключити розділ \"%s\"" msgid "The partition is being detached concurrently or has an unfinished detach." msgstr "Розділ відключається одночасно або має незакінчене відключення." -#: catalog/pg_inherits.c:596 commands/tablecmds.c:4455 -#: commands/tablecmds.c:14945 +#: catalog/pg_inherits.c:596 commands/tablecmds.c:4501 +#: commands/tablecmds.c:15182 #, c-format msgid "Use ALTER TABLE ... DETACH PARTITION ... FINALIZE to complete the pending detach operation." msgstr "Використайте ALTER TABLE ... DETACH PARTITION ... FINALIZE щоб завершити очікувану операцію відключення." @@ -5496,7 +5520,7 @@ msgstr "Функції SQL не можуть повернути тип %s" msgid "SQL functions cannot have arguments of type %s" msgstr "функції SQL не можуть мати аргументи типу %s" -#: catalog/pg_proc.c:995 executor/functions.c:1473 +#: catalog/pg_proc.c:996 executor/functions.c:1474 #, c-format msgid "SQL function \"%s\"" msgstr "Функція SQL \"%s\"" @@ -5608,17 +5632,17 @@ msgid "cannot reassign ownership of objects owned by %s because they are require msgstr "не вдалося змінити власника об'єктів, що належать ролі %s, тому що вони необхідні системі баз даних" #: catalog/pg_subscription.c:174 commands/subscriptioncmds.c:779 -#: commands/subscriptioncmds.c:1088 commands/subscriptioncmds.c:1431 +#: commands/subscriptioncmds.c:1090 commands/subscriptioncmds.c:1433 #, c-format msgid "subscription \"%s\" does not exist" msgstr "підписка \"%s\" не існує" -#: catalog/pg_subscription.c:432 +#: catalog/pg_subscription.c:457 #, c-format msgid "could not drop relation mapping for subscription \"%s\"" msgstr "не вдалося видалити зіставлення відношень для підписки \"%s\"" -#: catalog/pg_subscription.c:434 +#: catalog/pg_subscription.c:459 #, c-format msgid "Table synchronization for relation \"%s\" is in progress and is in state \"%c\"." msgstr "Синхронізація таблиць для відношення \"%s\" у процесі та знаходиться у стані \"%c\"." @@ -5626,7 +5650,7 @@ msgstr "Синхронізація таблиць для відношення \" #. translator: first %s is a SQL ALTER command and second %s is a #. SQL DROP command #. -#: catalog/pg_subscription.c:441 +#: catalog/pg_subscription.c:466 #, c-format msgid "Use %s to enable subscription if not already enabled or use %s to drop the subscription." msgstr "Використайте %s, щоб активувати підписку, якщо вона ще не активована, або використайте %s, щоб видалити підписку." @@ -5677,13 +5701,13 @@ msgstr "Помилка під час створення багатодіапаз msgid "You can manually specify a multirange type name using the \"multirange_type_name\" attribute." msgstr "Ви можете вручну вказати назву багатодіапазонного типу за допомогою атрибуту \"multirange_type_name\"." -#: catalog/storage.c:495 storage/buffer/bufmgr.c:1039 +#: catalog/storage.c:523 storage/buffer/bufmgr.c:1046 #, c-format msgid "invalid page in block %u of relation %s" msgstr "неприпустима сторінка в блоці %u відношення %s" -#: catalog/toasting.c:110 commands/indexcmds.c:692 commands/tablecmds.c:6094 -#: commands/tablecmds.c:16498 +#: catalog/toasting.c:112 commands/indexcmds.c:699 commands/tablecmds.c:6142 +#: commands/tablecmds.c:16737 #, c-format msgid "\"%s\" is not a table or materialized view" msgstr "\"%s\" не є таблицею або матеріалізованим поданням" @@ -5768,7 +5792,7 @@ msgstr "функції серіалізації можуть визначати msgid "must specify both or neither of serialization and deserialization functions" msgstr "повинні визначатись обидві або жодна з серіалізуючих та десеріалізуючих функцій" -#: commands/aggregatecmds.c:437 commands/functioncmds.c:650 +#: commands/aggregatecmds.c:437 commands/functioncmds.c:651 #, c-format msgid "parameter \"parallel\" must be SAFE, RESTRICTED, or UNSAFE" msgstr "параметр \"parallel\" має мати значення SAFE, RESTRICTED, або UNSAFE" @@ -5778,72 +5802,72 @@ msgstr "параметр \"parallel\" має мати значення SAFE, RES msgid "parameter \"%s\" must be READ_ONLY, SHAREABLE, or READ_WRITE" msgstr "параметр \"%s\" має мати значення READ_ONLY, SHAREABLE, або READ_WRITE" -#: commands/alter.c:84 commands/event_trigger.c:174 +#: commands/alter.c:85 commands/event_trigger.c:174 #, c-format msgid "event trigger \"%s\" already exists" msgstr "тригер подій \"%s\" вже існує" -#: commands/alter.c:87 commands/foreigncmds.c:597 +#: commands/alter.c:88 commands/foreigncmds.c:608 #, c-format msgid "foreign-data wrapper \"%s\" already exists" msgstr "джерело сторонніх даних \"%s\" вже існує" -#: commands/alter.c:90 commands/foreigncmds.c:888 +#: commands/alter.c:91 commands/foreigncmds.c:899 #, c-format msgid "server \"%s\" already exists" msgstr "сервер \"%s\" вже існує" -#: commands/alter.c:93 commands/proclang.c:133 +#: commands/alter.c:94 commands/proclang.c:133 #, c-format msgid "language \"%s\" already exists" msgstr "мова \"%s\" вже існує" -#: commands/alter.c:96 commands/publicationcmds.c:180 +#: commands/alter.c:97 commands/publicationcmds.c:180 #, c-format msgid "publication \"%s\" already exists" msgstr "публікація \"%s\" вже існує" -#: commands/alter.c:99 commands/subscriptioncmds.c:400 +#: commands/alter.c:100 commands/subscriptioncmds.c:400 #, c-format msgid "subscription \"%s\" already exists" msgstr "підписка \"%s\" вже існує" -#: commands/alter.c:122 +#: commands/alter.c:123 #, c-format msgid "conversion \"%s\" already exists in schema \"%s\"" msgstr "перетворення \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:126 +#: commands/alter.c:127 #, c-format msgid "statistics object \"%s\" already exists in schema \"%s\"" msgstr "об'єкт статистики \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:130 +#: commands/alter.c:131 #, c-format msgid "text search parser \"%s\" already exists in schema \"%s\"" msgstr "парсер текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:134 +#: commands/alter.c:135 #, c-format msgid "text search dictionary \"%s\" already exists in schema \"%s\"" msgstr "словник текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:138 +#: commands/alter.c:139 #, c-format msgid "text search template \"%s\" already exists in schema \"%s\"" msgstr "шаблон текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:142 +#: commands/alter.c:143 #, c-format msgid "text search configuration \"%s\" already exists in schema \"%s\"" msgstr "конфігурація текстового пошуку \"%s\" вже існує в схемі \"%s\"" -#: commands/alter.c:215 +#: commands/alter.c:216 #, c-format msgid "must be superuser to rename %s" msgstr "перейменувати %s може тільки суперкористувач" -#: commands/alter.c:744 +#: commands/alter.c:745 #, c-format msgid "must be superuser to set schema of %s" msgstr "встановити схему об'єкту %s може тільки суперкористувач" @@ -5863,8 +5887,8 @@ msgstr "Тільки суперкористувач може створити м msgid "access method \"%s\" already exists" msgstr "метод доступу \"%s\" вже існує" -#: commands/amcmds.c:154 commands/indexcmds.c:213 commands/indexcmds.c:843 -#: commands/opclasscmds.c:375 commands/opclasscmds.c:833 +#: commands/amcmds.c:154 commands/indexcmds.c:214 commands/indexcmds.c:850 +#: commands/opclasscmds.c:376 commands/opclasscmds.c:834 #, c-format msgid "access method \"%s\" does not exist" msgstr "методу доступу \"%s\" не існує" @@ -5875,7 +5899,7 @@ 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:699 +#: commands/foreigncmds.c:500 commands/proclang.c:80 commands/trigger.c:699 #: parser/parse_clause.c:940 #, c-format msgid "function %s must return type %s" @@ -5906,47 +5930,47 @@ msgstr "аналіз \"%s.%s\"" msgid "column \"%s\" of relation \"%s\" appears more than once" msgstr "стовпець \"%s\" відносно \"%s\" з'являється більше одного разу" -#: commands/analyze.c:805 +#: commands/analyze.c:810 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"\n" msgstr "автоматичний аналіз таблиці \"%s.%s.%s\"\n" -#: commands/analyze.c:1352 +#: commands/analyze.c:1357 #, 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:1436 +#: commands/analyze.c:1441 #, c-format msgid "skipping analyze of \"%s.%s\" inheritance tree --- this inheritance tree contains no child tables" msgstr "пропускається аналіз дерева наслідування \"%s.%s\" --- це дерево наслідування не містить дочірніх таблиць" -#: commands/analyze.c:1534 +#: commands/analyze.c:1539 #, 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:645 #, c-format msgid "channel name cannot be empty" msgstr "ім'я каналу не може бути пустим" -#: commands/async.c:652 +#: commands/async.c:651 #, c-format msgid "channel name too long" msgstr "ім'я каналу задовге" -#: commands/async.c:657 +#: commands/async.c:656 #, c-format msgid "payload string too long" msgstr "рядок навантаження задовгий" -#: commands/async.c:876 +#: commands/async.c:875 #, 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:979 #, c-format msgid "too many notifications in the NOTIFY queue" msgstr "занадто багато сповіщень у черзі NOTIFY" @@ -5986,7 +6010,7 @@ msgstr "не можна кластеризувати секційну табли msgid "there is no previously clustered index for table \"%s\"" msgstr "немає попереднього кластеризованого індексу для таблиці \"%s\"" -#: commands/cluster.c:187 commands/tablecmds.c:13665 commands/tablecmds.c:15524 +#: commands/cluster.c:187 commands/tablecmds.c:13901 commands/tablecmds.c:15761 #, c-format msgid "index \"%s\" for table \"%s\" does not exist" msgstr "індекс \"%s\" для таблці \"%s\" не існує" @@ -6001,7 +6025,7 @@ msgstr "не можна кластеризувати спільний катал msgid "cannot vacuum temporary tables of other sessions" msgstr "не можна очищати тимчасові таблиці з інших сеансів" -#: commands/cluster.c:471 commands/tablecmds.c:15534 +#: commands/cluster.c:471 commands/tablecmds.c:15771 #, c-format msgid "\"%s\" is not an index for table \"%s\"" msgstr "\"%s\" не є індексом для таблиці \"%s\"" @@ -6113,7 +6137,7 @@ msgstr "не вдалося перетворити локальну назву \ msgid "must be superuser to import system collations" msgstr "імпортувати систмені правила сортування може тільки суперкористувач" -#: commands/collationcmds.c:559 commands/copyfrom.c:1510 commands/copyto.c:680 +#: commands/collationcmds.c:559 commands/copyfrom.c:1510 commands/copyto.c:684 #: libpq/be-secure-common.c:81 #, c-format msgid "could not execute command \"%s\": %m" @@ -6124,16 +6148,16 @@ msgstr "не вдалося виконати команду \"%s\": %m" msgid "no usable system locales were found" msgstr "придатні системні локалі не знайдені" -#: commands/comment.c:61 commands/dbcommands.c:853 commands/dbcommands.c:1064 -#: commands/dbcommands.c:1177 commands/dbcommands.c:1367 -#: commands/dbcommands.c:1615 commands/dbcommands.c:1737 -#: commands/dbcommands.c:2177 utils/init/postinit.c:887 -#: utils/init/postinit.c:993 utils/init/postinit.c:1019 +#: commands/comment.c:61 commands/dbcommands.c:855 commands/dbcommands.c:1072 +#: commands/dbcommands.c:1187 commands/dbcommands.c:1377 +#: commands/dbcommands.c:1627 commands/dbcommands.c:1751 +#: commands/dbcommands.c:2194 utils/init/postinit.c:890 +#: utils/init/postinit.c:996 utils/init/postinit.c:1022 #, c-format msgid "database \"%s\" does not exist" msgstr "бази даних \"%s\" не існує" -#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:990 +#: commands/comment.c:101 commands/seclabel.c:191 parser/parse_utilcmd.c:984 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, or foreign table" msgstr "\"%s\" не є таблицею, поданням, матеріалізованим поданням, композитним типом або сторонньою таблицею" @@ -6198,157 +6222,169 @@ msgstr "потрібно бути суперкористувачем або чл msgid "must be superuser or a member of the pg_write_server_files role to COPY to a file" msgstr "потрібно бути суперкористувачем або членом ролі pg_write_server_files, щоб виконати COPY з записом у файл" -#: commands/copy.c:188 +#: commands/copy.c:175 +#, c-format +msgid "generated columns are not supported in COPY FROM WHERE conditions" +msgstr "згенеровані стовпці не підтримуються в умовах COPY FROM WHERE" + +#: commands/copy.c:176 commands/tablecmds.c:11928 commands/tablecmds.c:17048 +#: commands/tablecmds.c:17127 commands/trigger.c:653 +#: rewrite/rewriteHandler.c:939 rewrite/rewriteHandler.c:974 +#, c-format +msgid "Column \"%s\" is a generated column." +msgstr "Стовпець \"%s\" є згенерованим стовпцем." + +#: commands/copy.c:225 #, c-format msgid "COPY FROM not supported with row-level security" msgstr "COPY FROM не підтримується із захистом на рівні рядків" -#: commands/copy.c:189 +#: commands/copy.c:226 #, c-format msgid "Use INSERT statements instead." msgstr "Використайте оператори INSERT замість цього." -#: commands/copy.c:377 +#: commands/copy.c:414 #, c-format msgid "COPY format \"%s\" not recognized" msgstr "Формат \"%s\" для COPY не розпізнано" -#: commands/copy.c:450 commands/copy.c:466 commands/copy.c:481 -#: commands/copy.c:503 +#: commands/copy.c:487 commands/copy.c:503 commands/copy.c:518 +#: commands/copy.c:540 #, c-format msgid "argument to option \"%s\" must be a list of column names" msgstr "аргументом функції \"%s\" повинен бути список імен стовпців" -#: commands/copy.c:518 +#: commands/copy.c:555 #, c-format msgid "argument to option \"%s\" must be a valid encoding name" msgstr "аргументом функції \"%s\" повинне бути припустиме ім'я коду" -#: commands/copy.c:525 commands/dbcommands.c:254 commands/dbcommands.c:1563 +#: commands/copy.c:562 commands/dbcommands.c:254 commands/dbcommands.c:1575 #, c-format msgid "option \"%s\" not recognized" msgstr "параметр \"%s\" не розпізнано" -#: commands/copy.c:537 +#: commands/copy.c:574 #, c-format msgid "cannot specify DELIMITER in BINARY mode" msgstr "неможливо визначити DELIMITER в режимі BINARY" -#: commands/copy.c:542 +#: commands/copy.c:579 #, c-format msgid "cannot specify NULL in BINARY mode" msgstr "неможливо визначити NULL в режимі BINARY" -#: commands/copy.c:564 +#: commands/copy.c:601 #, c-format msgid "COPY delimiter must be a single one-byte character" msgstr "роздільник для COPY повинен бути однобайтовим символом" -#: commands/copy.c:571 +#: commands/copy.c:608 #, c-format msgid "COPY delimiter cannot be newline or carriage return" msgstr "Роздільник для COPY не може бути символом нового рядка або повернення каретки" -#: commands/copy.c:577 +#: commands/copy.c:614 #, c-format msgid "COPY null representation cannot use newline or carriage return" msgstr "Подання NULL для COPY не може включати символ нового рядка або повернення каретки" -#: commands/copy.c:594 +#: commands/copy.c:631 #, c-format msgid "COPY delimiter cannot be \"%s\"" msgstr "роздільник COPY не може бути \"%s\"" -#: commands/copy.c:600 +#: commands/copy.c:637 #, c-format msgid "COPY HEADER available only in CSV mode" msgstr "COPY HEADER доступний тільки в режимі CSV" -#: commands/copy.c:606 +#: commands/copy.c:643 #, c-format msgid "COPY quote available only in CSV mode" msgstr "лапки для COPY доустпні тільки в режимі CSV" -#: commands/copy.c:611 +#: commands/copy.c:648 #, c-format msgid "COPY quote must be a single one-byte character" msgstr "лапки для COPY повинні бути однобайтовим символом" -#: commands/copy.c:616 +#: commands/copy.c:653 #, c-format msgid "COPY delimiter and quote must be different" msgstr "роздільник і лапки для COPY повинні бути різними" -#: commands/copy.c:622 +#: commands/copy.c:659 #, c-format msgid "COPY escape available only in CSV mode" msgstr "вихід для COPY доступний тільки в режимі CSV" -#: commands/copy.c:627 +#: commands/copy.c:664 #, c-format msgid "COPY escape must be a single one-byte character" msgstr "вихід для COPY повинен бути однобайтовим символом" -#: commands/copy.c:633 +#: commands/copy.c:670 #, c-format msgid "COPY force quote available only in CSV mode" msgstr "Параметр force quote для COPY можна використати тільки в режимі CSV" -#: commands/copy.c:637 +#: commands/copy.c:674 #, c-format msgid "COPY force quote only available using COPY TO" msgstr "Параметр force quote для COPY можна використати тільки з COPY TO" -#: commands/copy.c:643 +#: commands/copy.c:680 #, c-format msgid "COPY force not null available only in CSV mode" msgstr "Параметр force not null для COPY можна використати тільки в режимі CSV" -#: commands/copy.c:647 +#: commands/copy.c:684 #, c-format msgid "COPY force not null only available using COPY FROM" msgstr "Параметр force not null для COPY можна використати тільки з COPY FROM" -#: commands/copy.c:653 +#: commands/copy.c:690 #, c-format msgid "COPY force null available only in CSV mode" msgstr "Параметр force null для COPY можна використати тільки в режимі CSV" -#: commands/copy.c:658 +#: commands/copy.c:695 #, c-format msgid "COPY force null only available using COPY FROM" msgstr "Параметр force null only для COPY можна використати тільки з COPY FROM" -#: commands/copy.c:664 +#: commands/copy.c:701 #, c-format msgid "COPY delimiter must not appear in the NULL specification" msgstr "роздільник COPY не повинен з'являтися у специфікації NULL" -#: commands/copy.c:671 +#: commands/copy.c:708 #, c-format msgid "CSV quote character must not appear in the NULL specification" msgstr "лапки CSV не повинні з'являтися у специфікації NULL" -#: commands/copy.c:732 +#: commands/copy.c:769 #, c-format msgid "column \"%s\" is a generated column" msgstr "стовпець \"%s\" є згенерованим стовпцем" -#: commands/copy.c:734 +#: commands/copy.c:771 #, c-format msgid "Generated columns cannot be used in COPY." msgstr "Згенеровані стовпці не можна використовувати в COPY." -#: commands/copy.c:749 commands/indexcmds.c:1835 commands/statscmds.c:245 -#: commands/tablecmds.c:2347 commands/tablecmds.c:3003 -#: commands/tablecmds.c:3496 parser/parse_relation.c:3642 -#: parser/parse_relation.c:3662 utils/adt/tsvector_op.c:2683 +#: commands/copy.c:786 commands/indexcmds.c:1842 commands/statscmds.c:265 +#: commands/tablecmds.c:2344 commands/tablecmds.c:3000 +#: commands/tablecmds.c:3508 parser/parse_relation.c:3651 +#: parser/parse_relation.c:3671 utils/adt/tsvector_op.c:2683 #, c-format msgid "column \"%s\" does not exist" msgstr "стовпця \"%s\" не існує" -#: commands/copy.c:756 commands/tablecmds.c:2373 commands/trigger.c:951 -#: parser/parse_target.c:1079 parser/parse_target.c:1090 +#: commands/copy.c:793 commands/tablecmds.c:2370 commands/trigger.c:951 +#: parser/parse_target.c:1093 parser/parse_target.c:1104 #, c-format msgid "column \"%s\" specified more than once" msgstr "стовпець \"%s\" вказано більше чим один раз" @@ -6418,17 +6454,17 @@ 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:1267 commands/copyto.c:612 +#: commands/copyfrom.c:1267 commands/copyto.c:616 #, c-format msgid "FORCE_NOT_NULL column \"%s\" not referenced by COPY" msgstr "Стовпець FORCE_NOT_NULL \"%s\" не фігурує в COPY" -#: commands/copyfrom.c:1290 commands/copyto.c:635 +#: commands/copyfrom.c:1290 commands/copyto.c:639 #, c-format msgid "FORCE_NULL column \"%s\" not referenced by COPY" msgstr "Стовпець FORCE_NULL \"%s\" не фігурує в COPY" -#: commands/copyfrom.c:1343 utils/mb/mbutils.c:385 +#: commands/copyfrom.c:1343 utils/mb/mbutils.c:386 #, c-format msgid "default conversion function for encoding \"%s\" to \"%s\" does not exist" msgstr "функції за замовчуванням перетворення з кодування \"%s\" в \"%s\" не існує" @@ -6438,7 +6474,7 @@ msgstr "функції за замовчуванням перетворення 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:1542 commands/copyto.c:732 +#: commands/copyfrom.c:1542 commands/copyto.c:736 #, c-format msgid "\"%s\" is a directory" msgstr "\"%s\" - каталог" @@ -6489,7 +6525,7 @@ msgid "could not read from COPY file: %m" msgstr "не вдалося прочитати файл COPY: %m" #: commands/copyfromparse.c:277 commands/copyfromparse.c:302 -#: tcop/postgres.c:359 +#: tcop/postgres.c:363 #, c-format msgid "unexpected EOF on client connection with an open transaction" msgstr "неочікуваний обрив з'єднання з клієнтом при відкритій транзакції" @@ -6653,7 +6689,7 @@ msgstr "умовні правила DO INSTEAD не підтримуються #: commands/copyto.c:469 #, 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:474 @@ -6666,32 +6702,37 @@ msgstr "складові правила DO INSTEAD не підтримуютьс msgid "COPY (SELECT INTO) is not supported" msgstr "COPY (SELECT INTO) не підтримується" -#: commands/copyto.c:501 +#: commands/copyto.c:490 +#, c-format +msgid "COPY query must not be a utility command" +msgstr "запит COPY не повинен бути командою утиліти" + +#: commands/copyto.c:505 #, c-format msgid "COPY query must have a RETURNING clause" msgstr "В запиті COPY повинно бути речення RETURNING" -#: commands/copyto.c:530 +#: commands/copyto.c:534 #, c-format msgid "relation referenced by COPY statement has changed" msgstr "відношення, згадане в операторі COPY, змінилось" -#: commands/copyto.c:589 +#: commands/copyto.c:593 #, c-format msgid "FORCE_QUOTE column \"%s\" not referenced by COPY" msgstr "Стовпець FORCE_QUOTE \"%s\" не фігурує в COPY" -#: commands/copyto.c:697 +#: commands/copyto.c:701 #, c-format msgid "relative path not allowed for COPY to file" msgstr "при виконанні COPY в файл не можна вказувати відносний шлях" -#: commands/copyto.c:716 +#: commands/copyto.c:720 #, c-format msgid "could not open file \"%s\" for writing: %m" msgstr "не вдалося відкрити файл \"%s\" для запису: %m" -#: commands/copyto.c:719 +#: commands/copyto.c:723 #, 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." @@ -6731,7 +6772,7 @@ msgstr "%d не є вірним кодом кодування" msgid "%s is not a valid encoding name" msgstr "%s не є вірним ім'ям кодування" -#: commands/dbcommands.c:315 commands/dbcommands.c:1596 commands/user.c:275 +#: commands/dbcommands.c:315 commands/dbcommands.c:1608 commands/user.c:275 #: commands/user.c:691 #, c-format msgid "invalid connection limit: %d" @@ -6752,8 +6793,8 @@ msgstr "шаблону бази даних \"%s\" не існує" msgid "cannot use invalid database \"%s\" as template" msgstr "не можна використовувати невірну базу даних \"%s\" в якості шаблону" -#: commands/dbcommands.c:368 commands/dbcommands.c:1625 -#: utils/init/postinit.c:1002 +#: commands/dbcommands.c:368 commands/dbcommands.c:1638 +#: utils/init/postinit.c:1005 #, c-format msgid "Use DROP DATABASE to drop invalid databases." msgstr "Використайте DROP DATABASE для видалення невірних баз даних." @@ -6803,7 +6844,7 @@ msgstr "новий параметр LC_CTYPE (%s) несумісний з LC_CTY msgid "Use the same LC_CTYPE as in the template database, or use template0 as template." msgstr "Використайте той самий LC_CTYPE, що і в шаблоні бази даних, або виберіть template0 в якості шаблона." -#: commands/dbcommands.c:465 commands/dbcommands.c:1223 +#: commands/dbcommands.c:465 commands/dbcommands.c:1233 #, c-format msgid "pg_global cannot be used as default tablespace" msgstr "pg_global не можна використати в якості табличного простору за замовчуванням" @@ -6818,7 +6859,7 @@ msgstr "не вдалося призначити новий табличний msgid "There is a conflict because database \"%s\" already has some tables in this tablespace." msgstr "БД \"%s\" вже містить таблиці, що знаходяться в цьому табличному просторі." -#: commands/dbcommands.c:523 commands/dbcommands.c:1093 +#: commands/dbcommands.c:523 commands/dbcommands.c:1101 #, c-format msgid "database \"%s\" already exists" msgstr "база даних \"%s\" вже існує" @@ -6843,27 +6884,27 @@ msgstr "Обраний параметр LC_CTYPE потребує кодуван msgid "The chosen LC_COLLATE setting requires encoding \"%s\"." msgstr "Обраний параметр LC_COLLATE потребує кодування \"%s\"." -#: commands/dbcommands.c:860 +#: commands/dbcommands.c:862 #, c-format msgid "database \"%s\" does not exist, skipping" msgstr "бази даних \"%s\" не існує, пропускаємо" -#: commands/dbcommands.c:884 +#: commands/dbcommands.c:886 #, c-format msgid "cannot drop a template database" msgstr "неможливо видалити шаблон бази даних" -#: commands/dbcommands.c:890 +#: commands/dbcommands.c:892 #, c-format msgid "cannot drop the currently open database" msgstr "неможливо видалити наразі відкриту базу даних" -#: commands/dbcommands.c:903 +#: commands/dbcommands.c:905 #, c-format msgid "database \"%s\" is used by an active logical replication slot" msgstr "база даних \"%s\" використовується активним слотом логічної реплікації" -#: commands/dbcommands.c:905 +#: commands/dbcommands.c:907 #, c-format msgid "There is %d active slot." msgid_plural "There are %d active slots." @@ -6872,12 +6913,12 @@ msgstr[1] "Активні слоти %d." msgstr[2] "Активних слотів %d." msgstr[3] "Активних слотів %d." -#: commands/dbcommands.c:919 +#: commands/dbcommands.c:921 #, c-format msgid "database \"%s\" is being used by logical replication subscription" msgstr "база даних \"%s\" використовується в підписці логічної реплікації" -#: commands/dbcommands.c:921 +#: commands/dbcommands.c:923 #, c-format msgid "There is %d subscription." msgid_plural "There are %d subscriptions." @@ -6886,74 +6927,74 @@ msgstr[1] "Знайдено підписки %d." msgstr[2] "Знайдено підписок %d." msgstr[3] "Знайдено підписок %d." -#: commands/dbcommands.c:942 commands/dbcommands.c:1115 -#: commands/dbcommands.c:1245 +#: commands/dbcommands.c:944 commands/dbcommands.c:1123 +#: commands/dbcommands.c:1255 #, c-format msgid "database \"%s\" is being accessed by other users" msgstr "база даних \"%s\" зайнята іншими користувачами" -#: commands/dbcommands.c:1075 +#: commands/dbcommands.c:1083 #, c-format msgid "permission denied to rename database" msgstr "немає дозволу для перейменування бази даних" -#: commands/dbcommands.c:1104 +#: commands/dbcommands.c:1112 #, c-format msgid "current database cannot be renamed" msgstr "поточна база даних не може бути перейменована" -#: commands/dbcommands.c:1201 +#: commands/dbcommands.c:1211 #, c-format msgid "cannot change the tablespace of the currently open database" msgstr "неможливо змінити табличний простір наразі відкритої бази даних" -#: commands/dbcommands.c:1304 +#: commands/dbcommands.c:1314 #, c-format msgid "some relations of database \"%s\" are already in tablespace \"%s\"" msgstr "деякі відношення бази даних \"%s\" вже є в табличному просторі \"%s\"" -#: commands/dbcommands.c:1306 +#: commands/dbcommands.c:1316 #, c-format msgid "You must move them back to the database's default tablespace before using this command." msgstr "Перед тим, як виконувати цю команду, вам треба повернути їх в табличний простір за замовчуванням для цієї бази даних." -#: commands/dbcommands.c:1431 commands/dbcommands.c:2015 -#: commands/dbcommands.c:2314 commands/dbcommands.c:2400 +#: commands/dbcommands.c:1443 commands/dbcommands.c:2032 +#: commands/dbcommands.c:2331 commands/dbcommands.c:2417 #, c-format msgid "some useless files may be left behind in old database directory \"%s\"" msgstr "у старому каталозі бази даних \"%s\" могли залишитися непотрібні файли" -#: commands/dbcommands.c:1487 +#: commands/dbcommands.c:1499 #, c-format msgid "unrecognized DROP DATABASE option \"%s\"" msgstr "нерозпізнаний параметр DROP DATABASE \"%s\"" -#: commands/dbcommands.c:1577 +#: commands/dbcommands.c:1589 #, c-format msgid "option \"%s\" cannot be specified with other options" msgstr "параметр \"%s\" не може бути вказаним з іншими параметрами" -#: commands/dbcommands.c:1624 +#: commands/dbcommands.c:1637 #, c-format msgid "cannot alter invalid database \"%s\"" msgstr "неможливо змінити невірну базу даних \"%s\"" -#: commands/dbcommands.c:1641 +#: commands/dbcommands.c:1654 #, c-format msgid "cannot disallow connections for current database" msgstr "не можна заборонити з'єднання для поточної бази даних" -#: commands/dbcommands.c:1777 +#: commands/dbcommands.c:1791 #, c-format msgid "permission denied to change owner of database" msgstr "немає дозволу для зміни власника бази даних" -#: commands/dbcommands.c:2121 +#: commands/dbcommands.c:2138 #, c-format msgid "There are %d other session(s) and %d prepared transaction(s) using the database." msgstr "Знайдено %d інших сеансів і %d підготованих транзакцій з використанням цієї бази даних." -#: commands/dbcommands.c:2124 +#: commands/dbcommands.c:2141 #, c-format msgid "There is %d other session using the database." msgid_plural "There are %d other sessions using the database." @@ -6962,7 +7003,7 @@ msgstr[1] "Є %d інші сеанси з використанням цієї б msgstr[2] "Є %d інших сеансів з використанням цієї бази даних." msgstr[3] "Є %d інших сеансів з використанням цієї бази даних." -#: commands/dbcommands.c:2129 storage/ipc/procarray.c:3894 +#: commands/dbcommands.c:2146 storage/ipc/procarray.c:3906 #, c-format msgid "There is %d prepared transaction using the database." msgid_plural "There are %d prepared transactions using the database." @@ -6971,12 +7012,12 @@ msgstr[1] "З цією базою даних пов'язані %d підгото msgstr[2] "З цією базою даних пов'язані %d підготовлених транзакцій." msgstr[3] "З цією базою даних пов'язані %d підготовлених транзакцій." -#: commands/dbcommands.c:2271 +#: commands/dbcommands.c:2288 #, c-format msgid "missing directory \"%s\"" msgstr "відсутній каталог \"%s\"" -#: commands/dbcommands.c:2330 commands/tablespace.c:188 +#: commands/dbcommands.c:2347 commands/tablespace.c:188 #: commands/tablespace.c:634 #, c-format msgid "could not stat directory \"%s\": %m" @@ -7019,8 +7060,8 @@ msgstr "аргументом %s повинно бути ім'я типу" msgid "invalid argument for %s: \"%s\"" msgstr "невірний аргумент для %s: \"%s\"" -#: commands/dropcmds.c:100 commands/functioncmds.c:1411 -#: utils/adt/ruleutils.c:2832 +#: commands/dropcmds.c:100 commands/functioncmds.c:1412 +#: utils/adt/ruleutils.c:2830 #, c-format msgid "\"%s\" is an aggregate function" msgstr "\"%s\" є функцією агрегату" @@ -7030,14 +7071,14 @@ msgstr "\"%s\" є функцією агрегату" msgid "Use DROP AGGREGATE to drop aggregate functions." msgstr "Використайте DROP AGGREGATE, щоб видалити агрегатні функції." -#: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3580 -#: commands/tablecmds.c:3738 commands/tablecmds.c:3791 -#: commands/tablecmds.c:15951 tcop/utility.c:1324 +#: commands/dropcmds.c:158 commands/sequence.c:455 commands/tablecmds.c:3592 +#: commands/tablecmds.c:3750 commands/tablecmds.c:3803 +#: commands/tablecmds.c:16188 tcop/utility.c:1324 #, c-format msgid "relation \"%s\" does not exist, skipping" msgstr "відношення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1254 +#: commands/dropcmds.c:188 commands/dropcmds.c:287 commands/tablecmds.c:1251 #, c-format msgid "schema \"%s\" does not exist, skipping" msgstr "схеми \"%s\" не існує, пропускаємо" @@ -7062,7 +7103,7 @@ msgstr "правила сортування \"%s\" не існує, пропус msgid "conversion \"%s\" does not exist, skipping" msgstr "перетворення \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:293 commands/statscmds.c:674 +#: commands/dropcmds.c:293 commands/statscmds.c:694 #, c-format msgid "statistics object \"%s\" does not exist, skipping" msgstr "об'єкту статистики \"%s\" не існує, пропускаємо" @@ -7157,7 +7198,7 @@ msgstr "правила \"%s\" для відношення \"%s\" не існує msgid "foreign-data wrapper \"%s\" does not exist, skipping" msgstr "джерела сторонніх даних \"%s\" не існує, пропускаємо" -#: commands/dropcmds.c:453 commands/foreigncmds.c:1364 +#: commands/dropcmds.c:453 commands/foreigncmds.c:1375 #, c-format msgid "server \"%s\" does not exist, skipping" msgstr "серверу \"%s\" не існує, пропускаємо" @@ -7332,7 +7373,7 @@ msgid "parameter \"%s\" cannot be set in a secondary extension control file" msgstr "параметр \"%s\" не можна задавати в додатковому керуючому файлі розширення" #: commands/extension.c:552 commands/extension.c:560 commands/extension.c:568 -#: utils/misc/guc.c:7106 +#: utils/misc/guc.c:7118 #, c-format msgid "parameter \"%s\" requires a Boolean value" msgstr "параметр \"%s\" потребує логічного значення" @@ -7517,463 +7558,463 @@ msgstr "неможливо додати схему \"%s\" до розширен msgid "file \"%s\" is too large" msgstr "файл \"%s\" занадто великий" -#: commands/foreigncmds.c:148 commands/foreigncmds.c:157 +#: commands/foreigncmds.c:159 commands/foreigncmds.c:168 #, c-format msgid "option \"%s\" not found" msgstr "параметр \"%s\" не знайдено" -#: commands/foreigncmds.c:167 +#: commands/foreigncmds.c:178 #, c-format msgid "option \"%s\" provided more than once" msgstr "параметр \"%s\" надано більше одного разу" -#: commands/foreigncmds.c:221 commands/foreigncmds.c:229 +#: commands/foreigncmds.c:232 commands/foreigncmds.c:240 #, c-format msgid "permission denied to change owner of foreign-data wrapper \"%s\"" msgstr "немає дозволу для зміни власника джерела сторонніх даних \"%s\"" -#: commands/foreigncmds.c:223 +#: commands/foreigncmds.c:234 #, c-format msgid "Must be superuser to change owner of a foreign-data wrapper." msgstr "Треба бути суперкористувачем, щоб змінити власника джерела сторонніх даних." -#: commands/foreigncmds.c:231 +#: commands/foreigncmds.c:242 #, c-format msgid "The owner of a foreign-data wrapper must be a superuser." msgstr "Власником джерела сторонніх даних може бути тільки суперкористувач." -#: commands/foreigncmds.c:291 commands/foreigncmds.c:711 foreign/foreign.c:701 +#: commands/foreigncmds.c:302 commands/foreigncmds.c:722 foreign/foreign.c:711 #, c-format msgid "foreign-data wrapper \"%s\" does not exist" msgstr "джерела сторонніх даних \"%s\" не існує" -#: commands/foreigncmds.c:584 +#: commands/foreigncmds.c:595 #, c-format msgid "permission denied to create foreign-data wrapper \"%s\"" msgstr "немає дозволу для створення джерела сторонніх даних %s\"" -#: commands/foreigncmds.c:586 +#: commands/foreigncmds.c:597 #, c-format msgid "Must be superuser to create a foreign-data wrapper." msgstr "Треба бути суперкористувачем, щоб створити джерело сторонніх даних." -#: commands/foreigncmds.c:701 +#: commands/foreigncmds.c:712 #, c-format msgid "permission denied to alter foreign-data wrapper \"%s\"" msgstr "немає дозволу на зміну джерела сторонніх даних \"%s\"" -#: commands/foreigncmds.c:703 +#: commands/foreigncmds.c:714 #, c-format msgid "Must be superuser to alter a foreign-data wrapper." msgstr "Треба бути суперкористувачем, щоб змінити джерело сторонніх даних." -#: commands/foreigncmds.c:734 +#: commands/foreigncmds.c:745 #, c-format msgid "changing the foreign-data wrapper handler can change behavior of existing foreign tables" msgstr "при зміні обробника в обгортці сторонніх даних може змінитися поведінка існуючих сторонніх таблиць" -#: commands/foreigncmds.c:749 +#: commands/foreigncmds.c:760 #, c-format msgid "changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid" msgstr "при зміні функції перевірки в обгортці сторонніх даних параметри залежних об'єктів можуть стати невірними" -#: commands/foreigncmds.c:880 +#: commands/foreigncmds.c:891 #, c-format msgid "server \"%s\" already exists, skipping" msgstr "сервер \"%s\" вже існує, пропускаємо" -#: commands/foreigncmds.c:1148 +#: commands/foreigncmds.c:1159 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\", skipping" msgstr "зіставлення користувача \"%s\" для сервера \"%s\" вже існує, пропускаємо" -#: commands/foreigncmds.c:1158 +#: commands/foreigncmds.c:1169 #, c-format msgid "user mapping for \"%s\" already exists for server \"%s\"" msgstr "зіставлення користувача \"%s\" для сервера \"%s\" вже існує\"" -#: commands/foreigncmds.c:1258 commands/foreigncmds.c:1378 +#: commands/foreigncmds.c:1269 commands/foreigncmds.c:1389 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\"" msgstr "зіставлення користувача \"%s\" не існує для сервера \"%s\"" -#: commands/foreigncmds.c:1383 +#: commands/foreigncmds.c:1394 #, c-format msgid "user mapping for \"%s\" does not exist for server \"%s\", skipping" msgstr "зіставлення користувача \"%s\" не існує для сервера \"%s\", пропускаємо" -#: commands/foreigncmds.c:1511 foreign/foreign.c:389 +#: commands/foreigncmds.c:1522 foreign/foreign.c:399 #, c-format msgid "foreign-data wrapper \"%s\" has no handler" msgstr "джерело сторонніх даних \"%s\" не має обробника" -#: commands/foreigncmds.c:1517 +#: commands/foreigncmds.c:1528 #, c-format msgid "foreign-data wrapper \"%s\" does not support IMPORT FOREIGN SCHEMA" msgstr "джерело сторонніх даних \"%s\" не підтримує IMPORT FOREIGN SCHEMA" -#: commands/foreigncmds.c:1619 +#: commands/foreigncmds.c:1630 #, c-format msgid "importing foreign table \"%s\"" msgstr "імпорт сторонньої таблиці \"%s\"" -#: commands/functioncmds.c:109 +#: commands/functioncmds.c:110 #, c-format msgid "SQL function cannot return shell type %s" msgstr "SQL-функція не може повертати тип оболонки %s" -#: commands/functioncmds.c:114 +#: commands/functioncmds.c:115 #, c-format msgid "return type %s is only a shell" msgstr "тип, що повертається, %s - лише оболонка" -#: commands/functioncmds.c:144 parser/parse_type.c:354 +#: commands/functioncmds.c:145 parser/parse_type.c:354 #, c-format msgid "type modifier cannot be specified for shell type \"%s\"" msgstr "для типу оболонки \"%s\" неможливо вказати модифікатор типу" -#: commands/functioncmds.c:150 +#: commands/functioncmds.c:151 #, c-format msgid "type \"%s\" is not yet defined" msgstr "тип \"%s\" все ще не визначений" -#: commands/functioncmds.c:151 +#: commands/functioncmds.c:152 #, c-format msgid "Creating a shell type definition." msgstr "Створення визначення типу оболонки." -#: commands/functioncmds.c:250 +#: commands/functioncmds.c:251 #, c-format msgid "SQL function cannot accept shell type %s" msgstr "SQL-функція не може приймати значення типу оболонки %s" -#: commands/functioncmds.c:256 +#: commands/functioncmds.c:257 #, c-format msgid "aggregate cannot accept shell type %s" msgstr "агрегатна функція не може приймати значення типу оболонки %s" -#: commands/functioncmds.c:261 +#: commands/functioncmds.c:262 #, c-format msgid "argument type %s is only a shell" msgstr "тип аргументу %s - лише оболонка" -#: commands/functioncmds.c:271 +#: commands/functioncmds.c:272 #, c-format msgid "type %s does not exist" msgstr "тип \"%s\" не існує" -#: commands/functioncmds.c:285 +#: commands/functioncmds.c:286 #, c-format msgid "aggregates cannot accept set arguments" msgstr "агрегатні функції не приймають в аргументах набору" -#: commands/functioncmds.c:289 +#: commands/functioncmds.c:290 #, c-format msgid "procedures cannot accept set arguments" msgstr "процедури не приймають в аргументах набору" -#: commands/functioncmds.c:293 +#: commands/functioncmds.c:294 #, c-format msgid "functions cannot accept set arguments" msgstr "функції не приймають в аргументах набору" -#: commands/functioncmds.c:303 +#: commands/functioncmds.c:304 #, c-format msgid "VARIADIC parameter must be the last input parameter" msgstr "Параметр VARIADIC повинен бути останнім в списку вхідних параметрів" -#: commands/functioncmds.c:323 +#: commands/functioncmds.c:324 #, c-format msgid "VARIADIC parameter must be the last parameter" msgstr "Параметр VARIADIC повинен бути останнім параметром" -#: commands/functioncmds.c:348 +#: commands/functioncmds.c:349 #, c-format msgid "VARIADIC parameter must be an array" msgstr "Параметр VARIADIC повинен бути масивом" -#: commands/functioncmds.c:393 +#: commands/functioncmds.c:394 #, c-format msgid "parameter name \"%s\" used more than once" msgstr "ім'я параметру «%s» використано декілька разів" -#: commands/functioncmds.c:411 +#: commands/functioncmds.c:412 #, c-format msgid "only input parameters can have default values" msgstr "тільки ввідні параметри можуть мати значення за замовчуванням" -#: commands/functioncmds.c:426 +#: commands/functioncmds.c:427 #, c-format msgid "cannot use table references in parameter default value" msgstr "у значенні параметру за замовчуванням не можна посилатись на таблиці" -#: commands/functioncmds.c:450 +#: commands/functioncmds.c:451 #, c-format msgid "input parameters after one with a default value must also have defaults" msgstr "вхідні параметри, наступні за параметром зі значенням \"за замовчуванням\", також повинні мати значення \"за замовчуванням\"" -#: commands/functioncmds.c:460 +#: commands/functioncmds.c:461 #, c-format msgid "procedure OUT parameters cannot appear after one with a default value" msgstr "параметри процедури OUT не можуть з'являтись після параметра зі значенням за замовчуванням" -#: commands/functioncmds.c:612 commands/functioncmds.c:803 +#: commands/functioncmds.c:613 commands/functioncmds.c:804 #, c-format msgid "invalid attribute in procedure definition" msgstr "некоректний атрибут у визначенні процедури" -#: commands/functioncmds.c:708 +#: commands/functioncmds.c:709 #, c-format msgid "support function %s must return type %s" msgstr "функція підтримки %s повинна повертати тип %s" -#: commands/functioncmds.c:719 +#: commands/functioncmds.c:720 #, c-format msgid "must be superuser to specify a support function" msgstr "для уточнення функції підтримки потрібно бути суперкористувачем" -#: commands/functioncmds.c:852 commands/functioncmds.c:1456 +#: commands/functioncmds.c:853 commands/functioncmds.c:1457 #, c-format msgid "COST must be positive" msgstr "COST має бути додатнім" -#: commands/functioncmds.c:860 commands/functioncmds.c:1464 +#: commands/functioncmds.c:861 commands/functioncmds.c:1465 #, c-format msgid "ROWS must be positive" msgstr "Значення ROWS повинно бути позитивним" -#: commands/functioncmds.c:889 +#: commands/functioncmds.c:890 #, c-format msgid "no function body specified" msgstr "не вказано тіло функції" -#: commands/functioncmds.c:894 +#: commands/functioncmds.c:895 #, c-format msgid "duplicate function body specified" msgstr "вказано тіло дубліката функції" -#: commands/functioncmds.c:899 +#: commands/functioncmds.c:900 #, c-format msgid "inline SQL function body only valid for language SQL" msgstr "вбудоване тіло функції SQL допустиме лише для мови SQL" -#: commands/functioncmds.c:941 +#: commands/functioncmds.c:942 #, c-format msgid "SQL function with unquoted function body cannot have polymorphic arguments" msgstr "SQL функція з тілом без лапок не може мати поліморфні аргументи" -#: commands/functioncmds.c:967 commands/functioncmds.c:986 +#: commands/functioncmds.c:968 commands/functioncmds.c:987 #, c-format msgid "%s is not yet supported in unquoted SQL function body" msgstr "%s ще не підтримується у тілі SQL функції без лапок" -#: commands/functioncmds.c:1014 +#: commands/functioncmds.c:1015 #, c-format msgid "only one AS item needed for language \"%s\"" msgstr "для мови \"%s\" потрібен лише один вираз AS" -#: commands/functioncmds.c:1119 +#: commands/functioncmds.c:1120 #, c-format msgid "no language specified" msgstr "не вказано жодної мови" -#: commands/functioncmds.c:1127 commands/functioncmds.c:2130 +#: commands/functioncmds.c:1128 commands/functioncmds.c:2131 #: commands/proclang.c:237 #, c-format msgid "language \"%s\" does not exist" msgstr "мови \"%s\" не існує" -#: commands/functioncmds.c:1129 commands/functioncmds.c:2132 +#: commands/functioncmds.c:1130 commands/functioncmds.c:2133 #, c-format msgid "Use CREATE EXTENSION to load the language into the database." msgstr "Використайте CREATE EXTENSION, щоб завантажити мову в базу даних." -#: commands/functioncmds.c:1164 commands/functioncmds.c:1448 +#: commands/functioncmds.c:1165 commands/functioncmds.c:1449 #, c-format msgid "only superuser can define a leakproof function" msgstr "лише суперкористувачі можуть визначити функцію з атрибутом leakproof" -#: commands/functioncmds.c:1215 +#: commands/functioncmds.c:1216 #, c-format msgid "function result type must be %s because of OUT parameters" msgstr "результат функції повинен мати тип %s відповідно з параметрами OUT" -#: commands/functioncmds.c:1228 +#: commands/functioncmds.c:1229 #, c-format msgid "function result type must be specified" msgstr "необхідно вказати тип результату функції" -#: commands/functioncmds.c:1282 commands/functioncmds.c:1468 +#: commands/functioncmds.c:1283 commands/functioncmds.c:1469 #, c-format msgid "ROWS is not applicable when function does not return a set" msgstr "ROWS не застосовується, коли функція не повертає набір" -#: commands/functioncmds.c:1569 +#: commands/functioncmds.c:1570 #, c-format msgid "source data type %s is a pseudo-type" msgstr "вихідний тип даних %s є псевдотипом" -#: commands/functioncmds.c:1575 +#: commands/functioncmds.c:1576 #, c-format msgid "target data type %s is a pseudo-type" msgstr "цільовий тип даних %s є псевдотипом" -#: commands/functioncmds.c:1599 +#: commands/functioncmds.c:1600 #, c-format msgid "cast will be ignored because the source data type is a domain" msgstr "приведення буде ігноруватися, оскільки вихідні дані мають тип домену" -#: commands/functioncmds.c:1604 +#: commands/functioncmds.c:1605 #, c-format msgid "cast will be ignored because the target data type is a domain" msgstr "приведення буде ігноруватися, оскільки цільові дані мають тип домену" -#: commands/functioncmds.c:1629 +#: commands/functioncmds.c:1630 #, c-format msgid "cast function must take one to three arguments" msgstr "функція приведення повинна приймати від одного до трьох аргументів" -#: commands/functioncmds.c:1633 +#: commands/functioncmds.c:1634 #, c-format msgid "argument of cast function must match or be binary-coercible from source data type" msgstr "аргумент функції приведення повинен співпадати або бути двійково-сумісним з вихідним типом даних" -#: commands/functioncmds.c:1637 +#: commands/functioncmds.c:1638 #, c-format msgid "second argument of cast function must be type %s" msgstr "другий аргумент функції приведення повинен мати тип %s" -#: commands/functioncmds.c:1642 +#: commands/functioncmds.c:1643 #, c-format msgid "third argument of cast function must be type %s" msgstr "третій аргумент функції приведення повинен мати тип %s" -#: commands/functioncmds.c:1647 +#: commands/functioncmds.c:1648 #, c-format msgid "return data type of cast function must match or be binary-coercible to target data type" msgstr "тип вертаючих даних функції приведення повинен співпадати або бути двійково-сумісним з цільовим типом даних" -#: commands/functioncmds.c:1658 +#: commands/functioncmds.c:1659 #, c-format msgid "cast function must not be volatile" msgstr "функція приведення не може бути змінною (volatile)" -#: commands/functioncmds.c:1663 +#: commands/functioncmds.c:1664 #, c-format msgid "cast function must be a normal function" msgstr "функція приведення повинна бути звичайною функцією" -#: commands/functioncmds.c:1667 +#: commands/functioncmds.c:1668 #, c-format msgid "cast function must not return a set" msgstr "функція приведення не може вертати набір" -#: commands/functioncmds.c:1693 +#: commands/functioncmds.c:1694 #, c-format msgid "must be superuser to create a cast WITHOUT FUNCTION" msgstr "тільки суперкористувач може створити приведення WITHOUT FUNCTION" -#: commands/functioncmds.c:1708 +#: commands/functioncmds.c:1709 #, c-format msgid "source and target data types are not physically compatible" msgstr "вихідний та цільовий типи даних не сумісні фізично" -#: commands/functioncmds.c:1723 +#: commands/functioncmds.c:1724 #, c-format msgid "composite data types are not binary-compatible" msgstr "складені типи даних не сумісні на двійковому рівні" -#: commands/functioncmds.c:1729 +#: commands/functioncmds.c:1730 #, c-format msgid "enum data types are not binary-compatible" msgstr "типи переліку не сумісні на двійковому рівні" -#: commands/functioncmds.c:1735 +#: commands/functioncmds.c:1736 #, c-format msgid "array data types are not binary-compatible" msgstr "типи масивів не сумісні на двійковому рівні" -#: commands/functioncmds.c:1752 +#: commands/functioncmds.c:1753 #, c-format msgid "domain data types must not be marked binary-compatible" msgstr "типи доменів не можуть вважатись сумісними на двійковому рівні" -#: commands/functioncmds.c:1762 +#: commands/functioncmds.c:1763 #, c-format msgid "source data type and target data type are the same" msgstr "вихідний тип даних співпадає з цільовим типом" -#: commands/functioncmds.c:1795 +#: commands/functioncmds.c:1796 #, c-format msgid "transform function must not be volatile" msgstr "функція перетворення не може бути мінливою" -#: commands/functioncmds.c:1799 +#: commands/functioncmds.c:1800 #, c-format msgid "transform function must be a normal function" msgstr "функція перетворення повинна бути нормальною функцією" -#: commands/functioncmds.c:1803 +#: commands/functioncmds.c:1804 #, c-format msgid "transform function must not return a set" msgstr "функція перетворення не повинна повертати набір" -#: commands/functioncmds.c:1807 +#: commands/functioncmds.c:1808 #, c-format msgid "transform function must take one argument" msgstr "функція перетворення повинна приймати один аргумент" -#: commands/functioncmds.c:1811 +#: commands/functioncmds.c:1812 #, c-format msgid "first argument of transform function must be type %s" msgstr "перший аргумент функції перетворення повинен бути типу %s" -#: commands/functioncmds.c:1850 +#: commands/functioncmds.c:1851 #, c-format msgid "data type %s is a pseudo-type" msgstr "тип даних %s є псевдотипом" -#: commands/functioncmds.c:1856 +#: commands/functioncmds.c:1857 #, c-format msgid "data type %s is a domain" msgstr "тип даних %s є доменом" -#: commands/functioncmds.c:1896 +#: commands/functioncmds.c:1897 #, c-format msgid "return data type of FROM SQL function must be %s" msgstr "результат функції FROM SQL має бути типу %s" -#: commands/functioncmds.c:1922 +#: commands/functioncmds.c:1923 #, c-format msgid "return data type of TO SQL function must be the transform data type" msgstr "результат функції TO SQL повинен мати тип даних перетворення" -#: commands/functioncmds.c:1951 +#: commands/functioncmds.c:1952 #, c-format msgid "transform for type %s language \"%s\" already exists" msgstr "перетворення для типу %s мови \"%s\" вже існує" -#: commands/functioncmds.c:2038 +#: commands/functioncmds.c:2039 #, c-format msgid "transform for type %s language \"%s\" does not exist" msgstr "перетворення для типу %s мови \"%s\" не існує" -#: commands/functioncmds.c:2062 +#: commands/functioncmds.c:2063 #, c-format msgid "function %s already exists in schema \"%s\"" msgstr "функція %s вже існує в схемі \"%s\"" -#: commands/functioncmds.c:2117 +#: commands/functioncmds.c:2118 #, c-format msgid "no inline code specified" msgstr "не вказано жодного впровадженого коду" -#: commands/functioncmds.c:2163 +#: commands/functioncmds.c:2164 #, c-format msgid "language \"%s\" does not support inline code execution" msgstr "мова \"%s\" не підтримує виконання впровадженого коду" -#: commands/functioncmds.c:2258 +#: commands/functioncmds.c:2259 #, c-format msgid "cannot pass more than %d argument to a procedure" msgid_plural "cannot pass more than %d arguments to a procedure" @@ -7982,299 +8023,299 @@ msgstr[1] "процедурі неможливо передати більше % msgstr[2] "процедурі неможливо передати більше %d аргументів" msgstr[3] "процедурі неможливо передати більше %d аргументів" -#: commands/indexcmds.c:634 +#: commands/indexcmds.c:641 #, c-format msgid "must specify at least one column" msgstr "треба вказати хоча б один стовпець" -#: commands/indexcmds.c:638 +#: commands/indexcmds.c:645 #, c-format msgid "cannot use more than %d columns in an index" msgstr "не можна використовувати більше ніж %d стовпців в індексі" -#: commands/indexcmds.c:686 +#: commands/indexcmds.c:693 #, c-format msgid "cannot create index on foreign table \"%s\"" msgstr "неможливо створити індекс в сторонній таблиці \"%s\"" -#: commands/indexcmds.c:717 +#: commands/indexcmds.c:724 #, c-format msgid "cannot create index on partitioned table \"%s\" concurrently" msgstr "неможливо створити індекс в секційній таблиці \"%s\" паралельним способом" -#: commands/indexcmds.c:722 +#: commands/indexcmds.c:729 #, c-format msgid "cannot create exclusion constraints on partitioned table \"%s\"" msgstr "створити обмеження-виняток в секціонованій таблиці \"%s\" не можна" -#: commands/indexcmds.c:732 +#: commands/indexcmds.c:739 #, c-format msgid "cannot create indexes on temporary tables of other sessions" msgstr "неможливо створити індекси в тимчасових таблицях в інших сеансах" -#: commands/indexcmds.c:770 commands/tablecmds.c:754 commands/tablespace.c:1184 +#: commands/indexcmds.c:777 commands/tablecmds.c:755 commands/tablespace.c:1179 #, c-format msgid "cannot specify default tablespace for partitioned relations" msgstr "для секціонованих відношень не можна вказати табличний простір за замовчуванням" -#: commands/indexcmds.c:802 commands/tablecmds.c:789 commands/tablecmds.c:3280 +#: commands/indexcmds.c:809 commands/tablecmds.c:786 commands/tablecmds.c:3289 #, c-format msgid "only shared relations can be placed in pg_global tablespace" msgstr "тільки спільні відношення можуть бути поміщені в табличний pg_global" -#: commands/indexcmds.c:835 +#: commands/indexcmds.c:842 #, c-format msgid "substituting access method \"gist\" for obsolete method \"rtree\"" msgstr "застарілий метод доступу \"rtree\" підміняється методом \"gist\"" -#: commands/indexcmds.c:856 +#: commands/indexcmds.c:863 #, c-format msgid "access method \"%s\" does not support unique indexes" msgstr "методу доступу \"%s\" не підтримує унікальні індекси" -#: commands/indexcmds.c:861 +#: commands/indexcmds.c:868 #, c-format msgid "access method \"%s\" does not support included columns" msgstr "методу доступу \"%s\" не підтримує включені стовпці" -#: commands/indexcmds.c:866 +#: commands/indexcmds.c:873 #, c-format msgid "access method \"%s\" does not support multicolumn indexes" msgstr "метод доступу \"%s\" не підтримує багатостовпцеві індекси" -#: commands/indexcmds.c:871 +#: commands/indexcmds.c:878 #, c-format msgid "access method \"%s\" does not support exclusion constraints" msgstr "метод доступу \"%s\" не підтримує обмеження-винятки" -#: commands/indexcmds.c:995 +#: commands/indexcmds.c:1002 #, c-format msgid "cannot match partition key to an index using access method \"%s\"" msgstr "не можна зіставити ключ розділу з індексом використовуючи метод доступу \"%s\"" -#: commands/indexcmds.c:1005 +#: commands/indexcmds.c:1012 #, c-format msgid "unsupported %s constraint with partition key definition" msgstr "непідтримуване обмеження \"%s\" з визначенням ключа секціонування" -#: commands/indexcmds.c:1007 +#: commands/indexcmds.c:1014 #, c-format msgid "%s constraints cannot be used when partition keys include expressions." msgstr "обмеження %s не можуть використовуватись, якщо ключі секціонування включають вирази." -#: commands/indexcmds.c:1049 +#: commands/indexcmds.c:1056 #, c-format msgid "unique constraint on partitioned table must include all partitioning columns" msgstr "обмеження унікальності в секціонованій таблиці повинно включати всі стовпці секціонування" -#: commands/indexcmds.c:1050 +#: commands/indexcmds.c:1057 #, c-format msgid "%s constraint on table \"%s\" lacks column \"%s\" which is part of the partition key." msgstr "в обмеженні %s таблиці\"%s\" не вистачає стовпця \"%s\", що є частиною ключа секціонування." -#: commands/indexcmds.c:1069 commands/indexcmds.c:1088 +#: commands/indexcmds.c:1076 commands/indexcmds.c:1095 #, c-format msgid "index creation on system columns is not supported" msgstr "створення індексу для системних стовпців не підтримується" -#: commands/indexcmds.c:1288 tcop/utility.c:1510 +#: commands/indexcmds.c:1295 tcop/utility.c:1510 #, c-format msgid "cannot create unique index on partitioned table \"%s\"" msgstr "не можна створити унікальний індекс в секціонованій таблиці \"%s\"" -#: commands/indexcmds.c:1290 tcop/utility.c:1512 +#: commands/indexcmds.c:1297 tcop/utility.c:1512 #, c-format msgid "Table \"%s\" contains partitions that are foreign tables." msgstr "Таблиця \"%s\" містить секції, які є зовнішніми таблицями." -#: commands/indexcmds.c:1752 +#: commands/indexcmds.c:1759 #, c-format msgid "functions in index predicate must be marked IMMUTABLE" msgstr "функції в предикаті індексу повинні бути позначені як IMMUTABLE" -#: commands/indexcmds.c:1830 parser/parse_utilcmd.c:2526 -#: parser/parse_utilcmd.c:2661 +#: commands/indexcmds.c:1837 parser/parse_utilcmd.c:2533 +#: parser/parse_utilcmd.c:2668 #, c-format msgid "column \"%s\" named in key does not exist" msgstr "вказаний у ключі стовпець \"%s\" не існує" -#: commands/indexcmds.c:1854 parser/parse_utilcmd.c:1825 +#: commands/indexcmds.c:1861 parser/parse_utilcmd.c:1821 #, c-format msgid "expressions are not supported in included columns" msgstr "вирази не підтримуються у включених стовпцях " -#: commands/indexcmds.c:1895 +#: commands/indexcmds.c:1902 #, c-format msgid "functions in index expression must be marked IMMUTABLE" msgstr "функції в індексному виразі повинні бути позначені як IMMUTABLE" -#: commands/indexcmds.c:1910 +#: commands/indexcmds.c:1917 #, c-format msgid "including column does not support a collation" msgstr "включені стовпці не підтримують правила сортування" -#: commands/indexcmds.c:1914 +#: commands/indexcmds.c:1921 #, c-format msgid "including column does not support an operator class" msgstr "включені стовпці не підтримують класи операторів" -#: commands/indexcmds.c:1918 +#: commands/indexcmds.c:1925 #, c-format msgid "including column does not support ASC/DESC options" msgstr "включені стовпці не підтримують параметри ASC/DESC" -#: commands/indexcmds.c:1922 +#: commands/indexcmds.c:1929 #, c-format msgid "including column does not support NULLS FIRST/LAST options" msgstr "включені стовпці не підтримують параметри NULLS FIRST/LAST" -#: commands/indexcmds.c:1963 +#: commands/indexcmds.c:1970 #, c-format msgid "could not determine which collation to use for index expression" msgstr "не вдалося визначити, яке правило сортування використати для індексного виразу" -#: commands/indexcmds.c:1971 commands/tablecmds.c:16966 commands/typecmds.c:810 -#: parser/parse_expr.c:2693 parser/parse_type.c:566 parser/parse_utilcmd.c:3793 -#: utils/adt/misc.c:628 +#: commands/indexcmds.c:1978 commands/tablecmds.c:17215 commands/typecmds.c:810 +#: parser/parse_expr.c:2701 parser/parse_type.c:566 parser/parse_utilcmd.c:3783 +#: utils/adt/misc.c:621 #, c-format msgid "collations are not supported by type %s" msgstr "тип %s не підтримує правила сортування" -#: commands/indexcmds.c:2036 +#: commands/indexcmds.c:2043 #, c-format msgid "operator %s is not commutative" msgstr "оператор %s не комутативний" -#: commands/indexcmds.c:2038 +#: commands/indexcmds.c:2045 #, c-format msgid "Only commutative operators can be used in exclusion constraints." msgstr "В обмеженнях-виключеннях можуть використовуватись лише комутативні оператори." -#: commands/indexcmds.c:2064 +#: commands/indexcmds.c:2071 #, c-format msgid "operator %s is not a member of operator family \"%s\"" msgstr "оператор %s не є членом сімейства операторів \"%s\"" -#: commands/indexcmds.c:2067 +#: commands/indexcmds.c:2074 #, c-format msgid "The exclusion operator must be related to the index operator class for the constraint." msgstr "Оператор винятку для обмеження повинен відноситись до класу операторів індексу." -#: commands/indexcmds.c:2102 +#: commands/indexcmds.c:2109 #, c-format msgid "access method \"%s\" does not support ASC/DESC options" msgstr "метод доступу \"%s\" не підтримує параметри ASC/DESC" -#: commands/indexcmds.c:2107 +#: commands/indexcmds.c:2114 #, c-format msgid "access method \"%s\" does not support NULLS FIRST/LAST options" msgstr "метод доступу \"%s\" не підтримує параметри NULLS FIRST/LAST" -#: commands/indexcmds.c:2153 commands/tablecmds.c:16991 -#: commands/tablecmds.c:16997 commands/typecmds.c:2317 +#: commands/indexcmds.c:2160 commands/tablecmds.c:17240 +#: commands/tablecmds.c:17246 commands/typecmds.c:2317 #, c-format msgid "data type %s has no default operator class for access method \"%s\"" msgstr "тип даних %s не має класу операторів за замовчуванням для методу доступу \"%s\"" -#: commands/indexcmds.c:2155 +#: commands/indexcmds.c:2162 #, c-format msgid "You must specify an operator class for the index or define a default operator class for the data type." msgstr "Ви повинні вказати клас операторів для індексу або визначити клас операторів за замовчуванням для цього типу даних." -#: commands/indexcmds.c:2184 commands/indexcmds.c:2192 -#: commands/opclasscmds.c:205 +#: commands/indexcmds.c:2191 commands/indexcmds.c:2199 +#: commands/opclasscmds.c:206 #, c-format msgid "operator class \"%s\" does not exist for access method \"%s\"" msgstr "клас операторів \"%s\" не існує для методу доступу \"%s\"" -#: commands/indexcmds.c:2206 commands/typecmds.c:2305 +#: commands/indexcmds.c:2213 commands/typecmds.c:2305 #, c-format msgid "operator class \"%s\" does not accept data type %s" msgstr "клас операторів \"%s\" не приймає тип даних %s" -#: commands/indexcmds.c:2296 +#: commands/indexcmds.c:2303 #, c-format msgid "there are multiple default operator classes for data type %s" msgstr "для типу даних %s є кілька класів операторів за замовчуванням" -#: commands/indexcmds.c:2624 +#: commands/indexcmds.c:2665 #, c-format msgid "unrecognized REINDEX option \"%s\"" msgstr "нерозпізнаний параметр REINDEX \"%s\"" -#: commands/indexcmds.c:2848 +#: commands/indexcmds.c:2889 #, c-format msgid "table \"%s\" has no indexes that can be reindexed concurrently" msgstr "таблиця \"%s\" не має індексів, які можна переіндексувати паралельно" -#: commands/indexcmds.c:2862 +#: commands/indexcmds.c:2903 #, c-format msgid "table \"%s\" has no indexes to reindex" msgstr "таблиця \"%s\" не має індексів для переіндексування" -#: commands/indexcmds.c:2902 commands/indexcmds.c:3409 -#: commands/indexcmds.c:3537 +#: commands/indexcmds.c:2943 commands/indexcmds.c:3450 +#: commands/indexcmds.c:3578 #, c-format msgid "cannot reindex system catalogs concurrently" msgstr "не можна конкурентно переіндексувати системні каталоги" -#: commands/indexcmds.c:2925 +#: commands/indexcmds.c:2966 #, c-format msgid "can only reindex the currently open database" msgstr "переіндексувати можна тільки наразі відкриту базу даних" -#: commands/indexcmds.c:3013 +#: commands/indexcmds.c:3054 #, c-format msgid "cannot reindex system catalogs concurrently, skipping all" msgstr "не можна конкурентно переіндексувати системні каталоги, пропускаємо" -#: commands/indexcmds.c:3046 +#: commands/indexcmds.c:3087 #, c-format msgid "cannot move system relations, skipping all" msgstr "не можна перемістити системні відношення, пропускаються усі" -#: commands/indexcmds.c:3093 +#: commands/indexcmds.c:3134 #, c-format msgid "while reindexing partitioned table \"%s.%s\"" msgstr "під час переіндексування секціонованої таблиці \"%s.%s\"" -#: commands/indexcmds.c:3096 +#: commands/indexcmds.c:3137 #, c-format msgid "while reindexing partitioned index \"%s.%s\"" msgstr "під час переіндексування секціонованого індексу \"%s.%s\"" -#: commands/indexcmds.c:3289 commands/indexcmds.c:4145 +#: commands/indexcmds.c:3330 commands/indexcmds.c:4194 #, c-format msgid "table \"%s.%s\" was reindexed" msgstr "таблиця \"%s.%s\" була переіндексована" -#: commands/indexcmds.c:3441 commands/indexcmds.c:3493 +#: commands/indexcmds.c:3482 commands/indexcmds.c:3534 #, c-format msgid "cannot reindex invalid index \"%s.%s\" concurrently, skipping" msgstr "неможливо переіндексувати пошкоджений індекс \"%s.%s\" паралельно, пропускається" -#: commands/indexcmds.c:3447 +#: commands/indexcmds.c:3488 #, c-format msgid "cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping" msgstr "неможливо переіндексувати індекс обмеження-виключення \"%s.%s\" паралельно, пропускається" -#: commands/indexcmds.c:3602 +#: commands/indexcmds.c:3643 #, c-format msgid "cannot reindex this type of relation concurrently" msgstr "неможливо переіндексувати цей тип відношень паралельон" -#: commands/indexcmds.c:3623 +#: commands/indexcmds.c:3664 #, c-format msgid "cannot move non-shared relation to tablespace \"%s\"" msgstr "не можна перемістити не спільне відношення до табличного простору \"%s\"" -#: commands/indexcmds.c:4126 commands/indexcmds.c:4138 +#: commands/indexcmds.c:4175 commands/indexcmds.c:4187 #, c-format msgid "index \"%s.%s\" was reindexed" msgstr "індекс \"%s.%s\" був перебудований" -#: commands/lockcmds.c:92 commands/tablecmds.c:6085 commands/trigger.c:307 -#: rewrite/rewriteDefine.c:271 rewrite/rewriteDefine.c:950 +#: commands/lockcmds.c:92 commands/tablecmds.c:6133 commands/trigger.c:307 +#: rewrite/rewriteDefine.c:272 rewrite/rewriteDefine.c:956 #, c-format msgid "\"%s\" is not a table or view" msgstr "\"%s\" - не таблиця або подання" @@ -8309,224 +8350,224 @@ msgstr "нові дані для матеріалізованого поданн msgid "Row: %s" msgstr "Рядок: %s" -#: commands/opclasscmds.c:124 +#: commands/opclasscmds.c:125 #, c-format msgid "operator family \"%s\" does not exist for access method \"%s\"" msgstr "сімейство операторів \"%s\" не існує для методу доступу \"%s\"" -#: commands/opclasscmds.c:267 +#: commands/opclasscmds.c:268 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists" msgstr "сімейство операторів \"%s\" для методу доступу \"%s\" вже існує" -#: commands/opclasscmds.c:416 +#: commands/opclasscmds.c:417 #, c-format msgid "must be superuser to create an operator class" msgstr "тільки суперкористувач може створити клас операторів" -#: commands/opclasscmds.c:493 commands/opclasscmds.c:910 -#: commands/opclasscmds.c:1056 +#: commands/opclasscmds.c:494 commands/opclasscmds.c:911 +#: commands/opclasscmds.c:1057 #, c-format msgid "invalid operator number %d, must be between 1 and %d" msgstr "неприпустимий номер оператора %d, число має бути між 1 і %d" -#: commands/opclasscmds.c:538 commands/opclasscmds.c:960 -#: commands/opclasscmds.c:1072 +#: commands/opclasscmds.c:539 commands/opclasscmds.c:961 +#: commands/opclasscmds.c:1073 #, c-format msgid "invalid function number %d, must be between 1 and %d" msgstr "неприпустимий номер функції %d, число має бути між 1 і %d" -#: commands/opclasscmds.c:567 +#: commands/opclasscmds.c:568 #, c-format msgid "storage type specified more than once" msgstr "тип сховища вказано більше одного разу" -#: commands/opclasscmds.c:594 +#: commands/opclasscmds.c:595 #, c-format msgid "storage type cannot be different from data type for access method \"%s\"" msgstr "тип сховища не може відрізнятися від типу даних для методу доступу \"%s\"" -#: commands/opclasscmds.c:610 +#: commands/opclasscmds.c:611 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists" msgstr "клас операторів \"%s\" для методу доступу \"%s\" вже існує" -#: commands/opclasscmds.c:638 +#: commands/opclasscmds.c:639 #, c-format msgid "could not make operator class \"%s\" be default for type %s" msgstr "клас операторів \"%s\" не вдалося зробити класом за замовчуванням для типу %s" -#: commands/opclasscmds.c:641 +#: commands/opclasscmds.c:642 #, c-format msgid "Operator class \"%s\" already is the default." msgstr "Клас операторів \"%s\" вже є класом за замовчуванням." -#: commands/opclasscmds.c:801 +#: commands/opclasscmds.c:802 #, c-format msgid "must be superuser to create an operator family" msgstr "тільки суперкористувач може створити сімейство операторів" -#: commands/opclasscmds.c:861 +#: commands/opclasscmds.c:862 #, c-format msgid "must be superuser to alter an operator family" msgstr "тільки суперкористувач може змінити сімейство операторів" -#: commands/opclasscmds.c:919 +#: commands/opclasscmds.c:920 #, c-format msgid "operator argument types must be specified in ALTER OPERATOR FAMILY" msgstr "типи аргументу оператора повинні бути вказані в ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:994 +#: commands/opclasscmds.c:995 #, c-format msgid "STORAGE cannot be specified in ALTER OPERATOR FAMILY" msgstr "STORAGE не може бути вказано в ALTER OPERATOR FAMILY" -#: commands/opclasscmds.c:1128 +#: commands/opclasscmds.c:1129 #, c-format msgid "one or two argument types must be specified" msgstr "треба вказати один або два типи аргументу" -#: commands/opclasscmds.c:1154 +#: commands/opclasscmds.c:1155 #, c-format msgid "index operators must be binary" msgstr "індексні оператори повинні бути бінарними" -#: commands/opclasscmds.c:1173 +#: commands/opclasscmds.c:1174 #, c-format msgid "access method \"%s\" does not support ordering operators" msgstr "метод доступу \"%s\" не підтримує сортувальних операторів" -#: commands/opclasscmds.c:1184 +#: commands/opclasscmds.c:1185 #, c-format msgid "index search operators must return boolean" msgstr "оператори пошуку по індексу повинні повертати логічне значення" -#: commands/opclasscmds.c:1224 +#: commands/opclasscmds.c:1225 #, c-format msgid "associated data types for operator class options parsing functions must match opclass input type" msgstr "пов'язані типи даних для функцій обробки параметрів класів операторів повинні відповідати типу вхідних даних opclass" -#: commands/opclasscmds.c:1231 +#: commands/opclasscmds.c:1232 #, c-format msgid "left and right associated data types for operator class options parsing functions must match" msgstr "ліві та праві пов'язані типи даних для функцій розбору параметрів класів операторів повинні збігатись" -#: commands/opclasscmds.c:1239 +#: commands/opclasscmds.c:1240 #, c-format msgid "invalid operator class options parsing function" msgstr "неприпустима функція розбору параметрів класів операторів" -#: commands/opclasscmds.c:1240 +#: commands/opclasscmds.c:1241 #, c-format msgid "Valid signature of operator class options parsing function is %s." msgstr "Допустимий підпис для функції розбору параметрів класів операторів: %s." -#: commands/opclasscmds.c:1259 +#: commands/opclasscmds.c:1260 #, c-format msgid "btree comparison functions must have two arguments" msgstr "функції порівняння btree повинні мати два аргумента" -#: commands/opclasscmds.c:1263 +#: commands/opclasscmds.c:1264 #, c-format msgid "btree comparison functions must return integer" msgstr "функції порівняння btree повинні повертати ціле число" -#: commands/opclasscmds.c:1280 +#: commands/opclasscmds.c:1281 #, c-format msgid "btree sort support functions must accept type \"internal\"" msgstr "опорні функції сортування btree повинні приймати тип \"internal\"" -#: commands/opclasscmds.c:1284 +#: commands/opclasscmds.c:1285 #, c-format msgid "btree sort support functions must return void" msgstr "опорні функції сортування btree повинні повертати недійсне (void)" -#: commands/opclasscmds.c:1295 +#: commands/opclasscmds.c:1296 #, c-format msgid "btree in_range functions must have five arguments" msgstr "функції in_range для btree повинні приймати п'ять аргументів" -#: commands/opclasscmds.c:1299 +#: commands/opclasscmds.c:1300 #, c-format msgid "btree in_range functions must return boolean" msgstr "функції in_range для btree повинні повертати логічне значення" -#: commands/opclasscmds.c:1315 +#: commands/opclasscmds.c:1316 #, c-format msgid "btree equal image functions must have one argument" msgstr "функції equal image для btree повинні приймати один аргумент" -#: commands/opclasscmds.c:1319 +#: commands/opclasscmds.c:1320 #, c-format msgid "btree equal image functions must return boolean" -msgstr "функції equal image для btree повинні повертати логічне значення" +msgstr "функції equal image для btree повинні повертати логічне значення" -#: commands/opclasscmds.c:1332 +#: commands/opclasscmds.c:1333 #, c-format msgid "btree equal image functions must not be cross-type" msgstr "функції equal image для btree не можуть бути хрестоподібного типу" -#: commands/opclasscmds.c:1342 +#: commands/opclasscmds.c:1343 #, c-format msgid "hash function 1 must have one argument" msgstr "геш-функція 1 повинна приймати один аргумент" -#: commands/opclasscmds.c:1346 +#: commands/opclasscmds.c:1347 #, c-format msgid "hash function 1 must return integer" msgstr "геш-функція 1 повинна повертати ціле число" -#: commands/opclasscmds.c:1353 +#: commands/opclasscmds.c:1354 #, c-format msgid "hash function 2 must have two arguments" msgstr "геш-функція 2 повинна приймати два аргументи" -#: commands/opclasscmds.c:1357 +#: commands/opclasscmds.c:1358 #, c-format msgid "hash function 2 must return bigint" msgstr "геш-функція 2 повинна повертати велике ціле (bigint)" -#: commands/opclasscmds.c:1382 +#: commands/opclasscmds.c:1383 #, c-format msgid "associated data types must be specified for index support function" msgstr "для опорної функції індексів повинні бути вказані пов'язані типи даних" -#: commands/opclasscmds.c:1407 +#: commands/opclasscmds.c:1408 #, c-format msgid "function number %d for (%s,%s) appears more than once" msgstr "номер функції %d для (%s,%s) з'являється більш ніж один раз" -#: commands/opclasscmds.c:1414 +#: commands/opclasscmds.c:1415 #, c-format msgid "operator number %d for (%s,%s) appears more than once" msgstr "номер оператора %d для (%s,%s) з'являється більш ніж один раз" -#: commands/opclasscmds.c:1460 +#: commands/opclasscmds.c:1461 #, c-format msgid "operator %d(%s,%s) already exists in operator family \"%s\"" msgstr "оператор %d(%s,%s) вже існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1566 +#: commands/opclasscmds.c:1590 #, c-format msgid "function %d(%s,%s) already exists in operator family \"%s\"" msgstr "функція %d(%s,%s) вже існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1647 +#: commands/opclasscmds.c:1735 #, c-format msgid "operator %d(%s,%s) does not exist in operator family \"%s\"" msgstr "оператора %d(%s,%s) не існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1687 +#: commands/opclasscmds.c:1775 #, c-format msgid "function %d(%s,%s) does not exist in operator family \"%s\"" msgstr "функції %d(%s,%s) не існує в сімействі операторів \"%s\"" -#: commands/opclasscmds.c:1718 +#: commands/opclasscmds.c:1806 #, c-format msgid "operator class \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "клас операторів \"%s\" для методу доступу \"%s\" вже існує в схемі \"%s\"" -#: commands/opclasscmds.c:1741 +#: commands/opclasscmds.c:1829 #, c-format msgid "operator family \"%s\" for access method \"%s\" already exists in schema \"%s\"" msgstr "сімейство операторів \"%s\" для методу доступу \"%s\" вже існує в схемі \"%s\"" @@ -8581,13 +8622,13 @@ msgstr "функція оцінювання з'єднання %s повинна msgid "operator attribute \"%s\" cannot be changed" msgstr "атрибут оператора \"%s\" неможливо змінити" -#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:151 -#: commands/tablecmds.c:1585 commands/tablecmds.c:2165 -#: commands/tablecmds.c:3390 commands/tablecmds.c:6064 -#: commands/tablecmds.c:8989 commands/tablecmds.c:16554 -#: commands/tablecmds.c:16589 commands/trigger.c:313 commands/trigger.c:1289 -#: commands/trigger.c:1398 rewrite/rewriteDefine.c:277 -#: rewrite/rewriteDefine.c:955 rewrite/rewriteRemove.c:80 +#: commands/policy.c:89 commands/policy.c:382 commands/statscmds.c:157 +#: commands/tablecmds.c:1582 commands/tablecmds.c:2162 +#: commands/tablecmds.c:3402 commands/tablecmds.c:6112 +#: commands/tablecmds.c:9081 commands/tablecmds.c:16793 +#: commands/tablecmds.c:16828 commands/trigger.c:313 commands/trigger.c:1289 +#: commands/trigger.c:1398 rewrite/rewriteDefine.c:278 +#: rewrite/rewriteDefine.c:961 rewrite/rewriteRemove.c:80 #, c-format msgid "permission denied: \"%s\" is a system catalog" msgstr "доступ заборонений: \"%s\" - системний каталог" @@ -8638,7 +8679,7 @@ msgid "cannot create a cursor WITH HOLD within security-restricted operation" msgstr "не можна створити курсос WITH HOLD в межах операції з обмеженням по безпеці" #: commands/portalcmds.c:189 commands/portalcmds.c:242 -#: executor/execCurrent.c:70 utils/adt/xml.c:2594 utils/adt/xml.c:2764 +#: executor/execCurrent.c:70 utils/adt/xml.c:2637 utils/adt/xml.c:2807 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не існує" @@ -8648,7 +8689,7 @@ msgstr "курсор \"%s\" не існує" msgid "invalid statement name: must not be empty" msgstr "неприпустиме ім'я оператора: не повинне бути пустим" -#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1479 +#: commands/prepare.c:131 parser/parse_param.c:313 tcop/postgres.c:1448 #, c-format msgid "could not determine data type of parameter $%d" msgstr "не вдалося визначити тип даних параметра $%d" @@ -8903,13 +8944,13 @@ msgstr "послідовність повинна бути в тій самій msgid "cannot change ownership of identity sequence" msgstr "змінити власника послідовності ідентифікації не можна" -#: commands/sequence.c:1725 commands/tablecmds.c:13357 -#: commands/tablecmds.c:15971 +#: commands/sequence.c:1725 commands/tablecmds.c:13593 +#: commands/tablecmds.c:16208 #, c-format msgid "Sequence \"%s\" is linked to table \"%s\"." msgstr "Послідовність \"%s\" зв'язана з таблицею \"%s\"." -#: commands/statscmds.c:112 commands/statscmds.c:121 tcop/utility.c:1866 +#: commands/statscmds.c:112 commands/statscmds.c:121 #, c-format msgid "only a single relation is allowed in CREATE STATISTICS" msgstr "в CREATE STATISTICS можна вказати лише одне відношення" @@ -8919,72 +8960,72 @@ msgstr "в CREATE STATISTICS можна вказати лише одне від msgid "relation \"%s\" is not a table, foreign table, or materialized view" msgstr "відношення \"%s\" - не таблиця, не зовнішня таблиця і не матеріалізоване подання" -#: commands/statscmds.c:193 +#: commands/statscmds.c:213 #, c-format msgid "statistics object \"%s\" already exists, skipping" msgstr "об'єкт статистики \"%s\" вже існує, пропускається" -#: commands/statscmds.c:201 +#: commands/statscmds.c:221 #, c-format msgid "statistics object \"%s\" already exists" msgstr "об'єкт статистики \"%s\" вже існує" -#: commands/statscmds.c:212 +#: commands/statscmds.c:232 #, c-format msgid "cannot have more than %d columns in statistics" msgstr "в статистиці не може бути більше ніж %d стовпців" -#: commands/statscmds.c:253 commands/statscmds.c:276 commands/statscmds.c:309 +#: commands/statscmds.c:273 commands/statscmds.c:296 commands/statscmds.c:329 #, c-format msgid "statistics creation on system columns is not supported" msgstr "створення статистики для системних стовпців не підтримується" -#: commands/statscmds.c:260 commands/statscmds.c:283 +#: commands/statscmds.c:280 commands/statscmds.c:303 #, 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:326 +#: commands/statscmds.c:346 #, 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:347 +#: commands/statscmds.c:367 #, c-format msgid "when building statistics on a single expression, statistics kinds may not be specified" msgstr "при побудові статистики для одного виразу види статистики можуть не вказуватись" -#: commands/statscmds.c:376 +#: commands/statscmds.c:396 #, c-format msgid "unrecognized statistics kind \"%s\"" msgstr "нерозпізнаний вид статистики \"%s\"" -#: commands/statscmds.c:405 +#: commands/statscmds.c:425 #, c-format msgid "extended statistics require at least 2 columns" msgstr "для розширеної статистики потрібно мінімум 2 стовпці" -#: commands/statscmds.c:423 +#: commands/statscmds.c:443 #, c-format msgid "duplicate column name in statistics definition" msgstr "дублювання імені стовпця у визначенні статистики" -#: commands/statscmds.c:458 +#: commands/statscmds.c:478 #, c-format msgid "duplicate expression in statistics definition" msgstr "дублікат виразу у визначенні статистики" -#: commands/statscmds.c:639 commands/tablecmds.c:7959 +#: commands/statscmds.c:659 commands/tablecmds.c:8047 #, c-format msgid "statistics target %d is too low" msgstr "мета статистики занадто мала %d" -#: commands/statscmds.c:647 commands/tablecmds.c:7967 +#: commands/statscmds.c:667 commands/tablecmds.c:8055 #, c-format msgid "lowering statistics target to %d" msgstr "мета статистики знижується до %d" -#: commands/statscmds.c:670 +#: commands/statscmds.c:690 #, c-format msgid "statistics object \"%s.%s\" does not exist, skipping" msgstr "об'єкт статистики \"%s.%s\" не існує, пропускається" @@ -9014,7 +9055,7 @@ msgid "must be superuser to create subscriptions" msgstr "для створення підписок потрібно бути суперкористувачем" #: commands/subscriptioncmds.c:474 commands/subscriptioncmds.c:572 -#: replication/logical/tablesync.c:985 replication/logical/worker.c:3226 +#: replication/logical/tablesync.c:1006 replication/logical/worker.c:3233 #, c-format msgid "could not connect to the publisher: %s" msgstr "не вдалося підключитись до сервера публікації: %s" @@ -9055,63 +9096,63 @@ msgstr "Використайте ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH msgid "ALTER SUBSCRIPTION ... REFRESH is not allowed for disabled subscriptions" msgstr "ALTER SUBSCRIPTION ... REFRESH для відключених підписок не допускається" -#: commands/subscriptioncmds.c:1092 +#: commands/subscriptioncmds.c:1094 #, c-format msgid "subscription \"%s\" does not exist, skipping" msgstr "підписка \"%s\" не існує, пропускається" -#: commands/subscriptioncmds.c:1344 +#: commands/subscriptioncmds.c:1346 #, c-format msgid "dropped replication slot \"%s\" on publisher" msgstr "видалено слот реплікації \"%s\" на сервері публікації" -#: commands/subscriptioncmds.c:1353 commands/subscriptioncmds.c:1361 +#: commands/subscriptioncmds.c:1355 commands/subscriptioncmds.c:1363 #, c-format msgid "could not drop replication slot \"%s\" on publisher: %s" msgstr "не вдалося видалити слот реплікації \"%s\" на сервері публікації: %s" -#: commands/subscriptioncmds.c:1395 +#: commands/subscriptioncmds.c:1397 #, c-format msgid "permission denied to change owner of subscription \"%s\"" msgstr "немає прав на зміну власника підписки \"%s\"" -#: commands/subscriptioncmds.c:1397 +#: commands/subscriptioncmds.c:1399 #, c-format msgid "The owner of a subscription must be a superuser." msgstr "Власником підписки повинен бути суперкористувач." -#: commands/subscriptioncmds.c:1513 +#: commands/subscriptioncmds.c:1515 #, c-format msgid "could not receive list of replicated tables from the publisher: %s" msgstr "не вдалося отримати список реплікованих таблиць із сервера публікації: %s" -#: commands/subscriptioncmds.c:1578 +#: commands/subscriptioncmds.c:1580 #, 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:1581 +#: commands/subscriptioncmds.c:1583 #, 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:1612 +#: commands/subscriptioncmds.c:1614 #, c-format msgid "publication name \"%s\" used more than once" msgstr "ім'я публікації \"%s\" використовується більше ніж один раз" -#: commands/subscriptioncmds.c:1656 +#: commands/subscriptioncmds.c:1658 #, c-format msgid "publication \"%s\" is already in subscription \"%s\"" msgstr "публікація \"%s\" вже в підписці \"%s\"" -#: commands/subscriptioncmds.c:1670 +#: commands/subscriptioncmds.c:1672 #, c-format msgid "publication \"%s\" is not in subscription \"%s\"" msgstr "публікація \"%s\" не знаходиться в підписці \"%s\"" -#: commands/subscriptioncmds.c:1681 +#: commands/subscriptioncmds.c:1683 #, c-format msgid "cannot drop all the publications from a subscription" msgstr "не можна видалити всі публікації з підписки" @@ -9172,8 +9213,8 @@ msgstr "матеріалізоване подання \"%s\" не існує, п msgid "Use DROP MATERIALIZED VIEW to remove a materialized view." msgstr "Використайте DROP MATERIALIZED VIEW, щоб видалити матеріалізоване подання." -#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18451 -#: parser/parse_utilcmd.c:2258 +#: commands/tablecmds.c:265 commands/tablecmds.c:289 commands/tablecmds.c:18753 +#: parser/parse_utilcmd.c:2265 #, c-format msgid "index \"%s\" does not exist" msgstr "індекс \"%s\" не існує" @@ -9196,8 +9237,8 @@ msgstr "\"%s\" не є типом" msgid "Use DROP TYPE to remove a type." msgstr "Використайте DROP TYPE, щоб видалити тип." -#: commands/tablecmds.c:277 commands/tablecmds.c:13196 -#: commands/tablecmds.c:15674 +#: commands/tablecmds.c:277 commands/tablecmds.c:13432 +#: commands/tablecmds.c:15911 #, c-format msgid "foreign table \"%s\" does not exist" msgstr "зовнішня таблиця \"%s\" не існує" @@ -9211,1372 +9252,1386 @@ msgstr "зовнішня таблиця \"%s\" не існує, пропуска msgid "Use DROP FOREIGN TABLE to remove a foreign table." msgstr "Використайте DROP FOREIGN TABLE щоб видалити сторонню таблицю." -#: commands/tablecmds.c:670 +#: commands/tablecmds.c:671 #, c-format msgid "ON COMMIT can only be used on temporary tables" msgstr "ON COMMIT можна використовувати лише для тимчасових таблиць" -#: commands/tablecmds.c:701 +#: commands/tablecmds.c:702 #, c-format msgid "cannot create temporary table within security-restricted operation" msgstr "неможливо створити тимчасову таблицю в межах операції з обмеженням безпеки" -#: commands/tablecmds.c:737 commands/tablecmds.c:14481 +#: commands/tablecmds.c:738 commands/tablecmds.c:14718 #, c-format msgid "relation \"%s\" would be inherited from more than once" msgstr "відношення \"%s\" буде успадковуватись більш ніж один раз" -#: commands/tablecmds.c:922 +#: commands/tablecmds.c:919 #, c-format msgid "specifying a table access method is not supported on a partitioned table" msgstr "вказання методу доступу до таблиці не підтримується з секційною таблицею" -#: commands/tablecmds.c:1018 +#: commands/tablecmds.c:1015 #, c-format msgid "\"%s\" is not partitioned" msgstr "\"%s\" не секціоновано" -#: commands/tablecmds.c:1113 +#: commands/tablecmds.c:1110 #, c-format msgid "cannot partition using more than %d columns" msgstr "число стовпців в ключі секціонування не може перевищувати %d" -#: commands/tablecmds.c:1169 +#: commands/tablecmds.c:1166 #, c-format msgid "cannot create foreign partition of partitioned table \"%s\"" msgstr "не можна створити зовнішню секцію в секціонованій таблиці \"%s\"" -#: commands/tablecmds.c:1171 +#: commands/tablecmds.c:1168 #, c-format msgid "Table \"%s\" contains indexes that are unique." msgstr "Таблиця \"%s\" містить індекси, які унікальні." -#: commands/tablecmds.c:1334 +#: commands/tablecmds.c:1331 #, c-format msgid "DROP INDEX CONCURRENTLY does not support dropping multiple objects" msgstr "DROP INDEX CONCURRENTLY не підтримує видалення кількох об'єктів" -#: commands/tablecmds.c:1338 +#: commands/tablecmds.c:1335 #, c-format msgid "DROP INDEX CONCURRENTLY does not support CASCADE" msgstr "DROP INDEX CONCURRENTLY не підтримує режим CASCADE" -#: commands/tablecmds.c:1442 +#: commands/tablecmds.c:1439 #, c-format msgid "cannot drop partitioned index \"%s\" concurrently" msgstr "неможливо видалити секціонований індекс \"%s\" паралельно" -#: commands/tablecmds.c:1730 +#: commands/tablecmds.c:1727 #, c-format msgid "cannot truncate only a partitioned table" msgstr "скоротити тільки секціоновану таблицю не можна" -#: commands/tablecmds.c:1731 +#: commands/tablecmds.c:1728 #, c-format msgid "Do not specify the ONLY keyword, or use TRUNCATE ONLY on the partitions directly." msgstr "Не вказуйте ключове слово ONLY або використайте TRUNCATE ONLY безпосередньо для секцій." -#: commands/tablecmds.c:1803 +#: commands/tablecmds.c:1800 #, c-format msgid "truncate cascades to table \"%s\"" msgstr "скорочення поширюється на таблицю \"%s\"" -#: commands/tablecmds.c:2153 +#: commands/tablecmds.c:2150 #, c-format msgid "cannot truncate foreign table \"%s\"" msgstr "скоротити зовнішню таблицю \"%s\" не можна" -#: commands/tablecmds.c:2202 +#: commands/tablecmds.c:2199 #, c-format msgid "cannot truncate temporary tables of other sessions" msgstr "тимчасові таблиці інших сеансів не можна скоротити" -#: commands/tablecmds.c:2430 commands/tablecmds.c:14378 +#: commands/tablecmds.c:2427 commands/tablecmds.c:14615 #, c-format msgid "cannot inherit from partitioned table \"%s\"" msgstr "успадкування від секціонованої таблиці \"%s\" не допускається" -#: commands/tablecmds.c:2435 +#: commands/tablecmds.c:2432 #, c-format msgid "cannot inherit from partition \"%s\"" msgstr "успадкування від розділу \"%s\" не допускається" -#: commands/tablecmds.c:2443 parser/parse_utilcmd.c:2488 -#: parser/parse_utilcmd.c:2630 +#: commands/tablecmds.c:2440 parser/parse_utilcmd.c:2495 +#: parser/parse_utilcmd.c:2637 #, c-format msgid "inherited relation \"%s\" is not a table or foreign table" msgstr "успадковане відношення \"%s\" не є таблицею або сторонньою таблицею" -#: commands/tablecmds.c:2455 +#: commands/tablecmds.c:2452 #, c-format msgid "cannot create a temporary relation as partition of permanent relation \"%s\"" msgstr "створити тимчасове відношення як секцію постійного відношення\"%s\" не можна" -#: commands/tablecmds.c:2464 commands/tablecmds.c:14357 +#: commands/tablecmds.c:2461 commands/tablecmds.c:14594 #, c-format msgid "cannot inherit from temporary relation \"%s\"" msgstr "тимчасове відношення \"%s\" не може успадковуватись" -#: commands/tablecmds.c:2474 commands/tablecmds.c:14365 +#: commands/tablecmds.c:2471 commands/tablecmds.c:14602 #, c-format msgid "cannot inherit from temporary relation of another session" msgstr "успадкування від тимчасового відношення іншого сеансу неможливе" -#: commands/tablecmds.c:2528 +#: commands/tablecmds.c:2525 #, c-format msgid "merging multiple inherited definitions of column \"%s\"" msgstr "злиття декількох успадкованих визначень стовпця \"%s\"" -#: commands/tablecmds.c:2536 +#: commands/tablecmds.c:2533 #, c-format msgid "inherited column \"%s\" has a type conflict" msgstr "конфлікт типів в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:2538 commands/tablecmds.c:2561 -#: commands/tablecmds.c:2578 commands/tablecmds.c:2834 -#: commands/tablecmds.c:2864 commands/tablecmds.c:2878 -#: 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 +#: commands/tablecmds.c:2535 commands/tablecmds.c:2558 +#: commands/tablecmds.c:2575 commands/tablecmds.c:2831 +#: commands/tablecmds.c:2861 commands/tablecmds.c:2875 +#: parser/parse_coerce.c:2192 parser/parse_coerce.c:2212 +#: parser/parse_coerce.c:2232 parser/parse_coerce.c:2253 +#: parser/parse_coerce.c:2308 parser/parse_coerce.c:2342 +#: parser/parse_coerce.c:2418 parser/parse_coerce.c:2449 +#: parser/parse_coerce.c:2488 parser/parse_coerce.c:2555 #: parser/parse_param.c:227 #, c-format msgid "%s versus %s" msgstr "%s проти %s" -#: commands/tablecmds.c:2547 +#: commands/tablecmds.c:2544 #, c-format msgid "inherited column \"%s\" has a collation conflict" msgstr "конфлікт правил сортування в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:2549 commands/tablecmds.c:2846 -#: commands/tablecmds.c:6614 +#: commands/tablecmds.c:2546 commands/tablecmds.c:2843 +#: commands/tablecmds.c:6665 #, c-format msgid "\"%s\" versus \"%s\"" msgstr "\"%s\" проти \"%s\"" -#: commands/tablecmds.c:2559 +#: commands/tablecmds.c:2556 #, c-format msgid "inherited column \"%s\" has a storage parameter conflict" msgstr "конфлікт параметрів зберігання в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:2576 commands/tablecmds.c:2876 +#: commands/tablecmds.c:2573 commands/tablecmds.c:2873 #, c-format msgid "column \"%s\" has a compression method conflict" msgstr "конфлікт методів стиснення в стовпці \"%s\"" -#: commands/tablecmds.c:2591 +#: commands/tablecmds.c:2588 #, c-format msgid "inherited column \"%s\" has a generation conflict" msgstr "конфлікт генерування в успадкованому стовпці \"%s\"" -#: commands/tablecmds.c:2685 commands/tablecmds.c:2740 -#: commands/tablecmds.c:11941 parser/parse_utilcmd.c:1302 -#: parser/parse_utilcmd.c:1345 parser/parse_utilcmd.c:1753 -#: parser/parse_utilcmd.c:1861 +#: commands/tablecmds.c:2682 commands/tablecmds.c:2737 +#: commands/tablecmds.c:12134 parser/parse_utilcmd.c:1260 +#: parser/parse_utilcmd.c:1303 parser/parse_utilcmd.c:1749 +#: parser/parse_utilcmd.c:1857 #, c-format msgid "cannot convert whole-row table reference" msgstr "перетворити посилання на тип усього рядка таблиці не можна" -#: commands/tablecmds.c:2686 parser/parse_utilcmd.c:1303 +#: commands/tablecmds.c:2683 parser/parse_utilcmd.c:1261 #, c-format msgid "Generation expression for column \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Вираз генерації для стовпця \"%s\" містить посилання на весь рядок на таблицю \"%s\"." -#: commands/tablecmds.c:2741 parser/parse_utilcmd.c:1346 +#: commands/tablecmds.c:2738 parser/parse_utilcmd.c:1304 #, c-format msgid "Constraint \"%s\" contains a whole-row reference to table \"%s\"." msgstr "Обмеження \"%s\" посилається на тип усього рядка в таблиці \"%s\"." -#: commands/tablecmds.c:2820 +#: commands/tablecmds.c:2817 #, c-format msgid "merging column \"%s\" with inherited definition" msgstr "злиття стовпця \"%s\" з успадкованим визначенням" -#: commands/tablecmds.c:2824 +#: commands/tablecmds.c:2821 #, c-format msgid "moving and merging column \"%s\" with inherited definition" msgstr "переміщення і злиття стовпця \"%s\" з успадкованим визначенням" -#: commands/tablecmds.c:2825 +#: commands/tablecmds.c:2822 #, c-format msgid "User-specified column moved to the position of the inherited column." msgstr "Визначений користувачем стовпець переміщений в позицію успадкованого стовпця." -#: commands/tablecmds.c:2832 +#: commands/tablecmds.c:2829 #, c-format msgid "column \"%s\" has a type conflict" msgstr "конфлікт типів в стовпці \"%s\"" -#: commands/tablecmds.c:2844 +#: commands/tablecmds.c:2841 #, c-format msgid "column \"%s\" has a collation conflict" msgstr "конфлікт правил сортування в стовпці \"%s\"" -#: commands/tablecmds.c:2862 +#: commands/tablecmds.c:2859 #, c-format msgid "column \"%s\" has a storage parameter conflict" msgstr "конфлікт параметрів зберігання в стовпці \"%s\"" -#: commands/tablecmds.c:2903 +#: commands/tablecmds.c:2900 #, c-format msgid "child column \"%s\" specifies generation expression" msgstr "дочірній стовпець \"%s\" визначає вираз генерації" -#: commands/tablecmds.c:2905 +#: commands/tablecmds.c:2902 #, c-format msgid "Omit the generation expression in the definition of the child table column to inherit the generation expression from the parent table." msgstr "Пропустіть вираз генерації у визначенні стовпця дочірьної таблиці щоб успадкувати вираз генерації з батьківської таблиці." -#: commands/tablecmds.c:2909 +#: commands/tablecmds.c:2906 #, c-format msgid "column \"%s\" inherits from generated column but specifies default" msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує за замовчуванням" -#: commands/tablecmds.c:2914 +#: commands/tablecmds.c:2911 #, c-format msgid "column \"%s\" inherits from generated column but specifies identity" msgstr "стовпець \"%s\" успадковується із згенерованого стовпця, але вказує ідентичність" -#: commands/tablecmds.c:3023 +#: commands/tablecmds.c:3020 #, c-format msgid "column \"%s\" inherits conflicting generation expressions" msgstr "стовпець \"%s\" успадковує конфліктуючи вирази генерації" -#: commands/tablecmds.c:3028 +#: commands/tablecmds.c:3025 #, c-format msgid "column \"%s\" inherits conflicting default values" msgstr "стовпець \"%s\" успадковує конфліктні значення за замовчуванням" -#: commands/tablecmds.c:3030 +#: commands/tablecmds.c:3027 #, c-format msgid "To resolve the conflict, specify a default explicitly." msgstr "Для усунення конфлікту вкажіть бажане значення за замовчуванням." -#: commands/tablecmds.c:3076 +#: commands/tablecmds.c:3073 #, c-format msgid "check constraint name \"%s\" appears multiple times but with different expressions" msgstr "ім'я перевірочного обмеження \"%s\" з'являється декілька разів, але з різними виразами" -#: commands/tablecmds.c:3289 +#: commands/tablecmds.c:3298 #, c-format msgid "cannot move temporary tables of other sessions" msgstr "переміщувати тимчасові таблиці інших сеансів не можна" -#: commands/tablecmds.c:3359 +#: commands/tablecmds.c:3371 #, c-format msgid "cannot rename column of typed table" msgstr "перейменувати стовпець типізованої таблиці не можна" -#: commands/tablecmds.c:3378 +#: commands/tablecmds.c:3390 #, c-format msgid "\"%s\" is not a table, view, materialized view, composite type, index, or foreign table" msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання, складений тип, індекс або зовнішня таблиця" -#: commands/tablecmds.c:3472 +#: commands/tablecmds.c:3484 #, c-format msgid "inherited column \"%s\" must be renamed in child tables too" msgstr "успадкований стовпець \"%s\" повинен бути перейменований в дочірніх таблицях також" -#: commands/tablecmds.c:3504 +#: commands/tablecmds.c:3516 #, c-format msgid "cannot rename system column \"%s\"" msgstr "не можна перейменувати системний стовпець \"%s\"" -#: commands/tablecmds.c:3519 +#: commands/tablecmds.c:3531 #, c-format msgid "cannot rename inherited column \"%s\"" msgstr "не можна перейменувати успадкований стовпець \"%s\"" -#: commands/tablecmds.c:3671 +#: commands/tablecmds.c:3683 #, c-format msgid "inherited constraint \"%s\" must be renamed in child tables too" msgstr "успадковане обмеження \"%s\" повинно бути перейменовано в дочірніх таблицях також" -#: commands/tablecmds.c:3678 +#: commands/tablecmds.c:3690 #, c-format msgid "cannot rename inherited constraint \"%s\"" msgstr "не можна перейменувати успадковане обмеження \"%s\"" #. translator: first %s is a SQL command, eg ALTER TABLE -#: commands/tablecmds.c:3976 +#: commands/tablecmds.c:3991 #, 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:3985 +#: commands/tablecmds.c:4000 #, c-format msgid "cannot %s \"%s\" because it has pending trigger events" msgstr "не можна виконати %s \"%s\", тому що з цим об'єктом зв'язані очікуванні події тригерів" -#: commands/tablecmds.c:4453 +#: commands/tablecmds.c:4026 +#, c-format +msgid "cannot alter temporary tables of other sessions" +msgstr "не можна змінювати тимчасові таблиці з інших сеансів" + +#: commands/tablecmds.c:4499 #, c-format msgid "cannot alter partition \"%s\" with an incomplete detach" msgstr "не можна змінити розділ \"%s\" з неповним відключенням" -#: commands/tablecmds.c:4646 commands/tablecmds.c:4661 +#: commands/tablecmds.c:4692 commands/tablecmds.c:4707 #, c-format msgid "cannot change persistence setting twice" msgstr "неможливо двічі змінити параметр стійкості" -#: commands/tablecmds.c:5421 +#: commands/tablecmds.c:5467 #, c-format msgid "cannot rewrite system relation \"%s\"" msgstr "перезаписати системне відношення \"%s\" не можна" -#: commands/tablecmds.c:5427 +#: commands/tablecmds.c:5473 #, c-format msgid "cannot rewrite table \"%s\" used as a catalog table" msgstr "перезаписати таблицю \"%s\", що використовується як таблиця каталогу, не можна" -#: commands/tablecmds.c:5437 +#: commands/tablecmds.c:5485 #, c-format msgid "cannot rewrite temporary tables of other sessions" msgstr "неможливо перезаписати тимчасові таблиці інших сеансів" -#: commands/tablecmds.c:5898 +#: commands/tablecmds.c:5946 #, c-format msgid "column \"%s\" of relation \"%s\" contains null values" msgstr "стовпець \"%s\" відношення \"%s\" містить null значення" -#: commands/tablecmds.c:5915 +#: commands/tablecmds.c:5963 #, c-format msgid "check constraint \"%s\" of relation \"%s\" is violated by some row" msgstr "перевірка обмеження \"%s\" відношення \"%s\" порушується деяким рядком" -#: commands/tablecmds.c:5934 partitioning/partbounds.c:3292 +#: commands/tablecmds.c:5982 partitioning/partbounds.c:3292 #, c-format msgid "updated partition constraint for default partition \"%s\" would be violated by some row" msgstr "оновлене обмеження секції для секції за замовчуванням \"%s\" буде порушено деякими рядками" -#: commands/tablecmds.c:5940 +#: commands/tablecmds.c:5988 #, c-format msgid "partition constraint of relation \"%s\" is violated by some row" msgstr "обмеження секції відношення \"%s\" порушується деяким рядком" -#: commands/tablecmds.c:6088 commands/trigger.c:1283 commands/trigger.c:1389 +#: commands/tablecmds.c:6136 commands/trigger.c:1283 commands/trigger.c:1389 #, c-format msgid "\"%s\" is not a table, view, or foreign table" msgstr "\"%s\" - не таблиця, подання або зовнішня таблиця" -#: commands/tablecmds.c:6091 +#: commands/tablecmds.c:6139 #, c-format msgid "\"%s\" is not a table, view, materialized view, or index" msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання або індекс" -#: commands/tablecmds.c:6097 +#: commands/tablecmds.c:6145 #, c-format msgid "\"%s\" is not a table, materialized view, or index" msgstr "\"%s\" - не таблиця, матеріалізоване подання або індекс" -#: commands/tablecmds.c:6100 +#: commands/tablecmds.c:6148 #, c-format msgid "\"%s\" is not a table, materialized view, index, or partitioned index" msgstr "\"%s\" - не таблиця, матеріалізоване подання, індекс або секціонований індекс" -#: commands/tablecmds.c:6103 +#: commands/tablecmds.c:6151 #, c-format msgid "\"%s\" is not a table, materialized view, index, partitioned index, or foreign table" msgstr "\"%s\" - не таблиця, матеріалізоване подання, секціонований індекс або зовнішня таблиця" -#: commands/tablecmds.c:6106 +#: commands/tablecmds.c:6154 #, c-format msgid "\"%s\" is not a table, materialized view, or foreign table" msgstr "\"%s\" - не таблиця, матеріалізоване подання або зовнішня таблиця" -#: commands/tablecmds.c:6109 +#: commands/tablecmds.c:6157 #, c-format msgid "\"%s\" is not a table or foreign table" msgstr "\"%s\" - не таблиця або зовнішня таблиця" -#: commands/tablecmds.c:6112 +#: commands/tablecmds.c:6160 #, c-format msgid "\"%s\" is not a table, composite type, or foreign table" msgstr "\"%s\" - не таблиця, складений тип або зовнішня таблиця" -#: commands/tablecmds.c:6115 +#: commands/tablecmds.c:6163 #, c-format msgid "\"%s\" is not a table, materialized view, index, or foreign table" msgstr "\"%s\" - не таблиця, матеріалізоване подання, індекс або зовнішня таблиця" -#: commands/tablecmds.c:6118 +#: commands/tablecmds.c:6166 #, c-format msgid "\"%s\" is not a table or partitioned index" msgstr "\"%s\" не є таблицею або секціонованим індексом" -#: commands/tablecmds.c:6128 +#: commands/tablecmds.c:6176 #, c-format msgid "\"%s\" is of the wrong type" msgstr "\"%s\" - неправильний тип" -#: commands/tablecmds.c:6372 commands/tablecmds.c:6379 +#: commands/tablecmds.c:6420 commands/tablecmds.c:6427 #, c-format msgid "cannot alter type \"%s\" because column \"%s.%s\" uses it" msgstr "неможливо змінити тип \"%s\", тому що стовпець \"%s.%s\" використовує його" -#: commands/tablecmds.c:6386 +#: commands/tablecmds.c:6434 #, c-format msgid "cannot alter foreign table \"%s\" because column \"%s.%s\" uses its row type" msgstr "неможливо змінити сторонню таблицю \"%s\", тому що стовпець \"%s.%s\" використовує тип її рядка" -#: commands/tablecmds.c:6393 +#: commands/tablecmds.c:6441 #, c-format msgid "cannot alter table \"%s\" because column \"%s.%s\" uses its row type" msgstr "неможливо змінити таблицю \"%s\", тому що стовпець \"%s.%s\" використовує тип її рядка" -#: commands/tablecmds.c:6449 +#: commands/tablecmds.c:6497 #, c-format msgid "cannot alter type \"%s\" because it is the type of a typed table" msgstr "неможливо змінити тип \"%s\", тому що це тип типізованої таблиці" -#: commands/tablecmds.c:6451 +#: commands/tablecmds.c:6499 #, c-format msgid "Use ALTER ... CASCADE to alter the typed tables too." msgstr "Щоб змінити типізовані таблиці, використайте також ALTER ... CASCADE." -#: commands/tablecmds.c:6497 +#: commands/tablecmds.c:6545 #, c-format msgid "type %s is not a composite type" msgstr "тип %s не є складеним" -#: commands/tablecmds.c:6524 +#: commands/tablecmds.c:6572 #, c-format msgid "cannot add column to typed table" msgstr "неможливо додати стовпець до типізованої таблиці" -#: commands/tablecmds.c:6577 +#: commands/tablecmds.c:6628 #, c-format msgid "cannot add column to a partition" msgstr "неможливо додати стовпець до розділу" -#: commands/tablecmds.c:6606 commands/tablecmds.c:14608 +#: commands/tablecmds.c:6657 commands/tablecmds.c:14845 #, c-format msgid "child table \"%s\" has different type for column \"%s\"" msgstr "дочірня таблиця \"%s\" має інший тип для стовпця \"%s\"" -#: commands/tablecmds.c:6612 commands/tablecmds.c:14615 +#: commands/tablecmds.c:6663 commands/tablecmds.c:14852 #, c-format msgid "child table \"%s\" has different collation for column \"%s\"" msgstr "дочірня таблиця \"%s\" має інше правило сортування для стовпця \"%s\"" -#: commands/tablecmds.c:6626 +#: commands/tablecmds.c:6677 #, c-format msgid "merging definition of column \"%s\" for child \"%s\"" msgstr "об'єднання визначення стовпця \"%s\" для нащадка \"%s\"" -#: commands/tablecmds.c:6669 +#: commands/tablecmds.c:6724 #, c-format msgid "cannot recursively add identity column to table that has child tables" msgstr "неможливо додати стовпець ідентифікації в таблицю, яка має дочірні таблиці" -#: commands/tablecmds.c:6912 +#: commands/tablecmds.c:7000 #, c-format msgid "column must be added to child tables too" msgstr "стовпець також повинен бути доданий до дочірніх таблиць" -#: commands/tablecmds.c:6990 +#: commands/tablecmds.c:7078 #, c-format msgid "column \"%s\" of relation \"%s\" already exists, skipping" msgstr "стовпець \"%s\" відношення \"%s\" вже існує, пропускається" -#: commands/tablecmds.c:6997 +#: commands/tablecmds.c:7085 #, c-format msgid "column \"%s\" of relation \"%s\" already exists" msgstr "стовпець \"%s\" відношення \"%s\" вже існує" -#: commands/tablecmds.c:7063 commands/tablecmds.c:11580 +#: commands/tablecmds.c:7151 commands/tablecmds.c:11762 #, c-format msgid "cannot remove constraint from only the partitioned table when partitions exist" msgstr "неможливо видалити обмеження тільки з секціонованої таблиці, коли існують секції" -#: commands/tablecmds.c:7064 commands/tablecmds.c:7381 -#: commands/tablecmds.c:8404 commands/tablecmds.c:11581 +#: commands/tablecmds.c:7152 commands/tablecmds.c:7469 +#: commands/tablecmds.c:8496 commands/tablecmds.c:11763 #, c-format msgid "Do not specify the ONLY keyword." msgstr "Не вказуйте ключове слово ONLY." -#: commands/tablecmds.c:7101 commands/tablecmds.c:7307 -#: commands/tablecmds.c:7449 commands/tablecmds.c:7563 -#: commands/tablecmds.c:7657 commands/tablecmds.c:7716 -#: commands/tablecmds.c:7834 commands/tablecmds.c:8000 -#: commands/tablecmds.c:8070 commands/tablecmds.c:8226 -#: commands/tablecmds.c:11735 commands/tablecmds.c:13219 -#: commands/tablecmds.c:15765 +#: commands/tablecmds.c:7189 commands/tablecmds.c:7395 +#: commands/tablecmds.c:7537 commands/tablecmds.c:7651 +#: commands/tablecmds.c:7745 commands/tablecmds.c:7804 +#: commands/tablecmds.c:7922 commands/tablecmds.c:8088 +#: commands/tablecmds.c:8158 commands/tablecmds.c:8314 +#: commands/tablecmds.c:11917 commands/tablecmds.c:13455 +#: commands/tablecmds.c:16002 #, c-format msgid "cannot alter system column \"%s\"" msgstr "не можна змінити системний стовпець \"%s\"" -#: commands/tablecmds.c:7107 commands/tablecmds.c:7455 +#: commands/tablecmds.c:7195 commands/tablecmds.c:7543 #, c-format msgid "column \"%s\" of relation \"%s\" is an identity column" msgstr "стовпець \"%s\" відношення \"%s\" є стовпцем ідентифікації" -#: commands/tablecmds.c:7150 +#: commands/tablecmds.c:7238 #, c-format msgid "column \"%s\" is in a primary key" msgstr "стовпець \"%s\" входить до первинного ключа" -#: commands/tablecmds.c:7155 +#: commands/tablecmds.c:7243 #, c-format msgid "column \"%s\" is in index used as replica identity" msgstr "стовпець \"%s\" в індексі, що використовується як ідентифікація репліки" -#: commands/tablecmds.c:7178 +#: commands/tablecmds.c:7266 #, c-format msgid "column \"%s\" is marked NOT NULL in parent table" msgstr "стовпець \"%s\" в батьківській таблиці позначений як NOT NULL" -#: commands/tablecmds.c:7378 commands/tablecmds.c:8887 +#: commands/tablecmds.c:7466 commands/tablecmds.c:8979 #, c-format msgid "constraint must be added to child tables too" msgstr "обмеження повинно бути додано у дочірні таблиці також" -#: commands/tablecmds.c:7379 +#: commands/tablecmds.c:7467 #, c-format msgid "Column \"%s\" of relation \"%s\" is not already NOT NULL." msgstr "Стовпець \"%s\" відношення \"%s\" вже не NOT NULL." -#: commands/tablecmds.c:7457 +#: commands/tablecmds.c:7545 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead." msgstr "Замість цього використайте ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY." -#: commands/tablecmds.c:7462 +#: commands/tablecmds.c:7550 #, c-format msgid "column \"%s\" of relation \"%s\" is a generated column" msgstr "стовпець \"%s\" відношення \"%s\" є згенерованим стовпцем" -#: commands/tablecmds.c:7465 +#: commands/tablecmds.c:7553 #, c-format msgid "Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead." -msgstr "Замість цього використайте ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION" +msgstr "Замість цього використайте ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION." -#: commands/tablecmds.c:7574 +#: commands/tablecmds.c:7662 #, 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:7580 +#: commands/tablecmds.c:7668 #, c-format msgid "column \"%s\" of relation \"%s\" is already an identity column" msgstr "стовпець \"%s\" відношення \"%s\" вже є стовпцем ідентифікації" -#: commands/tablecmds.c:7586 +#: commands/tablecmds.c:7674 #, c-format msgid "column \"%s\" of relation \"%s\" already has a default value" msgstr "стовпець \"%s\" відношення \"%s\" вже має значення за замовчуванням" -#: commands/tablecmds.c:7663 commands/tablecmds.c:7724 +#: commands/tablecmds.c:7751 commands/tablecmds.c:7812 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column" msgstr "стовпець \"%s\" відношення \"%s\" не є стовпцем ідентифікації" -#: commands/tablecmds.c:7729 +#: commands/tablecmds.c:7817 #, c-format msgid "column \"%s\" of relation \"%s\" is not an identity column, skipping" msgstr "стовпець \"%s\" відношення \"%s\" не є стовпцем ідентифікації, пропускається" -#: commands/tablecmds.c:7782 +#: commands/tablecmds.c:7870 #, c-format msgid "ALTER TABLE / DROP EXPRESSION must be applied to child tables too" msgstr "ALTER TABLE / DROP EXPRESSION повинен бути застосований і до дочірніх таблиць" -#: commands/tablecmds.c:7804 +#: commands/tablecmds.c:7892 #, c-format msgid "cannot drop generation expression from inherited column" msgstr "не можна видалити вираз генерації з успадкованого стовпця" -#: commands/tablecmds.c:7842 +#: commands/tablecmds.c:7930 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column" msgstr "стовпець \"%s\" відношення \"%s\" не є збереженим згенерованим стовпцем" -#: commands/tablecmds.c:7847 +#: commands/tablecmds.c:7935 #, c-format msgid "column \"%s\" of relation \"%s\" is not a stored generated column, skipping" msgstr "стовпець \"%s\" відношення \"%s\" не є збереженим згенерованим стовпцем, пропускається" -#: commands/tablecmds.c:7947 +#: commands/tablecmds.c:8035 #, c-format msgid "cannot refer to non-index column by number" msgstr "не можна посилатись на неіндексований стовпець за номером" -#: commands/tablecmds.c:7990 +#: commands/tablecmds.c:8078 #, c-format msgid "column number %d of relation \"%s\" does not exist" msgstr "стовпець з номером %d відношення %s не існує" -#: commands/tablecmds.c:8009 +#: commands/tablecmds.c:8097 #, c-format msgid "cannot alter statistics on included column \"%s\" of index \"%s\"" msgstr "змінити статистику включеного стовпця \"%s\" індексу \"%s\" не можна" -#: commands/tablecmds.c:8014 +#: commands/tablecmds.c:8102 #, c-format msgid "cannot alter statistics on non-expression column \"%s\" of index \"%s\"" msgstr "змінити статистику невираженого стовпця \"%s\" індексу \"%s\" не можна" -#: commands/tablecmds.c:8016 +#: commands/tablecmds.c:8104 #, c-format msgid "Alter statistics on table column instead." msgstr "Замість цього змініть статистику стовпця в таблиці." -#: commands/tablecmds.c:8206 +#: commands/tablecmds.c:8294 #, c-format msgid "invalid storage type \"%s\"" msgstr "неприпустимий тип сховища \"%s\"" -#: commands/tablecmds.c:8238 +#: commands/tablecmds.c:8326 #, c-format msgid "column data type %s can only have storage PLAIN" msgstr "тип даних стовпця %s може мати тільки сховище PLAIN" -#: commands/tablecmds.c:8283 +#: commands/tablecmds.c:8371 #, c-format msgid "cannot drop column from typed table" msgstr "не можна видалити стовпець з типізованої таблиці" -#: commands/tablecmds.c:8342 +#: commands/tablecmds.c:8434 #, c-format msgid "column \"%s\" of relation \"%s\" does not exist, skipping" msgstr "стовпець \"%s\" відношення \"%s\" не існує, пропускається" -#: commands/tablecmds.c:8355 +#: commands/tablecmds.c:8447 #, c-format msgid "cannot drop system column \"%s\"" msgstr "не можна видалити системний стовпець \"%s\"" -#: commands/tablecmds.c:8365 +#: commands/tablecmds.c:8457 #, c-format msgid "cannot drop inherited column \"%s\"" msgstr "не можна видалити успадкований стовпець \"%s\"" -#: commands/tablecmds.c:8378 +#: commands/tablecmds.c:8470 #, c-format msgid "cannot drop column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "не можна видалити стовпець \"%s\", тому що він є частиною ключа секції відношення \"%s\"" -#: commands/tablecmds.c:8403 +#: commands/tablecmds.c:8495 #, c-format msgid "cannot drop column from only the partitioned table when partitions exist" msgstr "видалити стовпець тільки з секціонованої таблиці, коли існують секції, не можна" -#: commands/tablecmds.c:8607 +#: commands/tablecmds.c:8699 #, 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:8632 +#: commands/tablecmds.c:8724 #, 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:8967 +#: commands/tablecmds.c:9059 #, c-format msgid "cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "не можна використати ONLY для стороннього ключа в секціонованій таблиці \"%s\", який посилається на відношення \"%s\"" -#: commands/tablecmds.c:8973 +#: commands/tablecmds.c:9065 #, c-format msgid "cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"" msgstr "не можна додати сторонній ключ з характеристикою NOT VALID в секціоновану таблицю \"%s\", який посилається на відношення \"%s\"" -#: commands/tablecmds.c:8976 +#: commands/tablecmds.c:9068 #, c-format msgid "This feature is not yet supported on partitioned tables." msgstr "Ця функція ще не підтримується з секціонованими таблицями." -#: commands/tablecmds.c:8983 commands/tablecmds.c:9388 +#: commands/tablecmds.c:9075 commands/tablecmds.c:9480 #, c-format msgid "referenced relation \"%s\" is not a table" msgstr "вказане відношення \"%s\" не є таблицею" -#: commands/tablecmds.c:9006 +#: commands/tablecmds.c:9098 #, c-format msgid "constraints on permanent tables may reference only permanent tables" msgstr "обмеження в постійних таблицях можуть посилатись лише на постійні таблиці" -#: commands/tablecmds.c:9013 +#: commands/tablecmds.c:9105 #, c-format msgid "constraints on unlogged tables may reference only permanent or unlogged tables" msgstr "обмеження в нежурнальованих таблицях можуть посилатись тільки на постійні або нежурналюємі таблиці" -#: commands/tablecmds.c:9019 +#: commands/tablecmds.c:9111 #, c-format msgid "constraints on temporary tables may reference only temporary tables" msgstr "обмеження в тимчасових таблицях можуть посилатись лише на тимчасові таблиці" -#: commands/tablecmds.c:9023 +#: commands/tablecmds.c:9115 #, c-format msgid "constraints on temporary tables must involve temporary tables of this session" msgstr "обмеження в тимчасових таблицях повинні посилатись лише на тичасові таблиці поточного сеансу" -#: commands/tablecmds.c:9089 commands/tablecmds.c:9095 +#: commands/tablecmds.c:9181 commands/tablecmds.c:9187 #, c-format msgid "invalid %s action for foreign key constraint containing generated column" msgstr "неприпустима дія %s для обмеження зовнішнього ключа, який містить згеренований стовпець" -#: commands/tablecmds.c:9111 +#: commands/tablecmds.c:9203 #, c-format msgid "number of referencing and referenced columns for foreign key disagree" msgstr "число стовпців в джерелі і призначенні зовнішнього ключа не збігається" -#: commands/tablecmds.c:9218 +#: commands/tablecmds.c:9310 #, c-format msgid "foreign key constraint \"%s\" cannot be implemented" msgstr "обмеження зовнішнього ключа \"%s\" не можна реалізувати" -#: commands/tablecmds.c:9220 +#: commands/tablecmds.c:9312 #, c-format msgid "Key columns \"%s\" and \"%s\" are of incompatible types: %s and %s." msgstr "Стовпці ключа \"%s\" і \"%s\" містять несумісні типи: %s і %s." -#: commands/tablecmds.c:9583 commands/tablecmds.c:9996 -#: parser/parse_utilcmd.c:797 parser/parse_utilcmd.c:926 +#: commands/tablecmds.c:9675 commands/tablecmds.c:10092 +#: parser/parse_utilcmd.c:791 parser/parse_utilcmd.c:920 #, c-format msgid "foreign key constraints are not supported on foreign tables" msgstr "обмеження зовнішнього ключа для сторонніх таблиць не підтримуються" -#: commands/tablecmds.c:10373 commands/tablecmds.c:10651 -#: commands/tablecmds.c:11537 commands/tablecmds.c:11612 +#: commands/tablecmds.c:10075 +#, c-format +msgid "cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"" +msgstr "не можна підключити таблицю \"%s\" в якості секції, тому що на неї посилається сторонній ключ \"%s\"" + +#: commands/tablecmds.c:10545 commands/tablecmds.c:10826 +#: commands/tablecmds.c:11719 commands/tablecmds.c:11794 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist" msgstr "обмеження \"%s\" відношення \"%s\" не існує" -#: commands/tablecmds.c:10380 +#: commands/tablecmds.c:10552 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key constraint" msgstr "обмеження \"%s\" відношення \"%s\" не є обмеженням зовнішнього ключа" -#: commands/tablecmds.c:10418 +#: commands/tablecmds.c:10590 #, c-format msgid "cannot alter constraint \"%s\" on relation \"%s\"" msgstr "неможливо змінити обмеження \"%s\" відношення \"%s\"" -#: commands/tablecmds.c:10421 +#: commands/tablecmds.c:10593 #, c-format msgid "Constraint \"%s\" is derived from constraint \"%s\" of relation \"%s\"." msgstr "Обмеження \"%s\" походить з обмеження \"%s\" відношення \"%s\"." -#: commands/tablecmds.c:10423 +#: commands/tablecmds.c:10595 #, c-format msgid "You may alter the constraint it derives from, instead." msgstr "Натомість ви можете змінити початкове обмеження." -#: commands/tablecmds.c:10659 +#: commands/tablecmds.c:10834 #, c-format msgid "constraint \"%s\" of relation \"%s\" is not a foreign key or check constraint" msgstr "обмеження \"%s\" відношення \"%s\" не є зовнішнім ключем або перевіркою обмеженням " -#: commands/tablecmds.c:10737 +#: commands/tablecmds.c:10912 #, c-format msgid "constraint must be validated on child tables too" msgstr "обмеження повинно дотримуватися в дочірніх таблицях також" -#: commands/tablecmds.c:10827 +#: commands/tablecmds.c:11002 #, c-format msgid "column \"%s\" referenced in foreign key constraint does not exist" msgstr "стовпець \"%s\", вказаний в обмеженні зовнішнього ключа, не існує" -#: commands/tablecmds.c:10833 +#: commands/tablecmds.c:11008 #, c-format msgid "system columns cannot be used in foreign keys" msgstr "в зовнішніх ключах не можна використовувати системні стовпці" -#: commands/tablecmds.c:10837 +#: commands/tablecmds.c:11012 #, c-format msgid "cannot have more than %d keys in a foreign key" msgstr "у зовнішньому ключі не може бути більш ніж %d ключів" -#: commands/tablecmds.c:10902 +#: commands/tablecmds.c:11077 #, c-format msgid "cannot use a deferrable primary key for referenced table \"%s\"" msgstr "використовувати затримуваний первинний ключ в цільовій зовнішній таблиці \"%s\" не можна" -#: commands/tablecmds.c:10919 +#: commands/tablecmds.c:11094 #, c-format msgid "there is no primary key for referenced table \"%s\"" msgstr "у цільовій зовнішній таблиці \"%s\" немає первинного ключа" -#: commands/tablecmds.c:10984 +#: commands/tablecmds.c:11163 #, c-format msgid "foreign key referenced-columns list must not contain duplicates" msgstr "у списку стовпців зовнішнього ключа не повинно бути повторень" -#: commands/tablecmds.c:11078 +#: commands/tablecmds.c:11257 #, c-format msgid "cannot use a deferrable unique constraint for referenced table \"%s\"" msgstr "використовувати затримане обмеження унікальності в цільовій зовнішній таблиці \"%s\" не можна" -#: commands/tablecmds.c:11083 +#: commands/tablecmds.c:11262 #, c-format msgid "there is no unique constraint matching given keys for referenced table \"%s\"" msgstr "у цільовій зовнішній таблиці \"%s\" немає обмеження унікальності, відповідного даним ключам" -#: commands/tablecmds.c:11493 +#: commands/tablecmds.c:11675 #, c-format msgid "cannot drop inherited constraint \"%s\" of relation \"%s\"" msgstr "видалити успадковане обмеження \"%s\" відношення \"%s\" не можна" -#: commands/tablecmds.c:11543 +#: commands/tablecmds.c:11725 #, c-format msgid "constraint \"%s\" of relation \"%s\" does not exist, skipping" msgstr "обмеження \"%s\" відношення \"%s\" не існує, пропускається" -#: commands/tablecmds.c:11719 +#: commands/tablecmds.c:11901 #, c-format msgid "cannot alter column type of typed table" msgstr "змінити тип стовпця в типізованій таблиці не можна" -#: commands/tablecmds.c:11746 +#: commands/tablecmds.c:11927 +#, c-format +msgid "cannot specify USING when altering type of generated column" +msgstr "не можна вказати USING під час зміни типу згенерованого стовпця" + +#: commands/tablecmds.c:11938 #, c-format msgid "cannot alter inherited column \"%s\"" msgstr "змінити успадкований стовпець \"%s\" не можна" -#: commands/tablecmds.c:11755 +#: commands/tablecmds.c:11947 #, c-format msgid "cannot alter column \"%s\" because it is part of the partition key of relation \"%s\"" msgstr "не можна змінити стовпець \"%s\", тому що він є частиною ключа секції відношення \"%s\"" -#: commands/tablecmds.c:11805 +#: commands/tablecmds.c:11997 #, c-format msgid "result of USING clause for column \"%s\" cannot be cast automatically to type %s" msgstr "результати речення USING для стовпця \"%s\" не можна автоматично наведено для типу %s" -#: commands/tablecmds.c:11808 +#: commands/tablecmds.c:12000 #, c-format msgid "You might need to add an explicit cast." msgstr "Можливо, необхідно додати явне приведення типу." -#: commands/tablecmds.c:11812 +#: commands/tablecmds.c:12004 #, 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:11815 +#: commands/tablecmds.c:12008 #, c-format msgid "You might need to specify \"USING %s::%s\"." msgstr "Можливо, необхідно вказати \"USING %s::%s\"." -#: commands/tablecmds.c:11914 +#: commands/tablecmds.c:12107 #, c-format msgid "cannot alter inherited column \"%s\" of relation \"%s\"" msgstr "не можна змінити успадкований стовпець \"%s\" відношення \"%s\"" -#: commands/tablecmds.c:11942 +#: commands/tablecmds.c:12135 #, c-format msgid "USING expression contains a whole-row table reference." msgstr "Вираз USING містить посилання на тип усього рядка таблиці." -#: commands/tablecmds.c:11953 +#: commands/tablecmds.c:12146 #, c-format msgid "type of inherited column \"%s\" must be changed in child tables too" msgstr "тип успадкованого стовпця \"%s\" повинен бути змінений і в дочірніх таблицях" -#: commands/tablecmds.c:12078 +#: commands/tablecmds.c:12271 #, c-format msgid "cannot alter type of column \"%s\" twice" msgstr "не можна змінити тип стовпця \"%s\" двічі" -#: commands/tablecmds.c:12116 +#: commands/tablecmds.c:12309 #, c-format msgid "generation expression for column \"%s\" cannot be cast automatically to type %s" msgstr "вираз генерації для стовпця \"%s\" не можна автоматично привести до типу %s" -#: commands/tablecmds.c:12121 +#: commands/tablecmds.c:12314 #, c-format msgid "default for column \"%s\" cannot be cast automatically to type %s" msgstr "значення за замовчуванням для стовпця \"%s\" не можна автоматично привести до типу %s" -#: commands/tablecmds.c:12199 +#: commands/tablecmds.c:12392 #, c-format msgid "cannot alter type of a column used by a generated column" msgstr "змінити тип стовпця, який використовується згенерованим стовпцем, не можна" -#: commands/tablecmds.c:12200 +#: commands/tablecmds.c:12393 #, c-format msgid "Column \"%s\" is used by generated column \"%s\"." msgstr "Стовпець \"%s\" використовується згенерованим стовпцем \"%s\"." -#: commands/tablecmds.c:12221 +#: commands/tablecmds.c:12421 #, 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:12222 commands/tablecmds.c:12241 -#: commands/tablecmds.c:12259 +#: commands/tablecmds.c:12422 commands/tablecmds.c:12436 +#: commands/tablecmds.c:12455 commands/tablecmds.c:12473 #, c-format msgid "%s depends on column \"%s\"" msgstr "%s залежить від стовпця \"%s\"" -#: commands/tablecmds.c:12240 +#: commands/tablecmds.c:12435 +#, c-format +msgid "cannot alter type of a column used by a view or rule" +msgstr "змінити тип стовпця, залученого в поданні або правилі, не можна" + +#: commands/tablecmds.c:12454 #, c-format msgid "cannot alter type of a column used in a trigger definition" msgstr "неможливо змінити тип стовпця, що використовується у визначенні тригеру" -#: commands/tablecmds.c:12258 +#: commands/tablecmds.c:12472 #, c-format msgid "cannot alter type of a column used in a policy definition" msgstr "неможливо змінити тип стовпця, що використовується у визначенні політики" -#: commands/tablecmds.c:13327 commands/tablecmds.c:13339 +#: commands/tablecmds.c:13563 commands/tablecmds.c:13575 #, c-format msgid "cannot change owner of index \"%s\"" msgstr "неможливо змінити власника індексу \"%s\"" -#: commands/tablecmds.c:13329 commands/tablecmds.c:13341 +#: commands/tablecmds.c:13565 commands/tablecmds.c:13577 #, c-format msgid "Change the ownership of the index's table, instead." msgstr "Замість цього змініть власника таблиці, що містить цей індекс." -#: commands/tablecmds.c:13355 +#: commands/tablecmds.c:13591 #, c-format msgid "cannot change owner of sequence \"%s\"" msgstr "неможливо змінити власника послідовності \"%s\"" -#: commands/tablecmds.c:13369 commands/tablecmds.c:16665 +#: commands/tablecmds.c:13605 commands/tablecmds.c:16904 #, c-format msgid "Use ALTER TYPE instead." msgstr "Замість цього використайте ALTER TYPE." -#: commands/tablecmds.c:13378 +#: commands/tablecmds.c:13614 #, c-format msgid "\"%s\" is not a table, view, sequence, or foreign table" msgstr "\"%s\" - не таблиця, подання, послідовність або зовнішня таблиця" -#: commands/tablecmds.c:13717 +#: commands/tablecmds.c:13953 #, c-format msgid "cannot have multiple SET TABLESPACE subcommands" msgstr "в одній інструкції не може бути декілька підкоманд SET TABLESPACE" -#: commands/tablecmds.c:13794 +#: commands/tablecmds.c:14030 #, c-format msgid "\"%s\" is not a table, view, materialized view, index, or TOAST table" msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання, індекс або TOAST-таблиця" -#: commands/tablecmds.c:13827 commands/view.c:505 +#: commands/tablecmds.c:14063 commands/view.c:505 #, c-format msgid "WITH CHECK OPTION is supported only on automatically updatable views" msgstr "WITH CHECK OPTION підтримується лише з автооновлюваними поданнями" -#: commands/tablecmds.c:14079 +#: commands/tablecmds.c:14316 #, c-format msgid "only tables, indexes, and materialized views exist in tablespaces" msgstr "у табличних просторах існують лише таблиці, індекси та матеріалізовані подання" -#: commands/tablecmds.c:14091 +#: commands/tablecmds.c:14328 #, c-format msgid "cannot move relations in to or out of pg_global tablespace" msgstr "переміщувати відношення у або з табличного простору pg_global не можна" -#: commands/tablecmds.c:14183 +#: commands/tablecmds.c:14420 #, c-format msgid "aborting because lock on relation \"%s.%s\" is not available" msgstr "переривання через блокування відношення \"%s.%s\" неможливе" -#: commands/tablecmds.c:14199 +#: commands/tablecmds.c:14436 #, c-format msgid "no matching relations in tablespace \"%s\" found" msgstr " табличному просторі \"%s\" не знайдені відповідні відносини" -#: commands/tablecmds.c:14316 +#: commands/tablecmds.c:14553 #, c-format msgid "cannot change inheritance of typed table" msgstr "змінити успадкування типізованої таблиці не можна" -#: commands/tablecmds.c:14321 commands/tablecmds.c:14877 +#: commands/tablecmds.c:14558 commands/tablecmds.c:15114 #, c-format msgid "cannot change inheritance of a partition" msgstr "змінити успадкування секції не можна" -#: commands/tablecmds.c:14326 +#: commands/tablecmds.c:14563 #, c-format msgid "cannot change inheritance of partitioned table" msgstr "змінити успадкування секціонованої таблиці не можна" -#: commands/tablecmds.c:14372 +#: commands/tablecmds.c:14609 #, c-format msgid "cannot inherit to temporary relation of another session" msgstr "успадкування для тимчасового відношення іншого сеансу не можливе" -#: commands/tablecmds.c:14385 +#: commands/tablecmds.c:14622 #, c-format msgid "cannot inherit from a partition" msgstr "успадкування від секції неможливе" -#: commands/tablecmds.c:14407 commands/tablecmds.c:17311 +#: commands/tablecmds.c:14644 commands/tablecmds.c:17560 #, c-format msgid "circular inheritance not allowed" msgstr "циклічне успадкування неприпустиме" -#: commands/tablecmds.c:14408 commands/tablecmds.c:17312 +#: commands/tablecmds.c:14645 commands/tablecmds.c:17561 #, c-format msgid "\"%s\" is already a child of \"%s\"." msgstr "\"%s\" вже є нащадком \"%s\"." -#: commands/tablecmds.c:14421 +#: commands/tablecmds.c:14658 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming an inheritance child" msgstr "тригер \"%s\" не дозволяє таблиці \"%s\" стати нащадком успадкування" -#: commands/tablecmds.c:14423 +#: commands/tablecmds.c:14660 #, c-format msgid "ROW triggers with transition tables are not supported in inheritance hierarchies." msgstr "Тригери ROW з перехідними таблицями не підтримуються в ієрархіях успадкування." -#: commands/tablecmds.c:14626 +#: commands/tablecmds.c:14863 #, c-format msgid "column \"%s\" in child table must be marked NOT NULL" msgstr "стовпець \"%s\" в дочірній таблиці має бути позначений як NOT NULL" -#: commands/tablecmds.c:14635 +#: commands/tablecmds.c:14872 #, c-format msgid "column \"%s\" in child table must be a generated column" msgstr "стовпець \"%s\" у дочірній таблиці повинен бути згенерованим стовпцем" -#: commands/tablecmds.c:14685 +#: commands/tablecmds.c:14922 #, c-format msgid "column \"%s\" in child table has a conflicting generation expression" msgstr "стовпець \"%s\" в дочірній таблиці містить конфліктний вираз генерування" -#: commands/tablecmds.c:14713 +#: commands/tablecmds.c:14950 #, c-format msgid "child table is missing column \"%s\"" msgstr "у дочірній таблиці не вистачає стовпця \"%s\"" -#: commands/tablecmds.c:14801 +#: commands/tablecmds.c:15038 #, c-format msgid "child table \"%s\" has different definition for check constraint \"%s\"" msgstr "дочірня таблиця \"%s\" має інше визначення перевірочного обмеження \"%s\"" -#: commands/tablecmds.c:14809 +#: commands/tablecmds.c:15046 #, c-format msgid "constraint \"%s\" conflicts with non-inherited constraint on child table \"%s\"" msgstr "обмеження \"%s\" конфліктує з неуспадкованим обмеженням дочірньої таблиці \"%s\"" -#: commands/tablecmds.c:14820 +#: commands/tablecmds.c:15057 #, c-format msgid "constraint \"%s\" conflicts with NOT VALID constraint on child table \"%s\"" msgstr "обмеження \"%s\" конфліктує з NOT VALID обмеженням дочірньої таблиці \"%s\"" -#: commands/tablecmds.c:14855 +#: commands/tablecmds.c:15092 #, c-format msgid "child table is missing constraint \"%s\"" msgstr "у дочірній таблиці не вистачає обмеження \"%s\"" -#: commands/tablecmds.c:14941 +#: commands/tablecmds.c:15178 #, c-format msgid "partition \"%s\" already pending detach in partitioned table \"%s.%s\"" msgstr "розділ \"%s\" вже очікує відключення в секціонованій таблиці \"%s.%s\"" -#: commands/tablecmds.c:14970 commands/tablecmds.c:15018 +#: commands/tablecmds.c:15207 commands/tablecmds.c:15255 #, c-format msgid "relation \"%s\" is not a partition of relation \"%s\"" msgstr "відношення \"%s\" не є секцією відношення \"%s\"" -#: commands/tablecmds.c:15024 +#: commands/tablecmds.c:15261 #, c-format msgid "relation \"%s\" is not a parent of relation \"%s\"" msgstr "відношення \"%s\" не є предком відношення \"%s\"" -#: commands/tablecmds.c:15252 +#: commands/tablecmds.c:15489 #, c-format msgid "typed tables cannot inherit" msgstr "типізовані таблиці не можуть успадковуватись" -#: commands/tablecmds.c:15282 +#: commands/tablecmds.c:15519 #, c-format msgid "table is missing column \"%s\"" msgstr "у таблиці не вистачає стовпця \"%s\"" -#: commands/tablecmds.c:15293 +#: commands/tablecmds.c:15530 #, c-format msgid "table has column \"%s\" where type requires \"%s\"" msgstr "таблиця містить стовпець \"%s\", а тип потребує \"%s\"" -#: commands/tablecmds.c:15302 +#: commands/tablecmds.c:15539 #, c-format msgid "table \"%s\" has different type for column \"%s\"" msgstr "таблиця \"%s\" містить стовпець \"%s\" іншого типу" -#: commands/tablecmds.c:15316 +#: commands/tablecmds.c:15553 #, c-format msgid "table has extra column \"%s\"" msgstr "таблиця містить зайвий стовпець \"%s\"" -#: commands/tablecmds.c:15368 +#: commands/tablecmds.c:15605 #, c-format msgid "\"%s\" is not a typed table" msgstr "\"%s\" - не типізована таблиця" -#: commands/tablecmds.c:15542 +#: commands/tablecmds.c:15779 #, c-format msgid "cannot use non-unique index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати неунікальний індекс \"%s\"" -#: commands/tablecmds.c:15548 +#: commands/tablecmds.c:15785 #, c-format msgid "cannot use non-immediate index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати небезпосередній індекс \"%s\"" -#: commands/tablecmds.c:15554 +#: commands/tablecmds.c:15791 #, c-format msgid "cannot use expression index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати індекс з виразом \"%s\"" -#: commands/tablecmds.c:15560 +#: commands/tablecmds.c:15797 #, c-format msgid "cannot use partial index \"%s\" as replica identity" msgstr "для ідентифікації репліки не можна використати частковий індекс \"%s\"" -#: commands/tablecmds.c:15577 +#: commands/tablecmds.c:15814 #, c-format msgid "index \"%s\" cannot be used as replica identity because column %d is a system column" msgstr "індекс \"%s\" не можна використати як ідентифікацію репліки, тому що стовпець %d - системний стовпець" -#: commands/tablecmds.c:15584 +#: commands/tablecmds.c:15821 #, c-format msgid "index \"%s\" cannot be used as replica identity because column \"%s\" is nullable" msgstr "індекс \"%s\" не можна використати як ідентифікацію репліки, тому що стовпець \"%s\" допускає Null" -#: commands/tablecmds.c:15831 +#: commands/tablecmds.c:16068 #, c-format msgid "cannot change logged status of table \"%s\" because it is temporary" msgstr "змінити стан журналювання таблиці \"%s\" не можна, тому що вона тимчасова" -#: commands/tablecmds.c:15855 +#: commands/tablecmds.c:16092 #, c-format msgid "cannot change table \"%s\" to unlogged because it is part of a publication" msgstr "таблицю \"%s\" не можна змінити на нежурнальовану, тому що вона є частиною публікації" -#: commands/tablecmds.c:15857 +#: commands/tablecmds.c:16094 #, c-format msgid "Unlogged relations cannot be replicated." msgstr "Нежурнальовані відношення не підтримують реплікацію." -#: commands/tablecmds.c:15902 +#: commands/tablecmds.c:16139 #, c-format msgid "could not change table \"%s\" to logged because it references unlogged table \"%s\"" msgstr "не вдалося змінити таблицю \"%s\" на журнальовану, тому що вона посилається на нежурнальовану таблицю \"%s\"" -#: commands/tablecmds.c:15912 +#: commands/tablecmds.c:16149 #, c-format msgid "could not change table \"%s\" to unlogged because it references logged table \"%s\"" msgstr "не вдалося змінити таблицю \"%s\" на нежурнальовану, тому що вона посилається на журнальовану таблицю \"%s\"" -#: commands/tablecmds.c:15970 +#: commands/tablecmds.c:16207 #, c-format msgid "cannot move an owned sequence into another schema" msgstr "перемістити послідовність з власником в іншу схему не можна" -#: commands/tablecmds.c:16077 +#: commands/tablecmds.c:16312 #, c-format msgid "relation \"%s\" already exists in schema \"%s\"" msgstr "відношення \"%s\" вже існує в схемі \"%s\"" -#: commands/tablecmds.c:16648 +#: commands/tablecmds.c:16887 #, c-format msgid "\"%s\" is not a composite type" msgstr "\"%s\" - не складений тип" -#: commands/tablecmds.c:16680 +#: commands/tablecmds.c:16919 #, c-format msgid "\"%s\" is not a table, view, materialized view, sequence, or foreign table" msgstr "\"%s\" - не таблиця, подання, матеріалізоване подання, послідовність або зовнішня таблиця" -#: commands/tablecmds.c:16715 +#: commands/tablecmds.c:16954 #, c-format msgid "unrecognized partitioning strategy \"%s\"" msgstr "нерозпізнана стратегія секціонування \"%s\"" -#: commands/tablecmds.c:16723 +#: commands/tablecmds.c:16962 #, c-format msgid "cannot use \"list\" partition strategy with more than one column" msgstr "стратегія секціонування \"по списку\" не може використовувати декілька стовпців" -#: commands/tablecmds.c:16789 +#: commands/tablecmds.c:17028 #, c-format msgid "column \"%s\" named in partition key does not exist" msgstr "стовпець \"%s\", згаданий в ключі секціонування, не існує" -#: commands/tablecmds.c:16797 +#: commands/tablecmds.c:17036 #, c-format msgid "cannot use system column \"%s\" in partition key" msgstr "системний стовпець \"%s\" не можна використати в ключі секціонування" -#: commands/tablecmds.c:16808 commands/tablecmds.c:16898 +#: commands/tablecmds.c:17047 commands/tablecmds.c:17126 #, c-format msgid "cannot use generated column in partition key" msgstr "використати згенерований стовпець в ключі секції, не можна" -#: commands/tablecmds.c:16809 commands/tablecmds.c:16899 commands/trigger.c:653 -#: rewrite/rewriteHandler.c:929 rewrite/rewriteHandler.c:964 -#, c-format -msgid "Column \"%s\" is a generated column." -msgstr "Стовпець \"%s\" є згенерованим стовпцем." - -#: commands/tablecmds.c:16881 +#: commands/tablecmds.c:17116 #, c-format msgid "partition key expressions cannot contain system column references" msgstr "вирази ключа секціонування не можуть містити посилання на системний стовпець" -#: commands/tablecmds.c:16928 +#: commands/tablecmds.c:17177 #, c-format msgid "functions in partition key expression must be marked IMMUTABLE" msgstr "функції у виразі ключа секціонування повинні бути позначені як IMMUTABLE" -#: commands/tablecmds.c:16937 +#: commands/tablecmds.c:17186 #, c-format msgid "cannot use constant expression as partition key" msgstr "не можна використати константий вираз як ключ секціонування" -#: commands/tablecmds.c:16958 +#: commands/tablecmds.c:17207 #, c-format msgid "could not determine which collation to use for partition expression" msgstr "не вдалося визначити, яке правило сортування використати для виразу секціонування" -#: commands/tablecmds.c:16993 +#: commands/tablecmds.c:17242 #, 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:16999 +#: commands/tablecmds.c:17248 #, 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:17251 +#: commands/tablecmds.c:17500 #, c-format msgid "\"%s\" is already a partition" msgstr "\"%s\" вже є секцією" -#: commands/tablecmds.c:17257 +#: commands/tablecmds.c:17506 #, c-format msgid "cannot attach a typed table as partition" msgstr "неможливо підключити типізовану таблицю в якості секції" -#: commands/tablecmds.c:17273 +#: commands/tablecmds.c:17522 #, c-format msgid "cannot attach inheritance child as partition" msgstr "неможливо підключити нащадка успадкування в якості секції" -#: commands/tablecmds.c:17287 +#: commands/tablecmds.c:17536 #, c-format msgid "cannot attach inheritance parent as partition" msgstr "неможливо підключити предка успадкування в якості секції" -#: commands/tablecmds.c:17321 +#: commands/tablecmds.c:17570 #, c-format msgid "cannot attach a temporary relation as partition of permanent relation \"%s\"" msgstr "неможливо підкючити тимчасове відношення в якості секції постійного відношення \"%s\"" -#: commands/tablecmds.c:17329 +#: commands/tablecmds.c:17578 #, c-format msgid "cannot attach a permanent relation as partition of temporary relation \"%s\"" msgstr "неможливо підключити постійне відношення в якості секції тимчасового відношення \"%s\"" -#: commands/tablecmds.c:17337 +#: commands/tablecmds.c:17586 #, c-format msgid "cannot attach as partition of temporary relation of another session" msgstr "неможливо підключити секцію до тимчасового відношення в іншому сеансі" -#: commands/tablecmds.c:17344 +#: commands/tablecmds.c:17593 #, c-format msgid "cannot attach temporary relation of another session as partition" msgstr "неможливо підключити тимчасове відношення з іншого сеансу в якості секції" -#: commands/tablecmds.c:17364 +#: commands/tablecmds.c:17613 #, c-format msgid "table \"%s\" contains column \"%s\" not found in parent \"%s\"" msgstr "таблиця \"%s\" містить стовпець \"%s\", відсутній в батьківській \"%s\"" -#: commands/tablecmds.c:17367 +#: commands/tablecmds.c:17616 #, c-format msgid "The new partition may contain only the columns present in parent." msgstr "Нова секція може містити лише стовпці, що є у батьківській таблиці." -#: commands/tablecmds.c:17379 +#: commands/tablecmds.c:17628 #, c-format msgid "trigger \"%s\" prevents table \"%s\" from becoming a partition" msgstr "тригер \"%s\" не дозволяє зробити таблицю \"%s\" секцією" -#: commands/tablecmds.c:17381 commands/trigger.c:459 +#: commands/tablecmds.c:17630 commands/trigger.c:459 #, c-format msgid "ROW triggers with transition tables are not supported on partitions" msgstr "Тригери ROW з перехідними таблицями для секцій не підтримуються" -#: commands/tablecmds.c:17560 +#: commands/tablecmds.c:17809 #, c-format msgid "cannot attach foreign table \"%s\" as partition of partitioned table \"%s\"" msgstr "не можна підключити зовнішню таблицю \"%s\" в якості секції секціонованої таблиці \"%s\"" -#: commands/tablecmds.c:17563 +#: commands/tablecmds.c:17812 #, c-format msgid "Partitioned table \"%s\" contains unique indexes." msgstr "Секціонована таблиця \"%s\" містить унікальні індекси." -#: commands/tablecmds.c:17887 +#: commands/tablecmds.c:18137 #, c-format msgid "cannot detach partitions concurrently when a default partition exists" msgstr "не можна одночасно відключити розділи, коли існує розділ за замовчуванням" -#: commands/tablecmds.c:17996 +#: commands/tablecmds.c:18249 #, c-format msgid "partitioned table \"%s\" was removed concurrently" msgstr "секціоновану таблицю \"%s\" було видалено одночасно" -#: commands/tablecmds.c:18002 +#: commands/tablecmds.c:18255 #, c-format msgid "partition \"%s\" was removed concurrently" msgstr "розділ \"%s\" було видалено паралельно" -#: commands/tablecmds.c:18485 commands/tablecmds.c:18505 -#: commands/tablecmds.c:18525 commands/tablecmds.c:18544 -#: commands/tablecmds.c:18586 +#: commands/tablecmds.c:18787 commands/tablecmds.c:18807 +#: commands/tablecmds.c:18827 commands/tablecmds.c:18846 +#: commands/tablecmds.c:18888 #, c-format msgid "cannot attach index \"%s\" as a partition of index \"%s\"" msgstr "неможливо підключити індекс \"%s\" в якості секції індексу \"%s\"" -#: commands/tablecmds.c:18488 +#: commands/tablecmds.c:18790 #, c-format msgid "Index \"%s\" is already attached to another index." msgstr "Індекс \"%s\" вже підключений до іншого індексу." -#: commands/tablecmds.c:18508 +#: commands/tablecmds.c:18810 #, c-format msgid "Index \"%s\" is not an index on any partition of table \"%s\"." msgstr "Індекс \"%s\" не є індексом жодної секції таблиці \"%s\"." -#: commands/tablecmds.c:18528 +#: commands/tablecmds.c:18830 #, c-format msgid "The index definitions do not match." msgstr "Визначення індексів не співпадають." -#: commands/tablecmds.c:18547 +#: commands/tablecmds.c:18849 #, 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:18589 +#: commands/tablecmds.c:18891 #, c-format msgid "Another index is already attached for partition \"%s\"." msgstr "До секції \"%s\" вже підключений інший індекс." -#: commands/tablecmds.c:18826 +#: commands/tablecmds.c:19128 #, c-format msgid "column data type %s does not support compression" msgstr "тип даних стовпця %s не підтримує стискання" -#: commands/tablecmds.c:18833 +#: commands/tablecmds.c:19135 #, c-format msgid "invalid compression method \"%s\"" msgstr "неприпустимий метод стискання \"%s\"" #: commands/tablespace.c:161 commands/tablespace.c:177 -#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1478 +#: commands/tablespace.c:594 commands/tablespace.c:639 replication/slot.c:1536 #: storage/file/copydir.c:47 #, c-format msgid "could not create directory \"%s\": %m" @@ -10617,24 +10672,24 @@ msgstr "шлях до розташування табличного просто msgid "tablespace location should not be inside the data directory" msgstr "табличний простір не повинен розташовуватись всередині каталогу даних" -#: commands/tablespace.c:288 commands/tablespace.c:976 +#: commands/tablespace.c:288 commands/tablespace.c:971 #, c-format msgid "unacceptable tablespace name \"%s\"" msgstr "неприпустиме ім'я табличного простору \"%s\"" -#: commands/tablespace.c:290 commands/tablespace.c:977 +#: commands/tablespace.c:290 commands/tablespace.c:972 #, c-format msgid "The prefix \"pg_\" is reserved for system tablespaces." msgstr "Префікс \"\"pg_\" зарезервований для системних табличних просторів." -#: commands/tablespace.c:309 commands/tablespace.c:998 +#: commands/tablespace.c:309 commands/tablespace.c:993 #, c-format msgid "tablespace \"%s\" already exists" msgstr "табличний простір \"%s\" вже існує" -#: commands/tablespace.c:427 commands/tablespace.c:959 -#: commands/tablespace.c:1048 commands/tablespace.c:1117 -#: commands/tablespace.c:1263 commands/tablespace.c:1466 +#: commands/tablespace.c:427 commands/tablespace.c:954 +#: commands/tablespace.c:1043 commands/tablespace.c:1112 +#: commands/tablespace.c:1258 commands/tablespace.c:1461 #, c-format msgid "tablespace \"%s\" does not exist" msgstr "табличний простір \"%s\" не існує" @@ -10675,33 +10730,33 @@ msgid "directory \"%s\" already in use as a tablespace" msgstr "каталог \"%s\" вже використовується в якості табличного простору" #: commands/tablespace.c:768 commands/tablespace.c:781 -#: commands/tablespace.c:817 commands/tablespace.c:909 storage/file/fd.c:3169 -#: storage/file/fd.c:3565 +#: commands/tablespace.c:816 commands/tablespace.c:906 storage/file/fd.c:3160 +#: storage/file/fd.c:3551 #, c-format msgid "could not remove directory \"%s\": %m" msgstr "не вдалося видалити каталог \"%s\": %m" -#: commands/tablespace.c:830 commands/tablespace.c:918 +#: commands/tablespace.c:828 commands/tablespace.c:914 #, c-format msgid "could not remove symbolic link \"%s\": %m" msgstr "не вдалося видалити символьне посилання \"%s\": %m" -#: commands/tablespace.c:840 commands/tablespace.c:927 +#: commands/tablespace.c:837 commands/tablespace.c:922 #, c-format msgid "\"%s\" is not a directory or symbolic link" msgstr "\"%s\" - не каталог або символьне посилання" -#: commands/tablespace.c:1122 +#: commands/tablespace.c:1117 #, c-format msgid "Tablespace \"%s\" does not exist." msgstr "Табличний простір \"%s\" не існує." -#: commands/tablespace.c:1565 +#: commands/tablespace.c:1560 #, c-format msgid "directories for tablespace %u could not be removed" msgstr "не вдалося видалити каталоги табличного простору %u" -#: commands/tablespace.c:1567 +#: commands/tablespace.c:1562 #, c-format msgid "You can remove the directories manually if necessary." msgstr "За потреби ви можете видалити каталоги вручну." @@ -10907,160 +10962,159 @@ msgstr "тригер \"%s\" для таблиці \"%s\" не існує" msgid "permission denied: \"%s\" is a system trigger" msgstr "немає доступу: \"%s\" - системний тригер" -#: commands/trigger.c:2221 +#: commands/trigger.c:2223 #, c-format msgid "trigger function %u returned null value" msgstr "тригерна функція %u повернула значення null" -#: commands/trigger.c:2281 commands/trigger.c:2495 commands/trigger.c:2734 -#: commands/trigger.c:3038 +#: commands/trigger.c:2283 commands/trigger.c:2506 commands/trigger.c:2754 +#: commands/trigger.c:3086 #, c-format msgid "BEFORE STATEMENT trigger cannot return a value" msgstr "Тригер BEFORE STATEMENT не може повертати значення" -#: commands/trigger.c:2355 +#: commands/trigger.c:2357 #, 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:2356 +#: commands/trigger.c:2358 #, c-format msgid "Before executing trigger \"%s\", the row was to be in partition \"%s.%s\"." msgstr "Перед виконанням тригера \"%s\", рядок повинен був бути в секції \"%s.%s\"." -#: commands/trigger.c:3104 executor/nodeModifyTable.c:1956 -#: executor/nodeModifyTable.c:2038 +#: commands/trigger.c:2387 commands/trigger.c:2627 commands/trigger.c:2941 #, c-format -msgid "tuple to be updated was already modified by an operation triggered by the current command" -msgstr "кортеж, який повинен бути оновленим, вже змінений в операції, яка викликана поточною командою" +msgid "cannot collect transition tuples from child foreign tables" +msgstr "неможливо зібрати перехідні кортежі з дочірніх сторонніх таблиць" -#: commands/trigger.c:3105 executor/nodeModifyTable.c:1306 -#: executor/nodeModifyTable.c:1380 executor/nodeModifyTable.c:1957 -#: executor/nodeModifyTable.c:2039 +#: commands/trigger.c:3153 executor/nodeModifyTable.c:1334 +#: executor/nodeModifyTable.c:1408 executor/nodeModifyTable.c:1989 +#: executor/nodeModifyTable.c:2079 #, 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:3134 executor/nodeLockRows.c:229 -#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:230 -#: executor/nodeModifyTable.c:1322 executor/nodeModifyTable.c:1974 -#: executor/nodeModifyTable.c:2204 +#: commands/trigger.c:3182 executor/nodeLockRows.c:229 +#: executor/nodeLockRows.c:238 executor/nodeModifyTable.c:258 +#: executor/nodeModifyTable.c:1350 executor/nodeModifyTable.c:2006 +#: executor/nodeModifyTable.c:2252 #, c-format msgid "could not serialize access due to concurrent update" msgstr "не вдалося серіалізувати доступ через паралельне оновлення" -#: commands/trigger.c:3142 executor/nodeModifyTable.c:1412 -#: executor/nodeModifyTable.c:2056 executor/nodeModifyTable.c:2228 +#: commands/trigger.c:3190 executor/nodeModifyTable.c:1440 +#: executor/nodeModifyTable.c:2096 executor/nodeModifyTable.c:2276 #, c-format msgid "could not serialize access due to concurrent delete" msgstr "не вдалося серіалізувати доступ через паралельне видалення" -#: commands/trigger.c:4234 +#: commands/trigger.c:4284 #, c-format msgid "cannot fire deferred trigger within security-restricted operation" msgstr "не можна виконати відкладений тригер в межах операції з обмеженням по безпеці" -#: commands/trigger.c:5284 +#: commands/trigger.c:5336 #, c-format msgid "constraint \"%s\" is not deferrable" msgstr "обмеження \"%s\" не є відкладеним" -#: commands/trigger.c:5307 +#: commands/trigger.c:5359 #, 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:1200 +#: commands/tsearchcmds.c:1236 #, c-format msgid "token type \"%s\" does not exist" msgstr "тип маркера \"%s\" не існує" -#: commands/tsearchcmds.c:1427 +#: commands/tsearchcmds.c:1464 #, c-format msgid "mapping for token type \"%s\" does not exist" msgstr "зіставлення для типу маркера \"%s\" не існує" -#: commands/tsearchcmds.c:1433 +#: commands/tsearchcmds.c:1470 #, c-format msgid "mapping for token type \"%s\" does not exist, skipping" msgstr "зіставлення для типу маркера \"%s\" не існує, пропускається" -#: commands/tsearchcmds.c:1596 commands/tsearchcmds.c:1711 +#: commands/tsearchcmds.c:1631 commands/tsearchcmds.c:1746 #, c-format msgid "invalid parameter list format: \"%s\"" msgstr "неприпустимий формат списку параметрів: \"%s\"" @@ -11432,7 +11486,7 @@ msgid "permission denied to create role" msgstr "немає прав для створення ролі" #: commands/user.c:325 commands/user.c:1226 commands/user.c:1233 -#: utils/adt/acl.c:5248 utils/adt/acl.c:5254 gram.y:15260 gram.y:15305 +#: utils/adt/acl.c:5265 utils/adt/acl.c:5271 gram.y:15260 gram.y:15305 #, c-format msgid "role name \"%s\" is reserved" msgstr "ім'я ролі \"%s\" зарезервовано" @@ -11501,10 +11555,10 @@ msgstr "немає прав для видалення ролі" msgid "cannot use special role specifier in DROP ROLE" msgstr "використати спеціальну роль у DROP ROLE не можна" -#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:778 -#: commands/variable.c:781 commands/variable.c:865 commands/variable.c:868 -#: utils/adt/acl.c:5103 utils/adt/acl.c:5151 utils/adt/acl.c:5179 -#: utils/adt/acl.c:5198 utils/init/miscinit.c:710 +#: commands/user.c:1040 commands/user.c:1197 commands/variable.c:793 +#: commands/variable.c:796 commands/variable.c:913 commands/variable.c:916 +#: utils/adt/acl.c:5120 utils/adt/acl.c:5168 utils/adt/acl.c:5196 +#: utils/adt/acl.c:5215 utils/init/miscinit.c:755 #, c-format msgid "role \"%s\" does not exist" msgstr "роль \"%s\" не існує" @@ -11609,139 +11663,140 @@ msgstr "роль \"%s\" вже є учасником ролі \"%s\"" msgid "role \"%s\" is not a member of role \"%s\"" msgstr "роль \"%s\" не є учасником ролі \"%s\"" -#: commands/vacuum.c:133 +#: commands/vacuum.c:134 #, c-format msgid "unrecognized ANALYZE option \"%s\"" msgstr "нерозпізнаний параметр ANALYZE \"%s\"" -#: commands/vacuum.c:171 +#: commands/vacuum.c:172 #, c-format msgid "parallel option requires a value between 0 and %d" msgstr "паралельний параметр потребує значення між 0 і %d" -#: commands/vacuum.c:183 +#: commands/vacuum.c:184 #, c-format msgid "parallel workers for vacuum must be between 0 and %d" msgstr "одночасні процеси для очищення повинні бути між 0 і %d" -#: commands/vacuum.c:200 +#: commands/vacuum.c:201 #, c-format msgid "unrecognized VACUUM option \"%s\"" msgstr "нерозпізнаний параметр VACUUM \"%s\"" -#: commands/vacuum.c:223 +#: commands/vacuum.c:224 #, c-format msgid "VACUUM FULL cannot be performed in parallel" msgstr "VACUUM FULL не можна виконати паралельно" -#: commands/vacuum.c:239 +#: commands/vacuum.c:240 #, c-format msgid "ANALYZE option must be specified when a column list is provided" msgstr "Якщо задається список стовпців, необхідно вказати параметр ANALYZE" -#: commands/vacuum.c:329 +#: commands/vacuum.c:330 #, c-format msgid "%s cannot be executed from VACUUM or ANALYZE" msgstr "%s не можна виконати під час VACUUM або ANALYZE" -#: commands/vacuum.c:339 +#: commands/vacuum.c:340 #, c-format msgid "VACUUM option DISABLE_PAGE_SKIPPING cannot be used with FULL" msgstr "Параметр VACUUM DISABLE_PAGE_SKIPPING не можна використовувати з FULL" -#: commands/vacuum.c:346 +#: commands/vacuum.c:347 #, c-format msgid "PROCESS_TOAST required with VACUUM FULL" msgstr "PROCESS_TOAST потребується з VACUUM FULL" -#: commands/vacuum.c:587 +#: commands/vacuum.c:597 #, c-format msgid "skipping \"%s\" --- only superuser can vacuum it" msgstr "\"%s\" пропускається --- лише суперкористувач може очистити" -#: commands/vacuum.c:591 +#: commands/vacuum.c:601 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can vacuum it" msgstr "пропускається \"%s\" --- лише суперкористувач або власник БД може очистити" -#: commands/vacuum.c:595 +#: commands/vacuum.c:605 #, c-format msgid "skipping \"%s\" --- only table or database owner can vacuum it" msgstr "пропускається \"%s\" --- лише власник таблиці або бази даних може очистити" -#: commands/vacuum.c:610 +#: commands/vacuum.c:620 #, c-format msgid "skipping \"%s\" --- only superuser can analyze it" msgstr "пропуск об'єкта \"%s\" --- тільки суперкористувач може його аналізувати" -#: commands/vacuum.c:614 +#: commands/vacuum.c:624 #, c-format msgid "skipping \"%s\" --- only superuser or database owner can analyze it" msgstr "пропуск об'єкта \"%s\" --- тільки суперкористувач або власник бази даних може його аналізувати" -#: commands/vacuum.c:618 +#: commands/vacuum.c:628 #, c-format msgid "skipping \"%s\" --- only table or database owner can analyze it" msgstr "пропуск об'єкта \"%s\" --- тільки власник таблиці або бази даних може його аналізувати" -#: commands/vacuum.c:697 commands/vacuum.c:793 +#: commands/vacuum.c:707 commands/vacuum.c:803 #, c-format msgid "skipping vacuum of \"%s\" --- lock not available" msgstr "очистка \"%s\" пропускається --- блокування недоступне" -#: commands/vacuum.c:702 +#: commands/vacuum.c:712 #, c-format msgid "skipping vacuum of \"%s\" --- relation no longer exists" msgstr "очистка \"%s\" пропускається --- це відношення більше не існує" -#: commands/vacuum.c:718 commands/vacuum.c:798 +#: commands/vacuum.c:728 commands/vacuum.c:808 #, c-format msgid "skipping analyze of \"%s\" --- lock not available" msgstr "пропуск аналізу об'єкта \"%s\" --- блокування недоступне" -#: commands/vacuum.c:723 +#: commands/vacuum.c:733 #, c-format msgid "skipping analyze of \"%s\" --- relation no longer exists" msgstr "пропуск аналізу об'єкта\"%s\" --- відношення більше не існує" -#: commands/vacuum.c:1041 +#: commands/vacuum.c:1051 #, c-format msgid "oldest xmin is far in the past" msgstr "найстарший xmin далеко в минулому" -#: commands/vacuum.c:1042 +#: commands/vacuum.c:1052 #, c-format msgid "Close open transactions soon to avoid wraparound problems.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots." msgstr "Завершіть відкриті транзакції якнайшвидше, щоб уникнути проблеми зациклення.\n" "Можливо, вам також доведеться затвердити або відкотити старі підготовленні транзакції, або видалити застарілі слоти реплікації." -#: commands/vacuum.c:1083 +#: commands/vacuum.c:1093 #, c-format msgid "oldest multixact is far in the past" msgstr "найстарший multixact далеко в минулому" -#: commands/vacuum.c:1084 +#: commands/vacuum.c:1094 #, c-format msgid "Close open transactions with multixacts soon to avoid wraparound problems." msgstr "Завершіть відкриті транзакції з multixacts якнайшвидше, щоб уникнути проблеми зациклення." -#: commands/vacuum.c:1755 +#: commands/vacuum.c:1779 #, c-format msgid "some databases have not been vacuumed in over 2 billion transactions" msgstr "деякі бази даних не очищалися протягом більш ніж 2 мільярдів транзакцій" -#: commands/vacuum.c:1756 +#: commands/vacuum.c:1780 #, c-format msgid "You might have already suffered transaction-wraparound data loss." msgstr "Можливо, ви вже втратили дані в результаті зациклення транзакцій." -#: commands/vacuum.c:1924 +#: commands/vacuum.c:1961 #, c-format msgid "skipping \"%s\" --- cannot vacuum non-tables or special system tables" msgstr "пропускається \"%s\" --- очищати не таблиці або спеціальні системні таблиці не можна" -#: commands/variable.c:165 utils/misc/guc.c:11657 utils/misc/guc.c:11719 +#: commands/variable.c:165 tcop/postgres.c:3605 utils/misc/guc.c:11715 +#: utils/misc/guc.c:11777 #, c-format msgid "Unrecognized key word: \"%s\"." msgstr "Нерозпізнане ключове слово: \"%s\"." @@ -11801,7 +11856,7 @@ msgstr "Команда SET TRANSACTION ISOLATION LEVEL повинна викли msgid "SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction" msgstr "Команда SET TRANSACTION ISOLATION LEVEL не повинна викликатияь в підтранзакції" -#: commands/variable.c:548 storage/lmgr/predicate.c:1693 +#: commands/variable.c:548 storage/lmgr/predicate.c:1698 #, c-format msgid "cannot use serializable mode in a hot standby" msgstr "використовувати серіалізований режим в hot standby не можна" @@ -11836,12 +11891,22 @@ msgstr "Змінити клієнтське кодування зараз нем msgid "cannot change client_encoding during a parallel operation" msgstr "змінити клієнтське кодування під час паралельної операції неможливо" -#: commands/variable.c:890 +#: commands/variable.c:818 +#, c-format +msgid "permission will be denied to set session authorization \"%s\"" +msgstr "буде відмовлено у встановленні авторизації сеансу \"%s\"" + +#: commands/variable.c:823 +#, c-format +msgid "permission denied to set session authorization \"%s\"" +msgstr "відмовлено у встановленні авторизації сеансу \"%s\"" + +#: commands/variable.c:933 #, c-format msgid "permission will be denied to set role \"%s\"" msgstr "немає дозволу для встановлення ролі \"%s\"" -#: commands/variable.c:895 +#: commands/variable.c:938 #, c-format msgid "permission denied to set role \"%s\"" msgstr "немає прав для встановлення ролі \"%s\"" @@ -11864,7 +11929,7 @@ msgstr "змінити ім'я стовпця \"%s\" на \"%s\" в поданн #: commands/view.c:298 #, c-format msgid "Use ALTER VIEW ... RENAME COLUMN ... to change name of view column instead." -msgstr "Щоб змінити назву стовпця подання, замість цього використайте ALTER VIEW ... RENAME COLUMN ..." +msgstr "Щоб змінити назву стовпця подання, замість цього використайте ALTER VIEW ... RENAME COLUMN." #: commands/view.c:304 #, c-format @@ -11927,57 +11992,57 @@ msgstr "курсор \"%s\" не розташовується у рядку" msgid "cursor \"%s\" is not a simply updatable scan of table \"%s\"" msgstr "курсор \"%s\" - не просте оновлюване сканування таблиці \"%s\"" -#: executor/execCurrent.c:280 executor/execExprInterp.c:2452 +#: executor/execCurrent.c:280 executor/execExprInterp.c:2464 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "тип параметру %d (%s) не відповідає тому, з котрим тривала підготовка плану (%s)" -#: executor/execCurrent.c:292 executor/execExprInterp.c:2464 +#: executor/execCurrent.c:292 executor/execExprInterp.c:2476 #, c-format msgid "no value found for parameter %d" msgstr "не знайдено значення для параметру %d" #: executor/execExpr.c:636 executor/execExpr.c:643 executor/execExpr.c:649 -#: executor/execExprInterp.c:4033 executor/execExprInterp.c:4050 -#: executor/execExprInterp.c:4149 executor/nodeModifyTable.c:119 -#: executor/nodeModifyTable.c:130 executor/nodeModifyTable.c:147 -#: executor/nodeModifyTable.c:155 +#: executor/execExprInterp.c:4045 executor/execExprInterp.c:4062 +#: executor/execExprInterp.c:4161 executor/nodeModifyTable.c:127 +#: executor/nodeModifyTable.c:146 executor/nodeModifyTable.c:163 +#: executor/nodeModifyTable.c:173 executor/nodeModifyTable.c:183 #, c-format msgid "table row type and query-specified row type do not match" msgstr "тип рядка таблиці відрізняється від типу рядка-результату запиту" -#: executor/execExpr.c:637 executor/nodeModifyTable.c:120 +#: executor/execExpr.c:637 executor/nodeModifyTable.c:128 #, c-format msgid "Query has too many columns." msgstr "Запит повертає дуже багато стовпців." -#: executor/execExpr.c:644 executor/nodeModifyTable.c:148 +#: executor/execExpr.c:644 executor/nodeModifyTable.c:147 #, c-format msgid "Query provides a value for a dropped column at ordinal position %d." msgstr "Запит надає значення для видаленого стовпця з порядковим номером %d." -#: executor/execExpr.c:650 executor/execExprInterp.c:4051 -#: executor/nodeModifyTable.c:131 +#: executor/execExpr.c:650 executor/execExprInterp.c:4063 +#: executor/nodeModifyTable.c:174 #, c-format msgid "Table has type %s at ordinal position %d, but query expects %s." msgstr "Таблиця має тип %s у порядковому розташуванні %d, але запит очікує %s." -#: executor/execExpr.c:1098 parser/parse_agg.c:830 +#: executor/execExpr.c:1098 parser/parse_agg.c:881 #, c-format msgid "window function calls cannot be nested" msgstr "виклики віконних функцій не можуть бути вкладеними" -#: executor/execExpr.c:1618 +#: executor/execExpr.c:1626 #, c-format msgid "target type is not an array" msgstr "цільовий тип не є масивом" -#: executor/execExpr.c:1958 +#: executor/execExpr.c:1966 #, c-format msgid "ROW() column has type %s instead of type %s" msgstr "Стовпець ROW() має тип %s замість %s" -#: executor/execExpr.c:2483 executor/execSRF.c:718 parser/parse_func.c:138 +#: executor/execExpr.c:2491 executor/execSRF.c:718 parser/parse_func.c:138 #: parser/parse_func.c:655 parser/parse_func.c:1031 #, c-format msgid "cannot pass more than %d argument to a function" @@ -11987,98 +12052,98 @@ msgstr[1] "функції не можна передати більше ніж % msgstr[2] "функції не можна передати більше ніж %d аргументів" msgstr[3] "функції не можна передати більше ніж %d аргументів" -#: executor/execExpr.c:2916 parser/parse_node.c:277 parser/parse_node.c:327 +#: executor/execExpr.c:2924 parser/parse_node.c:277 parser/parse_node.c:327 #, c-format msgid "cannot subscript type %s because it does not support subscripting" msgstr "не можна підписати вказати тип %s, тому що він не підтримує підписку" -#: executor/execExpr.c:3044 executor/execExpr.c:3066 +#: executor/execExpr.c:3052 executor/execExpr.c:3074 #, c-format msgid "type %s does not support subscripted assignment" msgstr "тип %s не підтримує вказані присвоєння за підпискою" -#: executor/execExprInterp.c:1916 +#: executor/execExprInterp.c:1928 #, c-format msgid "attribute %d of type %s has been dropped" msgstr "атрибут %d типу %s був видалений" -#: executor/execExprInterp.c:1922 +#: executor/execExprInterp.c:1934 #, c-format msgid "attribute %d of type %s has wrong type" msgstr "атрибут %d типу %s має неправильний тип" -#: executor/execExprInterp.c:1924 executor/execExprInterp.c:3058 -#: executor/execExprInterp.c:3104 +#: executor/execExprInterp.c:1936 executor/execExprInterp.c:3070 +#: executor/execExprInterp.c:3116 #, c-format msgid "Table has type %s, but query expects %s." msgstr "Таблиця має тип %s, але запит очікував %s." -#: executor/execExprInterp.c:2004 utils/adt/expandedrecord.c:99 +#: executor/execExprInterp.c:2016 utils/adt/expandedrecord.c:99 #: utils/adt/expandedrecord.c:231 utils/cache/typcache.c:1751 #: utils/cache/typcache.c:1907 utils/cache/typcache.c:2054 -#: utils/fmgr/funcapi.c:492 +#: utils/fmgr/funcapi.c:500 #, c-format msgid "type %s is not composite" msgstr "тип %s не є складеним" -#: executor/execExprInterp.c:2542 +#: executor/execExprInterp.c:2554 #, c-format msgid "WHERE CURRENT OF is not supported for this table type" msgstr "WHERE CURRENT OF для таблиць такого типу не підтримується" -#: executor/execExprInterp.c:2755 +#: executor/execExprInterp.c:2767 #, c-format msgid "cannot merge incompatible arrays" msgstr "не можна об'єднати несумісні масиви" -#: executor/execExprInterp.c:2756 +#: executor/execExprInterp.c:2768 #, c-format msgid "Array with element type %s cannot be included in ARRAY construct with element type %s." msgstr "Масив з типом елементів %s не може бути включений в конструкцію ARRAY з типом елементів %s." -#: executor/execExprInterp.c:2777 utils/adt/arrayfuncs.c:264 +#: executor/execExprInterp.c:2789 utils/adt/arrayfuncs.c:264 #: utils/adt/arrayfuncs.c:564 utils/adt/arrayfuncs.c:1306 -#: utils/adt/arrayfuncs.c:3422 utils/adt/arrayfuncs.c:5418 -#: utils/adt/arrayfuncs.c:5935 utils/adt/arraysubs.c:150 +#: utils/adt/arrayfuncs.c:3429 utils/adt/arrayfuncs.c:5425 +#: utils/adt/arrayfuncs.c:5944 utils/adt/arraysubs.c:150 #: utils/adt/arraysubs.c:488 #, c-format msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)" msgstr "число вимірів масива (%d) перевищує ліміт (%d)" -#: executor/execExprInterp.c:2797 executor/execExprInterp.c:2832 +#: executor/execExprInterp.c:2809 executor/execExprInterp.c:2844 #, c-format msgid "multidimensional arrays must have array expressions with matching dimensions" msgstr "для багатовимірних масивів повинні задаватись вирази з відповідними вимірами" -#: executor/execExprInterp.c:2809 utils/adt/array_expanded.c:274 +#: executor/execExprInterp.c:2821 utils/adt/array_expanded.c:274 #: utils/adt/arrayfuncs.c:937 utils/adt/arrayfuncs.c:1545 #: utils/adt/arrayfuncs.c:2353 utils/adt/arrayfuncs.c:2368 #: utils/adt/arrayfuncs.c:2630 utils/adt/arrayfuncs.c:2646 -#: utils/adt/arrayfuncs.c:2954 utils/adt/arrayfuncs.c:2969 -#: utils/adt/arrayfuncs.c:3310 utils/adt/arrayfuncs.c:3452 -#: utils/adt/arrayfuncs.c:6027 utils/adt/arrayfuncs.c:6368 -#: utils/adt/arrayutils.c:88 utils/adt/arrayutils.c:97 -#: utils/adt/arrayutils.c:104 +#: utils/adt/arrayfuncs.c:2907 utils/adt/arrayfuncs.c:2961 +#: utils/adt/arrayfuncs.c:2976 utils/adt/arrayfuncs.c:3317 +#: utils/adt/arrayfuncs.c:3459 utils/adt/arrayfuncs.c:6036 +#: utils/adt/arrayfuncs.c:6377 utils/adt/arrayutils.c:88 +#: utils/adt/arrayutils.c:97 utils/adt/arrayutils.c:104 #, c-format msgid "array size exceeds the maximum allowed (%d)" msgstr "розмір масиву перевищує максимальний допустимий розмір (%d)" -#: executor/execExprInterp.c:3057 executor/execExprInterp.c:3103 +#: executor/execExprInterp.c:3069 executor/execExprInterp.c:3115 #, c-format msgid "attribute %d has wrong type" msgstr "атрибут %d має неправильний тип" -#: executor/execExprInterp.c:3662 utils/adt/domains.c:149 +#: executor/execExprInterp.c:3674 utils/adt/domains.c:149 #, c-format msgid "domain %s does not allow null values" msgstr "домен %s не допускає значення null" -#: executor/execExprInterp.c:3677 utils/adt/domains.c:184 +#: executor/execExprInterp.c:3689 utils/adt/domains.c:184 #, c-format msgid "value for domain %s violates check constraint \"%s\"" msgstr "значення домену %s порушує перевірочнео бмеження \"%s\"" -#: executor/execExprInterp.c:4034 +#: executor/execExprInterp.c:4046 #, c-format msgid "Table row contains %d attribute, but query expects %d." msgid_plural "Table row contains %d attributes, but query expects %d." @@ -12087,7 +12152,7 @@ msgstr[1] "Рядок таблиці містить %d атрибути, але msgstr[2] "Рядок таблиці містить %d атрибутів, але запит очікував %d." msgstr[3] "Рядок таблиці містить %d атрибутів, але запит очікував %d." -#: executor/execExprInterp.c:4150 executor/execSRF.c:977 +#: executor/execExprInterp.c:4162 executor/execSRF.c:977 #, c-format msgid "Physical storage mismatch on dropped attribute at ordinal position %d." msgstr "Невідповідність параметрів фізичного зберігання видаленого атрибуту %d." @@ -12127,165 +12192,165 @@ msgstr "Ключ %s конфліктує з існуючим ключем %s." msgid "Key conflicts with existing key." msgstr "Ключ конфліктує з існуючим ключем." -#: executor/execMain.c:1007 +#: executor/execMain.c:1016 #, c-format msgid "cannot change sequence \"%s\"" msgstr "послідовність \"%s\" не можна змінити" -#: executor/execMain.c:1013 +#: executor/execMain.c:1022 #, c-format msgid "cannot change TOAST relation \"%s\"" msgstr "TOAST-відношення \"%s\" не можна змінити" -#: executor/execMain.c:1031 rewrite/rewriteHandler.c:3096 -#: rewrite/rewriteHandler.c:3927 +#: executor/execMain.c:1040 rewrite/rewriteHandler.c:3148 +#: rewrite/rewriteHandler.c:4010 #, c-format msgid "cannot insert into view \"%s\"" msgstr "вставити дані в подання \"%s\" не можна" -#: executor/execMain.c:1033 rewrite/rewriteHandler.c:3099 -#: rewrite/rewriteHandler.c:3930 +#: executor/execMain.c:1042 rewrite/rewriteHandler.c:3151 +#: rewrite/rewriteHandler.c:4013 #, 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:1039 rewrite/rewriteHandler.c:3104 -#: rewrite/rewriteHandler.c:3935 +#: executor/execMain.c:1048 rewrite/rewriteHandler.c:3156 +#: rewrite/rewriteHandler.c:4018 #, c-format msgid "cannot update view \"%s\"" msgstr "оновити подання \"%s\" не можна" -#: executor/execMain.c:1041 rewrite/rewriteHandler.c:3107 -#: rewrite/rewriteHandler.c:3938 +#: executor/execMain.c:1050 rewrite/rewriteHandler.c:3159 +#: rewrite/rewriteHandler.c:4021 #, 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:1047 rewrite/rewriteHandler.c:3112 -#: rewrite/rewriteHandler.c:3943 +#: executor/execMain.c:1056 rewrite/rewriteHandler.c:3164 +#: rewrite/rewriteHandler.c:4026 #, c-format msgid "cannot delete from view \"%s\"" msgstr "видалити дані з подання \"%s\" не можна" -#: executor/execMain.c:1049 rewrite/rewriteHandler.c:3115 -#: rewrite/rewriteHandler.c:3946 +#: executor/execMain.c:1058 rewrite/rewriteHandler.c:3167 +#: rewrite/rewriteHandler.c:4029 #, 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:1060 +#: executor/execMain.c:1069 #, c-format msgid "cannot change materialized view \"%s\"" msgstr "змінити матеріалізоване подання \"%s\" не можна" -#: executor/execMain.c:1072 +#: executor/execMain.c:1081 #, c-format msgid "cannot insert into foreign table \"%s\"" msgstr "вставляти дані в зовнішню таблицю \"%s\" не можна" -#: executor/execMain.c:1078 +#: executor/execMain.c:1087 #, c-format msgid "foreign table \"%s\" does not allow inserts" msgstr "зовнішня таблиця \"%s\" не допускає додавання даних" -#: executor/execMain.c:1085 +#: executor/execMain.c:1094 #, c-format msgid "cannot update foreign table \"%s\"" msgstr "оновити зовнішню таблицю \"%s\" не можна" -#: executor/execMain.c:1091 +#: executor/execMain.c:1100 #, c-format msgid "foreign table \"%s\" does not allow updates" msgstr "зовнішня таблиця \"%s\" не дозволяє оновлення" -#: executor/execMain.c:1098 +#: executor/execMain.c:1107 #, c-format msgid "cannot delete from foreign table \"%s\"" msgstr "видаляти дані з зовнішньої таблиці \"%s\" не можна" -#: executor/execMain.c:1104 +#: executor/execMain.c:1113 #, c-format msgid "foreign table \"%s\" does not allow deletes" msgstr "зовнішня таблиця \"%s\" не дозволяє видалення даних" -#: executor/execMain.c:1115 +#: executor/execMain.c:1124 #, c-format msgid "cannot change relation \"%s\"" msgstr "відношення \"%s\" не можна змінити" -#: executor/execMain.c:1142 +#: executor/execMain.c:1161 #, c-format msgid "cannot lock rows in sequence \"%s\"" msgstr "блокувати рядки в послідовності \"%s\" не можна" -#: executor/execMain.c:1149 +#: executor/execMain.c:1168 #, c-format msgid "cannot lock rows in TOAST relation \"%s\"" msgstr "блокувати рядки в TOAST-відношенні \"%s\" не можна" -#: executor/execMain.c:1156 +#: executor/execMain.c:1175 #, c-format msgid "cannot lock rows in view \"%s\"" msgstr "блокувати рядки в поданні \"%s\" не можна" -#: executor/execMain.c:1164 +#: executor/execMain.c:1183 #, c-format msgid "cannot lock rows in materialized view \"%s\"" msgstr "блокувати рядки в матеріалізованому поданні \"%s\" не можна" -#: executor/execMain.c:1173 executor/execMain.c:2587 +#: executor/execMain.c:1192 executor/execMain.c:2613 #: executor/nodeLockRows.c:136 #, c-format msgid "cannot lock rows in foreign table \"%s\"" msgstr "блокувати рядки в зовнішній таблиці \"%s\" не можна" -#: executor/execMain.c:1179 +#: executor/execMain.c:1198 #, c-format msgid "cannot lock rows in relation \"%s\"" msgstr "блокувати рядки у відношенні \"%s\" не можна" -#: executor/execMain.c:1803 +#: executor/execMain.c:1827 #, c-format msgid "new row for relation \"%s\" violates partition constraint" msgstr "новий рядок для відношення \"%s\" порушує обмеження секції" -#: executor/execMain.c:1805 executor/execMain.c:1888 executor/execMain.c:1938 -#: executor/execMain.c:2047 +#: executor/execMain.c:1829 executor/execMain.c:1912 executor/execMain.c:1962 +#: executor/execMain.c:2071 #, c-format msgid "Failing row contains %s." msgstr "Помилковий рядок містить %s." -#: executor/execMain.c:1885 +#: executor/execMain.c:1909 #, c-format msgid "null value in column \"%s\" of relation \"%s\" violates not-null constraint" msgstr "null значення в стовпці \"%s\" відношення \"%s\" порушує not-null обмеження" -#: executor/execMain.c:1936 +#: executor/execMain.c:1960 #, c-format msgid "new row for relation \"%s\" violates check constraint \"%s\"" msgstr "новий рядок для відношення \"%s\" порушує перевірне обмеження перевірку \"%s\"" -#: executor/execMain.c:2045 +#: executor/execMain.c:2069 #, c-format msgid "new row violates check option for view \"%s\"" msgstr "новий рядок порушує параметр перевірки для подання \"%s\"" -#: executor/execMain.c:2055 +#: executor/execMain.c:2079 #, c-format msgid "new row violates row-level security policy \"%s\" for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків \"%s\" для таблиці \"%s\"" -#: executor/execMain.c:2060 +#: executor/execMain.c:2084 #, c-format msgid "new row violates row-level security policy for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків для таблиці \"%s\"" -#: executor/execMain.c:2067 +#: executor/execMain.c:2091 #, c-format msgid "new row violates row-level security policy \"%s\" (USING expression) for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків \"%s\" (вираз USING) для таблиці \"%s\"" -#: executor/execMain.c:2072 +#: executor/execMain.c:2096 #, c-format msgid "new row violates row-level security policy (USING expression) for table \"%s\"" msgstr "новий рядок порушує політику захисту на рівні рядків (вираз USING) для таблиці \"%s\"" @@ -12300,61 +12365,61 @@ msgstr "для рядка не знайдено секції у відношен msgid "Partition key of the failing row contains %s." msgstr "Ключ секціонування для невідповідного рядка містить %s." -#: executor/execReplication.c:196 executor/execReplication.c:380 +#: executor/execReplication.c:197 executor/execReplication.c:381 #, c-format msgid "tuple to be locked was already moved to another partition due to concurrent update, retrying" msgstr "кортеж, що підлягає блокуванню, вже переміщено в іншу секцію в результаті паралельного оновлення, триває повторна спроба" -#: executor/execReplication.c:200 executor/execReplication.c:384 +#: executor/execReplication.c:201 executor/execReplication.c:385 #, c-format msgid "concurrent update, retrying" msgstr "паралельне оновлення, триває повторна спроба" -#: executor/execReplication.c:206 executor/execReplication.c:390 +#: executor/execReplication.c:207 executor/execReplication.c:391 #, c-format msgid "concurrent delete, retrying" msgstr "паралельне видалення, триває повторна спроба" -#: executor/execReplication.c:276 parser/parse_cte.c:301 +#: executor/execReplication.c:277 parser/parse_cte.c:302 #: parser/parse_oper.c:233 utils/adt/array_userfuncs.c:724 -#: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3702 -#: utils/adt/arrayfuncs.c:4256 utils/adt/arrayfuncs.c:6248 +#: utils/adt/array_userfuncs.c:867 utils/adt/arrayfuncs.c:3709 +#: utils/adt/arrayfuncs.c:4263 utils/adt/arrayfuncs.c:6257 #: utils/adt/rowtypes.c:1203 #, c-format msgid "could not identify an equality operator for type %s" msgstr "не вдалося визначити оператора рівності для типу %s" -#: executor/execReplication.c:604 +#: executor/execReplication.c:609 #, c-format msgid "cannot update table \"%s\" because it does not have a replica identity and publishes updates" msgstr "оновлення в таблиці \"%s\" неможливе, тому що в ній відсутній ідентифікатор репліки, і вона публікує оновлення" -#: executor/execReplication.c:606 +#: executor/execReplication.c:611 #, c-format msgid "To enable updating the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Щоб ця таблиця підтримувала оновлення, встановіть REPLICA IDENTITY, використавши ALTER TABLE." -#: executor/execReplication.c:610 +#: executor/execReplication.c:615 #, c-format msgid "cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes" msgstr "видалення з таблиці \"%s\" неможливе, тому що в ній відсутній ідентифікатор репліки, і вона публікує видалення" -#: executor/execReplication.c:612 +#: executor/execReplication.c:617 #, c-format msgid "To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE." msgstr "Щоб ця таблиця підтримувала видалення, встановіть REPLICA IDENTITY, використавши ALTER TABLE." -#: executor/execReplication.c:631 executor/execReplication.c:639 +#: executor/execReplication.c:636 executor/execReplication.c:644 #, c-format msgid "cannot use relation \"%s.%s\" as logical replication target" msgstr "використовувати відношення \"%s.%s\" як ціль логічної реплікації, не можна" -#: executor/execReplication.c:633 +#: executor/execReplication.c:638 #, c-format msgid "\"%s.%s\" is a foreign table." msgstr "\"%s.%s\" є зовнішньою таблицею." -#: executor/execReplication.c:641 +#: executor/execReplication.c:646 #, c-format msgid "\"%s.%s\" is not a table." msgstr "\"%s.%s\" не є таблицею." @@ -12436,64 +12501,64 @@ msgid "%s is not allowed in an SQL function" msgstr "функція SQL не дозволяє використання %s" #. translator: %s is a SQL statement name -#: executor/functions.c:528 executor/spi.c:1752 executor/spi.c:2643 +#: executor/functions.c:528 executor/spi.c:1755 executor/spi.c:2664 #, c-format msgid "%s is not allowed in a non-volatile function" msgstr "незмінна функція не дозволяє використання %s" -#: executor/functions.c:1457 +#: executor/functions.c:1458 #, c-format msgid "SQL function \"%s\" statement %d" msgstr "SQL функція \"%s\" оператор %d" -#: executor/functions.c:1483 +#: executor/functions.c:1484 #, c-format msgid "SQL function \"%s\" during startup" msgstr "SQL функція \"%s\" під час запуску" -#: executor/functions.c:1568 +#: executor/functions.c:1569 #, c-format msgid "calling procedures with output arguments is not supported in SQL functions" msgstr "виклик процедур з вихідними аргументами в функціях SQL не підтримується" -#: executor/functions.c:1701 executor/functions.c:1739 -#: executor/functions.c:1753 executor/functions.c:1843 -#: executor/functions.c:1876 executor/functions.c:1890 +#: executor/functions.c:1717 executor/functions.c:1755 +#: executor/functions.c:1769 executor/functions.c:1864 +#: executor/functions.c:1897 executor/functions.c:1911 #, c-format msgid "return type mismatch in function declared to return %s" msgstr "невідповідність типу повернення в функції, оголошеній як %s" -#: executor/functions.c:1703 +#: executor/functions.c:1719 #, c-format msgid "Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING." msgstr "Останнім оператором у функції повинен бути SELECT або INSERT/UPDATE/DELETE RETURNING." -#: executor/functions.c:1741 +#: executor/functions.c:1757 #, c-format msgid "Final statement must return exactly one column." msgstr "Останній оператор повинен вертати один стовпець." -#: executor/functions.c:1755 +#: executor/functions.c:1771 #, c-format msgid "Actual return type is %s." msgstr "Фактичний тип повернення: %s." -#: executor/functions.c:1845 +#: executor/functions.c:1866 #, c-format msgid "Final statement returns too many columns." msgstr "Останній оператор вертає дуже багато стовпців." -#: executor/functions.c:1878 +#: executor/functions.c:1899 #, c-format msgid "Final statement returns %s instead of %s at column %d." msgstr "Останній оператор поветрає %s замість %s для стовпця %d." -#: executor/functions.c:1892 +#: executor/functions.c:1913 #, c-format msgid "Final statement returns too few columns." msgstr "Останній оператор вертає дуже мало стовпців." -#: executor/functions.c:1920 +#: executor/functions.c:1941 #, c-format msgid "return type %s is not supported for SQL functions" msgstr "для SQL функцій тип повернення %s не підтримується" @@ -12503,7 +12568,7 @@ msgstr "для SQL функцій тип повернення %s не підтр msgid "unexpected EOF for tape %d: requested %zu bytes, read %zu bytes" msgstr "неочікуваний обрив для стрічки %d: запитано %zu байт, прочитано %zu байт" -#: executor/nodeAgg.c:3979 parser/parse_agg.c:672 parser/parse_agg.c:700 +#: executor/nodeAgg.c:3979 parser/parse_agg.c:677 parser/parse_agg.c:720 #, c-format msgid "aggregate function calls cannot be nested" msgstr "виклики агрегатних функцій не можуть бути вкладеними" @@ -12528,7 +12593,7 @@ msgstr "не вдалося перемотати назад тимчасовий msgid "could not read from hash-join temporary file: read only %zu of %zu bytes" msgstr "не вдалося прочитати тимчасовий файл хеш-з'єднання: прочитано лише %zu з %zu байт" -#: executor/nodeIndexonlyscan.c:240 +#: executor/nodeIndexonlyscan.c:242 #, c-format msgid "lossy distance functions are not supported in index-only scans" msgstr "функції неточної (lossy) дистанції не підтримуються в скануваннях лише по індексу" @@ -12553,32 +12618,37 @@ msgstr "RIGHT JOIN підтримується лише з умовами, які msgid "FULL JOIN is only supported with merge-joinable join conditions" msgstr "FULL JOIN підтримується лише з умовами, які допускають з'єднання злиттям" -#: executor/nodeModifyTable.c:156 +#: executor/nodeModifyTable.c:164 +#, c-format +msgid "Query provides a value for a generated column at ordinal position %d." +msgstr "Запит надає значення для згенерованого стовпця з порядковим номером %d." + +#: executor/nodeModifyTable.c:184 #, c-format msgid "Query has too few columns." msgstr "Запит повертає дуже мало стовпців." -#: executor/nodeModifyTable.c:1305 executor/nodeModifyTable.c:1379 +#: executor/nodeModifyTable.c:1333 executor/nodeModifyTable.c:1407 #, c-format msgid "tuple to be deleted was already modified by an operation triggered by the current command" -msgstr "кортеж, який підлягає видаленню, вже змінений в операції, яка викликана поточною командою." +msgstr "кортеж, який підлягає видаленню, вже змінений в операції, яка викликана поточною командою" -#: executor/nodeModifyTable.c:1583 +#: executor/nodeModifyTable.c:1611 #, c-format msgid "invalid ON UPDATE specification" msgstr "неприпустима специфікація ON UPDATE" -#: executor/nodeModifyTable.c:1584 +#: executor/nodeModifyTable.c:1612 #, c-format msgid "The result tuple would appear in a different partition than the original tuple." msgstr "Результуючий кортеж з'явиться в іншій секції в порівнянні з оригінальним кортежем." -#: executor/nodeModifyTable.c:2183 +#: executor/nodeModifyTable.c:2231 #, c-format msgid "ON CONFLICT DO UPDATE command cannot affect row a second time" msgstr "Команда ON CONFLICT DO UPDATE не може змінювати рядок вдруге" -#: executor/nodeModifyTable.c:2184 +#: executor/nodeModifyTable.c:2232 #, c-format msgid "Ensure that no rows proposed for insertion within the same command have duplicate constrained values." msgstr "Переконайтеся, що немає рядків для вставки з тією ж командою з дуплікованими обмежувальними значеннями." @@ -12593,8 +12663,8 @@ 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:306 executor/nodeSubplan.c:332 +#: executor/nodeSubplan.c:386 executor/nodeSubplan.c:1158 #, c-format msgid "more than one row returned by a subquery used as an expression" msgstr "підзапит, використаний в якості вираження, повернув більше ніж один рядок" @@ -12684,49 +12754,49 @@ msgstr "Перевірте наявність виклику \"SPI_finish\"." msgid "subtransaction left non-empty SPI stack" msgstr "підтранзакція залишила непорожню групу SPI" -#: executor/spi.c:1610 +#: executor/spi.c:1613 #, c-format msgid "cannot open multi-query plan as cursor" msgstr "неможливо відкрити план декількох запитів як курсор" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:1620 +#: executor/spi.c:1623 #, c-format msgid "cannot open %s query as cursor" msgstr "неможливо відкрити запит %s як курсор" -#: executor/spi.c:1726 +#: executor/spi.c:1729 #, c-format msgid "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported" msgstr "DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE не підтримується" -#: executor/spi.c:1727 parser/analyze.c:2853 +#: executor/spi.c:1730 parser/analyze.c:2865 #, c-format msgid "Scrollable cursors must be READ ONLY." msgstr "Курсори з прокручуванням повинні бути READ ONLY." -#: executor/spi.c:2482 +#: executor/spi.c:2503 #, c-format msgid "empty query does not return tuples" msgstr "пустий запит не повертає кортежі" #. translator: %s is name of a SQL command, eg INSERT -#: executor/spi.c:2556 +#: executor/spi.c:2577 #, c-format msgid "%s query does not return tuples" msgstr "%s запит не повертає кортежі" -#: executor/spi.c:2968 +#: executor/spi.c:2988 #, c-format msgid "SQL expression \"%s\"" msgstr "SQL вираз \"%s\"" -#: executor/spi.c:2973 +#: executor/spi.c:2993 #, c-format msgid "PL/pgSQL assignment \"%s\"" msgstr "PL/pgSQL присвоєння \"%s\"" -#: executor/spi.c:2976 +#: executor/spi.c:2996 #, c-format msgid "SQL statement \"%s\"" msgstr "SQL-оператор \"%s\"" @@ -12736,17 +12806,23 @@ msgstr "SQL-оператор \"%s\"" msgid "could not send tuple to shared-memory queue" msgstr "не вдалося передати кортеж у чергу в спільну пам'ять" -#: foreign/foreign.c:220 +#: foreign/foreign.c:221 #, c-format msgid "user mapping not found for \"%s\"" msgstr "зіставлення користувача \"%s\" не знайдено" -#: foreign/foreign.c:672 +#: foreign/foreign.c:331 optimizer/plan/createplan.c:7049 +#: optimizer/util/plancat.c:474 +#, c-format +msgid "access to non-system foreign table is restricted" +msgstr "доступ до не системної сторонньої таблиці обмежено" + +#: foreign/foreign.c:682 #, c-format msgid "invalid option \"%s\"" msgstr "недійсний параметр \"%s\"" -#: foreign/foreign.c:673 +#: foreign/foreign.c:683 #, c-format msgid "Valid options in this context are: %s" msgstr "У цьому контексті припустимі параметри: %s" @@ -12912,428 +12988,428 @@ msgstr "Неправильне підтвердження в останньом msgid "Garbage found at the end of client-final-message." msgstr "Сміття знайдено в кінці останнього повідомлення клієнта." -#: libpq/auth.c:284 +#: libpq/auth.c:292 #, c-format msgid "authentication failed for user \"%s\": host rejected" msgstr "користувач \"%s\" не пройшов автентифікацію: відхилений хост" -#: libpq/auth.c:287 +#: libpq/auth.c:295 #, c-format msgid "\"trust\" authentication failed for user \"%s\"" msgstr "користувач \"%s\" не пройшов автентифікацію \"trust\"" -#: libpq/auth.c:290 +#: libpq/auth.c:298 #, c-format msgid "Ident authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію Ident" -#: libpq/auth.c:293 +#: libpq/auth.c:301 #, c-format msgid "Peer authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію Peer" -#: libpq/auth.c:298 +#: libpq/auth.c:306 #, c-format msgid "password authentication failed for user \"%s\"" msgstr "користувач \"%s\" не пройшов автентифікацію за допомогою пароля" -#: libpq/auth.c:303 +#: libpq/auth.c:311 #, c-format msgid "GSSAPI authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію GSSAPI" -#: libpq/auth.c:306 +#: libpq/auth.c:314 #, c-format msgid "SSPI authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію SSPI" -#: libpq/auth.c:309 +#: libpq/auth.c:317 #, c-format msgid "PAM authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію PAM" -#: libpq/auth.c:312 +#: libpq/auth.c:320 #, c-format msgid "BSD authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію BSD" -#: libpq/auth.c:315 +#: libpq/auth.c:323 #, c-format msgid "LDAP authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію LDAP" -#: libpq/auth.c:318 +#: libpq/auth.c:326 #, c-format msgid "certificate authentication failed for user \"%s\"" msgstr "користувач \"%s\" не пройшов автентифікацію за сертифікатом" -#: libpq/auth.c:321 +#: libpq/auth.c:329 #, c-format msgid "RADIUS authentication failed for user \"%s\"" msgstr "Користувач \"%s\" не пройшов автентифікацію RADIUS" -#: libpq/auth.c:324 +#: libpq/auth.c:332 #, c-format msgid "authentication failed for user \"%s\": invalid authentication method" msgstr "користувач \"%s\" не пройшов автентифікацію: неприпустимий метод автентифікації" -#: libpq/auth.c:328 +#: libpq/auth.c:336 #, c-format msgid "Connection matched pg_hba.conf line %d: \"%s\"" msgstr "З'єднання відповідає рядку %d в pg_hba.conf: \"%s\"" -#: libpq/auth.c:371 +#: libpq/auth.c:379 #, c-format msgid "authentication identifier set more than once" msgstr "ідентифікатор автентифікації встановлено більш ніж один раз" -#: libpq/auth.c:372 +#: libpq/auth.c:380 #, c-format msgid "previous identifier: \"%s\"; new identifier: \"%s\"" msgstr "попередній ідентифікатор: \"%s\"; новий ідентифікатор: \"%s\"" -#: libpq/auth.c:381 +#: libpq/auth.c:389 #, c-format msgid "connection authenticated: identity=\"%s\" method=%s (%s:%d)" msgstr "підключення автентифіковано: ідентифікатор=\"%s\" метод=%s (%s:%d)" -#: libpq/auth.c:420 +#: libpq/auth.c:428 #, c-format msgid "client certificates can only be checked if a root certificate store is available" msgstr "сертифікати клієнтів можуть перевірятися, лише якщо доступне сховище кореневих сертифікатів" -#: libpq/auth.c:431 +#: libpq/auth.c:439 #, c-format msgid "connection requires a valid client certificate" msgstr "підключення потребує припустимий сертифікат клієнта" -#: libpq/auth.c:462 libpq/auth.c:508 +#: libpq/auth.c:470 libpq/auth.c:516 msgid "GSS encryption" msgstr "Шифрування GSS" -#: libpq/auth.c:465 libpq/auth.c:511 +#: libpq/auth.c:473 libpq/auth.c:519 msgid "SSL encryption" msgstr "Шифрування SSL" -#: libpq/auth.c:467 libpq/auth.c:513 +#: libpq/auth.c:475 libpq/auth.c:521 msgid "no encryption" msgstr "без шифрування" #. translator: last %s describes encryption state -#: libpq/auth.c:473 +#: libpq/auth.c:481 #, 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:480 +#: libpq/auth.c:488 #, 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:518 +#: libpq/auth.c:526 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup matches." msgstr "IP-адреса клієнта дозволяється в \"%s\", відповідає прямому перетворенню." -#: libpq/auth.c:521 +#: libpq/auth.c:529 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup not checked." msgstr "IP-адреса клієнта дозволяється в \"%s\", пряме перетворення не перевірялося." -#: libpq/auth.c:524 +#: libpq/auth.c:532 #, c-format msgid "Client IP address resolved to \"%s\", forward lookup does not match." msgstr "IP-адреса клієнта дозволяється в \"%s\", не відповідає прямому перетворенню." -#: libpq/auth.c:527 +#: libpq/auth.c:535 #, c-format msgid "Could not translate client host name \"%s\" to IP address: %s." msgstr "Перекласти ім'я клієнтського хосту \"%s\" в IP-адресу: %s, не вдалося." -#: libpq/auth.c:532 +#: libpq/auth.c:540 #, 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:540 +#: libpq/auth.c:548 #, 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:548 +#: libpq/auth.c:556 #, 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:721 +#: libpq/auth.c:729 #, c-format msgid "expected password response, got message type %d" msgstr "очікувалася відповід з паролем, але отримано тип повідомлення %d" -#: libpq/auth.c:742 +#: libpq/auth.c:750 #, c-format msgid "invalid password packet size" msgstr "неприпустимий розмір пакету з паролем" -#: libpq/auth.c:760 +#: libpq/auth.c:768 #, c-format msgid "empty password returned by client" msgstr "клієнт повернув пустий пароль" -#: libpq/auth.c:887 libpq/hba.c:1366 +#: libpq/auth.c:893 libpq/hba.c:1366 #, c-format msgid "MD5 authentication is not supported when \"db_user_namespace\" is enabled" msgstr "Автентифікація MD5 не підтримується, коли увімкнуто режим \"db_user_namespace\"" -#: libpq/auth.c:893 +#: libpq/auth.c:899 #, c-format msgid "could not generate random MD5 salt" msgstr "не вдалося створити випадкову сіль для MD5" -#: libpq/auth.c:959 +#: libpq/auth.c:965 #, c-format msgid "expected SASL response, got message type %d" msgstr "очікувалася відповідь SASL, але отримано тип повідомлення %d" -#: libpq/auth.c:1088 libpq/be-secure-gssapi.c:535 +#: libpq/auth.c:1094 libpq/be-secure-gssapi.c:545 #, c-format msgid "could not set environment: %m" msgstr "не вдалося встановити середовище: %m" -#: libpq/auth.c:1124 +#: libpq/auth.c:1130 #, c-format msgid "expected GSS response, got message type %d" msgstr "очікувалася відповідь GSS, але отримано тип повідомлення %d" -#: libpq/auth.c:1184 +#: libpq/auth.c:1190 msgid "accepting GSS security context failed" msgstr "прийняти контекст безпеки GSS не вдалось" -#: libpq/auth.c:1225 +#: libpq/auth.c:1231 msgid "retrieving GSS user name failed" msgstr "отримання ім'я користувача GSS не виконано" -#: libpq/auth.c:1374 +#: libpq/auth.c:1380 msgid "could not acquire SSPI credentials" msgstr "не вдалось отримати облікові дані SSPI" -#: libpq/auth.c:1399 +#: libpq/auth.c:1405 #, c-format msgid "expected SSPI response, got message type %d" msgstr "очікувалась відповідь SSPI, але отримано тип повідомлення %d" -#: libpq/auth.c:1477 +#: libpq/auth.c:1483 msgid "could not accept SSPI security context" msgstr "прийняти контекст безпеки SSPI не вдалося" -#: libpq/auth.c:1539 +#: libpq/auth.c:1545 msgid "could not get token from SSPI security context" msgstr "не вдалося отримати маркер з контексту безпеки SSPI" -#: libpq/auth.c:1678 libpq/auth.c:1697 +#: libpq/auth.c:1684 libpq/auth.c:1703 #, c-format msgid "could not translate name" msgstr "не вдалося перекласти ім'я" -#: libpq/auth.c:1710 +#: libpq/auth.c:1716 #, c-format msgid "realm name too long" msgstr "ім'я області дуже довге" -#: libpq/auth.c:1725 +#: libpq/auth.c:1731 #, c-format msgid "translated account name too long" msgstr "ім'я перекладеного облікового запису дуже довге" -#: libpq/auth.c:1906 +#: libpq/auth.c:1912 #, c-format msgid "could not create socket for Ident connection: %m" msgstr "не вдалося створити сокет для підключення до серверу Ident: %m" -#: libpq/auth.c:1921 +#: libpq/auth.c:1927 #, c-format msgid "could not bind to local address \"%s\": %m" msgstr "не вдалося прив'язатися до локальної адреси \"%s\": %m" -#: libpq/auth.c:1933 +#: libpq/auth.c:1939 #, c-format msgid "could not connect to Ident server at address \"%s\", port %s: %m" msgstr "не вдалося підключитися до Ident-серверу за адресою \"%s\", порт %s: %m" -#: libpq/auth.c:1955 +#: libpq/auth.c:1961 #, c-format msgid "could not send query to Ident server at address \"%s\", port %s: %m" msgstr "не вдалося надіслати запит до Ident -серверу за адресою \"%s\", порт %s: %m" -#: libpq/auth.c:1972 +#: libpq/auth.c:1978 #, c-format msgid "could not receive response from Ident server at address \"%s\", port %s: %m" msgstr "не вдалося отримати відповідь від Ident-серверу за адресою \"%s\", порт %s: %m" -#: libpq/auth.c:1982 +#: libpq/auth.c:1988 #, c-format msgid "invalidly formatted response from Ident server: \"%s\"" msgstr "неприпустимо форматована відповідь від Ident-серверу: \"%s\"" -#: libpq/auth.c:2035 +#: libpq/auth.c:2041 #, c-format msgid "peer authentication is not supported on this platform" msgstr "автентифікація peer не підтримується на цій платформі" -#: libpq/auth.c:2039 +#: libpq/auth.c:2045 #, c-format msgid "could not get peer credentials: %m" msgstr "не вдалося отримати облікові дані користувача через peer: %m" -#: libpq/auth.c:2051 +#: libpq/auth.c:2057 #, c-format msgid "could not look up local user ID %ld: %s" msgstr "не вдалося знайти локального користувача за ідентифікатором (%ld): %s" -#: libpq/auth.c:2152 +#: libpq/auth.c:2158 #, c-format msgid "error from underlying PAM layer: %s" msgstr "помилка у нижчому шарі PAM: %s" -#: libpq/auth.c:2163 +#: libpq/auth.c:2169 #, c-format msgid "unsupported PAM conversation %d/\"%s\"" msgstr "непідтримувана розмова PAM %d/\"%s\"" -#: libpq/auth.c:2223 +#: libpq/auth.c:2229 #, c-format msgid "could not create PAM authenticator: %s" msgstr "не вдалося створити автентифікатор PAM: %s" -#: libpq/auth.c:2234 +#: libpq/auth.c:2240 #, c-format msgid "pam_set_item(PAM_USER) failed: %s" msgstr "помилка в pam_set_item(PAM_USER): %s" -#: libpq/auth.c:2266 +#: libpq/auth.c:2272 #, c-format msgid "pam_set_item(PAM_RHOST) failed: %s" msgstr "помилка в pam_set_item(PAM_RHOST): %s" -#: libpq/auth.c:2278 +#: libpq/auth.c:2284 #, c-format msgid "pam_set_item(PAM_CONV) failed: %s" msgstr "помилка в pam_set_item(PAM_CONV): %s" -#: libpq/auth.c:2291 +#: libpq/auth.c:2297 #, c-format msgid "pam_authenticate failed: %s" msgstr "помилка в pam_authenticate: %sв" -#: libpq/auth.c:2304 +#: libpq/auth.c:2310 #, c-format msgid "pam_acct_mgmt failed: %s" msgstr "помилка в pam_acct_mgmt: %s" -#: libpq/auth.c:2315 +#: libpq/auth.c:2321 #, c-format msgid "could not release PAM authenticator: %s" msgstr "не вдалося вивільнити автентифікатор PAM: %s" -#: libpq/auth.c:2395 +#: libpq/auth.c:2401 #, c-format msgid "could not initialize LDAP: error code %d" msgstr "не вдалося ініціалізувати протокол LDAP: код помилки %d" -#: libpq/auth.c:2432 +#: libpq/auth.c:2438 #, c-format msgid "could not extract domain name from ldapbasedn" msgstr "не вдалося отримати назву домена з ldapbasedn" -#: libpq/auth.c:2440 +#: libpq/auth.c:2446 #, c-format msgid "LDAP authentication could not find DNS SRV records for \"%s\"" msgstr "Автентифікація LDAP не змогла знайти записи DNS SRV для \"%s\"" -#: libpq/auth.c:2442 +#: libpq/auth.c:2448 #, c-format msgid "Set an LDAP server name explicitly." msgstr "Встановіть назву сервера LDAP, явно." -#: libpq/auth.c:2494 +#: libpq/auth.c:2500 #, c-format msgid "could not initialize LDAP: %s" msgstr "не вдалося ініціалізувати протокол LDAP: %s" -#: libpq/auth.c:2504 +#: libpq/auth.c:2510 #, c-format msgid "ldaps not supported with this LDAP library" msgstr "протокол ldaps з поточною бібліотекою LDAP не підтримується" -#: libpq/auth.c:2512 +#: libpq/auth.c:2518 #, c-format msgid "could not initialize LDAP: %m" msgstr "не вдалося ініціалізувати протокол LDAP: %m" -#: libpq/auth.c:2522 +#: libpq/auth.c:2528 #, c-format msgid "could not set LDAP protocol version: %s" msgstr "не вдалося встановити версію протоколу LDAP: %s" -#: libpq/auth.c:2562 +#: libpq/auth.c:2568 #, c-format msgid "could not load function _ldap_start_tls_sA in wldap32.dll" msgstr "не вдалося завантажити функцію _ldap_start_tls_sA in wldap32.dll" -#: libpq/auth.c:2563 +#: libpq/auth.c:2569 #, c-format msgid "LDAP over SSL is not supported on this platform." msgstr "Протокол LDAP через протокол SSL не підтримується на цій платформі." -#: libpq/auth.c:2579 +#: libpq/auth.c:2585 #, c-format msgid "could not start LDAP TLS session: %s" msgstr "не вдалося почати сеанс протоколу LDAP TLS: %s" -#: libpq/auth.c:2650 +#: libpq/auth.c:2656 #, c-format msgid "LDAP server not specified, and no ldapbasedn" msgstr "Сервер LDAP не вказаний, і не ldapbasedn" -#: libpq/auth.c:2657 +#: libpq/auth.c:2663 #, c-format msgid "LDAP server not specified" msgstr "LDAP-сервер не вказаний" -#: libpq/auth.c:2719 +#: libpq/auth.c:2725 #, c-format msgid "invalid character in user name for LDAP authentication" msgstr "неприпустимий символ в імені користувача для автентифікації LDAP" -#: libpq/auth.c:2736 +#: libpq/auth.c:2742 #, 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:2765 +#: libpq/auth.c:2771 #, c-format msgid "could not search LDAP for filter \"%s\" on server \"%s\": %s" msgstr "не вдалося виконати LDAP-пошук за фільтром \"%s\" на сервері \"%s\": %s" -#: libpq/auth.c:2779 +#: libpq/auth.c:2785 #, c-format msgid "LDAP user \"%s\" does not exist" msgstr "LDAP-користувач \"%s\" не існує" -#: libpq/auth.c:2780 +#: libpq/auth.c:2786 #, c-format msgid "LDAP search for filter \"%s\" on server \"%s\" returned no entries." msgstr "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" не повернув записів." -#: libpq/auth.c:2784 +#: libpq/auth.c:2790 #, c-format msgid "LDAP user \"%s\" is not unique" msgstr "LDAP-користувач \"%s\" не унікальний" -#: libpq/auth.c:2785 +#: libpq/auth.c:2791 #, 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." @@ -13342,137 +13418,137 @@ msgstr[1] "LDAP-пошук за фільтром \"%s\" на сервері \"%s msgstr[2] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." msgstr[3] "LDAP-пошук за фільтром \"%s\" на сервері \"%s\" повернув %d записів." -#: libpq/auth.c:2805 +#: libpq/auth.c:2811 #, 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:2826 +#: libpq/auth.c:2832 #, c-format msgid "could not unbind after searching for user \"%s\" on server \"%s\"" msgstr "не вдалося відв'язатись після пошуку користувача \"%s\" на сервері \"%s\"" -#: libpq/auth.c:2857 +#: libpq/auth.c:2863 #, c-format msgid "LDAP login failed for user \"%s\" on server \"%s\": %s" msgstr "Помилка під час реєстрації в протоколі LDAP користувача \"%s\" на сервері \"%s\": %s" -#: libpq/auth.c:2889 +#: libpq/auth.c:2895 #, c-format msgid "LDAP diagnostics: %s" msgstr "Діагностика LDAP: %s" -#: libpq/auth.c:2927 +#: libpq/auth.c:2933 #, c-format msgid "certificate authentication failed for user \"%s\": client certificate contains no user name" msgstr "помилка автентифікації сертифіката для користувача \"%s\": сертифікат клієнта не містить імені користувача" -#: libpq/auth.c:2948 +#: libpq/auth.c:2954 #, c-format msgid "certificate authentication failed for user \"%s\": unable to retrieve subject DN" msgstr "помилка автентифікації сертифікату для користувача \"%s\": не вдалося отримати DN суб'єкта" -#: libpq/auth.c:2971 +#: libpq/auth.c:2977 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": DN mismatch" msgstr "помилка перевірки сертифікату (clientcert=verify-full) для користувача \"%s\": DN невідповідність" -#: libpq/auth.c:2976 +#: libpq/auth.c:2982 #, c-format msgid "certificate validation (clientcert=verify-full) failed for user \"%s\": CN mismatch" msgstr "помилка перевірки сертифікату (clientcert=verify-full) для користувача \"%s\": CN невідповідність" -#: libpq/auth.c:3078 +#: libpq/auth.c:3084 #, c-format msgid "RADIUS server not specified" msgstr "RADIUS-сервер не вказаний" -#: libpq/auth.c:3085 +#: libpq/auth.c:3091 #, c-format msgid "RADIUS secret not specified" msgstr "Секрет RADIUS не вказаний" -#: libpq/auth.c:3099 +#: libpq/auth.c:3105 #, c-format msgid "RADIUS authentication does not support passwords longer than %d characters" msgstr "Автентифікація RADIUS не підтримує паролі довші ніж %d символів" -#: libpq/auth.c:3206 libpq/hba.c:2008 +#: libpq/auth.c:3212 libpq/hba.c:2008 #, c-format msgid "could not translate RADIUS server name \"%s\" to address: %s" msgstr "не вдалося перетворити ім'я серверу RADIUS \"%s\" в адресу: %s" -#: libpq/auth.c:3220 +#: libpq/auth.c:3226 #, c-format msgid "could not generate random encryption vector" msgstr "не вдалося створити випадковий вектор шифрування" -#: libpq/auth.c:3254 +#: libpq/auth.c:3260 #, c-format msgid "could not perform MD5 encryption of password" msgstr "не вдалося виконати MD5 шифрування паролю" -#: libpq/auth.c:3280 +#: libpq/auth.c:3286 #, c-format msgid "could not create RADIUS socket: %m" msgstr "не вдалося створити сокет RADIUS: %m" -#: libpq/auth.c:3302 +#: libpq/auth.c:3308 #, c-format msgid "could not bind local RADIUS socket: %m" msgstr "не вдалося прив'язатися до локального сокету RADIUS: %m" -#: libpq/auth.c:3312 +#: libpq/auth.c:3318 #, c-format msgid "could not send RADIUS packet: %m" msgstr "не вдалося відправити пакет RADIUS: %m" -#: libpq/auth.c:3345 libpq/auth.c:3371 +#: libpq/auth.c:3351 libpq/auth.c:3377 #, c-format msgid "timeout waiting for RADIUS response from %s" msgstr "перевищено час очікування відповіді RADIUS від %s" -#: libpq/auth.c:3364 +#: libpq/auth.c:3370 #, c-format msgid "could not check status on RADIUS socket: %m" msgstr "не вдалося перевірити статус сокету RADIUS: %m" -#: libpq/auth.c:3394 +#: libpq/auth.c:3400 #, c-format msgid "could not read RADIUS response: %m" msgstr "не вдалося прочитати відповідь RADIUS: %m" -#: libpq/auth.c:3407 libpq/auth.c:3411 +#: libpq/auth.c:3413 libpq/auth.c:3417 #, c-format msgid "RADIUS response from %s was sent from incorrect port: %d" msgstr "Відповідь RADIUS від %s була відправлена з неправильного порту: %d" -#: libpq/auth.c:3420 +#: libpq/auth.c:3426 #, c-format msgid "RADIUS response from %s too short: %d" msgstr "Занадто коротка відповідь RADIUS від %s: %d" -#: libpq/auth.c:3427 +#: libpq/auth.c:3433 #, c-format msgid "RADIUS response from %s has corrupt length: %d (actual length %d)" msgstr "У відповіді RADIUS від %s покшоджена довжина: %d (фактична довжина %d)" -#: libpq/auth.c:3435 +#: libpq/auth.c:3441 #, c-format msgid "RADIUS response from %s is to a different request: %d (should be %d)" msgstr "Прийшла відповідь RADIUS від %s на інший запит: %d (очікувалася %d)" -#: libpq/auth.c:3460 +#: libpq/auth.c:3466 #, c-format msgid "could not perform MD5 encryption of received packet" msgstr "не вдалося виконати шифрування MD5 для отриманого пакету" -#: libpq/auth.c:3469 +#: libpq/auth.c:3475 #, c-format msgid "RADIUS response from %s has incorrect MD5 signature" msgstr "Відповідь RADIUS від %s має неправильний підпис MD5" -#: libpq/auth.c:3487 +#: libpq/auth.c:3493 #, c-format msgid "RADIUS response from %s has invalid code (%d) for user \"%s\"" msgstr "Відповідь RADIUS від %s має неприпустимий код (%d) для користувача \"%s\"" @@ -13577,44 +13653,39 @@ 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) або менше, якщо він належить кореню." -#: libpq/be-secure-gssapi.c:201 +#: libpq/be-secure-gssapi.c:208 msgid "GSSAPI wrap error" msgstr "помилка при згортанні GSSAPI" -#: libpq/be-secure-gssapi.c:208 +#: libpq/be-secure-gssapi.c:215 #, c-format msgid "outgoing GSSAPI message would not use confidentiality" msgstr "вихідне повідомлення GSSAPI не буде використовувати конфіденційність" -#: libpq/be-secure-gssapi.c:215 libpq/be-secure-gssapi.c:622 +#: libpq/be-secure-gssapi.c:222 libpq/be-secure-gssapi.c:632 #, 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:358 libpq/be-secure-gssapi.c:580 #, 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:396 msgid "GSSAPI unwrap error" msgstr "помилка при розгортанні GSSAPI" -#: libpq/be-secure-gssapi.c:396 +#: libpq/be-secure-gssapi.c:403 #, c-format msgid "incoming GSSAPI message did not use confidentiality" msgstr "вхідне повідомлення GSSAPI не використовувало конфіденційність" -#: libpq/be-secure-gssapi.c:570 -#, c-format -msgid "oversize GSSAPI packet sent by the client (%zu > %d)" -msgstr "переповнений пакет GSSAPI, надісланий клієнтом (%zu > %d)" - -#: libpq/be-secure-gssapi.c:594 +#: libpq/be-secure-gssapi.c:604 msgid "could not accept GSSAPI security context" msgstr "не вдалося прийняти контекст безпеки GSSAPI" -#: libpq/be-secure-gssapi.c:689 +#: libpq/be-secure-gssapi.c:716 msgid "GSSAPI size check error" msgstr "помилка перевірки розміру GSSAPI" @@ -13669,152 +13740,152 @@ msgstr "не вдалося встановити діапазон версій msgid "\"%s\" cannot be higher than \"%s\"" msgstr "\"%s\" не може бути більше, ніж \"%s\"" -#: libpq/be-secure-openssl.c:275 +#: libpq/be-secure-openssl.c:286 #, c-format msgid "could not set the cipher list (no valid ciphers available)" msgstr "не вдалося встановити список шифрів (немає дійсних шифрів)" -#: libpq/be-secure-openssl.c:295 +#: libpq/be-secure-openssl.c:306 #, c-format msgid "could not load root certificate file \"%s\": %s" msgstr "не вдалося завантажити файл кореневого сертифікату \"%s\": %s" -#: libpq/be-secure-openssl.c:344 +#: libpq/be-secure-openssl.c:355 #, c-format msgid "could not load SSL certificate revocation list file \"%s\": %s" msgstr "не вдалося завантажити файл зі списком відкликаних сертифікатів SSL \"%s\": %s" -#: libpq/be-secure-openssl.c:352 +#: libpq/be-secure-openssl.c:363 #, c-format msgid "could not load SSL certificate revocation list directory \"%s\": %s" msgstr "не вдалося завантажити каталог списку відкликаних сертифікатів SSL \"%s\": %s" -#: libpq/be-secure-openssl.c:360 +#: libpq/be-secure-openssl.c:371 #, 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:418 +#: libpq/be-secure-openssl.c:429 #, c-format msgid "could not initialize SSL connection: SSL context not set up" msgstr "не вдалося ініціалізувати SSL-підключення: контекст SSL не встановлений" -#: libpq/be-secure-openssl.c:429 +#: libpq/be-secure-openssl.c:440 #, c-format msgid "could not initialize SSL connection: %s" msgstr "не вдалося ініціалізувати SSL-підключення: %s" -#: libpq/be-secure-openssl.c:437 +#: libpq/be-secure-openssl.c:448 #, c-format msgid "could not set SSL socket: %s" msgstr "не вдалося встановити SSL-сокет: %s" -#: libpq/be-secure-openssl.c:493 +#: libpq/be-secure-openssl.c:504 #, c-format msgid "could not accept SSL connection: %m" msgstr "не вдалося прийняти SSL-підключення: %m" -#: libpq/be-secure-openssl.c:497 libpq/be-secure-openssl.c:550 +#: libpq/be-secure-openssl.c:508 libpq/be-secure-openssl.c:561 #, c-format msgid "could not accept SSL connection: EOF detected" msgstr "не вдалося прийняти SSL-підключення: виявлений EOF" -#: libpq/be-secure-openssl.c:536 +#: libpq/be-secure-openssl.c:547 #, c-format msgid "could not accept SSL connection: %s" msgstr "не вдалося отримати підключення SSL: %s" -#: libpq/be-secure-openssl.c:539 +#: libpq/be-secure-openssl.c:550 #, 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:555 libpq/be-secure-openssl.c:735 -#: libpq/be-secure-openssl.c:805 +#: libpq/be-secure-openssl.c:566 libpq/be-secure-openssl.c:746 +#: libpq/be-secure-openssl.c:816 #, c-format msgid "unrecognized SSL error code: %d" msgstr "нерозпізнаний код помилки SSL: %d" -#: libpq/be-secure-openssl.c:601 +#: libpq/be-secure-openssl.c:612 #, c-format msgid "SSL certificate's common name contains embedded null" msgstr "Спільне ім'я SSL-сертифікату містить нульовий байт" -#: libpq/be-secure-openssl.c:641 +#: libpq/be-secure-openssl.c:652 #, c-format msgid "SSL certificate's distinguished name contains embedded null" msgstr "Унікальна назва сертифікату SSL містить вбудоване null-значення" -#: libpq/be-secure-openssl.c:724 libpq/be-secure-openssl.c:789 +#: libpq/be-secure-openssl.c:735 libpq/be-secure-openssl.c:800 #, c-format msgid "SSL error: %s" msgstr "Помилка SSL: %s" -#: libpq/be-secure-openssl.c:966 +#: libpq/be-secure-openssl.c:977 #, c-format msgid "could not open DH parameters file \"%s\": %m" msgstr "не вдалося відкрити файл параметрів DH \"%s\": %m" -#: libpq/be-secure-openssl.c:978 +#: libpq/be-secure-openssl.c:989 #, c-format msgid "could not load DH parameters file: %s" msgstr "не вдалося завантажити файл параметрів DH: %s" -#: libpq/be-secure-openssl.c:988 +#: libpq/be-secure-openssl.c:999 #, c-format msgid "invalid DH parameters: %s" msgstr "неприпустимі параметри DH: %s" -#: libpq/be-secure-openssl.c:997 +#: libpq/be-secure-openssl.c:1008 #, c-format msgid "invalid DH parameters: p is not prime" msgstr "неприпустимі параметри DH: р - не штрих" -#: libpq/be-secure-openssl.c:1006 +#: libpq/be-secure-openssl.c:1017 #, c-format msgid "invalid DH parameters: neither suitable generator or safe prime" msgstr "неприпустимі параметри DH: немає придатного генератора або безпечного штриха" -#: libpq/be-secure-openssl.c:1167 +#: libpq/be-secure-openssl.c:1178 #, c-format msgid "DH: could not load DH parameters" msgstr "DH: не вдалося завантажити параметри DH" -#: libpq/be-secure-openssl.c:1175 +#: libpq/be-secure-openssl.c:1186 #, c-format msgid "DH: could not set DH parameters: %s" msgstr "DH: не вдалося встановити параметри DH: %s" -#: libpq/be-secure-openssl.c:1202 +#: libpq/be-secure-openssl.c:1213 #, c-format msgid "ECDH: unrecognized curve name: %s" msgstr "ECDH: нерозпізнане ім'я кривої: %s" -#: libpq/be-secure-openssl.c:1211 +#: libpq/be-secure-openssl.c:1222 #, c-format msgid "ECDH: could not create key" msgstr "ECDH: не вдалося створити ключ" -#: libpq/be-secure-openssl.c:1239 +#: libpq/be-secure-openssl.c:1250 msgid "no SSL error reported" msgstr "немає повідомлення про помилку SSL" -#: libpq/be-secure-openssl.c:1243 +#: libpq/be-secure-openssl.c:1268 #, c-format msgid "SSL error code %lu" msgstr "Код помилки SSL %lu" -#: libpq/be-secure-openssl.c:1402 +#: libpq/be-secure-openssl.c:1427 #, c-format msgid "could not create BIO" msgstr "неможливо створити BIO" -#: libpq/be-secure-openssl.c:1412 +#: libpq/be-secure-openssl.c:1437 #, c-format msgid "could not get NID for ASN1_OBJECT object" msgstr "не вдалося отримати NID для об'єкту ASN1_OBJECT" -#: libpq/be-secure-openssl.c:1420 +#: libpq/be-secure-openssl.c:1445 #, c-format msgid "could not convert NID %d to an ASN1_OBJECT structure" msgstr "не вдалося перетворити NID %d в структуру ASN1_OBJECT" @@ -13950,7 +14021,7 @@ msgstr "запис hostgssenc не може збігатись, оскільки #: libpq/hba.c:1055 #, c-format msgid "Compile with --with-gssapi to use GSSAPI connections." -msgstr "Скомпілюйте з --with-gssapi, щоб використовувати GSSAPI з'єднання." +msgstr "Скомпілюйте з --with-gssapi, щоб використовувати GSSAPI з'єднання." #: libpq/hba.c:1075 #, c-format @@ -14199,7 +14270,7 @@ msgstr "не вдалося проаналізувати список ідент msgid "unrecognized authentication option name: \"%s\"" msgstr "нерозпізнане ім’я параметра автентифікації: \"%s\"" -#: libpq/hba.c:2255 libpq/hba.c:2669 guc-file.l:632 +#: libpq/hba.c:2255 libpq/hba.c:2673 guc-file.l:632 #, c-format msgid "could not open configuration file \"%s\": %m" msgstr "не вдалося відкрити файл конфігурації \"%s\": %m" @@ -14209,203 +14280,203 @@ msgstr "не вдалося відкрити файл конфігурації \ msgid "configuration file \"%s\" contains no entries" msgstr "файл конфігурації \"%s\" не містить елементів" -#: libpq/hba.c:2824 +#: libpq/hba.c:2828 #, c-format msgid "invalid regular expression \"%s\": %s" msgstr "недійсний регулярний вираз \"%s\": %s" -#: libpq/hba.c:2884 +#: libpq/hba.c:2888 #, c-format msgid "regular expression match for \"%s\" failed: %s" msgstr "помилка при пошуку за регулярним виразом для \"%s\": %s" -#: libpq/hba.c:2903 +#: libpq/hba.c:2907 #, c-format msgid "regular expression \"%s\" has no subexpressions as requested by backreference in \"%s\"" msgstr "регулярний вираз \"%s не містить підвиразів, необхідних для зворотного посилання в \"%s\"" -#: libpq/hba.c:2999 +#: libpq/hba.c:3003 #, c-format msgid "provided user name (%s) and authenticated user name (%s) do not match" msgstr "вказане ім'я користувача (%s) і автентифіковане ім'я користувача (%s) не збігаються" -#: libpq/hba.c:3019 +#: libpq/hba.c:3023 #, c-format msgid "no match in usermap \"%s\" for user \"%s\" authenticated as \"%s\"" msgstr "немає відповідності у файлі зіставлень \"%s\" для користувача \"%s\" автентифікованого як \"%s\"" -#: libpq/hba.c:3052 +#: libpq/hba.c:3056 #, c-format msgid "could not open usermap file \"%s\": %m" msgstr "не вдалося відкрити файл usermap: \"%s\": %m" -#: libpq/pqcomm.c:204 +#: libpq/pqcomm.c:200 #, c-format msgid "could not set socket to nonblocking mode: %m" msgstr "не вдалося перевести сокет у неблокуючий режим: %m" -#: libpq/pqcomm.c:362 +#: libpq/pqcomm.c:358 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)" msgstr "Шлях Unix-сокету \"%s\" занадто довгий (максимум %d байтів)" -#: libpq/pqcomm.c:383 +#: libpq/pqcomm.c:379 #, c-format msgid "could not translate host name \"%s\", service \"%s\" to address: %s" msgstr "не вдалось перекласти ім'я хоста \"%s\", служби \"%s\" в адресу: %s" -#: libpq/pqcomm.c:387 +#: libpq/pqcomm.c:383 #, c-format msgid "could not translate service \"%s\" to address: %s" msgstr "не вдалось перекласти службу \"%s\" в адресу: %s" -#: libpq/pqcomm.c:414 +#: libpq/pqcomm.c:410 #, c-format msgid "could not bind to all requested addresses: MAXLISTEN (%d) exceeded" msgstr "не вдалось прив'язатись до всіх запитаних адрес: MAXLISTEN (%d) перевищено" -#: libpq/pqcomm.c:423 +#: libpq/pqcomm.c:419 msgid "IPv4" msgstr "IPv4" -#: libpq/pqcomm.c:427 +#: libpq/pqcomm.c:423 msgid "IPv6" msgstr "IPv6" -#: libpq/pqcomm.c:432 +#: libpq/pqcomm.c:428 msgid "Unix" msgstr "Unix" -#: libpq/pqcomm.c:437 +#: libpq/pqcomm.c:433 #, c-format msgid "unrecognized address family %d" msgstr "нерозпізнане сімейство адресів %d" #. translator: first %s is IPv4, IPv6, or Unix -#: libpq/pqcomm.c:463 +#: libpq/pqcomm.c:459 #, 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:489 libpq/pqcomm.c:507 +#: libpq/pqcomm.c:485 libpq/pqcomm.c:503 #, 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:530 +#: libpq/pqcomm.c:526 #, c-format msgid "could not bind %s address \"%s\": %m" msgstr "не вдалось прив'язатись до адреси %s \"%s\": %m" -#: libpq/pqcomm.c:534 +#: libpq/pqcomm.c:530 #, c-format msgid "Is another postmaster already running on port %d?" msgstr "Можливо інший процес postmaster вже виконується на порті %d?" -#: libpq/pqcomm.c:536 +#: libpq/pqcomm.c:532 #, 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:569 +#: libpq/pqcomm.c:565 #, c-format msgid "could not listen on %s address \"%s\": %m" msgstr "не вдалось прослухати на адресі %s \"%s\": %m" -#: libpq/pqcomm.c:578 +#: libpq/pqcomm.c:574 #, c-format msgid "listening on Unix socket \"%s\"" msgstr "прослуховувати UNIX сокет \"%s\"" #. translator: first %s is IPv4 or IPv6 -#: libpq/pqcomm.c:584 +#: libpq/pqcomm.c:580 #, c-format msgid "listening on %s address \"%s\", port %d" msgstr "прослуховувати %s адресу \"%s\", порт %d" -#: libpq/pqcomm.c:675 +#: libpq/pqcomm.c:671 #, c-format msgid "group \"%s\" does not exist" msgstr "група \"%s\" не існує" -#: libpq/pqcomm.c:685 +#: libpq/pqcomm.c:681 #, c-format msgid "could not set group of file \"%s\": %m" msgstr "не вдалось встановити групу для файла \"%s\": %m" -#: libpq/pqcomm.c:696 +#: libpq/pqcomm.c:692 #, c-format msgid "could not set permissions of file \"%s\": %m" msgstr "не вдалось встановити дозволи для файла \"%s\": %m" -#: libpq/pqcomm.c:726 +#: libpq/pqcomm.c:722 #, c-format msgid "could not accept new connection: %m" msgstr "не вдалось прийняти нове підключення: %m" -#: libpq/pqcomm.c:766 libpq/pqcomm.c:775 libpq/pqcomm.c:807 libpq/pqcomm.c:817 -#: 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 postmaster/pgstat.c:619 +#: libpq/pqcomm.c:762 libpq/pqcomm.c:771 libpq/pqcomm.c:803 libpq/pqcomm.c:813 +#: 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 postmaster/pgstat.c:619 #: postmaster/pgstat.c:630 #, c-format msgid "%s(%s) failed: %m" msgstr "%s(%s) помилка: %m" -#: libpq/pqcomm.c:921 +#: libpq/pqcomm.c:917 #, c-format msgid "there is no client connection" msgstr "немає клієнтського підключення" -#: libpq/pqcomm.c:977 libpq/pqcomm.c:1078 +#: libpq/pqcomm.c:973 libpq/pqcomm.c:1074 #, c-format msgid "could not receive data from client: %m" msgstr "не вдалось отримати дані від клієнта: %m" -#: libpq/pqcomm.c:1183 tcop/postgres.c:4316 +#: libpq/pqcomm.c:1179 tcop/postgres.c:4374 #, c-format msgid "terminating connection because protocol synchronization was lost" msgstr "завершення підключення через втрату синхронізації протоколу" -#: libpq/pqcomm.c:1249 +#: libpq/pqcomm.c:1245 #, c-format msgid "unexpected EOF within message length word" msgstr "неочікуваний EOF в слові довжини повідомлення" -#: libpq/pqcomm.c:1259 +#: libpq/pqcomm.c:1255 #, c-format msgid "invalid message length" msgstr "неприпустима довжина повідомлення" -#: libpq/pqcomm.c:1281 libpq/pqcomm.c:1294 +#: libpq/pqcomm.c:1277 libpq/pqcomm.c:1290 #, c-format msgid "incomplete message from client" msgstr "неповне повідомлення від клієнта" -#: libpq/pqcomm.c:1405 +#: libpq/pqcomm.c:1401 #, c-format msgid "could not send data to client: %m" msgstr "не вдалось надіслати дані клієнту: %m" -#: libpq/pqcomm.c:1620 +#: libpq/pqcomm.c:1616 #, c-format msgid "%s(%s) failed: error code %d" msgstr "%s(%s) помилка: код помилки %d" -#: libpq/pqcomm.c:1709 +#: libpq/pqcomm.c:1705 #, c-format msgid "setting the keepalive idle time is not supported" msgstr "встановлення часу простою keepalive не підтримується" -#: libpq/pqcomm.c:1793 libpq/pqcomm.c:1868 libpq/pqcomm.c:1943 +#: libpq/pqcomm.c:1789 libpq/pqcomm.c:1864 libpq/pqcomm.c:1939 #, c-format msgid "%s(%s) not supported" msgstr "%s(%s) не підтримується" -#: libpq/pqcomm.c:1978 +#: libpq/pqcomm.c:1974 #, c-format msgid "could not poll socket: %m" msgstr "не вдалося опитати сокет: %m" @@ -14431,225 +14502,225 @@ msgstr "неприпустимий рядок в повідомленні" msgid "invalid message format" msgstr "неприпустимий формат повідомлення" -#: main/main.c:245 +#: main/main.c:247 #, c-format msgid "%s: WSAStartup failed: %d\n" msgstr "%s: помилка WSAStartup: %d\n" -#: main/main.c:309 +#: main/main.c:311 #, c-format msgid "%s is the PostgreSQL server.\n\n" msgstr "%s - сервер PostgreSQL.\n\n" -#: main/main.c:310 +#: main/main.c:312 #, c-format msgid "Usage:\n" " %s [OPTION]...\n\n" msgstr "Використання:\n" " %s [OPTION]...\n\n" -#: main/main.c:311 +#: main/main.c:313 #, c-format msgid "Options:\n" msgstr "Параметри:\n" -#: main/main.c:312 +#: main/main.c:314 #, c-format msgid " -B NBUFFERS number of shared buffers\n" msgstr " -B NBUFFERS число спільних буферів\n" -#: main/main.c:313 +#: main/main.c:315 #, c-format msgid " -c NAME=VALUE set run-time parameter\n" msgstr " -c NAME=VALUE встановити параметр під час виконання\n" -#: main/main.c:314 +#: main/main.c:316 #, c-format msgid " -C NAME print value of run-time parameter, then exit\n" msgstr " -C NAME вивести значення параметру під час виконання і вийти\n" -#: main/main.c:315 +#: main/main.c:317 #, c-format msgid " -d 1-5 debugging level\n" msgstr " -d 1-5 рівень налагодження\n" -#: main/main.c:316 +#: main/main.c:318 #, c-format msgid " -D DATADIR database directory\n" msgstr " -D DATADIR каталог бази даних\n" -#: main/main.c:317 +#: main/main.c:319 #, c-format msgid " -e use European date input format (DMY)\n" msgstr " -e використати європейський формат дат (DMY)\n" -#: main/main.c:318 +#: main/main.c:320 #, c-format msgid " -F turn fsync off\n" msgstr " -F вимкнути fsync\n" -#: main/main.c:319 +#: main/main.c:321 #, c-format msgid " -h HOSTNAME host name or IP address to listen on\n" msgstr " -h HOSTNAME ім’я хоста або IP-адреса для прослуховування\n" -#: main/main.c:320 +#: main/main.c:322 #, c-format msgid " -i enable TCP/IP connections\n" msgstr " -i активувати підключення TCP/IP\n" -#: main/main.c:321 +#: main/main.c:323 #, c-format msgid " -k DIRECTORY Unix-domain socket location\n" msgstr " -k DIRECTORY розташування Unix-сокетів\n" -#: main/main.c:323 +#: main/main.c:325 #, c-format msgid " -l enable SSL connections\n" msgstr " -l активувати SSL-підключення\n" -#: main/main.c:325 +#: main/main.c:327 #, c-format msgid " -N MAX-CONNECT maximum number of allowed connections\n" msgstr " -N MAX-CONNECT максимальне число дозволених підключень\n" -#: main/main.c:326 +#: main/main.c:328 #, c-format msgid " -p PORT port number to listen on\n" msgstr " -p PORT номер порту для прослуховування\n" -#: main/main.c:327 +#: main/main.c:329 #, c-format msgid " -s show statistics after each query\n" msgstr " -s відображувати статистику після кожного запиту\n" -#: main/main.c:328 +#: main/main.c:330 #, c-format msgid " -S WORK-MEM set amount of memory for sorts (in kB)\n" msgstr " -S WORK-MEM вказати обсяг пам'яті для сортування (в КБ)\n" -#: main/main.c:329 +#: main/main.c:331 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію і вийти\n" -#: main/main.c:330 +#: main/main.c:332 #, c-format msgid " --NAME=VALUE set run-time parameter\n" msgstr " --NAME=VALUE встановити параметр під час виконання\n" -#: main/main.c:331 +#: main/main.c:333 #, c-format msgid " --describe-config describe configuration parameters, then exit\n" msgstr " --describe-config описати параметри конфігурації і вийти\n" -#: main/main.c:332 +#: main/main.c:334 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати довідку і вийти\n" -#: main/main.c:334 +#: main/main.c:336 #, c-format msgid "\n" "Developer options:\n" msgstr "\n" "Параметри для розробників:\n" -#: main/main.c:335 +#: main/main.c:337 #, c-format msgid " -f s|i|o|b|t|n|m|h forbid use of some plan types\n" msgstr " -f s|i|o|b|t|n|m|h заборонити використовувати деякі типи плану\n" -#: main/main.c:336 +#: main/main.c:338 #, c-format msgid " -n do not reinitialize shared memory after abnormal exit\n" msgstr " -n не повторювати ініціалізацію спільної пам'яті після ненормального виходу\n" -#: main/main.c:337 +#: main/main.c:339 #, c-format msgid " -O allow system table structure changes\n" msgstr " -O дозволити змінювати структуру системних таблиць\n" -#: main/main.c:338 +#: main/main.c:340 #, c-format msgid " -P disable system indexes\n" msgstr " -P вимкнути системні індекси\n" -#: main/main.c:339 +#: main/main.c:341 #, c-format msgid " -t pa|pl|ex show timings after each query\n" msgstr " -t pa|pl|ex показувати час після кожного запиту\n" -#: main/main.c:340 +#: main/main.c:342 #, c-format msgid " -T send SIGSTOP to all backend processes if one dies\n" msgstr " -T надіслати SIGSTOP усім внутрішнім процесам, якщо один вимкнеться\n" -#: main/main.c:341 +#: main/main.c:343 #, c-format msgid " -W NUM wait NUM seconds to allow attach from a debugger\n" msgstr " -W NUM очікувати NUM секунд, щоб дозволити підключення від налагоджувача\n" -#: main/main.c:343 +#: main/main.c:345 #, c-format msgid "\n" "Options for single-user mode:\n" msgstr "\n" "Параметри для однокористувацького режиму:\n" -#: main/main.c:344 +#: main/main.c:346 #, c-format msgid " --single selects single-user mode (must be first argument)\n" msgstr " --single установка однокористувацького режиму (цей аргумент повинен бути першим)\n" -#: main/main.c:345 +#: main/main.c:347 #, c-format msgid " DBNAME database name (defaults to user name)\n" msgstr " DBNAME ім’я бази даних (за замовчуванням - ім'я користувача)\n" -#: main/main.c:346 +#: main/main.c:348 #, c-format msgid " -d 0-5 override debugging level\n" msgstr " -d 0-5 змінити рівень налагодження\n" -#: main/main.c:347 +#: main/main.c:349 #, c-format msgid " -E echo statement before execution\n" msgstr " -E інструкція відлуння перед виконанням\n" -#: main/main.c:348 +#: main/main.c:350 #, c-format msgid " -j do not use newline as interactive query delimiter\n" msgstr " -j не використовувати новий рядок як роздільник інтерактивних запитів\n" -#: main/main.c:349 main/main.c:354 +#: main/main.c:351 main/main.c:356 #, c-format msgid " -r FILENAME send stdout and stderr to given file\n" msgstr " -r FILENAME надіслати stdout і stderr до вказаного файлу\n" -#: main/main.c:351 +#: main/main.c:353 #, c-format msgid "\n" "Options for bootstrapping mode:\n" msgstr "\n" "Параметри для режиму початкового завантаження:\n" -#: main/main.c:352 +#: main/main.c:354 #, c-format msgid " --boot selects bootstrapping mode (must be first argument)\n" msgstr " --boot установка режиму початкового завантаження (цей аргумент повинен бути першим)\n" -#: main/main.c:353 +#: main/main.c:355 #, c-format msgid " DBNAME database name (mandatory argument in bootstrapping mode)\n" msgstr " DBNAME ім'я бази даних (обов'язковий аргумент у режимі початкового завантаження)\n" -#: main/main.c:355 +#: main/main.c:357 #, c-format msgid " -x NUM internal use\n" msgstr " -x NUM внутрішнє використання\n" -#: main/main.c:357 +#: main/main.c:359 #, c-format msgid "\n" "Please read the documentation for the complete list of run-time\n" @@ -14660,12 +14731,12 @@ msgstr "\n" "Будь-ласка прочитайте інструкцію для повного списку параметрів конфігурації виконання і їх встановлення у командний рядок або в файл конфігурації.\n\n" "Про помилки повідомляйте <%s>.\n" -#: main/main.c:361 +#: main/main.c:363 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: main/main.c:372 +#: main/main.c:374 #, c-format msgid "\"root\" execution of the PostgreSQL server is not permitted.\n" "The server must be started under an unprivileged user ID to prevent\n" @@ -14674,12 +14745,12 @@ msgid "\"root\" execution of the PostgreSQL server is not permitted.\n" msgstr "Запускати сервер PostgreSQL під іменем \"root\" не дозволено.\n" "Для запобігання компрометації системи безпеки сервер повинен запускати непривілейований користувач. Дивіться документацію, щоб дізнатися більше про те, як правильно запустити сервер.\n" -#: main/main.c:389 +#: main/main.c:391 #, c-format msgid "%s: real and effective user IDs must match\n" msgstr "%s: дійсний і ефективний ID користувача повинні збігатися\n" -#: main/main.c:396 +#: main/main.c:398 #, c-format msgid "Execution of PostgreSQL by a user with administrative permissions is not\n" "permitted.\n" @@ -14699,15 +14770,15 @@ msgstr "розширений тип вузла \"%s\" вже існує" msgid "ExtensibleNodeMethods \"%s\" was not registered" msgstr "Методи розширеного вузла \"%s\" не зареєстровані" -#: nodes/makefuncs.c:150 statistics/extended_stats.c:2346 +#: nodes/makefuncs.c:150 nodes/makefuncs.c:176 statistics/extended_stats.c:2326 #, c-format msgid "relation \"%s\" does not have a composite type" msgstr "відношення \"%s\" не має складеного типу" -#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2567 -#: parser/parse_coerce.c:2705 parser/parse_coerce.c:2752 -#: parser/parse_expr.c:2026 parser/parse_func.c:710 parser/parse_oper.c:883 -#: utils/fmgr/funcapi.c:592 +#: nodes/nodeFuncs.c:114 nodes/nodeFuncs.c:145 parser/parse_coerce.c:2604 +#: parser/parse_coerce.c:2742 parser/parse_coerce.c:2789 +#: parser/parse_expr.c:2034 parser/parse_func.c:710 parser/parse_oper.c:883 +#: utils/fmgr/funcapi.c:600 #, c-format msgid "could not find array type for data type %s" msgstr "не вдалося знайти тип масиву для типу даних %s" @@ -14734,49 +14805,49 @@ 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:1316 parser/analyze.c:1709 parser/analyze.c:1965 -#: parser/analyze.c:3144 +#: optimizer/plan/planner.c:1346 parser/analyze.c:1720 parser/analyze.c:1976 +#: parser/analyze.c:3156 #, c-format msgid "%s is not allowed with UNION/INTERSECT/EXCEPT" msgstr "%s несумісно з UNION/INTERSECT/EXCEPT" -#: optimizer/plan/planner.c:1973 optimizer/plan/planner.c:3629 +#: optimizer/plan/planner.c:2003 optimizer/plan/planner.c:3660 #, c-format msgid "could not implement GROUP BY" msgstr "не вдалося реалізувати GROUP BY" -#: optimizer/plan/planner.c:1974 optimizer/plan/planner.c:3630 -#: optimizer/plan/planner.c:4387 optimizer/prep/prepunion.c:1046 +#: optimizer/plan/planner.c:2004 optimizer/plan/planner.c:3661 +#: optimizer/plan/planner.c:4418 optimizer/prep/prepunion.c:1045 #, c-format msgid "Some of the datatypes only support hashing, while others only support sorting." msgstr "Деякі типи даних підтримують лише хешування, в той час як інші підтримують тільки сортування." -#: optimizer/plan/planner.c:4386 +#: optimizer/plan/planner.c:4417 #, c-format msgid "could not implement DISTINCT" msgstr "не вдалося реалізувати DISTINCT" -#: optimizer/plan/planner.c:5234 +#: optimizer/plan/planner.c:5265 #, c-format msgid "could not implement window PARTITION BY" msgstr "не вдалося реалізувати PARTITION BY для вікна" -#: optimizer/plan/planner.c:5235 +#: optimizer/plan/planner.c:5266 #, c-format msgid "Window partitioning columns must be of sortable datatypes." msgstr "Стовпці, що розділяють вікна, повинні мати типи даних з можливістю сортування." -#: optimizer/plan/planner.c:5239 +#: optimizer/plan/planner.c:5270 #, c-format msgid "could not implement window ORDER BY" msgstr "не вдалося реалізувати ORDER BY для вікна" -#: optimizer/plan/planner.c:5240 +#: optimizer/plan/planner.c:5271 #, c-format msgid "Window ordering columns must be of sortable datatypes." msgstr "Стовпці, що впорядковують вікна, повинні мати типи даних з можливістю сортування." -#: optimizer/plan/setrefs.c:516 +#: optimizer/plan/setrefs.c:525 #, c-format msgid "too many range table entries" msgstr "дуже багато елементів RTE" @@ -14792,47 +14863,47 @@ msgid "All column datatypes must be hashable." msgstr "Усі стовпці повинні мати типи даних з можливістю хешування." #. translator: %s is UNION, INTERSECT, or EXCEPT -#: optimizer/prep/prepunion.c:1045 +#: optimizer/prep/prepunion.c:1044 #, c-format msgid "could not implement %s" msgstr "не вдалося реалізувати %s" -#: optimizer/util/clauses.c:4795 +#: optimizer/util/clauses.c:4799 #, c-format msgid "SQL function \"%s\" during inlining" msgstr "Впроваджена в код SQL-функція \"%s\"" -#: optimizer/util/plancat.c:140 +#: optimizer/util/plancat.c:141 #, c-format msgid "cannot open relation \"%s\"" msgstr "неможливо відкрити відношення \"%s\"" -#: optimizer/util/plancat.c:148 +#: optimizer/util/plancat.c:149 #, c-format msgid "cannot access temporary or unlogged relations during recovery" msgstr "отримати доступ до тимчасових або нежурнальованих відношень під час відновлення не можна" -#: optimizer/util/plancat.c:688 +#: optimizer/util/plancat.c:707 #, c-format msgid "whole row unique index inference specifications are not supported" msgstr "вказівки з посиланням на весь рядок для вибору унікального індексу не підтримуються" -#: optimizer/util/plancat.c:705 +#: optimizer/util/plancat.c:724 #, c-format msgid "constraint in ON CONFLICT clause has no associated index" msgstr "з обмеженням в реченні ON CONFLICT не пов'язаний індекс" -#: optimizer/util/plancat.c:755 +#: optimizer/util/plancat.c:774 #, c-format msgid "ON CONFLICT DO UPDATE not supported with exclusion constraints" msgstr "ON CONFLICT DO UPDATE не підтримується з обмеженнями-винятками" -#: optimizer/util/plancat.c:860 +#: optimizer/util/plancat.c:884 #, c-format msgid "there is no unique or exclusion constraint matching the ON CONFLICT specification" msgstr "немає унікального обмеження або обмеження-виключення відповідного специфікації ON CONFLICT" -#: parser/analyze.c:775 parser/analyze.c:1489 +#: parser/analyze.c:775 parser/analyze.c:1500 #, c-format msgid "VALUES lists must all be the same length" msgstr "Списки VALUES повинні мати однакову довжину" @@ -14852,53 +14923,53 @@ msgstr "INSERT містить більше цільових стовпців, н 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:1297 parser/analyze.c:1682 +#: parser/analyze.c:1308 parser/analyze.c:1693 #, 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:1612 parser/analyze.c:3355 +#: parser/analyze.c:1623 parser/analyze.c:3367 #, c-format msgid "%s cannot be applied to VALUES" msgstr "%s не можна застосовувати до VALUES" -#: parser/analyze.c:1848 +#: parser/analyze.c:1859 #, c-format msgid "invalid UNION/INTERSECT/EXCEPT ORDER BY clause" msgstr "неприпустиме речення UNION/INTERSECT/EXCEPT ORDER BY" -#: parser/analyze.c:1849 +#: parser/analyze.c:1860 #, c-format msgid "Only result column names can be used, not expressions or functions." msgstr "Дозволено використання тільки імен стовпців, але не виразів або функцій." -#: parser/analyze.c:1850 +#: parser/analyze.c:1861 #, 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:1955 +#: parser/analyze.c:1966 #, c-format msgid "INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT" msgstr "INTO дозволяється додати лише до першого SELECT в UNION/INTERSECT/EXCEPT" -#: parser/analyze.c:2027 +#: parser/analyze.c:2038 #, c-format msgid "UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level" msgstr "Учасник інструкції UNION/INTERSECT/EXCEPT не може посилатись на інші відносини на тому ж рівні" -#: parser/analyze.c:2114 +#: parser/analyze.c:2125 #, c-format msgid "each %s query must have the same number of columns" msgstr "кожен %s запит повинен мати однакову кількість стовпців" -#: parser/analyze.c:2515 +#: parser/analyze.c:2526 #, c-format msgid "RETURNING must have at least one column" msgstr "В RETURNING повинен бути мінімум один стовпець" -#: parser/analyze.c:2618 +#: parser/analyze.c:2629 #, c-format msgid "assignment source returned %d column" msgid_plural "assignment source returned %d columns" @@ -14907,461 +14978,471 @@ msgstr[1] "джерело призначення повернуло %d стов msgstr[2] "джерело призначення повернуло %d стовпців" msgstr[3] "джерело призначення повернуло %d стовпців" -#: parser/analyze.c:2679 +#: parser/analyze.c:2690 #, 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:2803 parser/analyze.c:2811 +#: parser/analyze.c:2815 parser/analyze.c:2823 #, c-format msgid "cannot specify both %s and %s" msgstr "не можна вказати як %s, так і %s" -#: parser/analyze.c:2831 +#: parser/analyze.c:2843 #, 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:2839 +#: parser/analyze.c:2851 #, c-format msgid "DECLARE CURSOR WITH HOLD ... %s is not supported" msgstr "DECLARE CURSOR WITH HOLD ... %s не підтримується" -#: parser/analyze.c:2842 +#: parser/analyze.c:2854 #, 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:2850 +#: parser/analyze.c:2862 #, 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:2861 +#: parser/analyze.c:2873 #, c-format msgid "DECLARE INSENSITIVE CURSOR ... %s is not valid" msgstr "DECLARE INSENSITIVE CURSOR ... %s не є припустимим" -#: parser/analyze.c:2864 +#: parser/analyze.c:2876 #, c-format msgid "Insensitive cursors must be READ ONLY." msgstr "Нечутливі курсори повинні бути READ ONLY." -#: parser/analyze.c:2930 +#: parser/analyze.c:2942 #, c-format msgid "materialized views must not use data-modifying statements in WITH" msgstr "в матеріалізованих поданнях не повинні використовуватись оператори, які змінюють дані в WITH" -#: parser/analyze.c:2940 +#: parser/analyze.c:2952 #, c-format msgid "materialized views must not use temporary tables or views" msgstr "в матеріалізованих поданнях не повинні використовуватись тимчасові таблиці або подання" -#: parser/analyze.c:2950 +#: parser/analyze.c:2962 #, c-format msgid "materialized views may not be defined using bound parameters" msgstr "визначати матеріалізовані подання з зв'язаними параметрами не можна" -#: parser/analyze.c:2962 +#: parser/analyze.c:2974 #, c-format msgid "materialized views cannot be unlogged" msgstr "матеріалізовані подання не можуть бути нежурнальованими" #. translator: %s is a SQL row locking clause such as FOR UPDATE -#: parser/analyze.c:3151 +#: parser/analyze.c:3163 #, 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:3158 +#: parser/analyze.c:3170 #, 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:3165 +#: parser/analyze.c:3177 #, 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:3172 +#: parser/analyze.c:3184 #, 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:3179 +#: parser/analyze.c:3191 #, 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:3186 +#: parser/analyze.c:3198 #, 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:3278 +#: parser/analyze.c:3290 #, 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:3328 +#: parser/analyze.c:3340 #, 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:3337 +#: parser/analyze.c:3349 #, 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:3346 +#: parser/analyze.c:3358 #, 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:3364 +#: parser/analyze.c:3376 #, 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:3373 +#: parser/analyze.c:3385 #, 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:3393 +#: parser/analyze.c:3405 #, c-format msgid "relation \"%s\" in %s clause not found in FROM clause" msgstr "відношення \"%s\" в реченні %s не знайдено в реченні FROM" -#: parser/parse_agg.c:208 parser/parse_oper.c:227 +#: parser/parse_agg.c:211 parser/parse_oper.c:227 #, c-format msgid "could not identify an ordering operator for type %s" msgstr "для типу %s не вдалося визначити оператора сортування" -#: parser/parse_agg.c:210 +#: parser/parse_agg.c:213 #, c-format msgid "Aggregates with DISTINCT must be able to sort their inputs." msgstr "Агрегатним функціям з DISTINCT необхідно сортувати їх вхідні дані." -#: parser/parse_agg.c:268 +#: parser/parse_agg.c:271 #, c-format msgid "GROUPING must have fewer than 32 arguments" msgstr "GROUPING повинно містити меньше, ніж 32 аргумента" -#: parser/parse_agg.c:371 +#: parser/parse_agg.c:375 msgid "aggregate functions are not allowed in JOIN conditions" msgstr "агрегатні функції не дозволяються в умовах JOIN" -#: parser/parse_agg.c:373 +#: parser/parse_agg.c:377 msgid "grouping operations are not allowed in JOIN conditions" msgstr "операції групування не дозволяються в умовах JOIN" -#: parser/parse_agg.c:385 +#: parser/parse_agg.c:387 msgid "aggregate functions are not allowed in FROM clause of their own query level" msgstr "агрегатні функції не можна застосовувати в реченні FROM їх рівня запиту" -#: parser/parse_agg.c:387 +#: parser/parse_agg.c:389 msgid "grouping operations are not allowed in FROM clause of their own query level" msgstr "операції групування не можна застосовувати в реченні FROM їх рівня запиту" -#: parser/parse_agg.c:392 +#: parser/parse_agg.c:394 msgid "aggregate functions are not allowed in functions in FROM" msgstr "агрегатні функції не можна застосовувати у функціях у FROM" -#: parser/parse_agg.c:394 +#: parser/parse_agg.c:396 msgid "grouping operations are not allowed in functions in FROM" msgstr "операції групування не можна застосовувати у функціях у FROM" -#: parser/parse_agg.c:402 +#: parser/parse_agg.c:404 msgid "aggregate functions are not allowed in policy expressions" msgstr "агрегатні функції не можна застосовувати у виразах політики" -#: parser/parse_agg.c:404 +#: parser/parse_agg.c:406 msgid "grouping operations are not allowed in policy expressions" msgstr "операції групування не можна застосовувати у виразах політики" -#: parser/parse_agg.c:421 +#: parser/parse_agg.c:423 msgid "aggregate functions are not allowed in window RANGE" msgstr "агрегатні функції не можна застосовувати у вікні RANGE " -#: parser/parse_agg.c:423 +#: parser/parse_agg.c:425 msgid "grouping operations are not allowed in window RANGE" msgstr "операції групування не можна застосовувати у вікні RANGE" -#: parser/parse_agg.c:428 +#: parser/parse_agg.c:430 msgid "aggregate functions are not allowed in window ROWS" msgstr "агрегатні функції не можна застосовувати у вікні ROWS" -#: parser/parse_agg.c:430 +#: parser/parse_agg.c:432 msgid "grouping operations are not allowed in window ROWS" msgstr "операції групування не можна застосовувати у вікні ROWS" -#: parser/parse_agg.c:435 +#: parser/parse_agg.c:437 msgid "aggregate functions are not allowed in window GROUPS" msgstr "агрегатні функції не можна застосовувати у вікні GROUPS" -#: parser/parse_agg.c:437 +#: parser/parse_agg.c:439 msgid "grouping operations are not allowed in window GROUPS" msgstr "операції групування не можна застосовувати у вікні GROUPS" -#: parser/parse_agg.c:471 +#: parser/parse_agg.c:473 msgid "aggregate functions are not allowed in check constraints" msgstr "агрегатні функції не можна застосовувати в перевірці обмежень" -#: parser/parse_agg.c:473 +#: parser/parse_agg.c:475 msgid "grouping operations are not allowed in check constraints" msgstr "операції групування не можна застосовувати в перевірці обмежень" -#: parser/parse_agg.c:480 +#: parser/parse_agg.c:482 msgid "aggregate functions are not allowed in DEFAULT expressions" msgstr "агрегатні функції не можна застосовувати у виразах DEFAULT" -#: parser/parse_agg.c:482 +#: parser/parse_agg.c:484 msgid "grouping operations are not allowed in DEFAULT expressions" msgstr "операції групування не можна застосовувати у виразах DEFAULT" -#: parser/parse_agg.c:487 +#: parser/parse_agg.c:489 msgid "aggregate functions are not allowed in index expressions" msgstr "агрегатні функції не можна застосовувати у виразах індексів" -#: parser/parse_agg.c:489 +#: parser/parse_agg.c:491 msgid "grouping operations are not allowed in index expressions" msgstr "операції групування не можна застосовувати у виразах індексів" -#: parser/parse_agg.c:494 +#: parser/parse_agg.c:496 msgid "aggregate functions are not allowed in index predicates" msgstr "агрегатні функції не можна застосовувати в предикатах індексів" -#: parser/parse_agg.c:496 +#: parser/parse_agg.c:498 msgid "grouping operations are not allowed in index predicates" msgstr "операції групування не можна застосовувати в предикатах індексів" -#: parser/parse_agg.c:501 +#: parser/parse_agg.c:503 msgid "aggregate functions are not allowed in statistics expressions" msgstr "агрегатні функції не можна застосовувати у виразах статистики" -#: parser/parse_agg.c:503 +#: parser/parse_agg.c:505 msgid "grouping operations are not allowed in statistics expressions" msgstr "операції групування не можна застосовувати у виразах статистики" -#: parser/parse_agg.c:508 +#: parser/parse_agg.c:510 msgid "aggregate functions are not allowed in transform expressions" msgstr "агрегатні функції не можна застосовувати у виразах перетворювання" -#: parser/parse_agg.c:510 +#: parser/parse_agg.c:512 msgid "grouping operations are not allowed in transform expressions" msgstr "операції групування не можна застосовувати у виразах перетворювання" -#: parser/parse_agg.c:515 +#: parser/parse_agg.c:517 msgid "aggregate functions are not allowed in EXECUTE parameters" msgstr "агрегатні функції не можна застосовувати в параметрах EXECUTE" -#: parser/parse_agg.c:517 +#: parser/parse_agg.c:519 msgid "grouping operations are not allowed in EXECUTE parameters" msgstr "операції групування не можна застосовувати в параметрах EXECUTE" -#: parser/parse_agg.c:522 +#: parser/parse_agg.c:524 msgid "aggregate functions are not allowed in trigger WHEN conditions" msgstr "агрегатні функції не можна застосовувати в умовах для тригерів WHEN" -#: parser/parse_agg.c:524 +#: parser/parse_agg.c:526 msgid "grouping operations are not allowed in trigger WHEN conditions" msgstr "операції групування не можна застосовувати в умовах для тригерів WHEN" -#: parser/parse_agg.c:529 +#: parser/parse_agg.c:531 msgid "aggregate functions are not allowed in partition bound" msgstr "агрегатні функції не можна застосовувати в границі секції" -#: parser/parse_agg.c:531 +#: parser/parse_agg.c:533 msgid "grouping operations are not allowed in partition bound" msgstr "операції групування не можна застосовувати в границі секції" -#: parser/parse_agg.c:536 +#: parser/parse_agg.c:538 msgid "aggregate functions are not allowed in partition key expressions" msgstr "агрегатні функції не можна застосовувати у виразах ключа секціонування" -#: parser/parse_agg.c:538 +#: parser/parse_agg.c:540 msgid "grouping operations are not allowed in partition key expressions" msgstr "операції групування не можна застосовувати у виразах ключа секціонування" -#: parser/parse_agg.c:544 +#: parser/parse_agg.c:546 msgid "aggregate functions are not allowed in column generation expressions" msgstr "агрегатні функції не можна застосовувати у виразах генерації стовпців" -#: parser/parse_agg.c:546 +#: parser/parse_agg.c:548 msgid "grouping operations are not allowed in column generation expressions" msgstr "операції групування не можна застосовувати у виразах генерації стовпців" -#: parser/parse_agg.c:552 +#: parser/parse_agg.c:554 msgid "aggregate functions are not allowed in CALL arguments" msgstr "агрегатні функції не можна застосовувати в аргументах CALL" -#: parser/parse_agg.c:554 +#: parser/parse_agg.c:556 msgid "grouping operations are not allowed in CALL arguments" msgstr "операції групування не можна застосовувати в аргументах CALL" -#: parser/parse_agg.c:560 +#: parser/parse_agg.c:562 msgid "aggregate functions are not allowed in COPY FROM WHERE conditions" msgstr "агрегатні функції не можна застосовувати в умовах COPY FROM WHERE" -#: parser/parse_agg.c:562 +#: parser/parse_agg.c:564 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:589 parser/parse_clause.c:1834 +#: parser/parse_agg.c:591 parser/parse_clause.c:1834 #, 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:592 +#: parser/parse_agg.c:594 #, c-format msgid "grouping operations are not allowed in %s" msgstr "операції групування не можна застосовувати в %s" -#: parser/parse_agg.c:693 +#: parser/parse_agg.c:690 parser/parse_agg.c:727 +#, c-format +msgid "outer-level aggregate cannot use a nested CTE" +msgstr "агрегатна функція зовнішнього рівня не може використовувати вкладений CTE" + +#: parser/parse_agg.c:691 parser/parse_agg.c:728 +#, c-format +msgid "CTE \"%s\" is below the aggregate's semantic level." +msgstr "CTE \"%s\" знаходиться нижче семантичного рівня агрегату." + +#: parser/parse_agg.c:713 #, c-format msgid "outer-level aggregate cannot contain a lower-level variable in its direct arguments" msgstr "агрегат зовнішнього рівня не може містити змінну нижчого рівня у своїх аргументах" -#: parser/parse_agg.c:771 +#: parser/parse_agg.c:798 #, c-format msgid "aggregate function calls cannot contain set-returning function calls" msgstr "виклики агрегатної функції не можуть містити викликів функції, що повертають множину" -#: parser/parse_agg.c:772 parser/parse_expr.c:1678 parser/parse_expr.c:2159 +#: parser/parse_agg.c:799 parser/parse_expr.c:1678 parser/parse_expr.c:2167 #: parser/parse_func.c:883 #, 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:777 +#: parser/parse_agg.c:804 #, c-format msgid "aggregate function calls cannot contain window function calls" msgstr "виклики агрегатних функцій не можуть містити виклики віконних функцій" -#: parser/parse_agg.c:856 +#: parser/parse_agg.c:907 msgid "window functions are not allowed in JOIN conditions" msgstr "віконні функції не можна застосовувати в умовах JOIN" -#: parser/parse_agg.c:863 +#: parser/parse_agg.c:914 msgid "window functions are not allowed in functions in FROM" msgstr "віконні функції не можна застосовувати у функціях в FROM" -#: parser/parse_agg.c:869 +#: parser/parse_agg.c:920 msgid "window functions are not allowed in policy expressions" msgstr "віконні функції не можна застосовувати у виразах політики" -#: parser/parse_agg.c:882 +#: parser/parse_agg.c:933 msgid "window functions are not allowed in window definitions" msgstr "віконні функції не можна застосовувати у визначенні вікна" -#: parser/parse_agg.c:914 +#: parser/parse_agg.c:965 msgid "window functions are not allowed in check constraints" msgstr "віконні функції не можна застосовувати в перевірках обмежень" -#: parser/parse_agg.c:918 +#: parser/parse_agg.c:969 msgid "window functions are not allowed in DEFAULT expressions" msgstr "віконні функції не можна застосовувати у виразах DEFAULT" -#: parser/parse_agg.c:921 +#: parser/parse_agg.c:972 msgid "window functions are not allowed in index expressions" msgstr "віконні функції не можна застосовувати у виразах індексів" -#: parser/parse_agg.c:924 +#: parser/parse_agg.c:975 msgid "window functions are not allowed in statistics expressions" msgstr "віконні функції не можна застосовувати у виразах статистики" -#: parser/parse_agg.c:927 +#: parser/parse_agg.c:978 msgid "window functions are not allowed in index predicates" msgstr "віконні функції не можна застосовувати в предикатах індексів" -#: parser/parse_agg.c:930 +#: parser/parse_agg.c:981 msgid "window functions are not allowed in transform expressions" msgstr "віконні функції не можна застосовувати у виразах перетворювання" -#: parser/parse_agg.c:933 +#: parser/parse_agg.c:984 msgid "window functions are not allowed in EXECUTE parameters" msgstr "віконні функції не можна застосовувати в параметрах EXECUTE" -#: parser/parse_agg.c:936 +#: parser/parse_agg.c:987 msgid "window functions are not allowed in trigger WHEN conditions" msgstr "віконні функції не можна застосовувати в умовах WHEN для тригерів" -#: parser/parse_agg.c:939 +#: parser/parse_agg.c:990 msgid "window functions are not allowed in partition bound" msgstr "віконні функції не можна застосовувати в границі секції" -#: parser/parse_agg.c:942 +#: parser/parse_agg.c:993 msgid "window functions are not allowed in partition key expressions" msgstr "віконні функції не можна застосовувати у виразах ключа секціонування" -#: parser/parse_agg.c:945 +#: parser/parse_agg.c:996 msgid "window functions are not allowed in CALL arguments" msgstr "віконні функції не можна застосовувати в аргументах CALL" -#: parser/parse_agg.c:948 +#: parser/parse_agg.c:999 msgid "window functions are not allowed in COPY FROM WHERE conditions" msgstr "віконні функції не можна застосовувати в умовах COPY FROM WHERE" -#: parser/parse_agg.c:951 +#: parser/parse_agg.c:1002 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:1843 +#: parser/parse_agg.c:1025 parser/parse_clause.c:1843 #, c-format msgid "window functions are not allowed in %s" msgstr "віконні функції не можна застосовувати в %s" -#: parser/parse_agg.c:1008 parser/parse_clause.c:2677 +#: parser/parse_agg.c:1059 parser/parse_clause.c:2677 #, c-format msgid "window \"%s\" does not exist" msgstr "вікно \"%s\" не існує" -#: parser/parse_agg.c:1092 +#: parser/parse_agg.c:1143 #, c-format msgid "too many grouping sets present (maximum 4096)" msgstr "забагато наборів групування (максимум 4096)" -#: parser/parse_agg.c:1232 +#: parser/parse_agg.c:1283 #, c-format msgid "aggregate functions are not allowed in a recursive query's recursive term" msgstr "агрегатні функції не дозволені у рекурсивному терміні рекурсивного запиту" -#: parser/parse_agg.c:1425 +#: parser/parse_agg.c:1476 #, 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:1428 +#: parser/parse_agg.c:1479 #, c-format msgid "Direct arguments of an ordered-set aggregate must use only grouped columns." msgstr "Прямі аргументи сортувального агрегату можуть використовувати лише згруповані стовпці." -#: parser/parse_agg.c:1433 +#: parser/parse_agg.c:1484 #, c-format msgid "subquery uses ungrouped column \"%s.%s\" from outer query" msgstr "вкладений запит використовує не згруповані стовпці \"%s.%s\" з зовнішнього запиту" -#: parser/parse_agg.c:1597 +#: parser/parse_agg.c:1648 #, c-format msgid "arguments to GROUPING must be grouping expressions of the associated query level" msgstr "аргументами групування мають бути вирази групування пов'язаного рівня запиту" @@ -15641,7 +15722,7 @@ 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:2060 parser/parse_expr.c:2662 parser/parse_target.c:994 +#: parser/parse_expr.c:2068 parser/parse_expr.c:2670 parser/parse_target.c:1008 #, c-format msgid "cannot cast type %s to %s" msgstr "неможливо транслювати тип %s в %s" @@ -15676,121 +15757,121 @@ msgid "argument of %s must not return a set" msgstr "аргумент конструкції %s не повинен повертати набір" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1383 +#: parser/parse_coerce.c:1420 #, c-format msgid "%s types %s and %s cannot be matched" msgstr "у конструкції %s типи %s і %s не можуть бути відповідними" -#: parser/parse_coerce.c:1499 +#: parser/parse_coerce.c:1536 #, c-format msgid "argument types %s and %s cannot be matched" msgstr "типи аргументів %s і %s не можуть збігатись" #. translator: first %s is name of a SQL construct, eg CASE -#: parser/parse_coerce.c:1551 +#: parser/parse_coerce.c:1588 #, c-format msgid "%s could not convert type %s to %s" msgstr "у конструкції %s не можна перетворити тип %s в %s" -#: parser/parse_coerce.c:2154 parser/parse_coerce.c:2174 -#: parser/parse_coerce.c:2194 parser/parse_coerce.c:2215 -#: parser/parse_coerce.c:2270 parser/parse_coerce.c:2304 +#: parser/parse_coerce.c:2191 parser/parse_coerce.c:2211 +#: parser/parse_coerce.c:2231 parser/parse_coerce.c:2252 +#: parser/parse_coerce.c:2307 parser/parse_coerce.c:2341 #, c-format msgid "arguments declared \"%s\" are not all alike" msgstr "оголошенні аргументи \"%s\", повинні бути схожими" -#: parser/parse_coerce.c:2249 parser/parse_coerce.c:2362 -#: utils/fmgr/funcapi.c:523 +#: parser/parse_coerce.c:2286 parser/parse_coerce.c:2399 +#: utils/fmgr/funcapi.c:531 #, c-format msgid "argument declared %s is not an array but type %s" msgstr "аргумент, оголошений як %s , є не масивом, а типом %s" -#: parser/parse_coerce.c:2282 parser/parse_coerce.c:2432 -#: utils/fmgr/funcapi.c:537 +#: parser/parse_coerce.c:2319 parser/parse_coerce.c:2469 +#: utils/fmgr/funcapi.c:545 #, c-format msgid "argument declared %s is not a range type but type %s" msgstr "аргумент, оголошений як %s, є не діапазонним типом, а типом %s" -#: parser/parse_coerce.c:2316 parser/parse_coerce.c:2396 -#: parser/parse_coerce.c:2529 utils/fmgr/funcapi.c:555 utils/fmgr/funcapi.c:620 +#: parser/parse_coerce.c:2353 parser/parse_coerce.c:2433 +#: parser/parse_coerce.c:2566 utils/fmgr/funcapi.c:563 utils/fmgr/funcapi.c:628 #, c-format msgid "argument declared %s is not a multirange type but type %s" msgstr "оголошений аргумент %s не є багатодіапазонним типом, а типом %s" -#: parser/parse_coerce.c:2353 +#: parser/parse_coerce.c:2390 #, c-format msgid "cannot determine element type of \"anyarray\" argument" msgstr "не можна визначити тип елемента аргументу \"anyarray\"" -#: parser/parse_coerce.c:2379 parser/parse_coerce.c:2410 -#: parser/parse_coerce.c:2449 parser/parse_coerce.c:2515 +#: parser/parse_coerce.c:2416 parser/parse_coerce.c:2447 +#: parser/parse_coerce.c:2486 parser/parse_coerce.c:2552 #, c-format msgid "argument declared %s is not consistent with argument declared %s" msgstr "аргумент, оголошений як %s, не узгоджується з аргументом, оголошеним як %s" -#: parser/parse_coerce.c:2474 +#: parser/parse_coerce.c:2511 #, c-format msgid "could not determine polymorphic type because input has type %s" msgstr "не вдалося визначити поліморфний тип, тому що вхідні аргументи мають тип %s" -#: parser/parse_coerce.c:2488 +#: parser/parse_coerce.c:2525 #, c-format msgid "type matched to anynonarray is an array type: %s" msgstr "тип, відповідний \"anynonarray\", є масивом: %s" -#: parser/parse_coerce.c:2498 +#: parser/parse_coerce.c:2535 #, c-format msgid "type matched to anyenum is not an enum type: %s" msgstr "тип, відповідний \"anyenum\", не є переліком: %s" -#: parser/parse_coerce.c:2559 +#: parser/parse_coerce.c:2596 #, c-format msgid "arguments of anycompatible family cannot be cast to a common type" msgstr "аргументи сімейства anycompatible не можна привести до спільного типу" -#: parser/parse_coerce.c:2577 parser/parse_coerce.c:2598 -#: parser/parse_coerce.c:2648 parser/parse_coerce.c:2653 -#: parser/parse_coerce.c:2717 parser/parse_coerce.c:2729 +#: parser/parse_coerce.c:2614 parser/parse_coerce.c:2635 +#: parser/parse_coerce.c:2685 parser/parse_coerce.c:2690 +#: parser/parse_coerce.c:2754 parser/parse_coerce.c:2766 #, c-format msgid "could not determine polymorphic type %s because input has type %s" msgstr "не вдалося визначити поліморфний тип %s тому що вхідні дані мають тип %s" -#: parser/parse_coerce.c:2587 +#: parser/parse_coerce.c:2624 #, c-format msgid "anycompatiblerange type %s does not match anycompatible type %s" -msgstr "тип anycompatiblerange %s не збігається з типом anycompatible %s" +msgstr "тип anycompatiblerange %s не збігається з типом 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 "тип anycompatiblemultirange %s не збігається з типом anycompatible %s" -#: parser/parse_coerce.c:2622 +#: parser/parse_coerce.c:2659 #, c-format msgid "type matched to anycompatiblenonarray is an array type: %s" msgstr "тип відповідний до anycompatiblenonarray є масивом: %s" -#: parser/parse_coerce.c:2857 +#: parser/parse_coerce.c:2894 #, c-format msgid "A result of type %s requires at least one input of type anyrange or anymultirange." msgstr "Результат типу %s потребує принаймні одного введення типу anyrange або anymultirange." -#: parser/parse_coerce.c:2874 +#: parser/parse_coerce.c:2911 #, c-format msgid "A result of type %s requires at least one input of type anycompatiblerange or anycompatiblemultirange." msgstr "Результат типу %s потребує принаймні одного введення типу anycompatiblerange або anycompatiblemultirange." -#: parser/parse_coerce.c:2886 +#: parser/parse_coerce.c:2923 #, c-format msgid "A result of type %s requires at least one input of type anyelement, anyarray, anynonarray, anyenum, anyrange, or anymultirange." msgstr "Результат типу %s потребує принаймні одного введення типу anyelement, anyarray, anynonarray, anyenum, anyrange, або anymultirange." -#: parser/parse_coerce.c:2898 +#: parser/parse_coerce.c:2935 #, c-format msgid "A result of type %s requires at least one input of type anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange, or anycompatiblemultirange." msgstr "Результат типу %s потребує ввести як мінімум один тип anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerange або anycompatiblemultirange." -#: parser/parse_coerce.c:2928 +#: parser/parse_coerce.c:2965 msgid "A result of type internal requires at least one input of type internal." msgstr "Результат внутрішнього типу потребує ввести як мінімум один внутрішній тип." @@ -15836,147 +15917,147 @@ msgstr "рекурсивне посилання на запит \"%s\" не по 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:307 +#: parser/parse_cte.c:308 #, c-format msgid "could not identify an inequality operator for type %s" msgstr "не вдалося визначити оператора нерівності для типу %s" -#: parser/parse_cte.c:334 +#: 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:383 +#: 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:389 +#: 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:394 +#: 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:398 +#: 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:419 +#: parser/parse_cte.c:420 #, c-format msgid "WITH query is not recursive" msgstr "Запит WITH не є рекурсивним" -#: parser/parse_cte.c:450 +#: 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:455 +#: 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:470 +#: parser/parse_cte.c:471 #, c-format msgid "search column \"%s\" not in WITH query column list" msgstr "пошуковий стовпець \"%s\" відсутній в списку стовпців запиту WITH" -#: parser/parse_cte.c:477 +#: parser/parse_cte.c:478 #, c-format msgid "search column \"%s\" specified more than once" msgstr "пошуковий стовпець \"%s\" вказано більше одного разу" -#: parser/parse_cte.c:486 +#: 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:503 +#: parser/parse_cte.c:504 #, c-format msgid "cycle column \"%s\" not in WITH query column list" msgstr "стовпець циклу \"%s\" відсутній в списку стовпців запиту WITH" -#: parser/parse_cte.c:510 +#: parser/parse_cte.c:511 #, c-format msgid "cycle column \"%s\" specified more than once" msgstr "стовпець циклу \"%s\" вказано більше одного разу" -#: parser/parse_cte.c:519 +#: 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:526 +#: 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:534 +#: 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:544 +#: 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:551 +#: 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:635 +#: 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:815 +#: parser/parse_cte.c:868 #, c-format msgid "mutual recursion between WITH items is not implemented" msgstr "взаємна рекурсія між елементами WITH не реалізована" -#: parser/parse_cte.c:867 +#: parser/parse_cte.c:920 #, c-format msgid "recursive query \"%s\" must not contain data-modifying statements" msgstr "рекурсивний запит \"%s\" не повинен містити оператори, які змінюють дані" -#: parser/parse_cte.c:875 +#: parser/parse_cte.c:928 #, 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:919 +#: parser/parse_cte.c:963 #, c-format msgid "ORDER BY in a recursive query is not implemented" msgstr "ORDER BY в рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:925 +#: parser/parse_cte.c:969 #, c-format msgid "OFFSET in a recursive query is not implemented" msgstr "OFFSET у рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:931 +#: parser/parse_cte.c:975 #, c-format msgid "LIMIT in a recursive query is not implemented" msgstr "LIMIT у рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:937 +#: parser/parse_cte.c:981 #, c-format msgid "FOR UPDATE/SHARE in a recursive query is not implemented" msgstr "FOR UPDATE/SHARE в рекурсивному запиті не реалізовано" -#: parser/parse_cte.c:994 +#: parser/parse_cte.c:1060 #, c-format msgid "recursive reference to query \"%s\" must not appear more than once" msgstr "рекурсивне посилання на запит \"%s\" не повинне з'являтись неодноразово" @@ -15986,8 +16067,8 @@ msgstr "рекурсивне посилання на запит \"%s\" не по msgid "DEFAULT is not allowed in this context" msgstr "DEFAULT не допускається в цьому контексті" -#: parser/parse_expr.c:340 parser/parse_relation.c:3641 -#: parser/parse_relation.c:3661 +#: parser/parse_expr.c:340 parser/parse_relation.c:3650 +#: parser/parse_relation.c:3670 #, c-format msgid "column %s.%s does not exist" msgstr "стовпець %s.%s не існує" @@ -16021,7 +16102,7 @@ msgid "cannot use column reference in partition bound expression" msgstr "у виразі границі секції не можна використовувати посилання на стовпці" #: parser/parse_expr.c:788 parser/parse_relation.c:807 -#: parser/parse_relation.c:889 parser/parse_target.c:1234 +#: parser/parse_relation.c:889 parser/parse_target.c:1248 #, c-format msgid "column reference \"%s\" is ambiguous" msgstr "посилання на стовпець \"%s\" є неоднозначним" @@ -16038,7 +16119,7 @@ msgid "NULLIF requires = operator to yield boolean" msgstr "NULLIF потребує = щоб оператор повертав логічне значення" #. translator: %s is name of a SQL construct, eg NULLIF -#: parser/parse_expr.c:1050 parser/parse_expr.c:2978 +#: parser/parse_expr.c:1050 parser/parse_expr.c:2986 #, c-format msgid "%s must not return a set" msgstr "%s не повинна повертати набір" @@ -16054,7 +16135,7 @@ msgid "source for a multiple-column UPDATE item must be a sub-SELECT or ROW() ex msgstr "джерелом для елементу UPDATE з декількома стовпцями повинен бути вкладений SELECT або вираз ROW()" #. translator: %s is name of a SQL construct, eg GROUP BY -#: parser/parse_expr.c:1676 parser/parse_expr.c:2157 parser/parse_func.c:2676 +#: parser/parse_expr.c:1676 parser/parse_expr.c:2165 parser/parse_func.c:2676 #, c-format msgid "set-returning functions are not allowed in %s" msgstr "функції, повертаючі набори, не дозволяються в %s" @@ -16126,82 +16207,82 @@ msgstr "підзапит має занадто багато стовпців" msgid "subquery has too few columns" msgstr "підзапит має занадто мало стовпців" -#: parser/parse_expr.c:2000 +#: parser/parse_expr.c:2008 #, c-format msgid "cannot determine type of empty array" msgstr "тип пустого масиву визначити не можна" -#: parser/parse_expr.c:2001 +#: parser/parse_expr.c:2009 #, c-format msgid "Explicitly cast to the desired type, for example ARRAY[]::integer[]." msgstr "Приведіть його до бажаного типу явним чином, наприклад ARRAY[]::integer[]." -#: parser/parse_expr.c:2015 +#: parser/parse_expr.c:2023 #, c-format msgid "could not find element type for data type %s" msgstr "не вдалося знайти тип елементу для типу даних %s" -#: parser/parse_expr.c:2098 +#: parser/parse_expr.c:2106 #, c-format msgid "ROW expressions can have at most %d entries" msgstr "ROW вирази можуть мати максимум %d елементів" -#: parser/parse_expr.c:2303 +#: parser/parse_expr.c:2311 #, c-format msgid "unnamed XML attribute value must be a column reference" msgstr "замість значення XML-атрибуту без імені повинен вказуватись стовпець" -#: parser/parse_expr.c:2304 +#: parser/parse_expr.c:2312 #, c-format msgid "unnamed XML element value must be a column reference" msgstr "замість значення XML-елементу без імені повинен вказуватись стовпець" -#: parser/parse_expr.c:2319 +#: parser/parse_expr.c:2327 #, c-format msgid "XML attribute name \"%s\" appears more than once" msgstr "Ім'я XML-атрибуту \"%s\" з'являється неодноразово" -#: parser/parse_expr.c:2426 +#: parser/parse_expr.c:2434 #, c-format msgid "cannot cast XMLSERIALIZE result to %s" msgstr "привести результат XMLSERIALIZE до %s не можна" -#: parser/parse_expr.c:2735 parser/parse_expr.c:2931 +#: parser/parse_expr.c:2743 parser/parse_expr.c:2939 #, c-format msgid "unequal number of entries in row expressions" msgstr "неоднакова кількість елементів у виразах рядка" -#: parser/parse_expr.c:2745 +#: parser/parse_expr.c:2753 #, c-format msgid "cannot compare rows of zero length" msgstr "рядки нульової довжини порівнювати не можна" -#: parser/parse_expr.c:2770 +#: parser/parse_expr.c:2778 #, c-format msgid "row comparison operator must yield type boolean, not type %s" msgstr "оператор порівняння рядків повинен видавати логічний тип, а не %s" -#: parser/parse_expr.c:2777 +#: parser/parse_expr.c:2785 #, c-format msgid "row comparison operator must not return a set" msgstr "оператор порівняння рядків повинен вертати набір" -#: parser/parse_expr.c:2836 parser/parse_expr.c:2877 +#: parser/parse_expr.c:2844 parser/parse_expr.c:2885 #, c-format msgid "could not determine interpretation of row comparison operator %s" msgstr "не вдалося визначити інтерпретацію оператора порівняння рядків %s" -#: parser/parse_expr.c:2838 +#: parser/parse_expr.c:2846 #, c-format msgid "Row comparison operators must be associated with btree operator families." msgstr "Оператори порівняння рядків повинні бути пов'язанні з сімейством операторів btree." -#: parser/parse_expr.c:2879 +#: parser/parse_expr.c:2887 #, c-format msgid "There are multiple equally-plausible candidates." msgstr "Існує декілька рівноцінних кандидатів." -#: parser/parse_expr.c:2972 +#: parser/parse_expr.c:2980 #, c-format msgid "IS DISTINCT FROM requires = operator to yield boolean" msgstr "IS DISTINCT FROM, потребує = щоб оператор повертав логічне значення" @@ -16633,12 +16714,12 @@ msgstr "посилання на таблицю %u неоднозначне" msgid "table name \"%s\" specified more than once" msgstr "ім'я таблиці \"%s\" вказано більше одного разу" -#: parser/parse_relation.c:474 parser/parse_relation.c:3581 +#: parser/parse_relation.c:474 parser/parse_relation.c:3590 #, c-format msgid "invalid reference to FROM-clause entry for table \"%s\"" msgstr "в елементі речення FROM неприпустиме посилання на таблицю \"%s\"" -#: parser/parse_relation.c:478 parser/parse_relation.c:3586 +#: parser/parse_relation.c:478 parser/parse_relation.c:3595 #, c-format msgid "There is an entry for table \"%s\", but it cannot be referenced from this part of the query." msgstr "Таблиця \"%s\" присутня в запиті, але посилатися на неї з цієї частини запиту не можна." @@ -16734,32 +16815,32 @@ msgstr "вираз з'єднання \"%s\" має %d доступних сто msgid "WITH query \"%s\" does not have a RETURNING clause" msgstr "WITH запит \"%s\" не має речення RETURNING" -#: parser/parse_relation.c:3356 parser/parse_relation.c:3366 +#: parser/parse_relation.c:3365 parser/parse_relation.c:3375 #, c-format msgid "column %d of relation \"%s\" does not exist" msgstr "стовпець %d відношення \"%s\" не існує" -#: parser/parse_relation.c:3584 +#: parser/parse_relation.c:3593 #, c-format msgid "Perhaps you meant to reference the table alias \"%s\"." msgstr "Можливо, малося на увазі посилання на псевдонім таблиці \"%s\"." -#: parser/parse_relation.c:3592 +#: parser/parse_relation.c:3601 #, c-format msgid "missing FROM-clause entry for table \"%s\"" msgstr "таблиця \"%s\" відсутня в реченні FROM" -#: parser/parse_relation.c:3644 +#: parser/parse_relation.c:3653 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\"." msgstr "Можливо, передбачалось посилання на стовпець \"%s.%s\"." -#: parser/parse_relation.c:3646 +#: parser/parse_relation.c:3655 #, 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:3663 +#: parser/parse_relation.c:3672 #, c-format msgid "Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\"." msgstr "Можливо, передбачалось посилання на стовпець \"%s.%s\" або стовпець \"%s.%s\"." @@ -16794,17 +16875,17 @@ msgstr "призначити значення полю \"%s\" стовпця \"% 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:877 +#: parser/parse_target.c:886 #, 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:896 #, c-format msgid "subfield \"%s\" is of type %s but expression is of type %s" msgstr "підполе \"%s\" має тип %s, але вираз має тип %s" -#: parser/parse_target.c:1322 +#: parser/parse_target.c:1336 #, c-format msgid "SELECT * with no tables specified is not valid" msgstr "SELECT * повинен посилатись на таблиці" @@ -16845,330 +16926,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:581 +#: parser/parse_utilcmd.c:575 #, c-format msgid "array of serial is not implemented" msgstr "масиви послідовності не реалізовані" -#: parser/parse_utilcmd.c:660 parser/parse_utilcmd.c:672 -#: parser/parse_utilcmd.c:731 +#: parser/parse_utilcmd.c:654 parser/parse_utilcmd.c:666 +#: parser/parse_utilcmd.c:725 #, c-format msgid "conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"" msgstr "несумісні оголошення NULL/NOT NULL для стовпця \"%s\" таблиці \"%s\"" -#: parser/parse_utilcmd.c:684 +#: parser/parse_utilcmd.c:678 #, c-format msgid "multiple default values specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано декілька значень за замовчуванням" -#: parser/parse_utilcmd.c:701 +#: parser/parse_utilcmd.c:695 #, c-format msgid "identity columns are not supported on typed tables" msgstr "ідентифікаційні стовпці не підтримуються в типізованих таблицях" -#: parser/parse_utilcmd.c:705 +#: parser/parse_utilcmd.c:699 #, c-format msgid "identity columns are not supported on partitions" msgstr "ідентифікаційні стовпці не підтримуються з секціями" -#: parser/parse_utilcmd.c:714 +#: parser/parse_utilcmd.c:708 #, c-format msgid "multiple identity specifications for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" властивість identity вказана неодноразово" -#: parser/parse_utilcmd.c:744 +#: parser/parse_utilcmd.c:738 #, c-format msgid "generated columns are not supported on typed tables" msgstr "згенеровані стовпці не підтримуються в типізованих таблицях" -#: parser/parse_utilcmd.c:748 +#: parser/parse_utilcmd.c:742 #, c-format msgid "generated columns are not supported on partitions" msgstr "згенеровані стовпці не підтримуються в секціях" -#: parser/parse_utilcmd.c:753 +#: parser/parse_utilcmd.c:747 #, c-format msgid "multiple generation clauses specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано декілька речень генерації" -#: parser/parse_utilcmd.c:771 parser/parse_utilcmd.c:886 +#: parser/parse_utilcmd.c:765 parser/parse_utilcmd.c:880 #, 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:774 parser/parse_utilcmd.c:890 #, c-format msgid "unique constraints are not supported on foreign tables" msgstr "обмеження унікальності для сторонніх таблиць не підтримуються" -#: parser/parse_utilcmd.c:825 +#: parser/parse_utilcmd.c:819 #, c-format msgid "both default and identity specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано значення за замовчуванням і властивість identity" -#: parser/parse_utilcmd.c:833 +#: parser/parse_utilcmd.c:827 #, c-format msgid "both default and generation expression specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано вираз за замовчуванням і вираз генерації" -#: parser/parse_utilcmd.c:841 +#: parser/parse_utilcmd.c:835 #, c-format msgid "both identity and generation expression specified for column \"%s\" of table \"%s\"" msgstr "для стовпця \"%s\" таблиці \"%s\" вказано вираз ідентичності і вираз генерації" -#: parser/parse_utilcmd.c:906 +#: parser/parse_utilcmd.c:900 #, c-format msgid "exclusion constraints are not supported on foreign tables" msgstr "обмеження-виключення для сторонніх таблиць не підтримуються" -#: parser/parse_utilcmd.c:912 +#: parser/parse_utilcmd.c:906 #, c-format msgid "exclusion constraints are not supported on partitioned tables" msgstr "обмеження-виключення для секціонованих таблиць не підтримуються" -#: parser/parse_utilcmd.c:977 +#: parser/parse_utilcmd.c:971 #, c-format msgid "LIKE is not supported for creating foreign tables" msgstr "LIKE не підтримується при створенні сторонніх таблиць" -#: parser/parse_utilcmd.c:1754 parser/parse_utilcmd.c:1862 +#: parser/parse_utilcmd.c:1750 parser/parse_utilcmd.c:1858 #, c-format msgid "Index \"%s\" contains a whole-row table reference." msgstr "Індекс \"%s\" містить посилання на таблицю на весь рядок." -#: parser/parse_utilcmd.c:2249 +#: parser/parse_utilcmd.c:2256 #, c-format msgid "cannot use an existing index in CREATE TABLE" msgstr "у CREATE TABLE не можна використовувати існуючий індекс" -#: parser/parse_utilcmd.c:2269 +#: parser/parse_utilcmd.c:2276 #, c-format msgid "index \"%s\" is already associated with a constraint" msgstr "індекс \"%s\" вже пов'язаний з обмеженням" -#: parser/parse_utilcmd.c:2290 +#: parser/parse_utilcmd.c:2297 #, c-format msgid "\"%s\" is not a unique index" msgstr "\"%s\" не є унікальним індексом" -#: parser/parse_utilcmd.c:2291 parser/parse_utilcmd.c:2298 -#: parser/parse_utilcmd.c:2305 parser/parse_utilcmd.c:2382 +#: parser/parse_utilcmd.c:2298 parser/parse_utilcmd.c:2305 +#: parser/parse_utilcmd.c:2312 parser/parse_utilcmd.c:2389 #, c-format msgid "Cannot create a primary key or unique constraint using such an index." msgstr "Створити первинний ключ або обмеження унікальності, використовуючи такий індекс, не можна." -#: parser/parse_utilcmd.c:2297 +#: parser/parse_utilcmd.c:2304 #, c-format msgid "index \"%s\" contains expressions" msgstr "індекс \"%s\" містить вирази" -#: parser/parse_utilcmd.c:2304 +#: parser/parse_utilcmd.c:2311 #, c-format msgid "\"%s\" is a partial index" msgstr "\"%s\" є частковим індексом" -#: parser/parse_utilcmd.c:2316 +#: parser/parse_utilcmd.c:2323 #, c-format msgid "\"%s\" is a deferrable index" msgstr "\"%s\" є індексом, що відкладається" -#: parser/parse_utilcmd.c:2317 +#: parser/parse_utilcmd.c:2324 #, c-format msgid "Cannot create a non-deferrable constraint using a deferrable index." msgstr "Створити обмеження, що не відкладається, використовуючи індекс, що відкладається, не можна." -#: parser/parse_utilcmd.c:2381 +#: parser/parse_utilcmd.c:2388 #, c-format msgid "index \"%s\" column number %d does not have default sorting behavior" msgstr "індекс \"%s\" номер стовпця %d не має поведінки сортування за замовчуванням" -#: parser/parse_utilcmd.c:2538 +#: parser/parse_utilcmd.c:2545 #, c-format msgid "column \"%s\" appears twice in primary key constraint" msgstr "стовпець \"%s\" з'являється двічі в обмеженні первинного ключа" -#: parser/parse_utilcmd.c:2544 +#: parser/parse_utilcmd.c:2551 #, c-format msgid "column \"%s\" appears twice in unique constraint" msgstr "стовпець \"%s\" з'являється двічі в обмеженні унікальності" -#: parser/parse_utilcmd.c:2891 +#: parser/parse_utilcmd.c:2885 #, c-format msgid "index expressions and predicates can refer only to the table being indexed" msgstr "індекс-вирази й предикати можуть посилатись лише на індексовану таблицю" -#: parser/parse_utilcmd.c:2963 +#: parser/parse_utilcmd.c:2957 #, c-format msgid "statistics expressions can refer only to the table being referenced" msgstr "вирази статистики можуть посилатися лише на таблицю, для якої збирається статистика" -#: parser/parse_utilcmd.c:3006 +#: parser/parse_utilcmd.c:3000 #, c-format msgid "rules on materialized views are not supported" msgstr "правила для матеріалізованих подань не підтримуються" -#: parser/parse_utilcmd.c:3069 +#: parser/parse_utilcmd.c:3063 #, c-format msgid "rule WHERE condition cannot contain references to other relations" msgstr "в умовах WHERE правила не можуть містити посилання на інші зв'язки" -#: parser/parse_utilcmd.c:3142 +#: parser/parse_utilcmd.c:3136 #, 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:3160 parser/parse_utilcmd.c:3261 -#: rewrite/rewriteHandler.c:532 rewrite/rewriteManip.c:1021 +#: parser/parse_utilcmd.c:3154 parser/parse_utilcmd.c:3255 +#: rewrite/rewriteHandler.c:539 rewrite/rewriteManip.c:1022 #, c-format msgid "conditional UNION/INTERSECT/EXCEPT statements are not implemented" msgstr "умовні оператори UNION/INTERSECT/EXCEPT не реалізовані" -#: parser/parse_utilcmd.c:3178 +#: parser/parse_utilcmd.c:3172 #, c-format msgid "ON SELECT rule cannot use OLD" msgstr "у правилі ON SELECT не можна використовувати OLD" -#: parser/parse_utilcmd.c:3182 +#: parser/parse_utilcmd.c:3176 #, c-format msgid "ON SELECT rule cannot use NEW" msgstr "у правилі ON SELECT не можна використовувати NEW" -#: parser/parse_utilcmd.c:3191 +#: parser/parse_utilcmd.c:3185 #, c-format msgid "ON INSERT rule cannot use OLD" msgstr "у правилі ON INSERT не можна використовувати OLD" -#: parser/parse_utilcmd.c:3197 +#: parser/parse_utilcmd.c:3191 #, c-format msgid "ON DELETE rule cannot use NEW" msgstr "у правилі ON DELETE не можна використовувати NEW" -#: parser/parse_utilcmd.c:3225 +#: parser/parse_utilcmd.c:3219 #, c-format msgid "cannot refer to OLD within WITH query" msgstr "у запиті WITH не можна посилатися на OLD" -#: parser/parse_utilcmd.c:3232 +#: parser/parse_utilcmd.c:3226 #, c-format msgid "cannot refer to NEW within WITH query" msgstr "у запиті WITH не можна посилатися на NEW" -#: parser/parse_utilcmd.c:3686 +#: parser/parse_utilcmd.c:3676 #, c-format msgid "misplaced DEFERRABLE clause" msgstr "речення DEFERRABLE розташовано неправильно" -#: parser/parse_utilcmd.c:3691 parser/parse_utilcmd.c:3706 +#: parser/parse_utilcmd.c:3681 parser/parse_utilcmd.c:3696 #, c-format msgid "multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed" msgstr "декілька речень DEFERRABLE/NOT DEFERRABLE не допускаються" -#: parser/parse_utilcmd.c:3701 +#: parser/parse_utilcmd.c:3691 #, c-format msgid "misplaced NOT DEFERRABLE clause" msgstr "речення NOT DEFERRABLE розташовано неправильно" -#: parser/parse_utilcmd.c:3714 parser/parse_utilcmd.c:3740 gram.y:5559 +#: parser/parse_utilcmd.c:3704 parser/parse_utilcmd.c:3730 gram.y:5559 #, c-format msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" msgstr "обмеження, оголошене як INITIALLY DEFERRED, повинно бути оголошене як DEFERRABLE" -#: parser/parse_utilcmd.c:3722 +#: parser/parse_utilcmd.c:3712 #, c-format msgid "misplaced INITIALLY DEFERRED clause" msgstr "речення INITIALLY DEFERRED розташовано неправильно" -#: parser/parse_utilcmd.c:3727 parser/parse_utilcmd.c:3753 +#: parser/parse_utilcmd.c:3717 parser/parse_utilcmd.c:3743 #, c-format msgid "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" msgstr "декілька речень INITIALLY IMMEDIATE/DEFERRED не допускаються" -#: parser/parse_utilcmd.c:3748 +#: parser/parse_utilcmd.c:3738 #, c-format msgid "misplaced INITIALLY IMMEDIATE clause" msgstr "речення INITIALLY IMMEDIATE розташовано неправильно" -#: parser/parse_utilcmd.c:3941 +#: parser/parse_utilcmd.c:3931 #, c-format msgid "CREATE specifies a schema (%s) different from the one being created (%s)" msgstr "В CREATE вказана схема (%s), яка відрізняється від створюваної (%s)" -#: parser/parse_utilcmd.c:3976 +#: parser/parse_utilcmd.c:3966 #, c-format msgid "\"%s\" is not a partitioned table" msgstr "\"%s\" не є секціонованою таблицею" -#: parser/parse_utilcmd.c:3983 +#: parser/parse_utilcmd.c:3973 #, c-format msgid "table \"%s\" is not partitioned" msgstr "таблиця \"%s\" не є секційною" -#: parser/parse_utilcmd.c:3990 +#: parser/parse_utilcmd.c:3980 #, c-format msgid "index \"%s\" is not partitioned" msgstr "індекс \"%s\" не є секціонованим" -#: parser/parse_utilcmd.c:4030 +#: parser/parse_utilcmd.c:4020 #, c-format msgid "a hash-partitioned table may not have a default partition" msgstr "у геш-секціонованій таблиці не може бути розділу за замовчуванням" -#: parser/parse_utilcmd.c:4047 +#: parser/parse_utilcmd.c:4037 #, c-format msgid "invalid bound specification for a hash partition" msgstr "неприпустима вказівка границі для геш-секції" -#: parser/parse_utilcmd.c:4053 partitioning/partbounds.c:4711 +#: parser/parse_utilcmd.c:4043 partitioning/partbounds.c:4711 #, c-format msgid "modulus for hash partition must be an integer value greater than zero" msgstr "модуль для хеш-секції повинен бути цілим числом більше за нуль" -#: parser/parse_utilcmd.c:4060 partitioning/partbounds.c:4719 +#: parser/parse_utilcmd.c:4050 partitioning/partbounds.c:4719 #, c-format msgid "remainder for hash partition must be less than modulus" msgstr "залишок для геш-секції повинен бути меньшим, ніж модуль" -#: parser/parse_utilcmd.c:4073 +#: parser/parse_utilcmd.c:4063 #, c-format msgid "invalid bound specification for a list partition" msgstr "нерипустима вказівка границі для секції по списку" -#: parser/parse_utilcmd.c:4126 +#: parser/parse_utilcmd.c:4116 #, c-format msgid "invalid bound specification for a range partition" msgstr "неприпустима вказівка границі для секції діапазону" -#: parser/parse_utilcmd.c:4132 +#: parser/parse_utilcmd.c:4122 #, c-format msgid "FROM must specify exactly one value per partitioning column" msgstr "В FROM повинно вказуватися лише одне значення для стовпця секціонування" -#: parser/parse_utilcmd.c:4136 +#: parser/parse_utilcmd.c:4126 #, c-format msgid "TO must specify exactly one value per partitioning column" msgstr "В TO повинно вказуватися лише одне значення для стовпця секціонування" -#: parser/parse_utilcmd.c:4250 +#: parser/parse_utilcmd.c:4240 #, c-format msgid "cannot specify NULL in range bound" msgstr "вказати NULL в діапазоні границі не можна" -#: parser/parse_utilcmd.c:4299 +#: parser/parse_utilcmd.c:4289 #, c-format msgid "every bound following MAXVALUE must also be MAXVALUE" msgstr "за кожною границею MAXVALUE повинні бути лише границі MAXVALUE" -#: parser/parse_utilcmd.c:4306 +#: parser/parse_utilcmd.c:4296 #, c-format msgid "every bound following MINVALUE must also be MINVALUE" msgstr "за кожною границею MINVALUE повинні бути лише границі MINVALUE" -#: parser/parse_utilcmd.c:4349 +#: parser/parse_utilcmd.c:4339 #, c-format msgid "specified value cannot be cast to type %s for column \"%s\"" msgstr "вказане значення не можна привести до типу %s для стовпця \"%s\"" @@ -17274,7 +17355,7 @@ msgid "column %d of the partition key has type \"%s\", but supplied value is of msgstr "стовпець %d ключа секціонування має тип \"%s\", але для нього вказано значення типу \"%s\"" #: port/pg_sema.c:209 port/pg_shmem.c:678 port/posix_sema.c:209 -#: port/sysv_sema.c:327 port/sysv_shmem.c:678 +#: port/sysv_sema.c:347 port/sysv_shmem.c:678 #, c-format msgid "could not stat data directory \"%s\": %m" msgstr "не вдалося встановити дані каталогу \"%s\": %m" @@ -17330,34 +17411,34 @@ msgstr "величезні сторінки на цій плтаформі не msgid "huge pages not supported with the current shared_memory_type setting" msgstr "величезні сторінки не підтримуються з поточним параметром shared_memory_type" -#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1180 +#: port/pg_shmem.c:753 port/sysv_shmem.c:753 utils/init/miscinit.c:1224 #, c-format msgid "pre-existing shared memory block (key %lu, ID %lu) is still in use" msgstr "раніше виділений блок спільної пам'яті (ключ %lu, ідентифікатор %lu) все ще використовується" -#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1182 +#: port/pg_shmem.c:756 port/sysv_shmem.c:756 utils/init/miscinit.c:1226 #, c-format msgid "Terminate any old server processes associated with data directory \"%s\"." msgstr "Припинити будь-які старі серверні процеси, пов'язані з каталогом даних \"%s\"." -#: port/sysv_sema.c:124 +#: port/sysv_sema.c:139 #, c-format msgid "could not create semaphores: %m" msgstr "не вдалося створити семафори: %m" -#: port/sysv_sema.c:125 +#: port/sysv_sema.c:140 #, c-format msgid "Failed system call was semget(%lu, %d, 0%o)." msgstr "Помилка системного виклику semget(%lu, %d, 0%o)." -#: port/sysv_sema.c:129 +#: port/sysv_sema.c:144 #, c-format msgid "This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.\n" "The PostgreSQL documentation contains more information about configuring your system for PostgreSQL." msgstr "Ця помилка НЕ означає, що на диску немає місця. Ймовірніше за все перевищено ліміт числа встановлених семафорів (SEMMNI), або загального числа семафорів (SEMMNS) в системі. Вам потрібно збільшити відповідний параметр ядра. Інший спосіб - зменшити споживання PostgreSQL в семафорах, зменшивши параметр max_connections.\n" "Більше інформації про налаштування вашої системи для PostgreSQL міститься в інструкції PostgreSQL." -#: port/sysv_sema.c:159 +#: port/sysv_sema.c:174 #, c-format msgid "You possibly need to raise your kernel's SEMVMX value to be at least %d. Look into the PostgreSQL documentation for details." msgstr "Можливо, вам потрібно збілшити значення SEMVMX вашого ядра, мінімум до %d. Детальніше про це написано в інструкції PostgreSQL." @@ -17387,12 +17468,12 @@ msgstr "аварійний дамп записано у фай \"%s\"\n" msgid "could not write crash dump to file \"%s\": error code %lu\n" msgstr "не вдалося записати аварійний дамп у файл \"%s\": код помилки %lu\n" -#: port/win32/signal.c:196 +#: port/win32/signal.c:206 #, c-format msgid "could not create signal listener pipe for PID %d: error code %lu" msgstr "не вдалося створити канал сигнального прослуховувача для PID %d: код помилки %lu" -#: port/win32/signal.c:251 +#: port/win32/signal.c:261 #, c-format msgid "could not create signal listener pipe: error code %lu; retrying\n" msgstr "не вдалося створити канал сигнального прослуховувача: код помилки %lu; триває повторна спроба\n" @@ -17482,42 +17563,42 @@ msgstr "Помилка в системному виклику DuplicateHandle." msgid "Failed system call was MapViewOfFileEx." msgstr "Помилка в системному виклику MapViewOfFileEx." -#: postmaster/autovacuum.c:410 +#: postmaster/autovacuum.c:411 #, c-format msgid "could not fork autovacuum launcher process: %m" msgstr "не вдалося породити процес запуску автоочистки: %m" -#: postmaster/autovacuum.c:1492 +#: postmaster/autovacuum.c:1493 #, c-format msgid "could not fork autovacuum worker process: %m" msgstr "не вдалося породити робочий процес автоочитски: %m" -#: postmaster/autovacuum.c:2298 +#: postmaster/autovacuum.c:2319 #, c-format msgid "autovacuum: dropping orphan temp table \"%s.%s.%s\"" msgstr "автоочистка: видалення застарілої тимчасової таблиці \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2527 +#: postmaster/autovacuum.c:2555 #, c-format msgid "automatic vacuum of table \"%s.%s.%s\"" msgstr "автоматична очистка таблиці \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2530 +#: postmaster/autovacuum.c:2558 #, c-format msgid "automatic analyze of table \"%s.%s.%s\"" msgstr "автоматичний аналіз таблиці \"%s.%s.%s\"" -#: postmaster/autovacuum.c:2723 +#: postmaster/autovacuum.c:2754 #, c-format msgid "processing work entry for relation \"%s.%s.%s\"" msgstr "обробка робочого введення для відношення \"%s.%s.%s\"" -#: postmaster/autovacuum.c:3409 +#: postmaster/autovacuum.c:3440 #, c-format msgid "autovacuum not started because of misconfiguration" msgstr "автоочистку не запущено через неправильну конфігурацію" -#: postmaster/autovacuum.c:3410 +#: postmaster/autovacuum.c:3441 #, c-format msgid "Enable the \"track_counts\" option." msgstr "Активувати параметр \"track_counts\"." @@ -17547,7 +17628,7 @@ msgstr "фоновий виконавець \"%s\": неприпустимий msgid "background worker \"%s\": parallel workers may not be configured for restart" msgstr "фоновий виконавець\"%s\": паралельні виконавці не можуть бути налаштовані для перезавантаження" -#: postmaster/bgworker.c:723 tcop/postgres.c:3201 +#: postmaster/bgworker.c:723 tcop/postgres.c:3194 #, c-format msgid "terminating background worker \"%s\" due to administrator command" msgstr "завершення фонового процесу \"%s\" по команді адміністратора" @@ -17581,7 +17662,7 @@ msgstr[3] "Максимальне можливе число фонових пр msgid "Consider increasing the configuration parameter \"max_worker_processes\"." msgstr "Можливо, слід збільшити параметр конфігурації \"max_worker_processes\"." -#: postmaster/checkpointer.c:428 +#: postmaster/checkpointer.c:431 #, c-format msgid "checkpoints are occurring too frequently (%d second apart)" msgid_plural "checkpoints are occurring too frequently (%d seconds apart)" @@ -17590,68 +17671,68 @@ msgstr[1] "контрольні точки відбуваються занадт msgstr[2] "контрольні точки відбуваються занадто часто (через %d сек.)" msgstr[3] "контрольні точки відбуваються занадто часто (через %d сек.)" -#: postmaster/checkpointer.c:432 +#: postmaster/checkpointer.c:435 #, c-format msgid "Consider increasing the configuration parameter \"max_wal_size\"." msgstr "Можливо, слід збільшити параметр конфігурації \"max_wal_size\"." -#: postmaster/checkpointer.c:1062 +#: postmaster/checkpointer.c:1068 #, c-format msgid "checkpoint request failed" msgstr "збій при запиті контрольної точки" -#: postmaster/checkpointer.c:1063 +#: postmaster/checkpointer.c:1069 #, c-format msgid "Consult recent messages in the server log for details." msgstr "Для деталей, зверніться до останніх повідомлень в протоколі серверу." -#: postmaster/pgarch.c:365 +#: postmaster/pgarch.c:417 #, c-format msgid "archive_mode enabled, yet archive_command is not set" msgstr "archive_mode активний, але archive_command не встановлена" -#: postmaster/pgarch.c:387 +#: postmaster/pgarch.c:439 #, c-format msgid "removed orphan archive status file \"%s\"" msgstr "видалено залишковий файл статусу архіву \"%s\"" -#: postmaster/pgarch.c:397 +#: postmaster/pgarch.c:449 #, c-format msgid "removal of orphan archive status file \"%s\" failed too many times, will try again later" -msgstr "видалення залишкового файлу статусу архіву \"%s\" не вдалося занадто багато разів, пізніже спробуємо знову" +msgstr "видалення залишкового файлу статусу архіву \"%s\" не вдалося занадто багато разів, пізніже спробуємо знову" -#: postmaster/pgarch.c:433 +#: postmaster/pgarch.c:485 #, c-format msgid "archiving write-ahead log file \"%s\" failed too many times, will try again later" msgstr "архівація файлу випереджувальног журналювання \"%s\" не виконана багато разів, наступна спроба буде пізніже" -#: postmaster/pgarch.c:534 +#: postmaster/pgarch.c:586 #, c-format msgid "archive command failed with exit code %d" msgstr "команда архівації завершилась помилкой з кодом %d" -#: postmaster/pgarch.c:536 postmaster/pgarch.c:546 postmaster/pgarch.c:552 -#: postmaster/pgarch.c:561 +#: postmaster/pgarch.c:588 postmaster/pgarch.c:598 postmaster/pgarch.c:604 +#: postmaster/pgarch.c:613 #, c-format msgid "The failed archive command was: %s" msgstr "Команда архівації з помилкою: %s" -#: postmaster/pgarch.c:543 +#: postmaster/pgarch.c:595 #, c-format msgid "archive command was terminated by exception 0x%X" msgstr "команда архівації була перервана винятком 0x%X" -#: postmaster/pgarch.c:545 postmaster/postmaster.c:3758 +#: postmaster/pgarch.c:597 postmaster/postmaster.c:3761 #, c-format msgid "See C include file \"ntstatus.h\" for a description of the hexadecimal value." msgstr "Опис цього Шістнадцяткового значення дивіться у включаємому C-файлі \"ntstatus.h\"." -#: postmaster/pgarch.c:550 +#: postmaster/pgarch.c:602 #, c-format msgid "archive command was terminated by signal %d: %s" msgstr "команда архівації була перервана сигналом %d: %s" -#: postmaster/pgarch.c:559 +#: postmaster/pgarch.c:611 #, c-format msgid "archive command exited with unrecognized status %d" msgstr "команда архівації завершена з нерозпізнаним статусом %d" @@ -17833,103 +17914,103 @@ msgstr "Потокове передавання WAL (max_wal_senders > 0) вим msgid "%s: invalid datetoken tables, please fix\n" msgstr "%s: неприпустимі таблиці маркерів часу, будь-ласка виправіть\n" -#: postmaster/postmaster.c:1052 +#: postmaster/postmaster.c:1054 #, c-format msgid "could not create I/O completion port for child queue" msgstr "не вдалося створити завершений порт вводу-виводу для черги дітей" -#: postmaster/postmaster.c:1128 +#: postmaster/postmaster.c:1130 #, c-format msgid "ending log output to stderr" msgstr "завершення запису виводу Stderr" -#: postmaster/postmaster.c:1129 +#: postmaster/postmaster.c:1131 #, c-format msgid "Future log output will go to log destination \"%s\"." msgstr "В майбутньому запис виведення буде записуватися в призначення \"%s\"." -#: postmaster/postmaster.c:1140 +#: postmaster/postmaster.c:1142 #, c-format msgid "starting %s" msgstr "початок %s" -#: postmaster/postmaster.c:1161 postmaster/postmaster.c:1260 -#: utils/init/miscinit.c:1640 +#: postmaster/postmaster.c:1163 postmaster/postmaster.c:1262 +#: utils/init/miscinit.c:1684 #, c-format msgid "invalid list syntax in parameter \"%s\"" msgstr "неприпустимий синтаксис списку в параметрі \"%s\"" -#: postmaster/postmaster.c:1192 +#: postmaster/postmaster.c:1194 #, c-format msgid "could not create listen socket for \"%s\"" msgstr "не вдалося створити сокет прослуховування для \"%s\"" -#: postmaster/postmaster.c:1198 +#: postmaster/postmaster.c:1200 #, c-format msgid "could not create any TCP/IP sockets" msgstr "не вдалося створити TCP/IP сокети" -#: postmaster/postmaster.c:1230 +#: postmaster/postmaster.c:1232 #, c-format msgid "DNSServiceRegister() failed: error code %ld" msgstr "Помилка DNSServiceRegister(): код помилки %ld" -#: postmaster/postmaster.c:1282 +#: postmaster/postmaster.c:1284 #, c-format msgid "could not create Unix-domain socket in directory \"%s\"" msgstr "не вдалося створити Unix-domain сокет в каталозі \"%s\"" -#: postmaster/postmaster.c:1288 +#: postmaster/postmaster.c:1290 #, c-format msgid "could not create any Unix-domain sockets" msgstr "не вдалося створити Unix-domain сокети" -#: postmaster/postmaster.c:1300 +#: postmaster/postmaster.c:1302 #, c-format msgid "no socket created for listening" msgstr "не створено жодного сокету для прослуховування" -#: postmaster/postmaster.c:1331 +#: postmaster/postmaster.c:1333 #, c-format msgid "%s: could not change permissions of external PID file \"%s\": %s\n" msgstr "%s: не вдалося змінити дозволи зовнішнього PID файлу \"%s\": %s\n" -#: postmaster/postmaster.c:1335 +#: postmaster/postmaster.c:1337 #, c-format msgid "%s: could not write external PID file \"%s\": %s\n" msgstr "%s: не вдалося записати зовнішній PID файл \"%s\": %s\n" -#: postmaster/postmaster.c:1368 utils/init/postinit.c:216 +#: postmaster/postmaster.c:1370 utils/init/postinit.c:216 #, c-format msgid "could not load pg_hba.conf" msgstr "не вдалося завантажити pg_hba.conf" -#: postmaster/postmaster.c:1394 +#: postmaster/postmaster.c:1398 #, c-format msgid "postmaster became multithreaded during startup" msgstr "адміністратор поштового сервера став багатопотоковим під час запуску" -#: postmaster/postmaster.c:1395 +#: postmaster/postmaster.c:1399 postmaster/postmaster.c:5150 #, c-format msgid "Set the LC_ALL environment variable to a valid locale." msgstr "Встановити в змінній середовища LC_ALL дійісну локаль." -#: postmaster/postmaster.c:1490 +#: postmaster/postmaster.c:1494 #, c-format msgid "%s: could not locate my own executable path" msgstr "%s: не вдалося знайти свій власний шлях для виконання" -#: postmaster/postmaster.c:1497 +#: postmaster/postmaster.c:1501 #, c-format msgid "%s: could not locate matching postgres executable" msgstr "%s: не вдалося знайти відповідний postgres файл, що виконується" -#: postmaster/postmaster.c:1520 utils/misc/tzparser.c:340 +#: postmaster/postmaster.c:1524 utils/misc/tzparser.c:340 #, c-format msgid "This may indicate an incomplete PostgreSQL installation, or that the file \"%s\" has been moved away from its proper location." msgstr "Це може означати неповне встановлення PostgreSQL, або те, що файл \"%s\" було переміщено з його правильного розташування." -#: postmaster/postmaster.c:1547 +#: postmaster/postmaster.c:1551 #, c-format msgid "%s: could not find the database system\n" "Expected to find it in the directory \"%s\",\n" @@ -17938,476 +18019,476 @@ msgstr "%s: не вдалося знайти систему бази даних\ "Очікувалося знайти її у каталозі \"%s\",\n" "але не вдалося відкрити файл \"%s\": %s\n" -#: postmaster/postmaster.c:1724 +#: postmaster/postmaster.c:1728 #, c-format msgid "select() failed in postmaster: %m" msgstr "помилка вибирати() в адміністраторі поштового сервера: %m" -#: postmaster/postmaster.c:1860 +#: postmaster/postmaster.c:1864 #, c-format msgid "issuing SIGKILL to recalcitrant children" msgstr "надсилання SIGKILL непокірливим дітям" -#: postmaster/postmaster.c:1881 +#: postmaster/postmaster.c:1885 #, c-format msgid "performing immediate shutdown because data directory lock file is invalid" msgstr "виконується негайне припинення роботи через неприпустимий файл блокування каталогу даних" -#: postmaster/postmaster.c:1984 postmaster/postmaster.c:2012 +#: postmaster/postmaster.c:1988 postmaster/postmaster.c:2016 #, c-format msgid "incomplete startup packet" msgstr "неповний стартовий пакет" -#: postmaster/postmaster.c:1996 postmaster/postmaster.c:2029 +#: postmaster/postmaster.c:2000 postmaster/postmaster.c:2033 #, c-format msgid "invalid length of startup packet" msgstr "неприпустима довжина стартового пакету" -#: postmaster/postmaster.c:2058 +#: postmaster/postmaster.c:2062 #, c-format msgid "failed to send SSL negotiation response: %m" msgstr "помилка надсилання протоколу SSL в процесі відповіді зв'язування: %m" -#: postmaster/postmaster.c:2076 +#: postmaster/postmaster.c:2080 #, c-format msgid "received unencrypted data after SSL request" msgstr "отримані незашифровані дані після запиту SSL" -#: postmaster/postmaster.c:2077 postmaster/postmaster.c:2121 +#: postmaster/postmaster.c:2081 postmaster/postmaster.c:2125 #, 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:2102 +#: postmaster/postmaster.c:2106 #, c-format msgid "failed to send GSSAPI negotiation response: %m" msgstr "помилка надсилання GSSAPI в процесі відповіді зв'язування: %m" -#: postmaster/postmaster.c:2120 +#: postmaster/postmaster.c:2124 #, c-format msgid "received unencrypted data after GSSAPI encryption request" msgstr "отримані незашифровані дані після запиту шифрування GSSAPI" -#: postmaster/postmaster.c:2144 +#: postmaster/postmaster.c:2148 #, c-format msgid "unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u" msgstr "протокол інтерфейсу, що не підтримується, %u.%u: сервер підтримує %u.0 до %u.%u" -#: postmaster/postmaster.c:2208 utils/misc/guc.c:7126 utils/misc/guc.c:7162 -#: utils/misc/guc.c:7232 utils/misc/guc.c:8564 utils/misc/guc.c:11538 -#: utils/misc/guc.c:11579 +#: postmaster/postmaster.c:2212 utils/misc/guc.c:7138 utils/misc/guc.c:7174 +#: utils/misc/guc.c:7244 utils/misc/guc.c:8628 utils/misc/guc.c:11596 +#: utils/misc/guc.c:11637 #, c-format msgid "invalid value for parameter \"%s\": \"%s\"" msgstr "неприпустиме значення параметру \"%s\": \"%s\"" -#: postmaster/postmaster.c:2211 +#: postmaster/postmaster.c:2215 #, c-format msgid "Valid values are: \"false\", 0, \"true\", 1, \"database\"." msgstr "Дійсні значення: \"false\", 0, \"true\", 1, \"database\"." -#: postmaster/postmaster.c:2256 +#: postmaster/postmaster.c:2260 #, c-format msgid "invalid startup packet layout: expected terminator as last byte" msgstr "неприпустима структура стартового пакету: останнім байтом очікувався термінатор" -#: postmaster/postmaster.c:2273 +#: postmaster/postmaster.c:2277 #, c-format msgid "no PostgreSQL user name specified in startup packet" msgstr "не вказано жодного ім'я користувача PostgreSQL у стартовому пакеті" -#: postmaster/postmaster.c:2337 +#: postmaster/postmaster.c:2341 #, c-format msgid "the database system is starting up" msgstr "система бази даних запускається" -#: postmaster/postmaster.c:2343 +#: postmaster/postmaster.c:2347 #, c-format msgid "the database system is not yet accepting connections" msgstr "система бази даних ще не приймає підключення" -#: postmaster/postmaster.c:2344 +#: postmaster/postmaster.c:2348 #, c-format msgid "Consistent recovery state has not been yet reached." msgstr "Узгодженого стану відновлення ще не досягнуто." -#: postmaster/postmaster.c:2348 +#: postmaster/postmaster.c:2352 #, c-format msgid "the database system is not accepting connections" msgstr "система бази даних не приймає підключення" -#: postmaster/postmaster.c:2349 +#: postmaster/postmaster.c:2353 #, c-format msgid "Hot standby mode is disabled." msgstr "Режим Hot standby вимкнений." -#: postmaster/postmaster.c:2354 +#: postmaster/postmaster.c:2358 #, c-format msgid "the database system is shutting down" msgstr "система бази даних завершує роботу" -#: postmaster/postmaster.c:2359 +#: postmaster/postmaster.c:2363 #, c-format msgid "the database system is in recovery mode" msgstr "система бази даних у режимі відновлення" -#: postmaster/postmaster.c:2364 storage/ipc/procarray.c:499 +#: postmaster/postmaster.c:2368 storage/ipc/procarray.c:499 #: storage/ipc/sinvaladt.c:297 storage/lmgr/proc.c:361 #, c-format msgid "sorry, too many clients already" msgstr "вибачте, вже забагато клієнтів" -#: postmaster/postmaster.c:2454 +#: postmaster/postmaster.c:2458 #, c-format msgid "wrong key in cancel request for process %d" msgstr "неправильний ключ в запиті скасування процесу %d" -#: postmaster/postmaster.c:2466 +#: postmaster/postmaster.c:2470 #, c-format msgid "PID %d in cancel request did not match any process" msgstr "PID %d в запиті на скасування не відповідає жодному процесу" -#: postmaster/postmaster.c:2720 +#: postmaster/postmaster.c:2723 #, c-format msgid "received SIGHUP, reloading configuration files" msgstr "отримано SIGHUP, поновлення файлів конфігурацій" #. translator: %s is a configuration file -#: postmaster/postmaster.c:2746 postmaster/postmaster.c:2750 +#: postmaster/postmaster.c:2749 postmaster/postmaster.c:2753 #, c-format msgid "%s was not reloaded" msgstr "%s не було перезавантажено" -#: postmaster/postmaster.c:2760 +#: postmaster/postmaster.c:2763 #, c-format msgid "SSL configuration was not reloaded" msgstr "Конфігурація протоколу SSL не була перезавантажена" -#: postmaster/postmaster.c:2816 +#: postmaster/postmaster.c:2819 #, c-format msgid "received smart shutdown request" msgstr "отримано smart запит на завершення роботи" -#: postmaster/postmaster.c:2862 +#: postmaster/postmaster.c:2865 #, c-format msgid "received fast shutdown request" msgstr "отримано швидкий запит на завершення роботи" -#: postmaster/postmaster.c:2880 +#: postmaster/postmaster.c:2883 #, c-format msgid "aborting any active transactions" msgstr "переривання будь-яких активних транзакцій" -#: postmaster/postmaster.c:2904 +#: postmaster/postmaster.c:2907 #, c-format msgid "received immediate shutdown request" msgstr "отримано запит на негайне завершення роботи" -#: postmaster/postmaster.c:2981 +#: postmaster/postmaster.c:2984 #, c-format msgid "shutdown at recovery target" msgstr "завершення роботи при відновленні мети" -#: postmaster/postmaster.c:2999 postmaster/postmaster.c:3035 +#: postmaster/postmaster.c:3002 postmaster/postmaster.c:3038 msgid "startup process" msgstr "стартовий процес" -#: postmaster/postmaster.c:3002 +#: postmaster/postmaster.c:3005 #, c-format msgid "aborting startup due to startup process failure" msgstr "переривання запуску через помилку в стартовому процесі" -#: postmaster/postmaster.c:3077 +#: postmaster/postmaster.c:3080 #, c-format msgid "database system is ready to accept connections" msgstr "система бази даних готова до отримання підключення" -#: postmaster/postmaster.c:3098 +#: postmaster/postmaster.c:3101 msgid "background writer process" msgstr "процес фонового запису" -#: postmaster/postmaster.c:3152 +#: postmaster/postmaster.c:3155 msgid "checkpointer process" msgstr "процес контрольних точок" -#: postmaster/postmaster.c:3168 +#: postmaster/postmaster.c:3171 msgid "WAL writer process" msgstr "Процес запису WAL" -#: postmaster/postmaster.c:3183 +#: postmaster/postmaster.c:3186 msgid "WAL receiver process" msgstr "Процес отримання WAL" -#: postmaster/postmaster.c:3198 +#: postmaster/postmaster.c:3201 msgid "autovacuum launcher process" msgstr "процес запуску автоочистки" -#: postmaster/postmaster.c:3216 +#: postmaster/postmaster.c:3219 msgid "archiver process" msgstr "процес архівації" -#: postmaster/postmaster.c:3231 +#: postmaster/postmaster.c:3234 msgid "statistics collector process" msgstr "процес збору статистики" -#: postmaster/postmaster.c:3245 +#: postmaster/postmaster.c:3248 msgid "system logger process" msgstr "процес системного журналювання" -#: postmaster/postmaster.c:3309 +#: postmaster/postmaster.c:3312 #, c-format msgid "background worker \"%s\"" msgstr "фоновий виконавець \"%s\"" -#: postmaster/postmaster.c:3393 postmaster/postmaster.c:3413 -#: postmaster/postmaster.c:3420 postmaster/postmaster.c:3438 +#: postmaster/postmaster.c:3396 postmaster/postmaster.c:3416 +#: postmaster/postmaster.c:3423 postmaster/postmaster.c:3441 msgid "server process" msgstr "процес сервера" -#: postmaster/postmaster.c:3492 +#: postmaster/postmaster.c:3495 #, c-format msgid "terminating any other active server processes" msgstr "завершення будь-яких інших активних серверних процесів" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3745 +#: postmaster/postmaster.c:3748 #, c-format msgid "%s (PID %d) exited with exit code %d" msgstr "%s (PID %d) завершився з кодом виходу %d" -#: postmaster/postmaster.c:3747 postmaster/postmaster.c:3759 -#: postmaster/postmaster.c:3769 postmaster/postmaster.c:3780 +#: postmaster/postmaster.c:3750 postmaster/postmaster.c:3762 +#: postmaster/postmaster.c:3772 postmaster/postmaster.c:3783 #, c-format msgid "Failed process was running: %s" msgstr "Процес що завершився виконував дію: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3756 +#: postmaster/postmaster.c:3759 #, c-format msgid "%s (PID %d) was terminated by exception 0x%X" msgstr "%s (PID %d) був перерваний винятком 0x%X" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3766 +#: postmaster/postmaster.c:3769 #, c-format msgid "%s (PID %d) was terminated by signal %d: %s" msgstr "%s (PID %d) був перерваний сигналом %d: %s" #. translator: %s is a noun phrase describing a child process, such as #. "server process" -#: postmaster/postmaster.c:3778 +#: postmaster/postmaster.c:3781 #, c-format msgid "%s (PID %d) exited with unrecognized status %d" msgstr "%s (PID %d) завершився з нерозпізнаним статусом %d" -#: postmaster/postmaster.c:3992 +#: postmaster/postmaster.c:3995 #, c-format msgid "abnormal database system shutdown" msgstr "ненормальне завершення роботи системи бази даних" -#: postmaster/postmaster.c:4030 +#: postmaster/postmaster.c:4033 #, c-format msgid "shutting down due to startup process failure" msgstr "завершення роботи через помилку в стартовому процесі" -#: postmaster/postmaster.c:4036 +#: postmaster/postmaster.c:4039 #, c-format msgid "shutting down because restart_after_crash is off" msgstr "завершення роботи, тому що restart_after_crash вимкнено" -#: postmaster/postmaster.c:4048 +#: postmaster/postmaster.c:4051 #, c-format msgid "all server processes terminated; reinitializing" msgstr "усі серверні процеси перервано; повторна ініціалізація" -#: postmaster/postmaster.c:4222 postmaster/postmaster.c:5573 -#: postmaster/postmaster.c:5964 +#: postmaster/postmaster.c:4225 postmaster/postmaster.c:5577 +#: postmaster/postmaster.c:5968 #, c-format msgid "could not generate random cancel key" msgstr "не вдалося згенерувати випадковий ключ скасування" -#: postmaster/postmaster.c:4276 +#: postmaster/postmaster.c:4279 #, c-format msgid "could not fork new process for connection: %m" msgstr "не вдалося породити нові процеси для з'єднання: %m" -#: postmaster/postmaster.c:4318 +#: postmaster/postmaster.c:4321 msgid "could not fork new process for connection: " msgstr "не вдалося породити нові процеси для з'єднання: " -#: postmaster/postmaster.c:4424 +#: postmaster/postmaster.c:4427 #, c-format msgid "connection received: host=%s port=%s" msgstr "з'єднання отримано: хост=%s порт=%s" -#: postmaster/postmaster.c:4429 +#: postmaster/postmaster.c:4432 #, c-format msgid "connection received: host=%s" msgstr "з'єднання отримано: хост=%s" -#: postmaster/postmaster.c:4672 +#: postmaster/postmaster.c:4675 #, c-format msgid "could not execute server process \"%s\": %m" msgstr "не вдалося виконати серверні процеси \"%s\":%m" -#: postmaster/postmaster.c:4730 +#: postmaster/postmaster.c:4733 #, c-format msgid "could not create backend parameter file mapping: error code %lu" msgstr "не вдалося створити відображення файлу параметру внутрішнього сервера: код помилки %lu" -#: postmaster/postmaster.c:4739 +#: postmaster/postmaster.c:4742 #, c-format msgid "could not map backend parameter memory: error code %lu" msgstr "не вдалося відобразити пам'ять параметру внутрішнього сервера: код помилки %lu" -#: postmaster/postmaster.c:4766 +#: postmaster/postmaster.c:4769 #, c-format msgid "subprocess command line too long" msgstr "командний рядок підпроцесу занадто довгий" -#: postmaster/postmaster.c:4784 +#: postmaster/postmaster.c:4787 #, c-format msgid "CreateProcess() call failed: %m (error code %lu)" msgstr "помилка виклику CreateProcess(): %m (код помилки %lu)" -#: postmaster/postmaster.c:4811 +#: postmaster/postmaster.c:4814 #, c-format msgid "could not unmap view of backend parameter file: error code %lu" msgstr "не вдалося вимкнути відображення файлу параметру внутрішнього сервера: код помилки %lu" -#: postmaster/postmaster.c:4815 +#: postmaster/postmaster.c:4818 #, c-format msgid "could not close handle to backend parameter file: error code %lu" msgstr "не вдалося закрити покажчик файлу параметру внутрішнього сервера: код помилки %lu" -#: postmaster/postmaster.c:4837 +#: postmaster/postmaster.c:4840 #, c-format msgid "giving up after too many tries to reserve shared memory" msgstr "кількість повторних спроб резервування спільної пам'яті досягло межі" -#: postmaster/postmaster.c:4838 +#: postmaster/postmaster.c:4841 #, c-format msgid "This might be caused by ASLR or antivirus software." msgstr "Це може бути викликано антивірусним програмним забезпеченням або ASLR." -#: postmaster/postmaster.c:5020 +#: postmaster/postmaster.c:5023 #, c-format msgid "SSL configuration could not be loaded in child process" msgstr "Не вдалося завантажити конфігурацію SSL в дочірній процес" -#: postmaster/postmaster.c:5146 +#: postmaster/postmaster.c:5149 #, c-format -msgid "Please report this to <%s>." -msgstr "Будь-ласка повідомте про це <%s>." +msgid "postmaster became multithreaded" +msgstr "postmaster став багатопотоковим" -#: postmaster/postmaster.c:5233 +#: postmaster/postmaster.c:5237 #, c-format msgid "database system is ready to accept read-only connections" msgstr "система бази даних готова до отримання підключення лише для читання" -#: postmaster/postmaster.c:5497 +#: postmaster/postmaster.c:5501 #, c-format msgid "could not fork startup process: %m" msgstr "не вдалося породити стартовий процес: %m" -#: postmaster/postmaster.c:5501 +#: postmaster/postmaster.c:5505 #, c-format msgid "could not fork archiver process: %m" msgstr "не вдалося породити процес архіватора: %m" -#: postmaster/postmaster.c:5505 +#: postmaster/postmaster.c:5509 #, c-format msgid "could not fork background writer process: %m" msgstr "не вдалося породити фоновий процес запису: %m" -#: postmaster/postmaster.c:5509 +#: postmaster/postmaster.c:5513 #, c-format msgid "could not fork checkpointer process: %m" msgstr "не вдалося породити процес контрольних точок: %m" -#: postmaster/postmaster.c:5513 +#: postmaster/postmaster.c:5517 #, c-format msgid "could not fork WAL writer process: %m" msgstr "не вдалося породити процес запису WAL: %m" -#: postmaster/postmaster.c:5517 +#: postmaster/postmaster.c:5521 #, c-format msgid "could not fork WAL receiver process: %m" msgstr "не вдалося породити процес отримання WAL: %m" -#: postmaster/postmaster.c:5521 +#: postmaster/postmaster.c:5525 #, c-format msgid "could not fork process: %m" msgstr "не вдалося породити процес: %m" -#: postmaster/postmaster.c:5722 postmaster/postmaster.c:5745 +#: postmaster/postmaster.c:5726 postmaster/postmaster.c:5749 #, c-format msgid "database connection requirement not indicated during registration" msgstr "під час реєстрації не вказувалося, що вимагається підключення до бази даних" -#: postmaster/postmaster.c:5729 postmaster/postmaster.c:5752 +#: postmaster/postmaster.c:5733 postmaster/postmaster.c:5756 #, c-format msgid "invalid processing mode in background worker" msgstr "неприпустимий режим обробки у фоновому записі" -#: postmaster/postmaster.c:5837 +#: postmaster/postmaster.c:5841 #, c-format msgid "could not fork worker process: %m" msgstr "не вдалося породити процес запису: %m" -#: postmaster/postmaster.c:5950 +#: postmaster/postmaster.c:5954 #, c-format msgid "no slot available for new worker process" msgstr "немає доступного слоту для нового робочого процесу" -#: postmaster/postmaster.c:6284 +#: postmaster/postmaster.c:6288 #, c-format msgid "could not duplicate socket %d for use in backend: error code %d" msgstr "не вдалося продублювати сокет %d для використання: код помилки %d" -#: postmaster/postmaster.c:6316 +#: postmaster/postmaster.c:6320 #, c-format msgid "could not create inherited socket: error code %d\n" msgstr "не вдалося створити успадкований сокет: код помилки %d\n" -#: postmaster/postmaster.c:6345 +#: postmaster/postmaster.c:6349 #, c-format msgid "could not open backend variables file \"%s\": %s\n" msgstr "не вдалося відкрити внутрішні змінні файли \"%s\": %s\n" -#: postmaster/postmaster.c:6352 +#: postmaster/postmaster.c:6356 #, c-format msgid "could not read from backend variables file \"%s\": %s\n" msgstr "не вдалося прочитати внутрішні змінні файли \"%s\": %s\n" -#: postmaster/postmaster.c:6361 +#: postmaster/postmaster.c:6365 #, c-format msgid "could not remove file \"%s\": %s\n" msgstr "не вдалося видалити файл \"%s\": %s\n" -#: postmaster/postmaster.c:6378 +#: postmaster/postmaster.c:6382 #, c-format msgid "could not map view of backend variables: error code %lu\n" msgstr "не вдалося відобразити файл серверних змінних: код помилки %lu\n" -#: postmaster/postmaster.c:6387 +#: postmaster/postmaster.c:6391 #, c-format msgid "could not unmap view of backend variables: error code %lu\n" msgstr "не вдалося вимкнути відображення файлу серверних змінних: код помилки %lu\n" -#: postmaster/postmaster.c:6394 +#: postmaster/postmaster.c:6398 #, c-format msgid "could not close handle to backend parameter variables: error code %lu\n" msgstr "не вдалося закрити покажчик файлу серверних змінних: код помилки %lu\n" -#: postmaster/postmaster.c:6556 +#: postmaster/postmaster.c:6560 #, c-format msgid "could not read exit code for process\n" msgstr "не вдалося прочитати код завершення процесу\n" -#: postmaster/postmaster.c:6598 +#: postmaster/postmaster.c:6602 #, c-format msgid "could not post child completion status\n" msgstr "не вдалося надіслати статус завершення нащадка\n" @@ -18513,7 +18594,7 @@ msgstr "не вдалося знайти файл WAL \"%s\"" msgid "unexpected WAL file size \"%s\"" msgstr "неочікуаний розмір файлу WAL \"%s\"" -#: replication/basebackup.c:644 replication/basebackup.c:1777 +#: replication/basebackup.c:644 replication/basebackup.c:1771 #, c-format msgid "base backup could not send data, aborting backup" msgstr "в процесі базового резервного копіювання не вдалося передати дані, копіювання переривається" @@ -18561,32 +18642,32 @@ msgstr "нерозпізнаний алгоритм контрольної су msgid "manifest checksums require a backup manifest" msgstr "контрольні суми маніфесту потребують резервного копіювання маніфесту" -#: replication/basebackup.c:1525 +#: replication/basebackup.c:1519 #, c-format msgid "skipping special file \"%s\"" msgstr "спеціальний файл \"%s\" пропускається" -#: replication/basebackup.c:1646 +#: replication/basebackup.c:1640 #, c-format msgid "invalid segment number %d in file \"%s\"" msgstr "неприпустимий номер сегменту %d в файлі \"%s\"" -#: replication/basebackup.c:1684 +#: replication/basebackup.c:1678 #, 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 відрізняються" -#: replication/basebackup.c:1757 +#: replication/basebackup.c:1751 #, c-format msgid "checksum verification failed in file \"%s\", block %u: calculated %X but expected %X" msgstr "помилка перевірки контрольної суми у файлі \"%s\", блок %u: обчислено %X, але очікувалось %X" -#: replication/basebackup.c:1764 +#: replication/basebackup.c:1758 #, c-format msgid "further checksum verification failures in file \"%s\" will not be reported" msgstr "про подальші помилки під час перевірки контрольної суми в файлі \"%s\" повідомлятись не буде" -#: replication/basebackup.c:1822 +#: replication/basebackup.c:1816 #, c-format msgid "file \"%s\" has a total of %d checksum verification failure" msgid_plural "file \"%s\" has a total of %d checksum verification failures" @@ -18595,12 +18676,12 @@ msgstr[1] "файл \"%s\" має загальну кількість помил msgstr[2] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" msgstr[3] "файл \"%s\" має загальну кількість помилок перевірки контрольної суми: %d" -#: replication/basebackup.c:1858 +#: replication/basebackup.c:1852 #, c-format msgid "file name too long for tar format: \"%s\"" msgstr "ім'я файлу занадто довге для tar формату: \"%s\"" -#: replication/basebackup.c:1863 +#: replication/basebackup.c:1857 #, c-format msgid "symbolic link target too long for tar format: file name \"%s\", target \"%s\"" msgstr "мета символьного посилання занадто довга для формату tar: ім'я файлу \"%s\", мета \"%s\"" @@ -18664,7 +18745,7 @@ msgid "error reading result of streaming command: %s" msgstr "помилка при читанні результату команди потокового передавання: %s" #: replication/libpqwalreceiver/libpqwalreceiver.c:570 -#: replication/libpqwalreceiver/libpqwalreceiver.c:808 +#: replication/libpqwalreceiver/libpqwalreceiver.c:805 #, c-format msgid "unexpected result after CommandComplete: %s" msgstr "неочікуваний результат CommandComplete: %s" @@ -18679,43 +18760,43 @@ msgstr "не вдалося отримати файл історії часов msgid "Expected 1 tuple with 2 fields, got %d tuples with %d fields." msgstr "Очікувалося 1 кортеж з 2 поле, отримано %d кортежів з %d полями." -#: replication/libpqwalreceiver/libpqwalreceiver.c:771 -#: replication/libpqwalreceiver/libpqwalreceiver.c:824 -#: replication/libpqwalreceiver/libpqwalreceiver.c:831 +#: replication/libpqwalreceiver/libpqwalreceiver.c:768 +#: replication/libpqwalreceiver/libpqwalreceiver.c:821 +#: replication/libpqwalreceiver/libpqwalreceiver.c:828 #, c-format msgid "could not receive data from WAL stream: %s" msgstr "не вдалося отримати дані з WAL потоку: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:851 +#: replication/libpqwalreceiver/libpqwalreceiver.c:848 #, c-format msgid "could not send data to WAL stream: %s" msgstr "не вдалося передати дані потоку WAL: %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:905 +#: replication/libpqwalreceiver/libpqwalreceiver.c:902 #, c-format msgid "could not create replication slot \"%s\": %s" msgstr "не вдалося створити слот реплікації \"%s\": %s" -#: replication/libpqwalreceiver/libpqwalreceiver.c:951 +#: replication/libpqwalreceiver/libpqwalreceiver.c:948 #, c-format msgid "invalid query response" msgstr "неприпустима відповідь на запит" -#: replication/libpqwalreceiver/libpqwalreceiver.c:952 +#: replication/libpqwalreceiver/libpqwalreceiver.c:949 #, c-format msgid "Expected %d fields, got %d fields." msgstr "Очікувалося %d полів, отримано %d полі." -#: replication/libpqwalreceiver/libpqwalreceiver.c:1022 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1019 #, c-format msgid "the query interface requires a database connection" msgstr "інтерфейс запитів вимагає підключення до бази даних" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1053 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1050 msgid "empty query" msgstr "пустий запит" -#: replication/libpqwalreceiver/libpqwalreceiver.c:1059 +#: replication/libpqwalreceiver/libpqwalreceiver.c:1056 msgid "unexpected pipeline mode" msgstr "неочікуваний режим конвеєра" @@ -18769,55 +18850,55 @@ msgstr "логічне декодування вимагає підключен msgid "logical decoding cannot be used while in recovery" msgstr "логічне декодування неможливо використовувати під час відновлення" -#: replication/logical/logical.c:347 replication/logical/logical.c:499 +#: replication/logical/logical.c:350 replication/logical/logical.c:504 #, c-format msgid "cannot use physical replication slot for logical decoding" msgstr "неможливо використовувати слот невідповідної реплікації для логічного кодування" -#: replication/logical/logical.c:352 replication/logical/logical.c:504 +#: replication/logical/logical.c:355 replication/logical/logical.c:509 #, c-format msgid "replication slot \"%s\" was not created in this database" msgstr "слот реплікації \"%s\" був створений не в цій базі даних" -#: replication/logical/logical.c:359 +#: replication/logical/logical.c:362 #, c-format msgid "cannot create logical replication slot in transaction that has performed writes" msgstr "неможливо створити слот логічної реплікації у транзакції, що виконує записування" -#: replication/logical/logical.c:549 +#: replication/logical/logical.c:554 #, c-format msgid "starting logical decoding for slot \"%s\"" msgstr "початок логічного декодування для слоту \"%s\"" -#: replication/logical/logical.c:551 +#: replication/logical/logical.c:556 #, c-format msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X." msgstr "Потокове передавання транзакцій, що затверджені, після %X/%X, читання WAL з %X/%X." -#: replication/logical/logical.c:696 +#: replication/logical/logical.c:701 #, 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:702 +#: replication/logical/logical.c:707 #, c-format msgid "slot \"%s\", output plugin \"%s\", in the %s callback" msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s" -#: replication/logical/logical.c:873 replication/logical/logical.c:918 -#: replication/logical/logical.c:963 replication/logical/logical.c:1009 +#: replication/logical/logical.c:878 replication/logical/logical.c:923 +#: replication/logical/logical.c:968 replication/logical/logical.c:1014 #, c-format msgid "logical replication at prepare time requires a %s callback" msgstr "логічна реплікація під час підготовки потребує %s зворотнього виклику" -#: replication/logical/logical.c:1241 replication/logical/logical.c:1290 -#: replication/logical/logical.c:1331 replication/logical/logical.c:1417 -#: replication/logical/logical.c:1466 +#: replication/logical/logical.c:1246 replication/logical/logical.c:1295 +#: replication/logical/logical.c:1336 replication/logical/logical.c:1422 +#: replication/logical/logical.c:1471 #, c-format msgid "logical streaming requires a %s callback" msgstr "логічне потокове передавання потребує %s зворотнього виклику" -#: replication/logical/logical.c:1376 +#: replication/logical/logical.c:1381 #, c-format msgid "logical streaming at prepare time requires a %s callback" msgstr "логічне потокове передавання під час підготовки потребує %s зворотнього виклику" @@ -18929,7 +19010,7 @@ msgid "could not find free replication state slot for replication origin with OI msgstr "не вдалося знайти вільний слот стану реплікації для джерела реплікації з OID %u" #: replication/logical/origin.c:941 replication/logical/origin.c:1128 -#: replication/slot.c:1867 +#: replication/slot.c:1932 #, c-format msgid "Increase max_replication_slots and try again." msgstr "Збільшіть max_replication_slots і спробуйте знову." @@ -18984,29 +19065,29 @@ msgstr "в цільовому відношенні логічної реплік msgid "logical replication target relation \"%s.%s\" does not exist" msgstr "цільове відношення логічної реплікації \"%s.%s\" не існує" -#: replication/logical/reorderbuffer.c:3834 +#: replication/logical/reorderbuffer.c:3973 #, c-format msgid "could not write to data file for XID %u: %m" msgstr "не вдалося записати у файл даних для XID %u: %m" -#: replication/logical/reorderbuffer.c:4180 -#: replication/logical/reorderbuffer.c:4205 +#: replication/logical/reorderbuffer.c:4319 +#: replication/logical/reorderbuffer.c:4344 #, c-format msgid "could not read from reorderbuffer spill file: %m" msgstr "не вдалося прочитати з файлу розгортання буферу пересортування: %m" -#: replication/logical/reorderbuffer.c:4184 -#: replication/logical/reorderbuffer.c:4209 +#: replication/logical/reorderbuffer.c:4323 +#: replication/logical/reorderbuffer.c:4348 #, c-format msgid "could not read from reorderbuffer spill file: read %d instead of %u bytes" msgstr "не вдалося прочитати з файлу розгортання буферу пересортування: прочитано %d замість %u байт" -#: replication/logical/reorderbuffer.c:4459 +#: replication/logical/reorderbuffer.c:4598 #, 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:4958 +#: replication/logical/reorderbuffer.c:5097 #, c-format msgid "could not read from file \"%s\": read %d instead of %d bytes" msgstr "не вдалося прочитати з файлу \"%s\": прочитано %d замість %d байт" @@ -19025,58 +19106,58 @@ msgstr[1] "експортовано знімок логічного декоду msgstr[2] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" msgstr[3] "експортовано знімок логічного декодування \"%s\" з %u ID транзакціями" -#: replication/logical/snapbuild.c:1370 replication/logical/snapbuild.c:1477 -#: replication/logical/snapbuild.c:2008 +#: replication/logical/snapbuild.c:1421 replication/logical/snapbuild.c:1533 +#: replication/logical/snapbuild.c:2068 #, c-format msgid "logical decoding found consistent point at %X/%X" msgstr "узгодження процесу логічного кодування знайдено в точці %X/%X" -#: replication/logical/snapbuild.c:1372 +#: replication/logical/snapbuild.c:1423 #, c-format msgid "There are no running transactions." msgstr "Більше активних транзакцій немає." -#: replication/logical/snapbuild.c:1428 +#: replication/logical/snapbuild.c:1484 #, c-format msgid "logical decoding found initial starting point at %X/%X" msgstr "початкова стартова точка процесу логічного декодування знайдена в точці %X/%X" -#: replication/logical/snapbuild.c:1430 replication/logical/snapbuild.c:1454 +#: replication/logical/snapbuild.c:1486 replication/logical/snapbuild.c:1510 #, c-format msgid "Waiting for transactions (approximately %d) older than %u to end." msgstr "Очікування транзакцій (приблизно %d) старіше, ніж %u до кінця." -#: replication/logical/snapbuild.c:1452 +#: replication/logical/snapbuild.c:1508 #, c-format msgid "logical decoding found initial consistent point at %X/%X" msgstr "початкова точка узгодження процесу логічного кодування знайдена в точці %X/%X" -#: replication/logical/snapbuild.c:1479 +#: replication/logical/snapbuild.c:1535 #, c-format msgid "There are no old transactions anymore." msgstr "Більше старих транзакцій немає." -#: replication/logical/snapbuild.c:1876 +#: replication/logical/snapbuild.c:1932 #, c-format msgid "snapbuild state file \"%s\" has wrong magic number: %u instead of %u" msgstr "файл стану snapbuild \"%s\" має неправильне магічне число: %u замість %u" -#: replication/logical/snapbuild.c:1882 +#: replication/logical/snapbuild.c:1938 #, c-format msgid "snapbuild state file \"%s\" has unsupported version: %u instead of %u" msgstr "файл стану snapbuild \"%s\" має непідтримуючу версію: %u замість %u" -#: replication/logical/snapbuild.c:1953 +#: replication/logical/snapbuild.c:2009 #, c-format msgid "checksum mismatch for snapbuild state file \"%s\": is %u, should be %u" msgstr "у файлі стану snapbuild \"%s\" невідповідність контрольної суми: %u, повинно бути %u" -#: replication/logical/snapbuild.c:2010 +#: replication/logical/snapbuild.c:2070 #, c-format msgid "Logical decoding will begin using saved snapshot." msgstr "Логічне декодування почнеться зі збереженого знімку." -#: replication/logical/snapbuild.c:2082 +#: replication/logical/snapbuild.c:2142 #, c-format msgid "could not parse file name \"%s\"" msgstr "не вдалося аналізувати ім'я файлу \"%s\"" @@ -19086,32 +19167,27 @@ msgstr "не вдалося аналізувати ім'я файлу \"%s\"" msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has finished" msgstr "процес синхронізації таблиці при логічній реплікації для підписки \"%s\", таблиці \"%s\" закінчив обробку" -#: replication/logical/tablesync.c:737 replication/logical/tablesync.c:780 +#: replication/logical/tablesync.c:758 replication/logical/tablesync.c:801 #, c-format msgid "could not fetch table info for table \"%s.%s\" from publisher: %s" msgstr "не вдалося отримати інформацію про таблицю \"%s.%s\" з серверу публікації: %s" -#: replication/logical/tablesync.c:744 +#: replication/logical/tablesync.c:765 #, c-format msgid "table \"%s.%s\" not found on publisher" msgstr "таблиця \"%s.%s\" не знайдена на сервері публікації" -#: replication/logical/tablesync.c:868 +#: replication/logical/tablesync.c:889 #, c-format msgid "could not start initial contents copy for table \"%s.%s\": %s" msgstr "не вдалося почати копіювання початкового змісту таблиці \"%s.%s\": %s" -#: replication/logical/tablesync.c:1069 +#: replication/logical/tablesync.c:1104 #, c-format msgid "table copy could not start transaction on publisher: %s" msgstr "копії таблиці не вдалося запустити транзакцію на сервері публікації: %s" -#: replication/logical/tablesync.c:1110 -#, c-format -msgid "replication origin \"%s\" already exists" -msgstr "джерело реплікації \"%s\" вже існує" - -#: replication/logical/tablesync.c:1123 +#: replication/logical/tablesync.c:1142 #, c-format msgid "table copy could not finish transaction on publisher: %s" msgstr "копії таблиці не вдалося завершити транзакцію на сервері публікації: %s" @@ -19171,183 +19247,182 @@ msgstr "процес, що застосовує логічну реплікац msgid "could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes" msgstr "не вдалося прочитати з файлу subxact потокової транзакції \"%s\": прочитано лише %zu з %zu байтів" -#: replication/logical/worker.c:3136 +#: replication/logical/worker.c:3143 #, c-format msgid "logical replication apply worker for subscription %u will not start because the subscription was removed during startup" msgstr "застосовуючий процес логічної реплікації для підписки %u не буде почато, тому, що підписка була видалена під час запуску" -#: replication/logical/worker.c:3148 +#: replication/logical/worker.c:3155 #, c-format msgid "logical replication apply worker for subscription \"%s\" will not start because the subscription was disabled during startup" msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" не буде почато, тому, що підписка була вимкнута під час запуску" -#: replication/logical/worker.c:3166 +#: replication/logical/worker.c:3173 #, c-format msgid "logical replication table synchronization worker for subscription \"%s\", table \"%s\" has started" msgstr "просец синхронізації таблиці під час логічної реплікації для підписки \"%s\", таблиці \"%s\" запущений" -#: replication/logical/worker.c:3170 +#: replication/logical/worker.c:3177 #, c-format msgid "logical replication apply worker for subscription \"%s\" has started" msgstr "застосовуючий процес логічної реплікації для підписки \"%s\" запущений" -#: replication/logical/worker.c:3208 +#: replication/logical/worker.c:3215 #, c-format msgid "subscription has no replication slot set" msgstr "для підписки не встановлений слот реплікації" -#: replication/pgoutput/pgoutput.c:196 +#: replication/pgoutput/pgoutput.c:205 #, c-format msgid "invalid proto_version" msgstr "неприпустиме значення proto_version" -#: replication/pgoutput/pgoutput.c:201 +#: replication/pgoutput/pgoutput.c:210 #, c-format msgid "proto_version \"%s\" out of range" msgstr "значення proto_version \"%s\" за межами діапазону" -#: replication/pgoutput/pgoutput.c:218 +#: replication/pgoutput/pgoutput.c:227 #, c-format msgid "invalid publication_names syntax" msgstr "неприпустимий синтаксис publication_names" -#: replication/pgoutput/pgoutput.c:289 +#: replication/pgoutput/pgoutput.c:324 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or lower" msgstr "клієнт передав proto_version=%d, але ми підтримуємо лише протокол %d або нижче" -#: replication/pgoutput/pgoutput.c:295 +#: replication/pgoutput/pgoutput.c:330 #, c-format msgid "client sent proto_version=%d but we only support protocol %d or higher" msgstr "клієнт передав proto_version=%d, але ми підтримуємо лише протокол %d або вище" -#: replication/pgoutput/pgoutput.c:301 +#: replication/pgoutput/pgoutput.c:336 #, c-format msgid "publication_names parameter missing" msgstr "пропущено параметр publication_names" -#: replication/pgoutput/pgoutput.c:314 +#: replication/pgoutput/pgoutput.c:349 #, c-format msgid "requested proto_version=%d does not support streaming, need %d or higher" msgstr "запитувана proto_version=%d не підтримує потокову передачу, потребується %d або вища" -#: replication/pgoutput/pgoutput.c:319 +#: replication/pgoutput/pgoutput.c:354 #, c-format msgid "streaming requested, but not supported by output plugin" msgstr "запитане потокова передавача, але не підтримується плагіном виводу" -#: replication/slot.c:180 +#: replication/slot.c:212 #, c-format msgid "replication slot name \"%s\" is too short" msgstr "ім'я слоту реплікації \"%s\" занадто коротке" -#: replication/slot.c:189 +#: replication/slot.c:220 #, c-format msgid "replication slot name \"%s\" is too long" msgstr "ім'я слоту реплікації \"%s\" занадто довге" -#: replication/slot.c:202 +#: replication/slot.c:232 #, c-format msgid "replication slot name \"%s\" contains invalid character" msgstr "ім'я слоту реплікації \"%s\" містить неприпустимий символ" -#: replication/slot.c:204 -#, c-format +#: replication/slot.c:233 msgid "Replication slot names may only contain lower case letters, numbers, and the underscore character." msgstr "Імена слота реплікації можуть містити лише букви в нижньому кейсі, числа, і символ підкреслення." -#: replication/slot.c:258 +#: replication/slot.c:287 #, c-format msgid "replication slot \"%s\" already exists" msgstr "слот реплікації \"%s\" вже існує" -#: replication/slot.c:268 +#: replication/slot.c:297 #, c-format msgid "all replication slots are in use" msgstr "використовуються всі слоти реплікації" -#: replication/slot.c:269 +#: replication/slot.c:298 #, c-format msgid "Free one or increase max_replication_slots." msgstr "Звільніть непотрібні або збільшіть max_replication_slots." -#: replication/slot.c:402 replication/slotfuncs.c:761 +#: replication/slot.c:431 replication/slotfuncs.c:761 #: utils/adt/pgstatfuncs.c:2228 #, c-format msgid "replication slot \"%s\" does not exist" msgstr "слот реплікації \"%s\" не існує" -#: replication/slot.c:448 replication/slot.c:1025 +#: replication/slot.c:477 replication/slot.c:1083 #, c-format msgid "replication slot \"%s\" is active for PID %d" msgstr "слот реплікації \"%s\" активний для PID %d" -#: replication/slot.c:676 replication/slot.c:1419 replication/slot.c:1802 +#: replication/slot.c:705 replication/slot.c:1477 replication/slot.c:1867 #, c-format msgid "could not remove directory \"%s\"" msgstr "не вдалося видалити каталог \"%s\"" -#: replication/slot.c:1060 +#: replication/slot.c:1118 #, c-format msgid "replication slots can only be used if max_replication_slots > 0" msgstr "слоти реплікації можна використовувати лише якщо max_replication_slots > 0" -#: replication/slot.c:1065 +#: replication/slot.c:1123 #, c-format msgid "replication slots can only be used if wal_level >= replica" msgstr "слоти реплікації можна використовувати лише якщо wal_level >= replica" -#: replication/slot.c:1250 +#: replication/slot.c:1308 #, c-format msgid "terminating process %d to release replication slot \"%s\"" msgstr "завершення процесу %d для звільнення слоту реплікації \"%s\"" -#: replication/slot.c:1288 +#: replication/slot.c:1346 #, c-format msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size" msgstr "припинення слоту \"%s\" тому, що його restart_lsn %X/%X перевищує max_slot_wal_keep_size" -#: replication/slot.c:1740 +#: replication/slot.c:1805 #, c-format msgid "replication slot file \"%s\" has wrong magic number: %u instead of %u" msgstr "файл слоту реплікації \"%s\" має неправильне магічне число: %u замість %u" -#: replication/slot.c:1747 +#: replication/slot.c:1812 #, c-format msgid "replication slot file \"%s\" has unsupported version %u" msgstr "файл слоту реплікації \"%s\" має непідтримуючу версію %u" -#: replication/slot.c:1754 +#: replication/slot.c:1819 #, c-format msgid "replication slot file \"%s\" has corrupted length %u" msgstr "файл слоту реплікації \"%s\" має пошкоджену довжину %u" -#: replication/slot.c:1790 +#: replication/slot.c:1855 #, c-format msgid "checksum mismatch for replication slot file \"%s\": is %u, should be %u" msgstr "у файлі слоту реплікації \"%s\" невідповідність контрольної суми: %u, повинно бути %u" -#: replication/slot.c:1824 +#: replication/slot.c:1889 #, c-format msgid "logical replication slot \"%s\" exists, but wal_level < logical" msgstr "слот логічної реплікації \"%s\" існує, але wal_level < logical" -#: replication/slot.c:1826 +#: replication/slot.c:1891 #, c-format msgid "Change wal_level to be logical or higher." msgstr "Змініть wal_level на logical або вище." -#: replication/slot.c:1830 +#: replication/slot.c:1895 #, c-format msgid "physical replication slot \"%s\" exists, but wal_level < replica" msgstr "слот фізичної реплікації \"%s\" існує, але wal_level < replica" -#: replication/slot.c:1832 +#: replication/slot.c:1897 #, c-format msgid "Change wal_level to be replica or higher." msgstr "Змініть wal_level на replica або вище." -#: replication/slot.c:1866 +#: replication/slot.c:1931 #, c-format msgid "too many replication slots active before shutdown" msgstr "перед завершенням роботи активно занадто багато слотів реплікації" @@ -19402,37 +19477,37 @@ msgstr "не можна скопіювати незавершений слот msgid "Retry when the source replication slot's confirmed_flush_lsn is valid." msgstr "Повторіть, коли confirmed_flush_lsn слоту джерела реплікації є дійсним." -#: replication/syncrep.c:268 +#: replication/syncrep.c:311 #, c-format msgid "canceling the wait for synchronous replication and terminating connection due to administrator command" msgstr "скасування очікування синхронної реплікації і завершення з'єднання по команді адміністратора" -#: replication/syncrep.c:269 replication/syncrep.c:286 +#: replication/syncrep.c:312 replication/syncrep.c:329 #, c-format msgid "The transaction has already committed locally, but might not have been replicated to the standby." msgstr "Транзакція вже була затверджена локально, але можливо не була реплікована до режиму очікування." -#: replication/syncrep.c:285 +#: replication/syncrep.c:328 #, c-format msgid "canceling wait for synchronous replication due to user request" msgstr "скасування очікування синхронної реплікації по запиту користувача" -#: replication/syncrep.c:494 +#: replication/syncrep.c:537 #, c-format msgid "standby \"%s\" is now a synchronous standby with priority %u" msgstr "режим очікування \"%s\" зараз є синхронним з пріоритетом %u" -#: replication/syncrep.c:498 +#: replication/syncrep.c:541 #, c-format msgid "standby \"%s\" is now a candidate for quorum synchronous standby" msgstr "режим очікування \"%s\" зараз є кандидатом для включення в кворум синхронних" -#: replication/syncrep.c:1045 +#: replication/syncrep.c:1112 #, c-format msgid "synchronous_standby_names parser failed" msgstr "помилка при аналізуванні synchronous_standby_names" -#: replication/syncrep.c:1051 +#: replication/syncrep.c:1118 #, c-format msgid "number of synchronous standbys (%d) must be greater than zero" msgstr "кількість синхронних режимів очікування (%d) повинно бути більше нуля" @@ -19497,7 +19572,7 @@ msgstr "завершення процесу walreceiver через тайм-ау msgid "primary server contains no more WAL on requested timeline %u" msgstr "основний сервер більше не містить WAL для запитаної часової шкали %u" -#: replication/walreceiver.c:616 replication/walreceiver.c:1036 +#: replication/walreceiver.c:616 replication/walreceiver.c:1034 #, c-format msgid "could not close log segment %s: %m" msgstr "не вдалося закрити сегмент журналу %s: %m" @@ -19507,556 +19582,561 @@ msgstr "не вдалося закрити сегмент журналу %s: %m" msgid "fetching timeline history file for timeline %u from primary server" msgstr "отримання файлу історії часової шкали для часової шкали %u з основного серверу" -#: replication/walreceiver.c:927 +#: replication/walreceiver.c:925 #, c-format msgid "could not write to log segment %s at offset %u, length %lu: %m" msgstr "не вдалося записати в сегмент журналу %s зсув %u, довжина %lu: %m" -#: replication/walsender.c:525 storage/smgr/md.c:1324 +#: replication/walsender.c:539 storage/smgr/md.c:1336 #, c-format msgid "could not seek to end of file \"%s\": %m" msgstr "не вдалося досягти кінця файлу \"%s\": %m" -#: replication/walsender.c:529 +#: replication/walsender.c:543 #, c-format msgid "could not seek to beginning of file \"%s\": %m" msgstr "не вдалося знайти початок файлу \"%s\": %m" -#: replication/walsender.c:580 +#: replication/walsender.c:594 #, c-format msgid "IDENTIFY_SYSTEM has not been run before START_REPLICATION" msgstr "Команда IDENTIFY_SYSTEM не виконувалась до START_REPLICATION" -#: replication/walsender.c:609 +#: replication/walsender.c:623 #, c-format msgid "cannot use a logical replication slot for physical replication" msgstr "використовувати логічний слот реплікації для фізичної реплікації, не можна" -#: replication/walsender.c:678 +#: replication/walsender.c:692 #, 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:681 +#: replication/walsender.c:695 #, c-format msgid "This server's history forked from timeline %u at %X/%X." msgstr "Історія цього серверу відгалузилась від часової шкали %u в позиції %X/%X." -#: replication/walsender.c:725 +#: replication/walsender.c:739 #, c-format msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X" msgstr "запитана початкова точка %X/%X попереду позиція очищених даних WAL на цьому сервері %X/%X" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:975 +#: replication/walsender.c:989 #, c-format msgid "%s must not be called inside a transaction" msgstr "%s не має викликатися всередині транзакції" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:985 +#: replication/walsender.c:999 #, c-format msgid "%s must be called inside a transaction" msgstr "%s має викликатися всередині транзакції" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:991 +#: replication/walsender.c:1005 #, 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:997 +#: replication/walsender.c:1011 #, c-format msgid "%s must be called before any query" msgstr "%s має викликатися до будь-якого запиту" #. translator: %s is a CREATE_REPLICATION_SLOT statement -#: replication/walsender.c:1003 +#: replication/walsender.c:1017 #, c-format msgid "%s must not be called in a subtransaction" msgstr "%s не має викликатися всередині підтранзакції" -#: replication/walsender.c:1146 +#: replication/walsender.c:1160 #, c-format msgid "cannot read from logical replication slot \"%s\"" msgstr "не можна прочитати із слоту логічної реплікації \"%s\"" -#: replication/walsender.c:1148 +#: replication/walsender.c:1162 #, c-format msgid "This slot has been invalidated because it exceeded the maximum reserved size." msgstr "Цей слот визнано недійсним, тому що він перевищив максимально зарезервований розмір." -#: replication/walsender.c:1158 +#: replication/walsender.c:1172 #, c-format msgid "terminating walsender process after promotion" msgstr "завершення процесу walsender після підвищення" -#: replication/walsender.c:1552 +#: replication/walsender.c:1566 #, c-format msgid "cannot execute new commands while WAL sender is in stopping mode" msgstr "не можна виконувати нові команди, поки процес відправки WAL знаходиться в режимі зупинки" -#: replication/walsender.c:1587 +#: replication/walsender.c:1601 #, c-format msgid "cannot execute SQL commands in WAL sender for physical replication" msgstr "не можна виконувати команди SQL в процесі відправки WAL для фізичної реплікації" -#: replication/walsender.c:1620 +#: replication/walsender.c:1634 #, c-format msgid "received replication command: %s" msgstr "отримано команду реплікації: %s" -#: replication/walsender.c:1628 tcop/fastpath.c:208 tcop/postgres.c:1077 -#: tcop/postgres.c:1436 tcop/postgres.c:1697 tcop/postgres.c:2166 -#: tcop/postgres.c:2599 tcop/postgres.c:2678 +#: replication/walsender.c:1642 tcop/fastpath.c:208 tcop/postgres.c:1046 +#: tcop/postgres.c:1405 tcop/postgres.c:1678 tcop/postgres.c:2159 +#: tcop/postgres.c:2592 tcop/postgres.c:2671 #, c-format msgid "current transaction is aborted, commands ignored until end of transaction block" msgstr "поточна транзакція перервана, команди до кінця блока транзакції пропускаються" -#: replication/walsender.c:1763 replication/walsender.c:1798 +#: replication/walsender.c:1777 replication/walsender.c:1812 #, c-format msgid "unexpected EOF on standby connection" msgstr "неочікуваний обрив з'єднання з резервним сервером" -#: replication/walsender.c:1786 +#: replication/walsender.c:1800 #, c-format msgid "invalid standby message type \"%c\"" msgstr "неприпустимий тип повідомлення резервного серверу \"%c\"" -#: replication/walsender.c:1875 +#: replication/walsender.c:1889 #, c-format msgid "unexpected message type \"%c\"" msgstr "неочікуваний тип повідомлення \"%c\"" -#: replication/walsender.c:2288 +#: replication/walsender.c:2306 #, c-format msgid "terminating walsender process due to replication timeout" msgstr "завершення процесу walsender через тайм-аут реплікації" -#: rewrite/rewriteDefine.c:112 rewrite/rewriteDefine.c:1011 +#: rewrite/rewriteDefine.c:113 rewrite/rewriteDefine.c:1017 #, c-format msgid "rule \"%s\" for relation \"%s\" already exists" msgstr "правило \"%s\" для зв'язка \"%s\" вже існує" -#: rewrite/rewriteDefine.c:301 +#: rewrite/rewriteDefine.c:302 #, c-format msgid "rule actions on OLD are not implemented" msgstr "дії правил для OLD не реалізовані" -#: rewrite/rewriteDefine.c:302 +#: rewrite/rewriteDefine.c:303 #, c-format msgid "Use views or triggers instead." msgstr "Використайте подання або тригери замість." -#: rewrite/rewriteDefine.c:306 +#: rewrite/rewriteDefine.c:307 #, c-format msgid "rule actions on NEW are not implemented" msgstr "дії правил для NEW не реалізовані" -#: rewrite/rewriteDefine.c:307 +#: rewrite/rewriteDefine.c:308 #, c-format msgid "Use triggers instead." msgstr "Використайте тригери замість." -#: rewrite/rewriteDefine.c:320 +#: rewrite/rewriteDefine.c:321 #, c-format msgid "INSTEAD NOTHING rules on SELECT are not implemented" msgstr "Правила INSTEAD NOTHING для SELECT не реалізовані" -#: rewrite/rewriteDefine.c:321 +#: rewrite/rewriteDefine.c:322 #, c-format msgid "Use views instead." msgstr "Використайте подання замість." -#: rewrite/rewriteDefine.c:329 +#: rewrite/rewriteDefine.c:330 #, c-format msgid "multiple actions for rules on SELECT are not implemented" msgstr "декілька дій в правилах для SELECT не реалізовані" -#: rewrite/rewriteDefine.c:339 +#: rewrite/rewriteDefine.c:340 #, c-format msgid "rules on SELECT must have action INSTEAD SELECT" msgstr "правила для SELECT повинні мати дію INSTEAD SELECT" -#: rewrite/rewriteDefine.c:347 +#: rewrite/rewriteDefine.c:348 #, c-format msgid "rules on SELECT must not contain data-modifying statements in WITH" msgstr "правила для SELECT не повинні містити операторів, які змінюють дані в WITH" -#: rewrite/rewriteDefine.c:355 +#: rewrite/rewriteDefine.c:356 #, c-format msgid "event qualifications are not implemented for rules on SELECT" msgstr "в правилах для SELECT не може бути умов" -#: rewrite/rewriteDefine.c:382 +#: rewrite/rewriteDefine.c:383 #, c-format msgid "\"%s\" is already a view" msgstr "\"%s\" вже є поданням" -#: rewrite/rewriteDefine.c:406 +#: rewrite/rewriteDefine.c:407 #, c-format msgid "view rule for \"%s\" must be named \"%s\"" msgstr "правило подання для \"%s\" повинно називатися \"%s\"" -#: rewrite/rewriteDefine.c:435 +#: rewrite/rewriteDefine.c:441 #, c-format msgid "cannot convert partitioned table \"%s\" to a view" msgstr "перетворити секціоновану таблицю \"%s\" на подання, не можна" -#: rewrite/rewriteDefine.c:444 +#: rewrite/rewriteDefine.c:450 #, c-format msgid "cannot convert partition \"%s\" to a view" msgstr "перетворити секцію \"%s\" на подання, не можна" -#: rewrite/rewriteDefine.c:453 +#: rewrite/rewriteDefine.c:459 #, c-format msgid "could not convert table \"%s\" to a view because it is not empty" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона не пуста" -#: rewrite/rewriteDefine.c:462 +#: rewrite/rewriteDefine.c:468 #, c-format msgid "could not convert table \"%s\" to a view because it has triggers" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має тригери" -#: rewrite/rewriteDefine.c:464 +#: rewrite/rewriteDefine.c:470 #, c-format msgid "In particular, the table cannot be involved in any foreign key relationships." msgstr "Крім того, таблиця не може бути включена в зв'язок зовнішніх ключів." -#: rewrite/rewriteDefine.c:469 +#: rewrite/rewriteDefine.c:475 #, c-format msgid "could not convert table \"%s\" to a view because it has indexes" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має індекси" -#: rewrite/rewriteDefine.c:475 +#: rewrite/rewriteDefine.c:481 #, c-format msgid "could not convert table \"%s\" to a view because it has child tables" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має дочірні таблиці" -#: rewrite/rewriteDefine.c:481 +#: rewrite/rewriteDefine.c:487 #, c-format msgid "could not convert table \"%s\" to a view because it has parent tables" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має батьківські таблиці" -#: rewrite/rewriteDefine.c:487 +#: rewrite/rewriteDefine.c:493 #, c-format msgid "could not convert table \"%s\" to a view because it has row security enabled" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що для неї активований захист на рівні рядків" -#: rewrite/rewriteDefine.c:493 +#: rewrite/rewriteDefine.c:499 #, c-format msgid "could not convert table \"%s\" to a view because it has row security policies" msgstr "не вдалося перетворити таблицю \"%s\" на подання, тому, що вона має політику захисту рядків" -#: rewrite/rewriteDefine.c:520 +#: rewrite/rewriteDefine.c:526 #, c-format msgid "cannot have multiple RETURNING lists in a rule" msgstr "правило не може мати декілька списків RETURNING" -#: rewrite/rewriteDefine.c:525 +#: rewrite/rewriteDefine.c:531 #, c-format msgid "RETURNING lists are not supported in conditional rules" msgstr "Умовні правила не підтримують списки RETURNING" -#: rewrite/rewriteDefine.c:529 +#: rewrite/rewriteDefine.c:535 #, c-format msgid "RETURNING lists are not supported in non-INSTEAD rules" msgstr "Правила non-INSTEAD не підтримують списки RETURNING" -#: rewrite/rewriteDefine.c:543 +#: rewrite/rewriteDefine.c:549 #, c-format msgid "non-view rule for \"%s\" must not be named \"%s\"" msgstr "правило не-подання для \"%s\" не повинно мати назву \"%s\"" -#: rewrite/rewriteDefine.c:705 +#: rewrite/rewriteDefine.c:711 #, c-format msgid "SELECT rule's target list has too many entries" msgstr "Список цілей правила для SELECT має занадто багато елементів" -#: rewrite/rewriteDefine.c:706 +#: rewrite/rewriteDefine.c:712 #, c-format msgid "RETURNING list has too many entries" msgstr "Список RETURNING має занадто багато елементів" -#: rewrite/rewriteDefine.c:733 +#: rewrite/rewriteDefine.c:739 #, c-format msgid "cannot convert relation containing dropped columns to view" msgstr "перетворити зв'язок, який містить видаленні стовпці, на подання не можна" -#: rewrite/rewriteDefine.c:734 +#: rewrite/rewriteDefine.c:740 #, c-format msgid "cannot create a RETURNING list for a relation containing dropped columns" msgstr "створити список RETURNING для зв'язка, який містить видаленні стовпці, не можна" -#: rewrite/rewriteDefine.c:740 +#: rewrite/rewriteDefine.c:746 #, c-format msgid "SELECT rule's target entry %d has different column name from column \"%s\"" msgstr "Елемент результата правила для SELECT %d відрізняється іменем стовпця від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:742 +#: rewrite/rewriteDefine.c:748 #, c-format msgid "SELECT target entry is named \"%s\"." msgstr "Ім'я елемента результату SELECT \"%s\"." -#: rewrite/rewriteDefine.c:751 +#: rewrite/rewriteDefine.c:757 #, c-format msgid "SELECT rule's target entry %d has different type from column \"%s\"" msgstr "Елемент результата правила для SELECT %d відрізняється типом від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:753 +#: rewrite/rewriteDefine.c:759 #, c-format msgid "RETURNING list's entry %d has different type from column \"%s\"" msgstr "Елемент списку RETURNING %d відрізняється типом від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:756 rewrite/rewriteDefine.c:780 +#: rewrite/rewriteDefine.c:762 rewrite/rewriteDefine.c:786 #, c-format msgid "SELECT target entry has type %s, but column has type %s." msgstr "Елемент результату SELECT має тип %s, але стовпець має тип %s." -#: rewrite/rewriteDefine.c:759 rewrite/rewriteDefine.c:784 +#: rewrite/rewriteDefine.c:765 rewrite/rewriteDefine.c:790 #, c-format msgid "RETURNING list entry has type %s, but column has type %s." msgstr "Елемент списку RETURNING має тип %s, але стовпець має тип %s." -#: rewrite/rewriteDefine.c:775 +#: rewrite/rewriteDefine.c:781 #, c-format msgid "SELECT rule's target entry %d has different size from column \"%s\"" msgstr "Елемент результата правил для SELECT %d відрізняється розміром від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:777 +#: rewrite/rewriteDefine.c:783 #, c-format msgid "RETURNING list's entry %d has different size from column \"%s\"" msgstr "Елемент списку RETURNING %d відрізняється розміром від стовпця \"%s\"" -#: rewrite/rewriteDefine.c:794 +#: rewrite/rewriteDefine.c:800 #, c-format msgid "SELECT rule's target list has too few entries" msgstr "Список результату правила для SELECT має занадто мало елементів" -#: rewrite/rewriteDefine.c:795 +#: rewrite/rewriteDefine.c:801 #, c-format msgid "RETURNING list has too few entries" msgstr "Список RETURNING має занадто мало елементів" -#: rewrite/rewriteDefine.c:888 rewrite/rewriteDefine.c:1002 +#: rewrite/rewriteDefine.c:894 rewrite/rewriteDefine.c:1008 #: rewrite/rewriteSupport.c:109 #, c-format msgid "rule \"%s\" for relation \"%s\" does not exist" msgstr "правило \"%s\" для відношення \"%s\" не існує" -#: rewrite/rewriteDefine.c:1021 +#: rewrite/rewriteDefine.c:1027 #, c-format msgid "renaming an ON SELECT rule is not allowed" msgstr "не допускається перейменування правила ON SELECT" -#: rewrite/rewriteHandler.c:576 +#: rewrite/rewriteHandler.c:583 #, c-format msgid "WITH query name \"%s\" appears in both a rule action and the query being rewritten" msgstr "Ім'я запиту WITH \"%s\" з'являється і в дії правила, і в переписаному запиті" -#: rewrite/rewriteHandler.c:603 +#: rewrite/rewriteHandler.c:613 #, 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:656 +#: rewrite/rewriteHandler.c:666 #, c-format msgid "cannot have RETURNING lists in multiple rules" msgstr "списки RETURNING може мати лише одне правило" -#: rewrite/rewriteHandler.c:888 rewrite/rewriteHandler.c:927 +#: rewrite/rewriteHandler.c:898 rewrite/rewriteHandler.c:937 #, c-format msgid "cannot insert a non-DEFAULT value into column \"%s\"" msgstr "вставити значення non-DEFAULT до стовпця \"%s\" не можна" -#: rewrite/rewriteHandler.c:890 rewrite/rewriteHandler.c:956 +#: rewrite/rewriteHandler.c:900 rewrite/rewriteHandler.c:966 #, c-format msgid "Column \"%s\" is an identity column defined as GENERATED ALWAYS." msgstr "Стовпець \"%s\" є ідентифікаційним стовпцем визначеним як GENERATED ALWAYS." -#: rewrite/rewriteHandler.c:892 +#: rewrite/rewriteHandler.c:902 #, c-format msgid "Use OVERRIDING SYSTEM VALUE to override." msgstr "Для зміни використайте OVERRIDING SYSTEM VALUE." -#: rewrite/rewriteHandler.c:954 rewrite/rewriteHandler.c:962 +#: rewrite/rewriteHandler.c:964 rewrite/rewriteHandler.c:972 #, c-format msgid "column \"%s\" can only be updated to DEFAULT" msgstr "стовпець \"%s\" може бути оновлено тільки до DEFAULT" -#: rewrite/rewriteHandler.c:1109 rewrite/rewriteHandler.c:1127 +#: rewrite/rewriteHandler.c:1107 rewrite/rewriteHandler.c:1125 #, c-format msgid "multiple assignments to same column \"%s\"" msgstr "кілька завдань для одного стовпця \"%s\"" -#: rewrite/rewriteHandler.c:2139 rewrite/rewriteHandler.c:4001 +#: rewrite/rewriteHandler.c:1726 rewrite/rewriteHandler.c:3181 +#, c-format +msgid "access to non-system view \"%s\" is restricted" +msgstr "доступ до несистемного подання \"%s\" обмежено" + +#: rewrite/rewriteHandler.c:2158 rewrite/rewriteHandler.c:4084 #, c-format msgid "infinite recursion detected in rules for relation \"%s\"" msgstr "виявлена безкінечна рекурсія у правилах для відносин \"%s\"" -#: rewrite/rewriteHandler.c:2224 +#: rewrite/rewriteHandler.c:2263 #, c-format msgid "infinite recursion detected in policy for relation \"%s\"" msgstr "виявлена безкінечна рекурсія в політиці для зв'язка \"%s\"" -#: rewrite/rewriteHandler.c:2544 +#: rewrite/rewriteHandler.c:2593 msgid "Junk view columns are not updatable." msgstr "Утилізовані стовпці подань не оновлюються." -#: rewrite/rewriteHandler.c:2549 +#: rewrite/rewriteHandler.c:2598 msgid "View columns that are not columns of their base relation are not updatable." msgstr "Стовпці подання, які не є стовпцями базового зв'язку, не оновлюються." -#: rewrite/rewriteHandler.c:2552 +#: rewrite/rewriteHandler.c:2601 msgid "View columns that refer to system columns are not updatable." msgstr "Стовпці подання, які посилаються на системні стовпці, не оновлюються." -#: rewrite/rewriteHandler.c:2555 +#: rewrite/rewriteHandler.c:2604 msgid "View columns that return whole-row references are not updatable." msgstr "Стовпці подання, що повертають посилання на весь рядок, не оновлюються." -#: rewrite/rewriteHandler.c:2616 +#: rewrite/rewriteHandler.c:2665 msgid "Views containing DISTINCT are not automatically updatable." msgstr "Подання які містять DISTINCT не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2619 +#: rewrite/rewriteHandler.c:2668 msgid "Views containing GROUP BY are not automatically updatable." msgstr "Подання які містять GROUP BY не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2622 +#: rewrite/rewriteHandler.c:2671 msgid "Views containing HAVING are not automatically updatable." msgstr "Подання які містять HAVING не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2625 +#: rewrite/rewriteHandler.c:2674 msgid "Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." msgstr "Подання які містять UNION, INTERSECT, або EXCEPT не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2628 +#: rewrite/rewriteHandler.c:2677 msgid "Views containing WITH are not automatically updatable." msgstr "Подання які містять WITH не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2631 +#: rewrite/rewriteHandler.c:2680 msgid "Views containing LIMIT or OFFSET are not automatically updatable." msgstr "Подання які містять LIMIT або OFFSET не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2643 +#: rewrite/rewriteHandler.c:2692 msgid "Views that return aggregate functions are not automatically updatable." msgstr "Подання які повертають агрегатні функції не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2646 +#: rewrite/rewriteHandler.c:2695 msgid "Views that return window functions are not automatically updatable." msgstr "Подання які повертають віконні функції не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2649 +#: rewrite/rewriteHandler.c:2698 msgid "Views that return set-returning functions are not automatically updatable." msgstr "Подання які повертають set-returning функції не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2656 rewrite/rewriteHandler.c:2660 -#: rewrite/rewriteHandler.c:2668 +#: rewrite/rewriteHandler.c:2705 rewrite/rewriteHandler.c:2709 +#: rewrite/rewriteHandler.c:2717 msgid "Views that do not select from a single table or view are not automatically updatable." msgstr "Подання які обирають дані не з одної таблиці або подання не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2671 +#: rewrite/rewriteHandler.c:2720 msgid "Views containing TABLESAMPLE are not automatically updatable." msgstr "Подання які містять TABLESAMPLE не оновлюються автоматично." -#: rewrite/rewriteHandler.c:2695 +#: rewrite/rewriteHandler.c:2744 msgid "Views that have no updatable columns are not automatically updatable." msgstr "Подання які не мають оновлюваних стовпців не оновлюються автоматично." -#: rewrite/rewriteHandler.c:3172 +#: rewrite/rewriteHandler.c:3241 #, c-format msgid "cannot insert into column \"%s\" of view \"%s\"" msgstr "вставити дані в стовпець \"%s\" подання \"%s\" не можна" -#: rewrite/rewriteHandler.c:3180 +#: rewrite/rewriteHandler.c:3249 #, c-format msgid "cannot update column \"%s\" of view \"%s\"" msgstr "оновити дані в стовпці \"%s\" подання \"%s\" не можна" -#: rewrite/rewriteHandler.c:3665 +#: rewrite/rewriteHandler.c:3747 #, c-format msgid "DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH" msgstr "Правила DO INSTEAD NOTIFY не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3676 +#: rewrite/rewriteHandler.c:3758 #, c-format msgid "DO INSTEAD NOTHING rules are not supported for data-modifying statements in WITH" msgstr "Правила DO INSTEAD NOTHING не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3690 +#: rewrite/rewriteHandler.c:3772 #, c-format msgid "conditional DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "умовні правила DO INSTEAD не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3694 +#: rewrite/rewriteHandler.c:3776 #, c-format msgid "DO ALSO rules are not supported for data-modifying statements in WITH" msgstr "Правила DO ALSO не підтримуються для операторів, які змінюють дані в WITH" -#: rewrite/rewriteHandler.c:3699 +#: rewrite/rewriteHandler.c:3781 #, c-format msgid "multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH" msgstr "складові правила DO INSTEAD не підтримуються операторами, які змінюють дані у WITH" -#: rewrite/rewriteHandler.c:3929 rewrite/rewriteHandler.c:3937 -#: rewrite/rewriteHandler.c:3945 +#: rewrite/rewriteHandler.c:4012 rewrite/rewriteHandler.c:4020 +#: rewrite/rewriteHandler.c:4028 #, c-format msgid "Views with conditional DO INSTEAD rules are not automatically updatable." msgstr "Подання з умовними правилами DO INSTEAD не оновлюються автоматично." -#: rewrite/rewriteHandler.c:4050 +#: rewrite/rewriteHandler.c:4134 #, c-format msgid "cannot perform INSERT RETURNING on relation \"%s\"" msgstr "виконати INSERT RETURNING для зв'язка \"%s\" не можна" -#: rewrite/rewriteHandler.c:4052 +#: rewrite/rewriteHandler.c:4136 #, 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:4057 +#: rewrite/rewriteHandler.c:4141 #, c-format msgid "cannot perform UPDATE RETURNING on relation \"%s\"" msgstr "виконати UPDATE RETURNING для зв'язка \"%s\" не можна" -#: rewrite/rewriteHandler.c:4059 +#: rewrite/rewriteHandler.c:4143 #, 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:4064 +#: rewrite/rewriteHandler.c:4148 #, c-format msgid "cannot perform DELETE RETURNING on relation \"%s\"" msgstr "виконати DELETE RETURNING для зв'язка \"%s\" не можна" -#: rewrite/rewriteHandler.c:4066 +#: rewrite/rewriteHandler.c:4150 #, 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:4084 +#: rewrite/rewriteHandler.c:4168 #, 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:4141 +#: rewrite/rewriteHandler.c:4225 #, c-format msgid "WITH cannot be used in a query that is rewritten by rules into multiple queries" msgstr "WITH не можна використовувати в запиті, який переписаний правилами в декілька запитів" -#: rewrite/rewriteManip.c:1009 +#: rewrite/rewriteManip.c:1010 #, c-format msgid "conditional utility statements are not implemented" msgstr "умовні службові оператори не реалізовані" -#: rewrite/rewriteManip.c:1175 +#: rewrite/rewriteManip.c:1176 #, c-format msgid "WHERE CURRENT OF on a view is not implemented" msgstr "Умова WHERE CURRENT OF для подання не реалізована" -#: rewrite/rewriteManip.c:1510 +#: rewrite/rewriteManip.c:1512 #, c-format msgid "NEW variables in ON UPDATE rules cannot reference columns that are part of a multiple assignment in the subject UPDATE command" msgstr "Змінні NEW в правилах ON UPDATE не можуть посилатись на стовпці, які є частиною декілької призначень в команді UPDATE" @@ -20102,47 +20182,47 @@ msgstr "об'єкт статистики \"%s.%s\" не вдалося обчи msgid "function returning record called in context that cannot accept type record" msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" -#: storage/buffer/bufmgr.c:598 storage/buffer/bufmgr.c:765 +#: storage/buffer/bufmgr.c:605 storage/buffer/bufmgr.c:772 #, c-format msgid "cannot access temporary tables of other sessions" msgstr "доступ до тимчасових таблиць з інших сесій заблоковано" -#: storage/buffer/bufmgr.c:843 +#: storage/buffer/bufmgr.c:850 #, c-format msgid "cannot extend relation %s beyond %u blocks" msgstr "не можна розширити відношення %s понад %u блоків" -#: storage/buffer/bufmgr.c:930 +#: storage/buffer/bufmgr.c:937 #, c-format msgid "unexpected data beyond EOF in block %u of relation %s" msgstr "неочікуванні дані після EOF в блоці %u відношення %s" -#: storage/buffer/bufmgr.c:932 +#: storage/buffer/bufmgr.c:939 #, c-format msgid "This has been seen to occur with buggy kernels; consider updating your system." msgstr "Ця ситуація може виникати через помилки в ядрі; можливо, вам слід оновити вашу систему." -#: storage/buffer/bufmgr.c:1031 +#: storage/buffer/bufmgr.c:1038 #, c-format msgid "invalid page in block %u of relation %s; zeroing out page" msgstr "неприпустима сторінка в блоці %u відношення %s; сторінка обнуляється" -#: storage/buffer/bufmgr.c:4533 +#: storage/buffer/bufmgr.c:4600 #, c-format msgid "could not write block %u of %s" msgstr "неможливо записати блок %u файлу %s" -#: storage/buffer/bufmgr.c:4535 +#: storage/buffer/bufmgr.c:4602 #, c-format msgid "Multiple failures --- write error might be permanent." msgstr "Кілька неполадок --- можливо, постійна помилка запису." -#: storage/buffer/bufmgr.c:4556 storage/buffer/bufmgr.c:4575 +#: storage/buffer/bufmgr.c:4623 storage/buffer/bufmgr.c:4642 #, c-format msgid "writing block %u of relation %s" msgstr "записування блоку %u зв'язку %s" -#: storage/buffer/bufmgr.c:4879 +#: storage/buffer/bufmgr.c:4946 #, c-format msgid "snapshot too old" msgstr "знімок є застарим" @@ -20172,113 +20252,113 @@ msgstr "не вдалося визначити розмір тимчасовог msgid "could not delete shared fileset \"%s\": %m" msgstr "не вдалося видалити спільний набір файлів \"%s\": %m" -#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:869 +#: storage/file/buffile.c:902 storage/smgr/md.c:309 storage/smgr/md.c:871 #, c-format msgid "could not truncate file \"%s\": %m" msgstr "не вдалося скоротити файл \"%s\": %m" -#: storage/file/fd.c:515 storage/file/fd.c:587 storage/file/fd.c:623 +#: storage/file/fd.c:512 storage/file/fd.c:584 storage/file/fd.c:620 #, c-format msgid "could not flush dirty data: %m" msgstr "не вдалося очистити \"брудні\" дані: %m" -#: storage/file/fd.c:545 +#: storage/file/fd.c:542 #, c-format msgid "could not determine dirty data size: %m" msgstr "не вдалося визначити розмір \"брудних\" даних: %m" -#: storage/file/fd.c:597 +#: storage/file/fd.c:594 #, c-format msgid "could not munmap() while flushing data: %m" msgstr "не вдалося munmap() під час очищення даних: %m" -#: storage/file/fd.c:836 +#: storage/file/fd.c:833 #, c-format msgid "could not link file \"%s\" to \"%s\": %m" msgstr "для файлу \"%s\" не вдалося створити посилання \"%s\": %m" -#: storage/file/fd.c:937 +#: storage/file/fd.c:928 #, c-format msgid "getrlimit failed: %m" msgstr "помилка getrlimit: %m" -#: storage/file/fd.c:1027 +#: storage/file/fd.c:1018 #, c-format msgid "insufficient file descriptors available to start server process" msgstr "недостатньо доступних дескрипторів файлу для запуску серверного процесу" -#: storage/file/fd.c:1028 +#: storage/file/fd.c:1019 #, c-format msgid "System allows %d, we need at least %d." msgstr "Система дозволяє %d, потрібно щонайменше %d." -#: storage/file/fd.c:1079 storage/file/fd.c:2416 storage/file/fd.c:2526 -#: storage/file/fd.c:2677 +#: storage/file/fd.c:1070 storage/file/fd.c:2407 storage/file/fd.c:2517 +#: storage/file/fd.c:2668 #, c-format msgid "out of file descriptors: %m; release and retry" msgstr "нестача дескрипторів файлу: %m; вивільніть і спробуйте знову" -#: storage/file/fd.c:1453 +#: storage/file/fd.c:1444 #, c-format msgid "temporary file: path \"%s\", size %lu" msgstr "тимчасовий файл: шлях \"%s\", розмір %lu" -#: storage/file/fd.c:1584 +#: storage/file/fd.c:1575 #, c-format msgid "cannot create temporary directory \"%s\": %m" msgstr "неможливо створити тимчасовий каталог \"%s\": %m" -#: storage/file/fd.c:1591 +#: storage/file/fd.c:1582 #, c-format msgid "cannot create temporary subdirectory \"%s\": %m" msgstr "неможливо створити тимчасовий підкаталог \"%s\": %m" -#: storage/file/fd.c:1784 +#: storage/file/fd.c:1775 #, c-format msgid "could not create temporary file \"%s\": %m" msgstr "неможливо створити тимчасовий файл \"%s\": %m" -#: storage/file/fd.c:1818 +#: storage/file/fd.c:1809 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "неможливо відкрити тимчасовий файл \"%s\": %m" -#: storage/file/fd.c:1859 +#: storage/file/fd.c:1850 #, c-format msgid "could not unlink temporary file \"%s\": %m" msgstr "помилка видалення тимчасового файлу \"%s\": %m" -#: storage/file/fd.c:1947 +#: storage/file/fd.c:1938 #, c-format msgid "could not delete file \"%s\": %m" msgstr "не вдалося видалити файл \"%s\": %m" -#: storage/file/fd.c:2127 +#: storage/file/fd.c:2118 #, c-format msgid "temporary file size exceeds temp_file_limit (%dkB)" msgstr "розмір тимчасового файлу перевищує temp_file_limit (%d Кб)" -#: storage/file/fd.c:2392 storage/file/fd.c:2451 +#: storage/file/fd.c:2383 storage/file/fd.c:2442 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open file \"%s\"" msgstr "перевищено maxAllocatedDescs (%d) при спробі відкрити файл \"%s\"" -#: storage/file/fd.c:2496 +#: storage/file/fd.c:2487 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to execute command \"%s\"" msgstr "перевищено maxAllocatedDescs (%d) при спробі виконати команду \"%s\"" -#: storage/file/fd.c:2653 +#: storage/file/fd.c:2644 #, c-format msgid "exceeded maxAllocatedDescs (%d) while trying to open directory \"%s\"" msgstr "перевищено maxAllocatedDescs (%d) при спробі відкрити каталог \"%s\"" -#: storage/file/fd.c:3183 +#: storage/file/fd.c:3174 #, c-format msgid "unexpected file found in temporary-files directory: \"%s\"" msgstr "знайдено неочікуваний файл в каталозі тимчасових файлів: \"%s\"" -#: storage/file/fd.c:3312 +#: storage/file/fd.c:3303 #, c-format msgid "could not synchronize file system for file \"%s\": %m" msgstr "не вдалося синхронізувати файлову систему для файлу \"%s\": %m" @@ -20358,17 +20438,17 @@ msgstr "не вдалося закрити сегмент спільної па msgid "could not duplicate handle for \"%s\": %m" msgstr "не вдалося продублювати маркер для \"%s\": %m" -#: storage/ipc/procarray.c:3892 +#: storage/ipc/procarray.c:3904 #, c-format msgid "database \"%s\" is being used by prepared transactions" msgstr "база даних \"%s\" використовується підготовленими транзакціями" -#: storage/ipc/procarray.c:3924 storage/ipc/signalfuncs.c:226 +#: storage/ipc/procarray.c:3940 storage/ipc/signalfuncs.c:226 #, c-format msgid "must be a superuser to terminate superuser process" msgstr "щоб припинити процес суперкористувача потрібно бути суперкористувачем" -#: storage/ipc/procarray.c:3931 storage/ipc/signalfuncs.c:231 +#: storage/ipc/procarray.c:3946 storage/ipc/signalfuncs.c:231 #, c-format msgid "must be a member of the role whose process is being terminated or member of pg_signal_backend" msgstr "потрібно бути учасником ролі, процес котрої припиняється або учасником pg_signal_backend" @@ -20383,11 +20463,11 @@ 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:2820 storage/lmgr/lock.c:4234 -#: storage/lmgr/lock.c:4299 storage/lmgr/lock.c:4649 -#: storage/lmgr/predicate.c:2483 storage/lmgr/predicate.c:2498 -#: storage/lmgr/predicate.c:3988 storage/lmgr/predicate.c:5103 +#: storage/ipc/shm_toc.c:118 storage/ipc/shm_toc.c:200 storage/lmgr/lock.c:996 +#: storage/lmgr/lock.c:1034 storage/lmgr/lock.c:2864 storage/lmgr/lock.c:4278 +#: storage/lmgr/lock.c:4343 storage/lmgr/lock.c:4693 +#: storage/lmgr/predicate.c:2488 storage/lmgr/predicate.c:2503 +#: storage/lmgr/predicate.c:3993 storage/lmgr/predicate.c:5108 #: utils/hash/dynahash.c:1112 #, c-format msgid "out of shared memory" @@ -20484,12 +20564,12 @@ msgstr "відновлення все ще чекає, після %ld.%03d мс: msgid "recovery finished waiting after %ld.%03d ms: %s" msgstr "відновлення закінчило очікування після %ld.%03d мс: %s" -#: storage/ipc/standby.c:883 tcop/postgres.c:3330 +#: storage/ipc/standby.c:883 tcop/postgres.c:3323 #, c-format msgid "canceling statement due to conflict with recovery" msgstr "виконання оператора скасовано через конфлікт з процесом відновлення" -#: storage/ipc/standby.c:884 tcop/postgres.c:2484 +#: storage/ipc/standby.c:884 tcop/postgres.c:2477 #, c-format msgid "User transaction caused buffer deadlock with recovery." msgstr "Транзакція користувача призвела до взаємного блокування з процесом відновлення." @@ -20602,83 +20682,83 @@ msgstr "під час повторної перевірки оновленого msgid "while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"" msgstr "під час перевірки обмеження-виключення для кортежа (%u,%u) у відношенні \"%s\"" -#: storage/lmgr/lmgr.c:1107 +#: storage/lmgr/lmgr.c:1145 #, c-format msgid "relation %u of database %u" msgstr "відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1113 +#: storage/lmgr/lmgr.c:1151 #, c-format msgid "extension of relation %u of database %u" msgstr "розширення відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1119 +#: storage/lmgr/lmgr.c:1157 #, c-format msgid "pg_database.datfrozenxid of database %u" msgstr "pg_database.datfrozenxid бази даних %u" -#: storage/lmgr/lmgr.c:1124 +#: storage/lmgr/lmgr.c:1162 #, c-format msgid "page %u of relation %u of database %u" msgstr "сторінка %u відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1131 +#: storage/lmgr/lmgr.c:1169 #, c-format msgid "tuple (%u,%u) of relation %u of database %u" msgstr "кортеж (%u,%u) відношення %u бази даних %u" -#: storage/lmgr/lmgr.c:1139 +#: storage/lmgr/lmgr.c:1177 #, c-format msgid "transaction %u" msgstr "транзакція %u" -#: storage/lmgr/lmgr.c:1144 +#: storage/lmgr/lmgr.c:1182 #, c-format msgid "virtual transaction %d/%u" msgstr "віртуальна транзакція %d/%u" -#: storage/lmgr/lmgr.c:1150 +#: storage/lmgr/lmgr.c:1188 #, c-format msgid "speculative token %u of transaction %u" msgstr "орієнтовний маркер %u транзакції %u" -#: storage/lmgr/lmgr.c:1156 +#: storage/lmgr/lmgr.c:1194 #, c-format msgid "object %u of class %u of database %u" msgstr "об’єкт %u класу %u бази даних %u" -#: storage/lmgr/lmgr.c:1164 +#: storage/lmgr/lmgr.c:1202 #, c-format msgid "user lock [%u,%u,%u]" msgstr "користувацьке блокування [%u,%u,%u]" -#: storage/lmgr/lmgr.c:1171 +#: storage/lmgr/lmgr.c:1209 #, c-format msgid "advisory lock [%u,%u,%u,%u]" msgstr "рекомендаційне блокування [%u,%u,%u,%u]" -#: storage/lmgr/lmgr.c:1179 +#: storage/lmgr/lmgr.c:1217 #, c-format msgid "unrecognized locktag type %d" msgstr "нерозпізнаний тип блокування %d" -#: storage/lmgr/lock.c:790 +#: storage/lmgr/lock.c:824 #, 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:826 #, c-format msgid "Only RowExclusiveLock or less can be acquired on database objects during recovery." msgstr "Під час процесу відновлення для об'єктів бази даних може бути отримане лише блокування RowExclusiveLock або менш сильна." -#: storage/lmgr/lock.c:963 storage/lmgr/lock.c:1001 storage/lmgr/lock.c:2821 -#: storage/lmgr/lock.c:4235 storage/lmgr/lock.c:4300 storage/lmgr/lock.c:4650 +#: storage/lmgr/lock.c:997 storage/lmgr/lock.c:1035 storage/lmgr/lock.c:2865 +#: storage/lmgr/lock.c:4279 storage/lmgr/lock.c:4344 storage/lmgr/lock.c:4694 #, c-format msgid "You might need to increase max_locks_per_transaction." msgstr "Можливо, слід збільшити параметр max_locks_per_transaction." -#: storage/lmgr/lock.c:3276 storage/lmgr/lock.c:3344 storage/lmgr/lock.c:3460 +#: storage/lmgr/lock.c:3320 storage/lmgr/lock.c:3388 storage/lmgr/lock.c:3504 #, c-format msgid "cannot PREPARE while holding both session-level and transaction-level locks on the same object" msgstr "не можна виконати PREPARE, під час утримання блокування на рівні сеансу і на рівні транзакції для одного об'єкта" @@ -20698,52 +20778,52 @@ msgstr "Можливо, вам слід виконувати менше тран msgid "not enough elements in RWConflictPool to record a potential read/write conflict" msgstr "в RWConflictPool недостатньо елементів для запису про потенціальний конфлікт читання/запису" -#: storage/lmgr/predicate.c:1694 +#: storage/lmgr/predicate.c:1699 #, c-format msgid "\"default_transaction_isolation\" is set to \"serializable\"." msgstr "параметр \"default_transaction_isolation\" має значення \"serializable\"." -#: storage/lmgr/predicate.c:1695 +#: storage/lmgr/predicate.c:1700 #, 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:1746 +#: storage/lmgr/predicate.c:1751 #, c-format msgid "a snapshot-importing transaction must not be READ ONLY DEFERRABLE" msgstr "транзакція, яка імпортує знімок не повинна бутив READ ONLY DEFERRABLE" -#: storage/lmgr/predicate.c:1825 utils/time/snapmgr.c:569 +#: storage/lmgr/predicate.c:1830 utils/time/snapmgr.c:569 #: utils/time/snapmgr.c:575 #, c-format msgid "could not import the requested snapshot" msgstr "не вдалося імпортувати запитаний знімок" -#: storage/lmgr/predicate.c:1826 utils/time/snapmgr.c:576 +#: storage/lmgr/predicate.c:1831 utils/time/snapmgr.c:576 #, c-format msgid "The source process with PID %d is not running anymore." msgstr "Вихідний процес з PID %d вже не виконується." -#: storage/lmgr/predicate.c:2484 storage/lmgr/predicate.c:2499 -#: storage/lmgr/predicate.c:3989 +#: storage/lmgr/predicate.c:2489 storage/lmgr/predicate.c:2504 +#: storage/lmgr/predicate.c:3994 #, c-format msgid "You might need to increase max_pred_locks_per_transaction." msgstr "Можливо, вам слід збільшити параметр max_pred_locks_per_transaction." -#: storage/lmgr/predicate.c:4120 storage/lmgr/predicate.c:4156 -#: storage/lmgr/predicate.c:4189 storage/lmgr/predicate.c:4197 -#: storage/lmgr/predicate.c:4236 storage/lmgr/predicate.c:4478 -#: storage/lmgr/predicate.c:4815 storage/lmgr/predicate.c:4827 -#: storage/lmgr/predicate.c:4874 storage/lmgr/predicate.c:4912 +#: storage/lmgr/predicate.c:4125 storage/lmgr/predicate.c:4161 +#: storage/lmgr/predicate.c:4194 storage/lmgr/predicate.c:4202 +#: storage/lmgr/predicate.c:4241 storage/lmgr/predicate.c:4483 +#: storage/lmgr/predicate.c:4820 storage/lmgr/predicate.c:4832 +#: storage/lmgr/predicate.c:4879 storage/lmgr/predicate.c:4917 #, c-format msgid "could not serialize access due to read/write dependencies among transactions" msgstr "не вдалося серіалізувати доступ через залежність читання/запису серед транзакцій" -#: storage/lmgr/predicate.c:4122 storage/lmgr/predicate.c:4158 -#: storage/lmgr/predicate.c:4191 storage/lmgr/predicate.c:4199 -#: storage/lmgr/predicate.c:4238 storage/lmgr/predicate.c:4480 -#: storage/lmgr/predicate.c:4817 storage/lmgr/predicate.c:4829 -#: storage/lmgr/predicate.c:4876 storage/lmgr/predicate.c:4914 +#: storage/lmgr/predicate.c:4127 storage/lmgr/predicate.c:4163 +#: storage/lmgr/predicate.c:4196 storage/lmgr/predicate.c:4204 +#: storage/lmgr/predicate.c:4243 storage/lmgr/predicate.c:4485 +#: storage/lmgr/predicate.c:4822 storage/lmgr/predicate.c:4834 +#: storage/lmgr/predicate.c:4881 storage/lmgr/predicate.c:4919 #, c-format msgid "The transaction might succeed if retried." msgstr "Транзакція може завершитися успішно, якщо повторити спробу." @@ -20846,22 +20926,22 @@ msgstr "не вдалося записати блок %u у файл \"%s\": %m" msgid "could not write block %u in file \"%s\": wrote only %d of %d bytes" msgstr "не вдалося записати блок %u в файл \"%s\": записано лише %d з %d байт" -#: storage/smgr/md.c:840 +#: storage/smgr/md.c:842 #, c-format msgid "could not truncate file \"%s\" to %u blocks: it's only %u blocks now" msgstr "не вдалося скоротити файл \"%s\" до %u блоків: лише %u блоків зараз" -#: storage/smgr/md.c:895 +#: storage/smgr/md.c:897 #, c-format msgid "could not truncate file \"%s\" to %u blocks: %m" msgstr "не вдалося скоротити файл \"%s\" до %u блоків: %m" -#: storage/smgr/md.c:1289 +#: storage/smgr/md.c:1301 #, c-format msgid "could not open file \"%s\" (target block %u): previous segment is only %u blocks" msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): попередній сегмент має лише %u блоків" -#: storage/smgr/md.c:1303 +#: storage/smgr/md.c:1315 #, c-format msgid "could not open file \"%s\" (target block %u): %m" msgstr "не вдалося відкрити файл \"%s\" (цільовий блок %u): %m" @@ -20876,8 +20956,8 @@ msgstr "неможливо викликати функцію \"%s\" через msgid "fastpath function call: \"%s\" (OID %u)" msgstr "виклик функції fastpath: \"%s\" (OID %u)" -#: tcop/fastpath.c:312 tcop/postgres.c:1304 tcop/postgres.c:1562 -#: tcop/postgres.c:2021 tcop/postgres.c:2265 +#: tcop/fastpath.c:312 tcop/postgres.c:1273 tcop/postgres.c:1531 +#: tcop/postgres.c:2002 tcop/postgres.c:2258 #, c-format msgid "duration: %s ms" msgstr "тривалість: %s мс" @@ -20907,295 +20987,295 @@ msgstr "неприпустимий розмір аргументу %d в пов msgid "incorrect binary data format in function argument %d" msgstr "неправильний формат двійкових даних в аргументі функції %d" -#: tcop/postgres.c:445 tcop/postgres.c:4743 +#: tcop/postgres.c:449 tcop/postgres.c:4801 #, c-format msgid "invalid frontend message type %d" msgstr "неприпустимий тип клієнтського повідомлення %d" -#: tcop/postgres.c:1014 +#: tcop/postgres.c:983 #, c-format msgid "statement: %s" msgstr "оператор: %s" -#: tcop/postgres.c:1309 +#: tcop/postgres.c:1278 #, c-format msgid "duration: %s ms statement: %s" msgstr "тривалість: %s мс, оператор: %s" -#: tcop/postgres.c:1415 +#: tcop/postgres.c:1384 #, c-format msgid "cannot insert multiple commands into a prepared statement" msgstr "до підтготовленого оператору не можна вставити декілька команд" -#: tcop/postgres.c:1567 +#: tcop/postgres.c:1536 #, c-format msgid "duration: %s ms parse %s: %s" msgstr "тривалість: %s мс, аналізування %s: %s" -#: tcop/postgres.c:1633 tcop/postgres.c:2580 +#: tcop/postgres.c:1603 tcop/postgres.c:2573 #, c-format msgid "unnamed prepared statement does not exist" msgstr "підготовлений оператор без імені не існує" -#: tcop/postgres.c:1674 +#: tcop/postgres.c:1655 #, c-format msgid "bind message has %d parameter formats but %d parameters" msgstr "повідомлення bind має %d форматів, але %d параметрів" -#: tcop/postgres.c:1680 +#: tcop/postgres.c:1661 #, c-format msgid "bind message supplies %d parameters, but prepared statement \"%s\" requires %d" msgstr "в повідомленні bind передано %d параметрів, але підготовлений оператор \"%s\" потребує %d" -#: tcop/postgres.c:1899 +#: tcop/postgres.c:1880 #, c-format msgid "incorrect binary data format in bind parameter %d" msgstr "невірний формат двійкових даних в параметрі bind %d" -#: tcop/postgres.c:2026 +#: tcop/postgres.c:2007 #, c-format msgid "duration: %s ms bind %s%s%s: %s" msgstr "тривалість: %s мс, повідомлення bind %s%s%s: %s" -#: tcop/postgres.c:2076 tcop/postgres.c:2664 +#: tcop/postgres.c:2058 tcop/postgres.c:2657 #, c-format msgid "portal \"%s\" does not exist" msgstr "портал \"%s\" не існує" -#: tcop/postgres.c:2145 +#: tcop/postgres.c:2138 #, c-format msgid "%s %s%s%s: %s" msgstr "%s %s%s%s: %s" -#: tcop/postgres.c:2147 tcop/postgres.c:2273 +#: tcop/postgres.c:2140 tcop/postgres.c:2266 msgid "execute fetch from" msgstr "виконати витягнення з" -#: tcop/postgres.c:2148 tcop/postgres.c:2274 +#: tcop/postgres.c:2141 tcop/postgres.c:2267 msgid "execute" msgstr "виконувати" -#: tcop/postgres.c:2270 +#: tcop/postgres.c:2263 #, c-format msgid "duration: %s ms %s %s%s%s: %s" msgstr "тривалість: %s мс %s %s%s%s: %s" -#: tcop/postgres.c:2416 +#: tcop/postgres.c:2409 #, c-format msgid "prepare: %s" msgstr "підготовка: %s" -#: tcop/postgres.c:2441 +#: tcop/postgres.c:2434 #, c-format msgid "parameters: %s" msgstr "параметри: %s" -#: tcop/postgres.c:2456 +#: tcop/postgres.c:2449 #, c-format msgid "abort reason: recovery conflict" msgstr "причина переривання: конфлікт під час відновлення" -#: tcop/postgres.c:2472 +#: tcop/postgres.c:2465 #, c-format msgid "User was holding shared buffer pin for too long." msgstr "Користувач утримував позначку спільного буферу занадто довго." -#: tcop/postgres.c:2475 +#: tcop/postgres.c:2468 #, c-format msgid "User was holding a relation lock for too long." msgstr "Користувач утримував блокування відношення занадто довго." -#: tcop/postgres.c:2478 +#: tcop/postgres.c:2471 #, c-format msgid "User was or might have been using tablespace that must be dropped." msgstr "Користувач використовував табличний простір який повинен бути видаленим." -#: tcop/postgres.c:2481 +#: tcop/postgres.c:2474 #, c-format msgid "User query might have needed to see row versions that must be removed." msgstr "Запиту користувача потрібно було бачити версії рядків, які повинні бути видалені." -#: tcop/postgres.c:2487 +#: tcop/postgres.c:2480 #, c-format msgid "User was connected to a database that must be dropped." msgstr "Користувач був підключен до бази даних, яка повинна бути видалена." -#: tcop/postgres.c:2526 +#: tcop/postgres.c:2519 #, c-format msgid "portal \"%s\" parameter $%d = %s" msgstr "параметр порталу \"%s\": $%d = %s" -#: tcop/postgres.c:2529 +#: tcop/postgres.c:2522 #, c-format msgid "portal \"%s\" parameter $%d" msgstr "параметр порталу \"%s\": $%d" -#: tcop/postgres.c:2535 +#: tcop/postgres.c:2528 #, c-format msgid "unnamed portal parameter $%d = %s" msgstr "параметр порталу без назви $%d = %s" -#: tcop/postgres.c:2538 +#: tcop/postgres.c:2531 #, c-format msgid "unnamed portal parameter $%d" msgstr "параметр порталу без назви $%d" -#: tcop/postgres.c:2884 +#: tcop/postgres.c:2877 #, c-format msgid "terminating connection because of unexpected SIGQUIT signal" msgstr "завершення підключення через неочікуваний сигнал SIGQUIT" -#: tcop/postgres.c:2890 +#: tcop/postgres.c:2883 #, c-format msgid "terminating connection because of crash of another server process" msgstr "завершення підключення через аварійне завершення роботи іншого серверного процесу" -#: tcop/postgres.c:2891 +#: tcop/postgres.c:2884 #, 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:2895 tcop/postgres.c:3256 +#: tcop/postgres.c:2888 tcop/postgres.c:3249 #, c-format msgid "In a moment you should be able to reconnect to the database and repeat your command." msgstr "В цей момент ви можете повторно підключитися до бази даних і повторити вашу команду." -#: tcop/postgres.c:2902 +#: tcop/postgres.c:2895 #, c-format msgid "terminating connection due to immediate shutdown command" msgstr "завершення підключення через команду негайного завершення роботи" -#: tcop/postgres.c:2988 +#: tcop/postgres.c:2981 #, c-format msgid "floating-point exception" msgstr "виняток в операції з рухомою комою" -#: tcop/postgres.c:2989 +#: tcop/postgres.c:2982 #, 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:3160 +#: tcop/postgres.c:3153 #, c-format msgid "canceling authentication due to timeout" msgstr "скасування автентифікації через тайм-аут" -#: tcop/postgres.c:3164 +#: tcop/postgres.c:3157 #, c-format msgid "terminating autovacuum process due to administrator command" msgstr "завершення процесу автоочистки по команді адміністратора" -#: tcop/postgres.c:3168 +#: tcop/postgres.c:3161 #, c-format msgid "terminating logical replication worker due to administrator command" msgstr "завершення обробника логічної реплікації по команді адміністратора" -#: tcop/postgres.c:3185 tcop/postgres.c:3195 tcop/postgres.c:3254 +#: tcop/postgres.c:3178 tcop/postgres.c:3188 tcop/postgres.c:3247 #, c-format msgid "terminating connection due to conflict with recovery" msgstr "завершення підключення через конфлікт з процесом відновлення" -#: tcop/postgres.c:3206 +#: tcop/postgres.c:3199 #, c-format msgid "terminating connection due to administrator command" msgstr "завершення підключення по команді адміністратора" -#: tcop/postgres.c:3237 +#: tcop/postgres.c:3230 #, c-format msgid "connection to client lost" msgstr "підключення до клієнта втрачено" -#: tcop/postgres.c:3307 +#: tcop/postgres.c:3300 #, c-format msgid "canceling statement due to lock timeout" msgstr "виконання оператора скасовано через тайм-аут блокування" -#: tcop/postgres.c:3314 +#: tcop/postgres.c:3307 #, c-format msgid "canceling statement due to statement timeout" msgstr "виконання оператора скасовано через тайм-аут" -#: tcop/postgres.c:3321 +#: tcop/postgres.c:3314 #, c-format msgid "canceling autovacuum task" msgstr "скасування завдання автоочистки" -#: tcop/postgres.c:3344 +#: tcop/postgres.c:3337 #, c-format msgid "canceling statement due to user request" msgstr "виконання оператора скасовано по запиту користувача" -#: tcop/postgres.c:3358 +#: tcop/postgres.c:3351 #, c-format msgid "terminating connection due to idle-in-transaction timeout" msgstr "завершення підключення через тайм-аут бездіяльності в транзакції" -#: tcop/postgres.c:3369 +#: tcop/postgres.c:3362 #, c-format msgid "terminating connection due to idle-session timeout" msgstr "завершення підключення через тайм-аут неактивного сеансу" -#: tcop/postgres.c:3498 +#: tcop/postgres.c:3491 #, c-format msgid "stack depth limit exceeded" msgstr "перевищено ліміт глибини стека" -#: tcop/postgres.c:3499 +#: tcop/postgres.c:3492 #, 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:3555 #, c-format msgid "\"max_stack_depth\" must not exceed %ldkB." msgstr "Значення \"max_stack_depth\" не повинно перевищувати %ld КБ." -#: tcop/postgres.c:3564 +#: tcop/postgres.c:3557 #, c-format msgid "Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent." msgstr "Збільшіть ліміт глибини стека в системі через команду \"ulimit -s\" або через локальний еквівалент." -#: tcop/postgres.c:3920 +#: tcop/postgres.c:3978 #, c-format msgid "invalid command-line argument for server process: %s" msgstr "неприпустимий аргумент командного рядка для серверного процесу: %s" -#: tcop/postgres.c:3921 tcop/postgres.c:3927 +#: tcop/postgres.c:3979 tcop/postgres.c:3985 #, c-format msgid "Try \"%s --help\" for more information." msgstr "Спробуйте \"%s --help\" для додаткової інформації." -#: tcop/postgres.c:3925 +#: tcop/postgres.c:3983 #, c-format msgid "%s: invalid command-line argument: %s" msgstr "%s: неприпустимий аргумент командного рядка: %s" -#: tcop/postgres.c:3988 +#: tcop/postgres.c:4046 #, c-format msgid "%s: no database nor user name specified" msgstr "%s: ні база даних, ні ім'я користувача не вказані" -#: tcop/postgres.c:4645 +#: tcop/postgres.c:4703 #, c-format msgid "invalid CLOSE message subtype %d" msgstr "неприпустимий підтип повідомлення CLOSE %d" -#: tcop/postgres.c:4680 +#: tcop/postgres.c:4738 #, c-format msgid "invalid DESCRIBE message subtype %d" msgstr "неприпустимий підтип повідомлення DESCRIBE %d" -#: tcop/postgres.c:4764 +#: tcop/postgres.c:4822 #, c-format msgid "fastpath function calls not supported in a replication connection" msgstr "виклики функції fastpath не підтримуються в підключенні реплікації" -#: tcop/postgres.c:4768 +#: tcop/postgres.c:4826 #, c-format msgid "extended query protocol not supported in a replication connection" msgstr "протокол розширених запитів не підтримується в підключенні реплікації" -#: tcop/postgres.c:4945 +#: tcop/postgres.c:5003 #, 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" @@ -21205,12 +21285,12 @@ msgstr "відключення: час сеансу: %d:%02d:%02d.%03d кори msgid "bind message has %d result formats but query has %d columns" msgstr "повідомлення bind має %d форматів, але запит має %d стовпців" -#: tcop/pquery.c:941 tcop/pquery.c:1703 +#: tcop/pquery.c:939 tcop/pquery.c:1689 #, c-format msgid "cursor can only scan forward" msgstr "курсор може сканувати лише вперед" -#: tcop/pquery.c:942 tcop/pquery.c:1704 +#: tcop/pquery.c:940 tcop/pquery.c:1690 #, c-format msgid "Declare it with SCROLL option to enable backward scan." msgstr "Оголосити з параметром SCROLL, щоб активувати зворотню розгортку." @@ -21250,6 +21330,11 @@ msgstr "не можна виконати %s у фоновому процесі" msgid "must be superuser to do CHECKPOINT" msgstr "для виконання CHECKPOINT потрібно бути суперкористувачем" +#: tcop/utility.c:1866 +#, c-format +msgid "CREATE STATISTICS only supports relation names in the FROM clause" +msgstr "CREATE STATISTICS підтримує тільки назви відношень в реченні FROM" + #: tsearch/dict_ispell.c:52 tsearch/dict_thesaurus.c:615 #, c-format msgid "multiple DictFile parameters" @@ -21370,75 +21455,75 @@ msgstr "нерозпізнаний параметр тезаурусу: \"%s\"" msgid "missing Dictionary parameter" msgstr "пропущено параметр Dictionary" -#: tsearch/spell.c:381 tsearch/spell.c:398 tsearch/spell.c:407 -#: tsearch/spell.c:1063 +#: tsearch/spell.c:382 tsearch/spell.c:399 tsearch/spell.c:408 +#: tsearch/spell.c:1065 #, c-format msgid "invalid affix flag \"%s\"" msgstr "неприпустимиа позначка affix \"%s\"" -#: tsearch/spell.c:385 tsearch/spell.c:1067 +#: tsearch/spell.c:386 tsearch/spell.c:1069 #, c-format msgid "affix flag \"%s\" is out of range" msgstr "позначка affix \"%s\" поза діапазоном" -#: tsearch/spell.c:415 +#: tsearch/spell.c:416 #, c-format msgid "invalid character in affix flag \"%s\"" msgstr "неприпустимий символ в позначці affix \"%s\"" -#: tsearch/spell.c:435 +#: tsearch/spell.c:436 #, c-format msgid "invalid affix flag \"%s\" with \"long\" flag value" msgstr "неприпустима позначка affix \"%s\" зі значенням позначки \"long\"" -#: tsearch/spell.c:525 +#: tsearch/spell.c:526 #, c-format msgid "could not open dictionary file \"%s\": %m" msgstr "не вдалося відкрити файл словника \"%s\": %m" -#: tsearch/spell.c:764 utils/adt/regexp.c:208 +#: tsearch/spell.c:765 utils/adt/regexp.c:208 #, c-format msgid "invalid regular expression: %s" msgstr "неприпустимий регулярний вираз: %s" -#: tsearch/spell.c:983 tsearch/spell.c:1000 tsearch/spell.c:1017 -#: tsearch/spell.c:1034 tsearch/spell.c:1099 gram.y:16630 gram.y:16647 +#: tsearch/spell.c:984 tsearch/spell.c:1001 tsearch/spell.c:1018 +#: tsearch/spell.c:1035 tsearch/spell.c:1101 gram.y:16630 gram.y:16647 #, c-format msgid "syntax error" msgstr "синтаксична помилка" -#: tsearch/spell.c:1190 tsearch/spell.c:1202 tsearch/spell.c:1761 -#: tsearch/spell.c:1766 tsearch/spell.c:1771 +#: tsearch/spell.c:1193 tsearch/spell.c:1205 tsearch/spell.c:1765 +#: tsearch/spell.c:1770 tsearch/spell.c:1775 #, c-format msgid "invalid affix alias \"%s\"" msgstr "неприпустимий псевдонім affix \"%s\"" -#: tsearch/spell.c:1243 tsearch/spell.c:1314 tsearch/spell.c:1463 +#: tsearch/spell.c:1246 tsearch/spell.c:1317 tsearch/spell.c:1466 #, c-format msgid "could not open affix file \"%s\": %m" msgstr "не вдалося відкрити файл affix \"%s\": %m" -#: tsearch/spell.c:1297 +#: tsearch/spell.c:1300 #, c-format msgid "Ispell dictionary supports only \"default\", \"long\", and \"num\" flag values" msgstr "Словник Ispell підтримує для позначки лише значення \"default\", \"long\", і\"num\"" -#: tsearch/spell.c:1341 +#: tsearch/spell.c:1344 #, c-format msgid "invalid number of flag vector aliases" msgstr "неприпустима кількість векторів позначок" -#: tsearch/spell.c:1364 +#: tsearch/spell.c:1367 #, c-format msgid "number of aliases exceeds specified number %d" msgstr "кількість псевдонімів перевищує вказане число %d" -#: tsearch/spell.c:1579 +#: tsearch/spell.c:1582 #, c-format msgid "affix file contains both old-style and new-style commands" msgstr "файл affix містить команди і в старому, і в новому стилі" -#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:272 utils/adt/tsvector_op.c:1121 +#: tsearch/to_tsany.c:195 utils/adt/tsvector.c:269 utils/adt/tsvector_op.c:1121 #, c-format msgid "string is too long for tsvector (%d bytes, max %d bytes)" msgstr "рядок занадто довгий для tsvector (%d байт, максимум %d байт)" @@ -21505,112 +21590,112 @@ msgstr "Значення ShortWord повинно бути >= 0" msgid "MaxFragments should be >= 0" msgstr "Значення MaxFragments повинно бути >= 0" -#: utils/adt/acl.c:165 utils/adt/name.c:93 +#: utils/adt/acl.c:182 utils/adt/name.c:93 #, c-format msgid "identifier too long" msgstr "занадто довгий ідентифікатор" -#: utils/adt/acl.c:166 utils/adt/name.c:94 +#: utils/adt/acl.c:183 utils/adt/name.c:94 #, c-format msgid "Identifier must be less than %d characters." msgstr "Ідентифікатор повинен бути короче ніж %d символів." -#: utils/adt/acl.c:249 +#: utils/adt/acl.c:266 #, c-format msgid "unrecognized key word: \"%s\"" msgstr "нерозпізнане ключове слово: \"%s\"" -#: utils/adt/acl.c:250 +#: utils/adt/acl.c:267 #, c-format msgid "ACL key word must be \"group\" or \"user\"." msgstr "Ключовим словом ACL повинно бути \"group\" або \"user\"." -#: utils/adt/acl.c:255 +#: utils/adt/acl.c:272 #, c-format msgid "missing name" msgstr "пропущено ім'я" -#: utils/adt/acl.c:256 +#: utils/adt/acl.c:273 #, c-format msgid "A name must follow the \"group\" or \"user\" key word." msgstr "За ключовими словами \"group\" або \"user\" повинно йти ім'я." -#: utils/adt/acl.c:262 +#: utils/adt/acl.c:279 #, c-format msgid "missing \"=\" sign" msgstr "пропущено знак \"=\"" -#: utils/adt/acl.c:315 +#: utils/adt/acl.c:332 #, c-format msgid "invalid mode character: must be one of \"%s\"" msgstr "неприпустимий символ режиму: повинен бути один з \"%s\"" -#: utils/adt/acl.c:337 +#: utils/adt/acl.c:354 #, c-format msgid "a name must follow the \"/\" sign" msgstr "за знаком \"/\" повинно прямувати ім'я" -#: utils/adt/acl.c:345 +#: utils/adt/acl.c:362 #, c-format msgid "defaulting grantor to user ID %u" msgstr "призначив права користувач з ідентифікатором %u" -#: utils/adt/acl.c:531 +#: utils/adt/acl.c:548 #, c-format msgid "ACL array contains wrong data type" msgstr "Масив ACL містить неправильний тип даних" -#: utils/adt/acl.c:535 +#: utils/adt/acl.c:552 #, c-format msgid "ACL arrays must be one-dimensional" msgstr "Масиви ACL повинні бути одновимірними" -#: utils/adt/acl.c:539 +#: utils/adt/acl.c:556 #, c-format msgid "ACL arrays must not contain null values" msgstr "Масиви ACL не повинні містити значення null" -#: utils/adt/acl.c:563 +#: utils/adt/acl.c:580 #, c-format msgid "extra garbage at the end of the ACL specification" msgstr "зайве сміття в кінці специфікації ACL" -#: utils/adt/acl.c:1198 +#: utils/adt/acl.c:1215 #, c-format msgid "grant options cannot be granted back to your own grantor" msgstr "параметри призначення прав не можна повернути тому, хто призначив їх вам" -#: utils/adt/acl.c:1259 +#: utils/adt/acl.c:1276 #, c-format msgid "dependent privileges exist" msgstr "залежні права існують" -#: utils/adt/acl.c:1260 +#: utils/adt/acl.c:1277 #, c-format msgid "Use CASCADE to revoke them too." msgstr "Використайте CASCADE, щоб відкликати їх." -#: utils/adt/acl.c:1514 +#: utils/adt/acl.c:1531 #, c-format msgid "aclinsert is no longer supported" msgstr "aclinsert більше не підтримується" -#: utils/adt/acl.c:1524 +#: utils/adt/acl.c:1541 #, c-format msgid "aclremove is no longer supported" msgstr "aclremove більше не підтримується" -#: utils/adt/acl.c:1610 utils/adt/acl.c:1664 +#: utils/adt/acl.c:1627 utils/adt/acl.c:1681 #, c-format msgid "unrecognized privilege type: \"%s\"" msgstr "нерозпізнаний тип прав: \"%s\"" -#: utils/adt/acl.c:3446 utils/adt/regproc.c:101 utils/adt/regproc.c:277 +#: utils/adt/acl.c:3463 utils/adt/regproc.c:101 utils/adt/regproc.c:277 #, c-format msgid "function \"%s\" does not exist" msgstr "функція \"%s\" не існує" -#: utils/adt/acl.c:4898 +#: utils/adt/acl.c:4915 #, c-format msgid "must be member of role \"%s\"" msgstr "потрібно бути учасником ролі \"%s\"" @@ -21636,7 +21721,7 @@ msgstr "тип вхідних даних не є масивом" #: utils/adt/int.c:1004 utils/adt/int.c:1037 utils/adt/int.c:1051 #: utils/adt/int.c:1065 utils/adt/int.c:1096 utils/adt/int.c:1178 #: utils/adt/int.c:1242 utils/adt/int.c:1310 utils/adt/int.c:1316 -#: utils/adt/int8.c:1299 utils/adt/numeric.c:1768 utils/adt/numeric.c:4231 +#: utils/adt/int8.c:1299 utils/adt/numeric.c:1784 utils/adt/numeric.c:4247 #: utils/adt/varbit.c:1195 utils/adt/varbit.c:1596 utils/adt/varlena.c:1114 #: utils/adt/varlena.c:3422 #, c-format @@ -21716,8 +21801,8 @@ msgstr "Пропущено значення виміру масиву." msgid "Missing \"%s\" after array dimensions." msgstr "Пропущено \"%s\" після вимірів масиву." -#: utils/adt/arrayfuncs.c:307 utils/adt/arrayfuncs.c:2945 -#: utils/adt/arrayfuncs.c:2990 utils/adt/arrayfuncs.c:3005 +#: utils/adt/arrayfuncs.c:307 utils/adt/arrayfuncs.c:2952 +#: utils/adt/arrayfuncs.c:2997 utils/adt/arrayfuncs.c:3012 #, c-format msgid "upper bound cannot be less than lower bound" msgstr "верхня границя не може бути меньше нижньої границі" @@ -21771,8 +21856,8 @@ msgstr "Багатовимірні масиви повинні мати вкла msgid "Junk after closing right brace." msgstr "Сміття після закриття правої дужки." -#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3418 -#: utils/adt/arrayfuncs.c:5931 +#: utils/adt/arrayfuncs.c:1302 utils/adt/arrayfuncs.c:3425 +#: utils/adt/arrayfuncs.c:5940 #, c-format msgid "invalid number of dimensions: %d" msgstr "неприпустима кількість вимірів: %d" @@ -21811,8 +21896,8 @@ msgstr "розрізання масивів постійної довжини н #: utils/adt/arrayfuncs.c:2257 utils/adt/arrayfuncs.c:2279 #: utils/adt/arrayfuncs.c:2328 utils/adt/arrayfuncs.c:2582 -#: utils/adt/arrayfuncs.c:2920 utils/adt/arrayfuncs.c:5917 -#: utils/adt/arrayfuncs.c:5943 utils/adt/arrayfuncs.c:5954 +#: utils/adt/arrayfuncs.c:2927 utils/adt/arrayfuncs.c:5926 +#: utils/adt/arrayfuncs.c:5952 utils/adt/arrayfuncs.c:5963 #: utils/adt/json.c:1141 utils/adt/json.c:1216 utils/adt/jsonb.c:1316 #: utils/adt/jsonb.c:1402 utils/adt/jsonfuncs.c:4438 utils/adt/jsonfuncs.c:4592 #: utils/adt/jsonfuncs.c:4704 utils/adt/jsonfuncs.c:4753 @@ -21821,7 +21906,7 @@ msgid "wrong number of array subscripts" msgstr "невірне число верхніх індексів масива" #: utils/adt/arrayfuncs.c:2262 utils/adt/arrayfuncs.c:2386 -#: utils/adt/arrayfuncs.c:2665 utils/adt/arrayfuncs.c:2995 +#: utils/adt/arrayfuncs.c:2665 utils/adt/arrayfuncs.c:3002 #, c-format msgid "array subscript out of range" msgstr "верхній індекс масиву поза діапазоном" @@ -21846,90 +21931,90 @@ msgstr "у вказівці зрізу масива повинні бути за msgid "When assigning to a slice of an empty array value, slice boundaries must be fully specified." msgstr "Під час присвоєння значень зрізу в пустому масиві, межі зрізу повинні вказуватися повністю." -#: utils/adt/arrayfuncs.c:2910 utils/adt/arrayfuncs.c:3022 +#: utils/adt/arrayfuncs.c:2917 utils/adt/arrayfuncs.c:3029 #, c-format msgid "source array too small" msgstr "вихідний масив занадто малий" -#: utils/adt/arrayfuncs.c:3576 +#: utils/adt/arrayfuncs.c:3583 #, c-format msgid "null array element not allowed in this context" msgstr "елемент масиву null не дозволений в цьому контексті" -#: utils/adt/arrayfuncs.c:3678 utils/adt/arrayfuncs.c:3849 -#: utils/adt/arrayfuncs.c:4239 +#: utils/adt/arrayfuncs.c:3685 utils/adt/arrayfuncs.c:3856 +#: utils/adt/arrayfuncs.c:4246 #, c-format msgid "cannot compare arrays of different element types" msgstr "не можна порівнювати масиви з елементами різних типів" -#: utils/adt/arrayfuncs.c:4027 utils/adt/multirangetypes.c:2742 +#: utils/adt/arrayfuncs.c:4034 utils/adt/multirangetypes.c:2742 #: utils/adt/multirangetypes.c:2814 utils/adt/rangetypes.c:1343 #: utils/adt/rangetypes.c:1407 utils/adt/rowtypes.c:1858 #, c-format msgid "could not identify a hash function for type %s" msgstr "не вдалося визначити геш-функцію для типу %s" -#: utils/adt/arrayfuncs.c:4154 utils/adt/rowtypes.c:1979 +#: utils/adt/arrayfuncs.c:4161 utils/adt/rowtypes.c:1979 #, c-format msgid "could not identify an extended hash function for type %s" msgstr "не вдалося визначити розширену геш-функцію для типу %s" -#: utils/adt/arrayfuncs.c:5331 +#: utils/adt/arrayfuncs.c:5338 #, c-format msgid "data type %s is not an array type" msgstr "тип даних %s не є типом масиву" -#: utils/adt/arrayfuncs.c:5386 +#: utils/adt/arrayfuncs.c:5393 #, c-format msgid "cannot accumulate null arrays" msgstr "накопичувати null-масиви не можна" -#: utils/adt/arrayfuncs.c:5414 +#: utils/adt/arrayfuncs.c:5421 #, c-format msgid "cannot accumulate empty arrays" msgstr "накопичувати пусті масиви не можна" -#: utils/adt/arrayfuncs.c:5441 utils/adt/arrayfuncs.c:5447 +#: utils/adt/arrayfuncs.c:5448 utils/adt/arrayfuncs.c:5454 #, c-format msgid "cannot accumulate arrays of different dimensionality" msgstr "накопичувати масиви різної розмірності не можна" -#: utils/adt/arrayfuncs.c:5815 utils/adt/arrayfuncs.c:5855 +#: utils/adt/arrayfuncs.c:5824 utils/adt/arrayfuncs.c:5864 #, c-format msgid "dimension array or low bound array cannot be null" msgstr "масив розмірності або масив нижніх границь не може бути null" -#: utils/adt/arrayfuncs.c:5918 utils/adt/arrayfuncs.c:5944 +#: utils/adt/arrayfuncs.c:5927 utils/adt/arrayfuncs.c:5953 #, c-format msgid "Dimension array must be one dimensional." msgstr "Масив розмірності повинен бути одновимірним." -#: utils/adt/arrayfuncs.c:5923 utils/adt/arrayfuncs.c:5949 +#: utils/adt/arrayfuncs.c:5932 utils/adt/arrayfuncs.c:5958 #, c-format msgid "dimension values cannot be null" msgstr "значення розмірностей не можуть бути null" -#: utils/adt/arrayfuncs.c:5955 +#: utils/adt/arrayfuncs.c:5964 #, c-format msgid "Low bound array has different size than dimensions array." msgstr "Масив нижніх границь відрізняється за розміром від масиву розмірностей." -#: utils/adt/arrayfuncs.c:6233 +#: utils/adt/arrayfuncs.c:6242 #, c-format msgid "removing elements from multidimensional arrays is not supported" msgstr "видалення елементів з багатовимірних масивів не підтримується" -#: utils/adt/arrayfuncs.c:6510 +#: utils/adt/arrayfuncs.c:6519 #, c-format msgid "thresholds must be one-dimensional array" msgstr "граничне значення повинно вказуватись одновимірним масивом" -#: utils/adt/arrayfuncs.c:6515 +#: utils/adt/arrayfuncs.c:6524 #, c-format msgid "thresholds array must not contain NULLs" msgstr "масив границь не повинен містити NULL" -#: utils/adt/arrayfuncs.c:6748 +#: utils/adt/arrayfuncs.c:6757 #, c-format msgid "number of elements to trim must be between 0 and %d" msgstr "кількість елементів для обрізки має бути між 0 і %d" @@ -21970,7 +22055,7 @@ 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:3802 +#: utils/adt/bool.c:153 utils/adt/cash.c:354 utils/adt/datetime.c:3802 #: utils/adt/float.c:187 utils/adt/float.c:271 utils/adt/float.c:283 #: utils/adt/float.c:400 utils/adt/float.c:485 utils/adt/float.c:501 #: utils/adt/geo_ops.c:220 utils/adt/geo_ops.c:230 utils/adt/geo_ops.c:242 @@ -21980,40 +22065,45 @@ msgstr "перетворення кодування з %s в ASCII не підт #: utils/adt/geo_ops.c:4675 utils/adt/geo_ops.c:4682 utils/adt/int8.c:126 #: utils/adt/jsonpath.c:182 utils/adt/mac.c:94 utils/adt/mac8.c:93 #: utils/adt/mac8.c:166 utils/adt/mac8.c:184 utils/adt/mac8.c:202 -#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:694 -#: utils/adt/numeric.c:713 utils/adt/numeric.c:6886 utils/adt/numeric.c:6910 -#: utils/adt/numeric.c:6934 utils/adt/numeric.c:7892 utils/adt/numutils.c:116 +#: utils/adt/mac8.c:221 utils/adt/network.c:100 utils/adt/numeric.c:701 +#: utils/adt/numeric.c:720 utils/adt/numeric.c:6902 utils/adt/numeric.c:6926 +#: utils/adt/numeric.c:6950 utils/adt/numeric.c:7908 utils/adt/numutils.c:116 #: utils/adt/numutils.c:126 utils/adt/numutils.c:170 utils/adt/numutils.c:246 #: utils/adt/numutils.c:322 utils/adt/oid.c:44 utils/adt/oid.c:58 #: utils/adt/oid.c:64 utils/adt/oid.c:86 utils/adt/pg_lsn.c:74 #: utils/adt/tid.c:76 utils/adt/tid.c:84 utils/adt/tid.c:92 -#: utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:347 +#: utils/adt/timestamp.c:496 utils/adt/uuid.c:136 utils/adt/xid8funcs.c:355 #, c-format msgid "invalid input syntax for type %s: \"%s\"" msgstr "неприпустимий синтаксис для типу %s: \"%s\"" -#: utils/adt/cash.c:215 utils/adt/cash.c:240 utils/adt/cash.c:250 -#: utils/adt/cash.c:290 utils/adt/int8.c:118 utils/adt/numutils.c:140 -#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 -#: utils/adt/oid.c:70 utils/adt/oid.c:109 +#: utils/adt/cash.c:99 utils/adt/cash.c:112 utils/adt/cash.c:125 +#: utils/adt/cash.c:138 utils/adt/cash.c:151 #, 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:104 utils/adt/int.c:822 utils/adt/int.c:938 -#: utils/adt/int.c:1018 utils/adt/int.c:1080 utils/adt/int.c:1118 -#: utils/adt/int.c:1146 utils/adt/int8.c:600 utils/adt/int8.c:658 -#: utils/adt/int8.c:985 utils/adt/int8.c:1065 utils/adt/int8.c:1127 -#: utils/adt/int8.c:1207 utils/adt/numeric.c:3031 utils/adt/numeric.c:3054 -#: utils/adt/numeric.c:3139 utils/adt/numeric.c:3157 utils/adt/numeric.c:3253 -#: utils/adt/numeric.c:8441 utils/adt/numeric.c:8731 utils/adt/numeric.c:10376 -#: utils/adt/timestamp.c:3286 +#: utils/adt/cash.c:162 utils/adt/cash.c:723 utils/adt/float.c:104 +#: utils/adt/int.c:822 utils/adt/int.c:938 utils/adt/int.c:1018 +#: utils/adt/int.c:1080 utils/adt/int.c:1118 utils/adt/int.c:1146 +#: utils/adt/int8.c:600 utils/adt/int8.c:658 utils/adt/int8.c:985 +#: utils/adt/int8.c:1065 utils/adt/int8.c:1127 utils/adt/int8.c:1207 +#: utils/adt/numeric.c:3047 utils/adt/numeric.c:3070 utils/adt/numeric.c:3155 +#: utils/adt/numeric.c:3173 utils/adt/numeric.c:3269 utils/adt/numeric.c:8457 +#: utils/adt/numeric.c:8747 utils/adt/numeric.c:10393 +#: utils/adt/timestamp.c:3317 #, 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/int8.c:118 utils/adt/numutils.c:140 +#: utils/adt/numutils.c:147 utils/adt/numutils.c:240 utils/adt/numutils.c:316 +#: utils/adt/oid.c:70 utils/adt/oid.c:109 +#, c-format +msgid "value \"%s\" is out of range for type %s" +msgstr "значення \"%s\" поза діапазоном для типу %s" + #: utils/adt/char.c:169 #, c-format msgid "\"char\" out of range" @@ -22043,7 +22133,7 @@ msgid "date out of range: \"%s\"" msgstr "дата поза діапазоном: \"%s\"" #: utils/adt/date.c:214 utils/adt/date.c:525 utils/adt/date.c:549 -#: utils/adt/xml.c:2210 +#: utils/adt/xml.c:2253 #, c-format msgid "date out of range" msgstr "дата поза діапазоном" @@ -22087,22 +22177,26 @@ msgstr "одиниці вимірювання дати \"%s\" не розпіз #: utils/adt/json.c:457 utils/adt/timestamp.c:224 utils/adt/timestamp.c:256 #: utils/adt/timestamp.c:698 utils/adt/timestamp.c:707 #: utils/adt/timestamp.c:785 utils/adt/timestamp.c:818 -#: utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2881 -#: utils/adt/timestamp.c:2894 utils/adt/timestamp.c:2903 -#: utils/adt/timestamp.c:2911 utils/adt/timestamp.c:2966 -#: utils/adt/timestamp.c:2989 utils/adt/timestamp.c:3002 -#: utils/adt/timestamp.c:3013 utils/adt/timestamp.c:3021 -#: utils/adt/timestamp.c:3708 utils/adt/timestamp.c:3833 -#: utils/adt/timestamp.c:3923 utils/adt/timestamp.c:4013 -#: utils/adt/timestamp.c:4106 utils/adt/timestamp.c:4209 -#: utils/adt/timestamp.c:4711 utils/adt/timestamp.c:4985 -#: utils/adt/timestamp.c:5444 utils/adt/timestamp.c:5458 -#: utils/adt/timestamp.c:5463 utils/adt/timestamp.c:5477 -#: utils/adt/timestamp.c:5510 utils/adt/timestamp.c:5597 -#: utils/adt/timestamp.c:5638 utils/adt/timestamp.c:5642 -#: utils/adt/timestamp.c:5711 utils/adt/timestamp.c:5715 -#: utils/adt/timestamp.c:5729 utils/adt/timestamp.c:5763 utils/adt/xml.c:2232 -#: utils/adt/xml.c:2239 utils/adt/xml.c:2259 utils/adt/xml.c:2266 +#: utils/adt/timestamp.c:2860 utils/adt/timestamp.c:2865 +#: utils/adt/timestamp.c:2884 utils/adt/timestamp.c:2897 +#: utils/adt/timestamp.c:2908 utils/adt/timestamp.c:2914 +#: utils/adt/timestamp.c:2920 utils/adt/timestamp.c:2925 +#: utils/adt/timestamp.c:2980 utils/adt/timestamp.c:2985 +#: utils/adt/timestamp.c:3006 utils/adt/timestamp.c:3019 +#: utils/adt/timestamp.c:3033 utils/adt/timestamp.c:3041 +#: utils/adt/timestamp.c:3047 utils/adt/timestamp.c:3052 +#: utils/adt/timestamp.c:3739 utils/adt/timestamp.c:3864 +#: utils/adt/timestamp.c:3935 utils/adt/timestamp.c:3971 +#: utils/adt/timestamp.c:4061 utils/adt/timestamp.c:4135 +#: utils/adt/timestamp.c:4171 utils/adt/timestamp.c:4274 +#: utils/adt/timestamp.c:4776 utils/adt/timestamp.c:5050 +#: utils/adt/timestamp.c:5509 utils/adt/timestamp.c:5523 +#: utils/adt/timestamp.c:5528 utils/adt/timestamp.c:5542 +#: utils/adt/timestamp.c:5575 utils/adt/timestamp.c:5662 +#: utils/adt/timestamp.c:5703 utils/adt/timestamp.c:5707 +#: utils/adt/timestamp.c:5776 utils/adt/timestamp.c:5780 +#: utils/adt/timestamp.c:5794 utils/adt/timestamp.c:5828 utils/adt/xml.c:2275 +#: utils/adt/xml.c:2282 utils/adt/xml.c:2302 utils/adt/xml.c:2309 #, c-format msgid "timestamp out of range" msgstr "позначка часу поза діапазоном" @@ -22119,9 +22213,9 @@ msgstr "значення поля типу time поза діапазоном: % #: utils/adt/date.c:2109 utils/adt/date.c:2643 utils/adt/float.c:1047 #: utils/adt/float.c:1123 utils/adt/int.c:614 utils/adt/int.c:661 -#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2435 -#: utils/adt/timestamp.c:3357 utils/adt/timestamp.c:3388 -#: utils/adt/timestamp.c:3419 +#: utils/adt/int.c:696 utils/adt/int8.c:499 utils/adt/numeric.c:2451 +#: utils/adt/timestamp.c:3388 utils/adt/timestamp.c:3419 +#: utils/adt/timestamp.c:3450 #, c-format msgid "invalid preceding or following size in window function" msgstr "неприпустимий розмір preceding або following у віконній функції" @@ -22143,13 +22237,13 @@ msgstr "\"час з часовим поясом\" містить нерозпі #: utils/adt/date.c:3097 utils/adt/datetime.c:951 utils/adt/datetime.c:1858 #: utils/adt/datetime.c:4648 utils/adt/timestamp.c:515 -#: utils/adt/timestamp.c:542 utils/adt/timestamp.c:4292 -#: utils/adt/timestamp.c:5469 utils/adt/timestamp.c:5721 +#: utils/adt/timestamp.c:542 utils/adt/timestamp.c:4357 +#: utils/adt/timestamp.c:5534 utils/adt/timestamp.c:5786 #, c-format msgid "time zone \"%s\" not recognized" msgstr "часовий пояс \"%s\" не розпізнаний" -#: utils/adt/date.c:3130 utils/adt/timestamp.c:5499 utils/adt/timestamp.c:5752 +#: utils/adt/date.c:3130 utils/adt/timestamp.c:5564 utils/adt/timestamp.c:5817 #, c-format msgid "interval time zone \"%s\" must not include months or days" msgstr "інтервал \"%s\", який задає часовий пояс, не повинен включати місяці або дні" @@ -22312,34 +22406,34 @@ msgstr "\"%s\" поза діапазоном для типу double precision" #: utils/adt/float.c:1258 utils/adt/float.c:1332 utils/adt/int.c:334 #: utils/adt/int.c:872 utils/adt/int.c:894 utils/adt/int.c:908 #: utils/adt/int.c:922 utils/adt/int.c:954 utils/adt/int.c:1192 -#: utils/adt/int8.c:1320 utils/adt/numeric.c:4343 utils/adt/numeric.c:4348 +#: utils/adt/int8.c:1320 utils/adt/numeric.c:4359 utils/adt/numeric.c:4364 #, c-format msgid "smallint out of range" msgstr "двобайтове ціле поза діапазоном" -#: utils/adt/float.c:1458 utils/adt/numeric.c:3549 utils/adt/numeric.c:9324 +#: utils/adt/float.c:1458 utils/adt/numeric.c:3565 utils/adt/numeric.c:9340 #, c-format msgid "cannot take square root of a negative number" msgstr "вилучити квадратний корінь від'ємного числа не можна" -#: utils/adt/float.c:1526 utils/adt/numeric.c:3824 utils/adt/numeric.c:3936 +#: utils/adt/float.c:1526 utils/adt/numeric.c:3840 utils/adt/numeric.c:3952 #, c-format msgid "zero raised to a negative power is undefined" msgstr "нуль у від'ємному ступені дає невизначеність" -#: utils/adt/float.c:1530 utils/adt/numeric.c:3828 utils/adt/numeric.c:10229 +#: utils/adt/float.c:1530 utils/adt/numeric.c:3844 utils/adt/numeric.c:10245 #, c-format msgid "a negative number raised to a non-integer power yields a complex result" msgstr "від'ємне число у не цілому ступені дає комплексний результат" -#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3736 -#: utils/adt/numeric.c:10002 +#: utils/adt/float.c:1706 utils/adt/float.c:1739 utils/adt/numeric.c:3752 +#: utils/adt/numeric.c:10018 #, c-format msgid "cannot take logarithm of zero" msgstr "обчислити логарифм нуля не можна" -#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3674 -#: utils/adt/numeric.c:3731 utils/adt/numeric.c:10006 +#: utils/adt/float.c:1710 utils/adt/float.c:1743 utils/adt/numeric.c:3690 +#: utils/adt/numeric.c:3747 utils/adt/numeric.c:10022 #, c-format msgid "cannot take logarithm of a negative number" msgstr "обчислити логарифм від'ємного числа не можна" @@ -22358,22 +22452,22 @@ msgstr "введене значення поза діапазоном" msgid "setseed parameter %g is out of allowed range [-1,1]" msgstr "параметр setseed %g поза допустимим діапазоном [-1,1]" -#: utils/adt/float.c:4030 utils/adt/numeric.c:1708 +#: utils/adt/float.c:4030 utils/adt/numeric.c:1724 #, c-format msgid "count must be greater than zero" msgstr "лічильник повинен бути більше нуля" -#: utils/adt/float.c:4035 utils/adt/numeric.c:1719 +#: utils/adt/float.c:4035 utils/adt/numeric.c:1735 #, c-format msgid "operand, lower bound, and upper bound cannot be NaN" msgstr "операнд, нижня границя і верхня границя не можуть бути NaN" -#: utils/adt/float.c:4041 utils/adt/numeric.c:1724 +#: utils/adt/float.c:4041 utils/adt/numeric.c:1740 #, c-format msgid "lower and upper bounds must be finite" msgstr "нижня і верхня границі повинні бути скінченними" -#: utils/adt/float.c:4075 utils/adt/numeric.c:1738 +#: utils/adt/float.c:4075 utils/adt/numeric.c:1754 #, c-format msgid "lower bound cannot equal upper bound" msgstr "нижня границя не може дорівнювати верхній границі" @@ -22558,7 +22652,7 @@ msgstr "занадто довге значення формату локаліз #: utils/adt/formatting.c:3342 #, c-format msgid "unmatched format separator \"%c\"" -msgstr "невідповідний роздільник формату \"%c\"" +msgstr "невідповідний роздільник формату \"%c\"" #: utils/adt/formatting.c:3403 #, c-format @@ -22768,8 +22862,8 @@ msgstr "неприпустимі дані int2vector" msgid "oidvector has too many elements" msgstr "oidvector має занадто багато елементів" -#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1616 -#: utils/adt/timestamp.c:5814 utils/adt/timestamp.c:5894 +#: utils/adt/int.c:1508 utils/adt/int8.c:1446 utils/adt/numeric.c:1631 +#: utils/adt/timestamp.c:5879 utils/adt/timestamp.c:5959 #, c-format msgid "step size cannot equal zero" msgstr "розмір кроку не може дорівнювати нулю" @@ -22783,7 +22877,7 @@ msgstr "розмір кроку не може дорівнювати нулю" #: utils/adt/int8.c:1037 utils/adt/int8.c:1051 utils/adt/int8.c:1084 #: utils/adt/int8.c:1098 utils/adt/int8.c:1112 utils/adt/int8.c:1143 #: utils/adt/int8.c:1165 utils/adt/int8.c:1179 utils/adt/int8.c:1193 -#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4302 +#: utils/adt/int8.c:1355 utils/adt/int8.c:1390 utils/adt/numeric.c:4318 #: utils/adt/varbit.c:1676 #, c-format msgid "bigint out of range" @@ -22799,7 +22893,7 @@ msgstr "OID поза діапазоном" msgid "key value must be scalar, not array, composite, or json" msgstr "значенням ключа повинен бути скаляр, не масив, композитний тип, або json" -#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:2026 +#: utils/adt/json.c:892 utils/adt/json.c:902 utils/fmgr/funcapi.c:2034 #, c-format msgid "could not determine data type for argument %d" msgstr "не вдалося визначити тип даних для аргументу %d" @@ -22901,23 +22995,23 @@ msgstr "привести об'єкт jsonb до типу %s не можна" msgid "cannot cast jsonb array or object to type %s" msgstr "привести масив або об'єкт jsonb до типу %s не можна" -#: utils/adt/jsonb_util.c:751 +#: utils/adt/jsonb_util.c:748 #, c-format msgid "number of jsonb object pairs exceeds the maximum allowed (%zu)" msgstr "кількість пар об'єкта jsonb перевищує максимально дозволену (%zu)" -#: utils/adt/jsonb_util.c:792 +#: utils/adt/jsonb_util.c:789 #, c-format msgid "number of jsonb array elements exceeds the maximum allowed (%zu)" msgstr "кількість елементів масиву jsonb перевищує максимально дозволену(%zu)" -#: utils/adt/jsonb_util.c:1666 utils/adt/jsonb_util.c:1686 +#: utils/adt/jsonb_util.c:1672 utils/adt/jsonb_util.c:1692 #, c-format msgid "total size of jsonb array elements exceeds the maximum of %u bytes" msgstr "загальний розмір елементів масиву jsonb перевищує максимум (%u байт)" -#: utils/adt/jsonb_util.c:1747 utils/adt/jsonb_util.c:1782 -#: utils/adt/jsonb_util.c:1802 +#: utils/adt/jsonb_util.c:1753 utils/adt/jsonb_util.c:1788 +#: utils/adt/jsonb_util.c:1808 #, c-format msgid "total size of jsonb object elements exceeds the maximum of %u bytes" msgstr "загальний розмір елементів об'єкту jsonb перевищує максимум (%u байт)" @@ -23235,67 +23329,67 @@ msgstr "строковий аргумент методу елемента jsonpa msgid "jsonpath item method .%s() can only be applied to a string or numeric value" msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядка або числового значення" -#: utils/adt/jsonpath_exec.c:1583 +#: utils/adt/jsonpath_exec.c:1586 #, c-format msgid "left operand of jsonpath operator %s is not a single numeric value" msgstr "лівий операнд оператора jsonpath %s не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:1590 +#: utils/adt/jsonpath_exec.c:1593 #, c-format msgid "right operand of jsonpath operator %s is not a single numeric value" msgstr "правий операнд оператора jsonpath %s не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:1658 +#: utils/adt/jsonpath_exec.c:1661 #, c-format msgid "operand of unary jsonpath operator %s is not a numeric value" msgstr "операнд унарного оператора jsonpath %s не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:1756 +#: utils/adt/jsonpath_exec.c:1759 #, c-format msgid "jsonpath item method .%s() can only be applied to a numeric value" msgstr "метод елемента jsonpath .%s() може бути застосований лише до числового значення" -#: utils/adt/jsonpath_exec.c:1796 +#: utils/adt/jsonpath_exec.c:1799 #, c-format msgid "jsonpath item method .%s() can only be applied to a string" msgstr "метод елемента jsonpath .%s() може бути застосований лише до рядку" -#: utils/adt/jsonpath_exec.c:1899 +#: utils/adt/jsonpath_exec.c:1902 #, c-format msgid "datetime format is not recognized: \"%s\"" msgstr "формат дати й часу не розпізнано: \"%s\"" -#: utils/adt/jsonpath_exec.c:1901 +#: utils/adt/jsonpath_exec.c:1904 #, c-format msgid "Use a datetime template argument to specify the input data format." msgstr "Використайте аргумент шаблону дати й часу щоб вказати формат вхідних даних." -#: utils/adt/jsonpath_exec.c:1969 +#: utils/adt/jsonpath_exec.c:1972 #, c-format msgid "jsonpath item method .%s() can only be applied to an object" msgstr "метод елемента jsonpath .%s() може бути застосований лише до об'єкта" -#: utils/adt/jsonpath_exec.c:2151 +#: utils/adt/jsonpath_exec.c:2154 #, c-format msgid "could not find jsonpath variable \"%s\"" msgstr "не вдалося знайти змінну jsonpath \"%s\"" -#: utils/adt/jsonpath_exec.c:2415 +#: utils/adt/jsonpath_exec.c:2418 #, c-format msgid "jsonpath array subscript is not a single numeric value" msgstr "підрядковий символ масиву jsonpath не є єдиним числовим значенням" -#: utils/adt/jsonpath_exec.c:2427 +#: utils/adt/jsonpath_exec.c:2430 #, c-format msgid "jsonpath array subscript is out of integer range" msgstr "підрядковий символ масиву jsonpath поза цілим діапазоном" -#: utils/adt/jsonpath_exec.c:2604 +#: utils/adt/jsonpath_exec.c:2607 #, c-format msgid "cannot convert value from %s to %s without time zone usage" msgstr "не можна перетворити значення з %s в %s без використання часового поясу" -#: utils/adt/jsonpath_exec.c:2606 +#: utils/adt/jsonpath_exec.c:2609 #, c-format msgid "Use *_tz() function for time zone support." msgstr "Використовуйте функцію *_tz() для підтримки часового поясу." @@ -23325,12 +23419,12 @@ msgstr "недетерміновані параметри сортування msgid "LIKE pattern must not end with escape character" msgstr "Шаблон LIKE не повинен закінчуватись символом виходу" -#: utils/adt/like_match.c:293 utils/adt/regexp.c:700 +#: utils/adt/like_match.c:293 utils/adt/regexp.c:701 #, c-format msgid "invalid escape string" msgstr "неприпустимий рядок виходу" -#: utils/adt/like_match.c:294 utils/adt/regexp.c:701 +#: utils/adt/like_match.c:294 utils/adt/regexp.c:702 #, c-format msgid "Escape string must be empty or one character." msgstr "Рядок виходу повинен бути пустим або складатися з одного символу." @@ -23375,62 +23469,62 @@ msgstr "в табличному просторі global николи не бул msgid "%u is not a tablespace OID" msgstr "%u не є OID табличного простору" -#: utils/adt/misc.c:484 +#: utils/adt/misc.c:477 msgid "unreserved" msgstr "не зарезервовано" -#: utils/adt/misc.c:488 +#: utils/adt/misc.c:481 msgid "unreserved (cannot be function or type name)" msgstr "не зарезервовано (не може бути іменем типу або функції)" -#: utils/adt/misc.c:492 +#: utils/adt/misc.c:485 msgid "reserved (can be function or type name)" msgstr "зарезервовано (може бути іменем типу або функції)" -#: utils/adt/misc.c:496 +#: utils/adt/misc.c:489 msgid "reserved" msgstr "зарезервовано" -#: utils/adt/misc.c:507 +#: utils/adt/misc.c:500 msgid "can be bare label" msgstr "може бути пустою міткою" -#: utils/adt/misc.c:512 +#: utils/adt/misc.c:505 msgid "requires AS" msgstr "потребує AS" -#: utils/adt/misc.c:759 utils/adt/misc.c:773 utils/adt/misc.c:812 -#: utils/adt/misc.c:818 utils/adt/misc.c:824 utils/adt/misc.c:847 +#: utils/adt/misc.c:752 utils/adt/misc.c:766 utils/adt/misc.c:805 +#: utils/adt/misc.c:811 utils/adt/misc.c:817 utils/adt/misc.c:840 #, c-format msgid "string is not a valid identifier: \"%s\"" msgstr "рядок не є припустимим ідентифікатором: \"%s\"" -#: utils/adt/misc.c:761 +#: utils/adt/misc.c:754 #, c-format msgid "String has unclosed double quotes." msgstr "Рядок має не закриті лапки." -#: utils/adt/misc.c:775 +#: utils/adt/misc.c:768 #, c-format msgid "Quoted identifier must not be empty." msgstr "Ідентифікатор в лапках не повинен бути пустим." -#: utils/adt/misc.c:814 +#: utils/adt/misc.c:807 #, c-format msgid "No valid identifier before \".\"." msgstr "Перед \".\" немає припустимого ідентифікатору." -#: utils/adt/misc.c:820 +#: utils/adt/misc.c:813 #, c-format msgid "No valid identifier after \".\"." msgstr "Після \".\" немає припустимого ідентифікатора." -#: utils/adt/misc.c:878 +#: utils/adt/misc.c:871 #, c-format msgid "log format \"%s\" is not supported" msgstr "формат журналу \"%s\" не підтримується" -#: utils/adt/misc.c:879 +#: utils/adt/misc.c:872 #, c-format msgid "The supported log formats are \"stderr\" and \"csvlog\"." msgstr "Підтримуються формати журналів \"stderr\" і \"csvlog\"." @@ -23551,106 +23645,106 @@ msgstr "результат поза діапазоном" msgid "cannot subtract inet values of different sizes" msgstr "не можна віднімати значення inet різного розміру" -#: utils/adt/numeric.c:967 +#: utils/adt/numeric.c:974 #, c-format msgid "invalid sign in external \"numeric\" value" msgstr "неприпустимий знак у зовнішньому значенні \"numeric\"" -#: utils/adt/numeric.c:973 +#: utils/adt/numeric.c:980 #, c-format msgid "invalid scale in external \"numeric\" value" msgstr "неприпустимий масштаб у зовнішньому значенні \"numeric\"" -#: utils/adt/numeric.c:982 +#: utils/adt/numeric.c:989 #, c-format msgid "invalid digit in external \"numeric\" value" msgstr "неприпустиме число у зовнішньому значенні \"numeric\"" -#: utils/adt/numeric.c:1195 utils/adt/numeric.c:1209 +#: utils/adt/numeric.c:1202 utils/adt/numeric.c:1216 #, c-format msgid "NUMERIC precision %d must be between 1 and %d" msgstr "Точність NUMERIC %d повинна бути між 1 і %d" -#: utils/adt/numeric.c:1200 +#: utils/adt/numeric.c:1207 #, c-format msgid "NUMERIC scale %d must be between 0 and precision %d" msgstr "Масштаб NUMERIC %d повинен бути між 0 і точністю %d" -#: utils/adt/numeric.c:1218 +#: utils/adt/numeric.c:1225 #, c-format msgid "invalid NUMERIC type modifier" msgstr "неприпустимий модифікатор типу NUMERIC" -#: utils/adt/numeric.c:1576 +#: utils/adt/numeric.c:1591 #, c-format msgid "start value cannot be NaN" msgstr "початкове значення не може бути NaN" -#: utils/adt/numeric.c:1580 +#: utils/adt/numeric.c:1595 #, c-format msgid "start value cannot be infinity" msgstr "початкове значення не може бути нескінченністю" -#: utils/adt/numeric.c:1587 +#: utils/adt/numeric.c:1602 #, c-format msgid "stop value cannot be NaN" msgstr "кінцеве значення не може бути NaN" -#: utils/adt/numeric.c:1591 +#: utils/adt/numeric.c:1606 #, c-format msgid "stop value cannot be infinity" msgstr "кінцеве значення не може бути нескінченністю" -#: utils/adt/numeric.c:1604 +#: utils/adt/numeric.c:1619 #, c-format msgid "step size cannot be NaN" msgstr "розмір кроку не може бути NaN" -#: utils/adt/numeric.c:1608 +#: utils/adt/numeric.c:1623 #, c-format msgid "step size cannot be infinity" msgstr "розмір кроку не може бути нескінченністю" -#: utils/adt/numeric.c:3489 +#: utils/adt/numeric.c:3505 #, c-format msgid "factorial of a negative number is undefined" msgstr "факторіал від'ємного числа не визначено" -#: utils/adt/numeric.c:3499 utils/adt/numeric.c:6949 utils/adt/numeric.c:7422 -#: utils/adt/numeric.c:9799 utils/adt/numeric.c:10286 utils/adt/numeric.c:10412 -#: utils/adt/numeric.c:10485 +#: utils/adt/numeric.c:3515 utils/adt/numeric.c:6965 utils/adt/numeric.c:7438 +#: utils/adt/numeric.c:9815 utils/adt/numeric.c:10303 utils/adt/numeric.c:10429 +#: utils/adt/numeric.c:10503 #, c-format msgid "value overflows numeric format" msgstr "значення переповнюють формат numeric" -#: utils/adt/numeric.c:4209 utils/adt/numeric.c:4289 utils/adt/numeric.c:4330 -#: utils/adt/numeric.c:4524 +#: utils/adt/numeric.c:4225 utils/adt/numeric.c:4305 utils/adt/numeric.c:4346 +#: utils/adt/numeric.c:4540 #, c-format msgid "cannot convert NaN to %s" msgstr "неможливо перетворити NaN на %s" -#: utils/adt/numeric.c:4213 utils/adt/numeric.c:4293 utils/adt/numeric.c:4334 -#: utils/adt/numeric.c:4528 +#: utils/adt/numeric.c:4229 utils/adt/numeric.c:4309 utils/adt/numeric.c:4350 +#: utils/adt/numeric.c:4544 #, c-format msgid "cannot convert infinity to %s" msgstr "неможливо перетворити нескінченність на %s" -#: utils/adt/numeric.c:4537 +#: utils/adt/numeric.c:4553 #, c-format msgid "pg_lsn out of range" msgstr "pg_lsn поза діапазоном" -#: utils/adt/numeric.c:7506 utils/adt/numeric.c:7553 +#: utils/adt/numeric.c:7522 utils/adt/numeric.c:7569 #, c-format msgid "numeric field overflow" msgstr "надлишок поля numeric" -#: utils/adt/numeric.c:7507 +#: utils/adt/numeric.c:7523 #, 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:7554 +#: utils/adt/numeric.c:7570 #, c-format msgid "A field with precision %d, scale %d cannot hold an infinite value." msgstr "Поле з точністю %d, масштабом %d не може містити нескінченне значення." @@ -23691,99 +23785,99 @@ msgstr "символ не може бути null" msgid "percentile value %g is not between 0 and 1" msgstr "значення процентиля %g не є між 0 і 1" -#: utils/adt/pg_locale.c:1228 +#: utils/adt/pg_locale.c:1229 #, c-format msgid "Apply system library package updates." msgstr "Застосуйте оновлення для пакету з системною бібліотекою." -#: utils/adt/pg_locale.c:1442 +#: utils/adt/pg_locale.c:1445 #, c-format msgid "could not create locale \"%s\": %m" msgstr "не вдалося створити локалізацію \"%s\": %m" -#: utils/adt/pg_locale.c:1445 +#: utils/adt/pg_locale.c:1448 #, c-format msgid "The operating system could not find any locale data for the locale name \"%s\"." msgstr "Операційній системі не вдалося знайти дані локалізації з іменем \"%s\"." -#: utils/adt/pg_locale.c:1547 +#: utils/adt/pg_locale.c:1550 #, c-format msgid "collations with different collate and ctype values are not supported on this platform" msgstr "параметри сортування з різними значеннями collate і ctype не підтримуються на цій платформі" -#: utils/adt/pg_locale.c:1556 +#: utils/adt/pg_locale.c:1559 #, c-format msgid "collation provider LIBC is not supported on this platform" msgstr "провайдер параметрів сортування LIBC не підтримується на цій платформі" -#: utils/adt/pg_locale.c:1568 +#: utils/adt/pg_locale.c:1571 #, c-format msgid "collations with different collate and ctype values are not supported by ICU" msgstr "ICU не підтримує параметри сортування з різними значеннями collate і ctype" -#: utils/adt/pg_locale.c:1574 utils/adt/pg_locale.c:1661 -#: utils/adt/pg_locale.c:1940 +#: utils/adt/pg_locale.c:1577 utils/adt/pg_locale.c:1664 +#: utils/adt/pg_locale.c:1943 #, c-format msgid "could not open collator for locale \"%s\": %s" msgstr "не вдалося відкрити сортувальник для локалізації \"%s\": %s" -#: utils/adt/pg_locale.c:1588 +#: utils/adt/pg_locale.c:1591 #, c-format msgid "ICU is not supported in this build" msgstr "ICU не підтримується в цій збірці" -#: utils/adt/pg_locale.c:1609 +#: utils/adt/pg_locale.c:1612 #, c-format msgid "collation \"%s\" has no actual version, but a version was specified" msgstr "для параметру сортування \"%s\" який не має фактичної версії, була вказана версія" -#: utils/adt/pg_locale.c:1616 +#: utils/adt/pg_locale.c:1619 #, c-format msgid "collation \"%s\" has version mismatch" msgstr "невідповідність версій для параметру сортування \"%s\"" -#: utils/adt/pg_locale.c:1618 +#: utils/adt/pg_locale.c:1621 #, 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:1621 +#: utils/adt/pg_locale.c:1624 #, 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:1692 +#: utils/adt/pg_locale.c:1695 #, c-format msgid "could not load locale \"%s\"" msgstr "не вдалося завантажити локаль \"%s\"" -#: utils/adt/pg_locale.c:1717 +#: utils/adt/pg_locale.c:1720 #, c-format msgid "could not get collation version for locale \"%s\": error code %lu" msgstr "не вдалося отримати версію параметрів сортування для локалізації \"%s\": код помилки %lu" -#: utils/adt/pg_locale.c:1755 +#: utils/adt/pg_locale.c:1758 #, c-format msgid "encoding \"%s\" not supported by ICU" msgstr "ICU не підтримує кодування \"%s\"" -#: utils/adt/pg_locale.c:1762 +#: utils/adt/pg_locale.c:1765 #, c-format msgid "could not open ICU converter for encoding \"%s\": %s" msgstr "не вдалося відкрити перетворювач ICU для кодування \"%s\": %s" -#: utils/adt/pg_locale.c:1793 utils/adt/pg_locale.c:1802 -#: utils/adt/pg_locale.c:1831 utils/adt/pg_locale.c:1841 +#: utils/adt/pg_locale.c:1796 utils/adt/pg_locale.c:1805 +#: utils/adt/pg_locale.c:1834 utils/adt/pg_locale.c:1844 #, c-format msgid "%s failed: %s" msgstr "%s помилка: %s" -#: utils/adt/pg_locale.c:2113 +#: utils/adt/pg_locale.c:2116 #, c-format msgid "invalid multibyte character for locale" msgstr "неприпустимий мультибайтний символ для локалізації" -#: utils/adt/pg_locale.c:2114 +#: utils/adt/pg_locale.c:2117 #, c-format msgid "The server's LC_CTYPE locale is probably incompatible with the database encoding." msgstr "Параметр локалізації серверу LC_CTYPE, можливо, несумісний з кодуванням бази даних." @@ -23893,7 +23987,7 @@ msgstr "Занадто багато ком." msgid "Junk after right parenthesis or bracket." msgstr "Сміття після правої дужки." -#: utils/adt/regexp.c:289 utils/adt/regexp.c:1543 utils/adt/varlena.c:4549 +#: utils/adt/regexp.c:289 utils/adt/regexp.c:1612 utils/adt/varlena.c:4549 #, c-format msgid "regular expression failed: %s" msgstr "помилка в регулярному виразі: %s" @@ -23903,23 +23997,23 @@ msgstr "помилка в регулярному виразі: %s" msgid "invalid regular expression option: \"%.*s\"" msgstr "неприпустимий параметр регулярного виразу: \"%.*s\"" -#: utils/adt/regexp.c:836 +#: utils/adt/regexp.c:848 #, c-format msgid "SQL regular expression may not contain more than two escape-double-quote separators" msgstr "Регулярний вираз SQL не може містити більше двох роздільників escape-double-quote" #. translator: %s is a SQL function name -#: utils/adt/regexp.c:981 utils/adt/regexp.c:1363 utils/adt/regexp.c:1418 +#: utils/adt/regexp.c:1050 utils/adt/regexp.c:1432 utils/adt/regexp.c:1487 #, c-format msgid "%s does not support the \"global\" option" msgstr "%s не підтримує параметр \"global\"" -#: utils/adt/regexp.c:983 +#: utils/adt/regexp.c:1052 #, c-format msgid "Use the regexp_matches function instead." msgstr "Використайте функцію regexp_matches замість." -#: utils/adt/regexp.c:1165 +#: utils/adt/regexp.c:1234 #, c-format msgid "too many regular expression matches" msgstr "занадто багато відповідностей для регулярного виразу" @@ -23945,7 +24039,7 @@ msgid "Use NONE to denote the missing argument of a unary operator." msgstr "Щоб позначити пропущений аргумент унарного оператору, використайте NONE." #: utils/adt/regproc.c:715 utils/adt/regproc.c:756 utils/adt/regproc.c:2055 -#: utils/adt/ruleutils.c:9800 utils/adt/ruleutils.c:9969 +#: utils/adt/ruleutils.c:9838 utils/adt/ruleutils.c:10007 #, c-format msgid "too many arguments" msgstr "занадто багато аргументів" @@ -24121,7 +24215,7 @@ msgstr "не можна порівнювати неподібні типи ст msgid "cannot compare record types with different numbers of columns" msgstr "не можна порівнювати типи записів з різної кількістю стовпців" -#: utils/adt/ruleutils.c:5164 +#: utils/adt/ruleutils.c:5162 #, c-format msgid "rule \"%s\" has unsupported event type %d" msgstr "правило \"%s\" має непідтримуваний тип подій %d" @@ -24136,7 +24230,7 @@ msgstr "TIMESTAMP(%d)%s точність не повинна бути від'є msgid "TIMESTAMP(%d)%s precision reduced to maximum allowed, %d" msgstr "TIMESTAMP(%d)%s точність зменшена до дозволеного максимуму, %d" -#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12443 +#: utils/adt/timestamp.c:178 utils/adt/timestamp.c:436 utils/misc/guc.c:12501 #, c-format msgid "timestamp out of range: \"%s\"" msgstr "позначка часу поза діапазоном: \"%s\"" @@ -24173,14 +24267,16 @@ msgid "timestamp out of range: \"%g\"" msgstr "позначка часу поза діапазоном: \"%g\"" #: utils/adt/timestamp.c:941 utils/adt/timestamp.c:1515 -#: utils/adt/timestamp.c:1982 utils/adt/timestamp.c:3059 -#: utils/adt/timestamp.c:3064 utils/adt/timestamp.c:3069 -#: utils/adt/timestamp.c:3119 utils/adt/timestamp.c:3126 -#: utils/adt/timestamp.c:3133 utils/adt/timestamp.c:3153 -#: utils/adt/timestamp.c:3160 utils/adt/timestamp.c:3167 -#: utils/adt/timestamp.c:3254 utils/adt/timestamp.c:3329 -#: utils/adt/timestamp.c:3703 utils/adt/timestamp.c:3828 -#: utils/adt/timestamp.c:4386 +#: utils/adt/timestamp.c:1982 utils/adt/timestamp.c:3090 +#: utils/adt/timestamp.c:3095 utils/adt/timestamp.c:3100 +#: utils/adt/timestamp.c:3150 utils/adt/timestamp.c:3157 +#: utils/adt/timestamp.c:3164 utils/adt/timestamp.c:3184 +#: utils/adt/timestamp.c:3191 utils/adt/timestamp.c:3198 +#: utils/adt/timestamp.c:3285 utils/adt/timestamp.c:3360 +#: utils/adt/timestamp.c:3734 utils/adt/timestamp.c:3859 +#: utils/adt/timestamp.c:3907 utils/adt/timestamp.c:3917 +#: utils/adt/timestamp.c:4107 utils/adt/timestamp.c:4117 +#: utils/adt/timestamp.c:4451 #, c-format msgid "interval out of range" msgstr "інтервал поза діапазоном" @@ -24210,56 +24306,56 @@ msgstr "interval(%d) точність повинна бути між %d і %d" msgid "cannot subtract infinite timestamps" msgstr "віднімати безкінечні позначки часу не можна" -#: utils/adt/timestamp.c:3864 utils/adt/timestamp.c:4047 +#: utils/adt/timestamp.c:3896 utils/adt/timestamp.c:4096 #, c-format msgid "origin out of range" msgstr "джерело поза діапазоном" -#: utils/adt/timestamp.c:3869 utils/adt/timestamp.c:4052 +#: utils/adt/timestamp.c:3901 utils/adt/timestamp.c:4101 #, c-format msgid "timestamps cannot be binned into intervals containing months or years" msgstr "позначки часу не можна розділяти на інтервали, що містять місяці або роки" -#: utils/adt/timestamp.c:3876 utils/adt/timestamp.c:4059 +#: utils/adt/timestamp.c:3912 utils/adt/timestamp.c:4112 #, c-format msgid "stride must be greater than zero" msgstr "крок повинен бути більше нуля" -#: utils/adt/timestamp.c:4005 utils/adt/timestamp.c:4647 -#: utils/adt/timestamp.c:4847 utils/adt/timestamp.c:4894 +#: utils/adt/timestamp.c:4053 utils/adt/timestamp.c:4712 +#: utils/adt/timestamp.c:4912 utils/adt/timestamp.c:4959 #, c-format msgid "timestamp units \"%s\" not supported" msgstr "одиниці позначки часу \"%s\" не підтримуються" -#: utils/adt/timestamp.c:4019 utils/adt/timestamp.c:4601 -#: utils/adt/timestamp.c:4904 +#: utils/adt/timestamp.c:4067 utils/adt/timestamp.c:4666 +#: utils/adt/timestamp.c:4969 #, c-format msgid "timestamp units \"%s\" not recognized" msgstr "одиниці позначки часу \"%s\" не розпізнані" -#: utils/adt/timestamp.c:4198 utils/adt/timestamp.c:4642 -#: utils/adt/timestamp.c:5118 utils/adt/timestamp.c:5166 +#: utils/adt/timestamp.c:4263 utils/adt/timestamp.c:4707 +#: utils/adt/timestamp.c:5183 utils/adt/timestamp.c:5231 #, c-format msgid "timestamp with time zone units \"%s\" not supported" msgstr "одиниці позначки часу з часовим поясом \"%s\" не підтримуються" -#: utils/adt/timestamp.c:4215 utils/adt/timestamp.c:4596 -#: utils/adt/timestamp.c:5175 +#: utils/adt/timestamp.c:4280 utils/adt/timestamp.c:4661 +#: utils/adt/timestamp.c:5240 #, c-format msgid "timestamp with time zone units \"%s\" not recognized" msgstr "одиниці позначки часу з часовим поясом \"%s\" не розпізнані" -#: utils/adt/timestamp.c:4373 +#: utils/adt/timestamp.c:4438 #, c-format msgid "interval units \"%s\" not supported because months usually have fractional weeks" msgstr "одиниці інтервалу \"%s\" не підтримуються, тому, що місяці зазвичай мають дробове число тижнів" -#: utils/adt/timestamp.c:4379 utils/adt/timestamp.c:5298 +#: utils/adt/timestamp.c:4444 utils/adt/timestamp.c:5363 #, c-format msgid "interval units \"%s\" not supported" msgstr "одиниці інтервалу \"%s\" не підтримуються" -#: utils/adt/timestamp.c:4395 utils/adt/timestamp.c:5365 +#: utils/adt/timestamp.c:4460 utils/adt/timestamp.c:5430 #, c-format msgid "interval units \"%s\" not recognized" msgstr "одиниці інтервалу \"%s\" не розпізнані" @@ -24294,7 +24390,7 @@ msgstr "функція gtsvector_in не реалізована" msgid "distance in phrase operator must be an integer value between zero and %d inclusive" msgstr "відстань у фразовому операторі повинна бути цілим числом від нуля до %d включно" -#: utils/adt/tsquery.c:306 utils/adt/tsquery.c:691 +#: utils/adt/tsquery.c:306 utils/adt/tsquery.c:687 #: utils/adt/tsvector_parser.c:133 #, c-format msgid "syntax error in tsquery: \"%s\"" @@ -24305,27 +24401,27 @@ msgstr "синтаксична помилка в tsquery: \"%s\"" msgid "no operand in tsquery: \"%s\"" msgstr "немає оператора в tsquery: \"%s\"" -#: utils/adt/tsquery.c:534 +#: utils/adt/tsquery.c:530 #, c-format msgid "value is too big in tsquery: \"%s\"" msgstr "занадто велике значення в tsquery: \"%s\"" -#: utils/adt/tsquery.c:539 +#: utils/adt/tsquery.c:535 #, c-format msgid "operand is too long in tsquery: \"%s\"" msgstr "занадто довгий операнд в tsquery: \"%s\"" -#: utils/adt/tsquery.c:567 +#: utils/adt/tsquery.c:563 #, c-format msgid "word is too long in tsquery: \"%s\"" msgstr "занадто довге слово в tsquery: \"%s\"" -#: utils/adt/tsquery.c:835 +#: utils/adt/tsquery.c:831 #, c-format msgid "text-search query doesn't contain lexemes: \"%s\"" msgstr "запит пошуку тексту не містить лексем: \"%s\"" -#: utils/adt/tsquery.c:846 utils/adt/tsquery_util.c:375 +#: utils/adt/tsquery.c:842 utils/adt/tsquery_util.c:375 #, c-format msgid "tsquery is too large" msgstr "tsquery занадто великий" @@ -24360,12 +24456,12 @@ msgstr "масив значимості не повинен містити null" msgid "weight out of range" msgstr "значимість поза діапазоном" -#: utils/adt/tsvector.c:215 +#: utils/adt/tsvector.c:212 #, c-format msgid "word is too long (%ld bytes, max %ld bytes)" msgstr "слово занадто довге (%ld байт, при максимумі %ld)" -#: utils/adt/tsvector.c:222 +#: utils/adt/tsvector.c:219 #, c-format msgid "string is too long for tsvector (%ld bytes, max %ld bytes)" msgstr "рядок занадто довгий для tsvector (%ld байт, при максимумі %ld)" @@ -24643,171 +24739,171 @@ msgstr "аргумент ntile повинен бути більше нуля" msgid "argument of nth_value must be greater than zero" msgstr "аргумент nth_value повинен бути більше нуля" -#: utils/adt/xid8funcs.c:117 +#: utils/adt/xid8funcs.c:118 #, c-format msgid "transaction ID %s is in the future" msgstr "ідентифікатор транзакції %s відноситься до майбутнього" -#: utils/adt/xid8funcs.c:548 +#: utils/adt/xid8funcs.c:556 #, c-format msgid "invalid external pg_snapshot data" msgstr "неприпустимі зовнішні дані pg_snapshot" -#: utils/adt/xml.c:222 +#: utils/adt/xml.c:232 #, c-format msgid "unsupported XML feature" msgstr "XML-функції не підтримуються" -#: utils/adt/xml.c:223 +#: utils/adt/xml.c:233 #, c-format msgid "This functionality requires the server to be built with libxml support." msgstr "Ця функціональність потребує, щоб сервер був побудований з підтримкою libxml." -#: utils/adt/xml.c:243 utils/mb/mbutils.c:627 +#: utils/adt/xml.c:253 utils/mb/mbutils.c:628 #, c-format msgid "invalid encoding name \"%s\"" msgstr "неприпустиме ім’я кодування \"%s\"" -#: utils/adt/xml.c:486 utils/adt/xml.c:491 +#: utils/adt/xml.c:496 utils/adt/xml.c:501 #, c-format msgid "invalid XML comment" msgstr "неприпустимий XML-коментар" -#: utils/adt/xml.c:620 +#: utils/adt/xml.c:630 #, c-format msgid "not an XML document" msgstr "не XML-документ" -#: utils/adt/xml.c:779 utils/adt/xml.c:802 +#: utils/adt/xml.c:789 utils/adt/xml.c:812 #, c-format msgid "invalid XML processing instruction" msgstr "неприпустима XML-команда обробки" -#: utils/adt/xml.c:780 +#: utils/adt/xml.c:790 #, c-format msgid "XML processing instruction target name cannot be \"%s\"." msgstr "Метою XML-команди обробки не може бути \"%s\"." -#: utils/adt/xml.c:803 +#: utils/adt/xml.c:813 #, c-format msgid "XML processing instruction cannot contain \"?>\"." msgstr "XML-команда обробки не може містити \"?>\"." -#: utils/adt/xml.c:882 +#: utils/adt/xml.c:892 #, c-format msgid "xmlvalidate is not implemented" msgstr "функція xmlvalidate не реалізована" -#: utils/adt/xml.c:961 +#: utils/adt/xml.c:971 #, c-format msgid "could not initialize XML library" msgstr "не вдалося ініціалізувати бібліотеку XML" -#: utils/adt/xml.c:962 +#: utils/adt/xml.c:972 #, c-format msgid "libxml2 has incompatible char type: sizeof(char)=%u, sizeof(xmlChar)=%u." msgstr "libxml2 має несумісний тип char: sizeof(char)=%u, sizeof(xmlChar)=%u." -#: utils/adt/xml.c:1048 +#: utils/adt/xml.c:1058 #, c-format msgid "could not set up XML error handler" msgstr "не вдалося встановити обробник XML-помилок" -#: utils/adt/xml.c:1049 +#: utils/adt/xml.c:1059 #, c-format msgid "This probably indicates that the version of libxml2 being used is not compatible with the libxml2 header files that PostgreSQL was built with." msgstr "Можливо це означає, що використовувана версія libxml2 несумісна з файлами-заголовками libxml2, з котрими був зібраний PostgreSQL." -#: utils/adt/xml.c:1936 +#: utils/adt/xml.c:1979 msgid "Invalid character value." msgstr "Неприпустиме значення символу." -#: utils/adt/xml.c:1939 +#: utils/adt/xml.c:1982 msgid "Space required." msgstr "Потребується пробіл." -#: utils/adt/xml.c:1942 +#: utils/adt/xml.c:1985 msgid "standalone accepts only 'yes' or 'no'." msgstr "значеннями атрибуту standalone можуть бути лише 'yes' або 'no'." -#: utils/adt/xml.c:1945 +#: utils/adt/xml.c:1988 msgid "Malformed declaration: missing version." msgstr "Неправильне оголошення: пропущена версія." -#: utils/adt/xml.c:1948 +#: utils/adt/xml.c:1991 msgid "Missing encoding in text declaration." msgstr "В оголошенні пропущене кодування." -#: utils/adt/xml.c:1951 +#: utils/adt/xml.c:1994 msgid "Parsing XML declaration: '?>' expected." msgstr "Аналіз XML-оголошення: '?>' очікується." -#: utils/adt/xml.c:1954 +#: utils/adt/xml.c:1997 #, c-format msgid "Unrecognized libxml error code: %d." msgstr "Нерозпізнаний код помилки libxml: %d." -#: utils/adt/xml.c:2211 +#: utils/adt/xml.c:2254 #, c-format msgid "XML does not support infinite date values." msgstr "XML не підтримує безкінечні значення в датах." -#: utils/adt/xml.c:2233 utils/adt/xml.c:2260 +#: utils/adt/xml.c:2276 utils/adt/xml.c:2303 #, c-format msgid "XML does not support infinite timestamp values." msgstr "XML не підтримує безкінченні значення в позначках часу." -#: utils/adt/xml.c:2676 +#: utils/adt/xml.c:2719 #, c-format msgid "invalid query" msgstr "неприпустимий запит" -#: utils/adt/xml.c:2768 +#: utils/adt/xml.c:2811 #, c-format msgid "portal \"%s\" does not return tuples" msgstr "portal \"%s\" не повертає кортежі" -#: utils/adt/xml.c:4020 +#: utils/adt/xml.c:4063 #, c-format msgid "invalid array for XML namespace mapping" msgstr "неприпустимий масив з зіставленням простіру імен XML" -#: utils/adt/xml.c:4021 +#: utils/adt/xml.c:4064 #, c-format msgid "The array must be two-dimensional with length of the second axis equal to 2." msgstr "Масив повинен бути двовимірним і містити 2 елемента по другій вісі." -#: utils/adt/xml.c:4045 +#: utils/adt/xml.c:4088 #, c-format msgid "empty XPath expression" msgstr "пустий вираз XPath" -#: utils/adt/xml.c:4097 +#: utils/adt/xml.c:4140 #, c-format msgid "neither namespace name nor URI may be null" msgstr "ні ім'я простіру імен ні URI не можуть бути null" -#: utils/adt/xml.c:4104 +#: utils/adt/xml.c:4147 #, c-format msgid "could not register XML namespace with name \"%s\" and URI \"%s\"" msgstr "не вдалося зареєструвати простір імен XML з ім'ям \"%s\" і URI \"%s\"" -#: utils/adt/xml.c:4455 +#: utils/adt/xml.c:4504 #, c-format msgid "DEFAULT namespace is not supported" msgstr "Простір імен DEFAULT не підтримується" -#: utils/adt/xml.c:4484 +#: utils/adt/xml.c:4533 #, c-format msgid "row path filter must not be empty string" msgstr "шлях фільтруючих рядків не повинен бути пустим" -#: utils/adt/xml.c:4515 +#: utils/adt/xml.c:4567 #, c-format msgid "column path filter must not be empty string" msgstr "шлях фільтруючого стовпця не повинен бути пустим" -#: utils/adt/xml.c:4659 +#: utils/adt/xml.c:4714 #, c-format msgid "more than one value returned by column XPath expression" msgstr "вираз XPath, який відбирає стовпець, повернув більше одного значення" @@ -24843,17 +24939,17 @@ msgstr "в класі операторів \"%s\" методу доступу %s msgid "cached plan must not change result type" msgstr "в кешованому плані не повинен змінюватись тип результату" -#: utils/cache/relcache.c:6325 +#: utils/cache/relcache.c:6344 #, c-format msgid "could not create relation-cache initialization file \"%s\": %m" msgstr "не вдалося створити файл ініціалізації для кешу відношень \"%s\": %m" -#: utils/cache/relcache.c:6327 +#: utils/cache/relcache.c:6346 #, c-format msgid "Continuing anyway, but there's something wrong." msgstr "Продовжуємо усе одно, але щось не так." -#: utils/cache/relcache.c:6649 +#: utils/cache/relcache.c:6668 #, c-format msgid "could not remove cache file \"%s\": %m" msgstr "не вдалося видалити файл кешу \"%s\": %m" @@ -24873,7 +24969,7 @@ msgstr "файл зіставлень відношень \"%s\" містить msgid "relation mapping file \"%s\" contains incorrect checksum" msgstr "файл зіставлень відношень \"%s\" містить неправильну контрольну суму" -#: utils/cache/typcache.c:1811 utils/fmgr/funcapi.c:497 +#: utils/cache/typcache.c:1811 utils/fmgr/funcapi.c:505 #, c-format msgid "record type has not been registered" msgstr "тип запису не зареєстрований" @@ -24893,92 +24989,92 @@ msgstr "TRAP: %s(\"%s\", Файл: \"%s\", Рядок: %d, PID: %d)\n" msgid "error occurred before error message processing is available\n" msgstr "сталася помилка перед тим, як обробка повідомлення про помилку була доступна\n" -#: utils/error/elog.c:1948 +#: utils/error/elog.c:1968 #, c-format msgid "could not reopen file \"%s\" as stderr: %m" msgstr "не вдалося повторно відкрити файл \"%s\" як stderr: %m" -#: utils/error/elog.c:1961 +#: utils/error/elog.c:1981 #, c-format msgid "could not reopen file \"%s\" as stdout: %m" msgstr "не вдалося повторно відкрити файл \"%s\" як stdout: %m" -#: utils/error/elog.c:2456 utils/error/elog.c:2490 utils/error/elog.c:2506 +#: utils/error/elog.c:2476 utils/error/elog.c:2510 utils/error/elog.c:2526 msgid "[unknown]" msgstr "[unknown]" -#: utils/error/elog.c:3026 utils/error/elog.c:3344 utils/error/elog.c:3451 +#: utils/error/elog.c:3046 utils/error/elog.c:3364 utils/error/elog.c:3471 msgid "missing error text" msgstr "пропущено текст помилки" -#: utils/error/elog.c:3029 utils/error/elog.c:3032 +#: utils/error/elog.c:3049 utils/error/elog.c:3052 #, c-format msgid " at character %d" msgstr " символ %d" -#: utils/error/elog.c:3042 utils/error/elog.c:3049 +#: utils/error/elog.c:3062 utils/error/elog.c:3069 msgid "DETAIL: " msgstr "ВІДОМОСТІ: " -#: utils/error/elog.c:3056 +#: utils/error/elog.c:3076 msgid "HINT: " msgstr "УКАЗІВКА: " -#: utils/error/elog.c:3063 +#: utils/error/elog.c:3083 msgid "QUERY: " msgstr "ЗАПИТ: " -#: utils/error/elog.c:3070 +#: utils/error/elog.c:3090 msgid "CONTEXT: " msgstr "КОНТЕКСТ: " -#: utils/error/elog.c:3080 +#: utils/error/elog.c:3100 #, c-format msgid "LOCATION: %s, %s:%d\n" msgstr "РОЗТАШУВАННЯ: %s, %s:%d\n" -#: utils/error/elog.c:3087 +#: utils/error/elog.c:3107 #, c-format msgid "LOCATION: %s:%d\n" msgstr "РОЗТАШУВАННЯ: %s:%d\n" -#: utils/error/elog.c:3094 +#: utils/error/elog.c:3114 msgid "BACKTRACE: " msgstr "ВІДСТЕЖУВАТИ: " -#: utils/error/elog.c:3108 +#: utils/error/elog.c:3128 msgid "STATEMENT: " msgstr "ІНСТРУКЦІЯ: " -#: utils/error/elog.c:3496 +#: utils/error/elog.c:3516 msgid "DEBUG" msgstr "НАЛАГОДЖЕННЯ" -#: utils/error/elog.c:3500 +#: utils/error/elog.c:3520 msgid "LOG" msgstr "ЗАПИСУВАННЯ" -#: utils/error/elog.c:3503 +#: utils/error/elog.c:3523 msgid "INFO" msgstr "ІНФОРМАЦІЯ" -#: utils/error/elog.c:3506 +#: utils/error/elog.c:3526 msgid "NOTICE" msgstr "ПОВІДОМЛЕННЯ" -#: utils/error/elog.c:3510 +#: utils/error/elog.c:3530 msgid "WARNING" msgstr "ПОПЕРЕДЖЕННЯ" -#: utils/error/elog.c:3513 +#: utils/error/elog.c:3533 msgid "ERROR" msgstr "ПОМИЛКА" -#: utils/error/elog.c:3516 +#: utils/error/elog.c:3536 msgid "FATAL" msgstr "ФАТАЛЬНО" -#: utils/error/elog.c:3519 +#: utils/error/elog.c:3539 msgid "PANIC" msgstr "ПАНІКА" @@ -25091,208 +25187,203 @@ msgstr "в контексті виклику функції відсутня і msgid "language validation function %u called for language %u instead of %u" msgstr "функція мовної перевірки %u викликана для мови %u замість %u" -#: utils/fmgr/funcapi.c:420 +#: utils/fmgr/funcapi.c:427 #, c-format msgid "could not determine actual result type for function \"%s\" declared to return type %s" msgstr "не вдалося визначити фактичний тип результату для функції \"%s\" оголошеної як, та, котра повертає тип %s" -#: utils/fmgr/funcapi.c:565 +#: utils/fmgr/funcapi.c:573 #, c-format msgid "argument declared %s does not contain a range type but type %s" msgstr "оголошений аргумент %s не містить тип діапазону, а тип %s" -#: utils/fmgr/funcapi.c:648 +#: utils/fmgr/funcapi.c:656 #, c-format msgid "could not find multirange type for data type %s" msgstr "не вдалося знайти багатодіапазонний тип для типу даних %s" -#: utils/fmgr/funcapi.c:1865 utils/fmgr/funcapi.c:1897 +#: utils/fmgr/funcapi.c:1873 utils/fmgr/funcapi.c:1905 #, c-format msgid "number of aliases does not match number of columns" msgstr "кількість псевдонімів не відповідає кількості стовпців" -#: utils/fmgr/funcapi.c:1891 +#: utils/fmgr/funcapi.c:1899 #, c-format msgid "no column alias was provided" msgstr "жодного псевдоніму для стовпця не було надано" -#: utils/fmgr/funcapi.c:1915 +#: utils/fmgr/funcapi.c:1923 #, c-format msgid "could not determine row description for function returning record" msgstr "не вдалося визначити опис рядка для функції, що повертає запис" -#: utils/init/miscinit.c:314 +#: utils/init/miscinit.c:315 #, c-format msgid "data directory \"%s\" does not exist" msgstr "каталог даних \"%s\" не існує" -#: utils/init/miscinit.c:319 +#: utils/init/miscinit.c:320 #, c-format msgid "could not read permissions of directory \"%s\": %m" msgstr "не вдалося прочитати дозволи на каталог \"%s\": %m" -#: utils/init/miscinit.c:327 +#: utils/init/miscinit.c:328 #, c-format msgid "specified data directory \"%s\" is not a directory" msgstr "вказаний каталог даних \"%s\" не є каталогом" -#: utils/init/miscinit.c:343 +#: utils/init/miscinit.c:344 #, c-format msgid "data directory \"%s\" has wrong ownership" msgstr "власник каталогу даних \"%s\" визначений неправильно" -#: utils/init/miscinit.c:345 +#: utils/init/miscinit.c:346 #, c-format msgid "The server must be started by the user that owns the data directory." msgstr "Сервер повинен запускати користувач, який володіє каталогом даних." -#: utils/init/miscinit.c:363 +#: utils/init/miscinit.c:364 #, c-format msgid "data directory \"%s\" has invalid permissions" msgstr "каталог даних \"%s\" має неприпустимі дозволи" -#: utils/init/miscinit.c:365 +#: utils/init/miscinit.c:366 #, c-format msgid "Permissions should be u=rwx (0700) or u=rwx,g=rx (0750)." msgstr "Дозволи повинні бути u=rwx (0700) або u=rwx,g=rx (0750)." -#: utils/init/miscinit.c:650 utils/misc/guc.c:7495 +#: utils/init/miscinit.c:684 utils/misc/guc.c:7520 #, c-format msgid "cannot set parameter \"%s\" within security-restricted operation" msgstr "встановити параметр \"%s\" в межах операції з обмеженнями по безпеці, не можна" -#: utils/init/miscinit.c:718 +#: utils/init/miscinit.c:763 #, c-format msgid "role with OID %u does not exist" msgstr "роль з OID %u не існує" -#: utils/init/miscinit.c:748 +#: utils/init/miscinit.c:808 #, c-format msgid "role \"%s\" is not permitted to log in" msgstr "для ролі \"%s\" вхід не дозволений" -#: utils/init/miscinit.c:766 +#: utils/init/miscinit.c:829 #, c-format msgid "too many connections for role \"%s\"" msgstr "занадто багато підключень для ролі \"%s\"" -#: utils/init/miscinit.c:834 -#, c-format -msgid "permission denied to set session authorization" -msgstr "немає прав для встановлення авторизації в сеансі" - -#: utils/init/miscinit.c:917 +#: utils/init/miscinit.c:961 #, c-format msgid "invalid role OID: %u" msgstr "неприпустимий OID ролі: %u" -#: utils/init/miscinit.c:971 +#: utils/init/miscinit.c:1015 #, c-format msgid "database system is shut down" msgstr "система бази даних вимкнена" -#: utils/init/miscinit.c:1058 +#: utils/init/miscinit.c:1102 #, c-format msgid "could not create lock file \"%s\": %m" msgstr "не вдалося створити файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1072 +#: utils/init/miscinit.c:1116 #, c-format msgid "could not open lock file \"%s\": %m" msgstr "не вдалося відкрити файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1079 +#: utils/init/miscinit.c:1123 #, c-format msgid "could not read lock file \"%s\": %m" msgstr "не вдалося прочитати файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1088 +#: utils/init/miscinit.c:1132 #, c-format msgid "lock file \"%s\" is empty" msgstr "файл блокування \"%s\" пустий" -#: utils/init/miscinit.c:1089 +#: utils/init/miscinit.c:1133 #, c-format msgid "Either another server is starting, or the lock file is the remnant of a previous server startup crash." msgstr "Або зараз запускається інший сервер, або цей файл блокування залишився в результаті збою під час попереднього запуску." -#: utils/init/miscinit.c:1133 +#: utils/init/miscinit.c:1177 #, c-format msgid "lock file \"%s\" already exists" msgstr "файл блокування \"%s\" вже існує" -#: utils/init/miscinit.c:1137 +#: utils/init/miscinit.c:1181 #, c-format msgid "Is another postgres (PID %d) running in data directory \"%s\"?" msgstr "Інший postgres (PID %d) працює з каталогом даних \"%s\"?" -#: utils/init/miscinit.c:1139 +#: utils/init/miscinit.c:1183 #, c-format msgid "Is another postmaster (PID %d) running in data directory \"%s\"?" msgstr "Інший postmaster (PID %d) працює з каталогом даних \"%s\"?" -#: utils/init/miscinit.c:1142 +#: utils/init/miscinit.c:1186 #, c-format msgid "Is another postgres (PID %d) using socket file \"%s\"?" msgstr "Інший postgres (PID %d) використовує файл сокету \"%s\"?" -#: utils/init/miscinit.c:1144 +#: utils/init/miscinit.c:1188 #, c-format msgid "Is another postmaster (PID %d) using socket file \"%s\"?" msgstr "Інший postmaster (PID %d) використовує файл сокету \"%s\"?" -#: utils/init/miscinit.c:1195 +#: utils/init/miscinit.c:1239 #, c-format msgid "could not remove old lock file \"%s\": %m" msgstr "не вдалося видалити старий файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1197 +#: utils/init/miscinit.c:1241 #, c-format msgid "The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again." msgstr "Здається, файл залишився випадково, але видалити його не вийшло. Будь-ласка, видаліть файл вручну або спробуйте знову." -#: utils/init/miscinit.c:1234 utils/init/miscinit.c:1248 -#: utils/init/miscinit.c:1259 +#: utils/init/miscinit.c:1278 utils/init/miscinit.c:1292 +#: utils/init/miscinit.c:1303 #, c-format msgid "could not write lock file \"%s\": %m" msgstr "не вдалося записати файл блокування \"%s\": %m" -#: utils/init/miscinit.c:1370 utils/init/miscinit.c:1512 utils/misc/guc.c:10409 +#: utils/init/miscinit.c:1414 utils/init/miscinit.c:1556 utils/misc/guc.c:10473 #, c-format msgid "could not read from file \"%s\": %m" msgstr "не вдалося прочитати з файлу \"%s\": %m" -#: utils/init/miscinit.c:1500 +#: utils/init/miscinit.c:1544 #, c-format msgid "could not open file \"%s\": %m; continuing anyway" msgstr "не вдалося відкрити файл \"%s\": %m; все одно продовжується" -#: utils/init/miscinit.c:1525 +#: utils/init/miscinit.c:1569 #, c-format msgid "lock file \"%s\" contains wrong PID: %ld instead of %ld" msgstr "файл блокування \"%s\" містить неправильний PID: %ld замість %ld" -#: utils/init/miscinit.c:1564 utils/init/miscinit.c:1580 +#: utils/init/miscinit.c:1608 utils/init/miscinit.c:1624 #, c-format msgid "\"%s\" is not a valid data directory" msgstr "\"%s\" не є припустимим каталогом даних" -#: utils/init/miscinit.c:1566 +#: utils/init/miscinit.c:1610 #, c-format msgid "File \"%s\" is missing." msgstr "Файл \"%s\" пропущено." -#: utils/init/miscinit.c:1582 +#: utils/init/miscinit.c:1626 #, c-format msgid "File \"%s\" does not contain valid data." msgstr "Файл \"%s\" не містить припустимих даних." -#: utils/init/miscinit.c:1584 +#: utils/init/miscinit.c:1628 #, c-format msgid "You might need to initdb." msgstr "Можливо, вам слід виконати initdb." -#: utils/init/miscinit.c:1592 +#: utils/init/miscinit.c:1636 #, c-format msgid "The data directory was initialized by PostgreSQL version %s, which is not compatible with this version %s." msgstr "Каталог даних ініціалізований сервером PostgreSQL версії %s, не сумісною з цією версією %s." @@ -25367,87 +25458,87 @@ msgstr "доступ до бази даних \"%s\" відхилений" msgid "User does not have CONNECT privilege." msgstr "Користувач не має права CONNECT." -#: utils/init/postinit.c:376 +#: utils/init/postinit.c:379 #, c-format msgid "too many connections for database \"%s\"" msgstr "занадто багато підключень до бази даних \"%s\"" -#: utils/init/postinit.c:398 utils/init/postinit.c:405 +#: utils/init/postinit.c:401 utils/init/postinit.c:408 #, c-format msgid "database locale is incompatible with operating system" msgstr "локалізація бази даних несумісна з операційною системою" -#: utils/init/postinit.c:399 +#: utils/init/postinit.c:402 #, c-format msgid "The database was initialized with LC_COLLATE \"%s\", which is not recognized by setlocale()." msgstr "База даних була ініціалізована з параметром LC_COLLATE \"%s\", але зараз setlocale() не розпізнає його." -#: utils/init/postinit.c:401 utils/init/postinit.c:408 +#: utils/init/postinit.c:404 utils/init/postinit.c:411 #, c-format msgid "Recreate the database with another locale or install the missing locale." msgstr "Повторно створіть базу даних з іншою локалізацією або встановіть пропущену локалізацію." -#: utils/init/postinit.c:406 +#: utils/init/postinit.c:409 #, c-format msgid "The database was initialized with LC_CTYPE \"%s\", which is not recognized by setlocale()." msgstr "База даних була ініціалізована з параметром LC_CTYPE \"%s\", але зараз setlocale() не розпізнає його." -#: utils/init/postinit.c:761 +#: utils/init/postinit.c:764 #, c-format msgid "no roles are defined in this database system" msgstr "в цій системі баз даних не визначено жодної ролі" -#: utils/init/postinit.c:762 +#: utils/init/postinit.c:765 #, c-format msgid "You should immediately run CREATE USER \"%s\" SUPERUSER;." msgstr "Ви повинні негайно виконати CREATE USER \"%s\" SUPERUSER;." -#: utils/init/postinit.c:798 +#: utils/init/postinit.c:801 #, c-format msgid "new replication connections are not allowed during database shutdown" msgstr "нові підключення для реплікації не дозволені під час завершення роботи бази даних" -#: utils/init/postinit.c:802 +#: utils/init/postinit.c:805 #, c-format msgid "must be superuser to connect during database shutdown" msgstr "потрібно бути суперкористувачем, щоб підключитись під час завершення роботи бази даних" -#: utils/init/postinit.c:812 +#: utils/init/postinit.c:815 #, c-format msgid "must be superuser to connect in binary upgrade mode" msgstr "потрібно бути суперкористувачем, щоб підключитись в режимі двійкового оновлення" -#: utils/init/postinit.c:825 +#: utils/init/postinit.c:828 #, c-format msgid "remaining connection slots are reserved for non-replication superuser connections" msgstr "слоти підключень, які залишились, зарезервовані для підключень суперкористувача (не для реплікації)" -#: utils/init/postinit.c:835 +#: utils/init/postinit.c:838 #, c-format msgid "must be superuser or replication role to start walsender" msgstr "для запуску процесу walsender потребується роль реплікації або бути суперкористувачем" -#: utils/init/postinit.c:904 +#: utils/init/postinit.c:907 #, c-format msgid "database %u does not exist" msgstr "база даних %u не існує" -#: utils/init/postinit.c:994 +#: utils/init/postinit.c:997 #, c-format msgid "It seems to have just been dropped or renamed." msgstr "Схоже, вона щойно була видалена або перейменована." -#: utils/init/postinit.c:1001 +#: utils/init/postinit.c:1004 #, c-format msgid "cannot connect to invalid database \"%s\"" msgstr "неможливо під'єднатися до невірної бази даних \"%s\"" -#: utils/init/postinit.c:1021 +#: utils/init/postinit.c:1024 #, c-format msgid "The database subdirectory \"%s\" is missing." msgstr "Підкаталог бази даних \"%s\" пропущений." -#: utils/init/postinit.c:1026 +#: utils/init/postinit.c:1029 #, c-format msgid "could not access directory \"%s\": %m" msgstr "немає доступу до каталогу \"%s\": %m" @@ -25469,2166 +25560,2175 @@ msgstr "неочікуваний ідентифікатор кодування % msgid "unexpected encoding ID %d for WIN character sets" msgstr "неочікуваний ідентифікатор кодування %d для наборів символів WIN" -#: utils/mb/mbutils.c:297 utils/mb/mbutils.c:900 +#: utils/mb/mbutils.c:298 utils/mb/mbutils.c:901 #, c-format msgid "conversion between %s and %s is not supported" msgstr "перетворення між %s і %s не підтримується" -#: utils/mb/mbutils.c:402 utils/mb/mbutils.c:430 utils/mb/mbutils.c:815 -#: utils/mb/mbutils.c:842 +#: utils/mb/mbutils.c:403 utils/mb/mbutils.c:431 utils/mb/mbutils.c:816 +#: utils/mb/mbutils.c:843 #, c-format msgid "String of %d bytes is too long for encoding conversion." msgstr "Рядок з %d байт занадто довгий для перетворення кодування." -#: utils/mb/mbutils.c:568 +#: utils/mb/mbutils.c:569 #, c-format msgid "invalid source encoding name \"%s\"" msgstr "неприпустиме ім’я вихідного кодування \"%s\"" -#: utils/mb/mbutils.c:573 +#: utils/mb/mbutils.c:574 #, c-format msgid "invalid destination encoding name \"%s\"" msgstr "неприпустиме ім’я кодування результату \"%s\"" -#: utils/mb/mbutils.c:713 +#: utils/mb/mbutils.c:714 #, c-format msgid "invalid byte value for encoding \"%s\": 0x%02x" msgstr "неприпустиме значення байту для кодування \"%s\": 0x%02x" -#: utils/mb/mbutils.c:877 +#: utils/mb/mbutils.c:878 #, c-format msgid "invalid Unicode code point" msgstr "неприпустима кодова точка Unicode" -#: utils/mb/mbutils.c:1146 +#: utils/mb/mbutils.c:1147 #, c-format msgid "bind_textdomain_codeset failed" msgstr "помилка в bind_textdomain_codeset" -#: utils/mb/mbutils.c:1667 +#: utils/mb/mbutils.c:1668 #, c-format msgid "invalid byte sequence for encoding \"%s\": %s" msgstr "неприпустима послідовність байтів для кодування \"%s\": %s" -#: utils/mb/mbutils.c:1700 +#: utils/mb/mbutils.c:1709 #, c-format msgid "character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"" msgstr "символ з послідовністю байтів %s в кодуванні \"%s\" не має еквіваленту в кодуванні \"%s\"" -#: utils/misc/guc.c:720 +#: utils/misc/guc.c:721 msgid "Ungrouped" msgstr "Розгруповано" -#: utils/misc/guc.c:722 +#: utils/misc/guc.c:723 msgid "File Locations" msgstr "Розташування файлів" -#: utils/misc/guc.c:724 +#: utils/misc/guc.c:725 msgid "Connections and Authentication / Connection Settings" msgstr "Підключення і автентифікація / Параметри підключень" -#: utils/misc/guc.c:726 +#: utils/misc/guc.c:727 msgid "Connections and Authentication / Authentication" msgstr "Підключення і автентифікація / Автентифікація" -#: utils/misc/guc.c:728 +#: utils/misc/guc.c:729 msgid "Connections and Authentication / SSL" msgstr "Підключення і автентифікація / SSL" -#: utils/misc/guc.c:730 +#: utils/misc/guc.c:731 msgid "Resource Usage / Memory" msgstr "Використання ресурсу / Пам'ять" -#: utils/misc/guc.c:732 +#: utils/misc/guc.c:733 msgid "Resource Usage / Disk" msgstr "Використання ресурсу / Диск" -#: utils/misc/guc.c:734 +#: utils/misc/guc.c:735 msgid "Resource Usage / Kernel Resources" msgstr "Використання ресурсу / Ресурси ядра" -#: utils/misc/guc.c:736 +#: utils/misc/guc.c:737 msgid "Resource Usage / Cost-Based Vacuum Delay" msgstr "Використання ресурсу / Затримка очистки по вартості" -#: utils/misc/guc.c:738 +#: utils/misc/guc.c:739 msgid "Resource Usage / Background Writer" msgstr "Використання ресурсу / Фоновий запис" -#: utils/misc/guc.c:740 +#: utils/misc/guc.c:741 msgid "Resource Usage / Asynchronous Behavior" msgstr "Використання ресурсу / Асинхронна поведінка" -#: utils/misc/guc.c:742 +#: utils/misc/guc.c:743 msgid "Write-Ahead Log / Settings" msgstr "Журнал WAL / Параметри" -#: utils/misc/guc.c:744 +#: utils/misc/guc.c:745 msgid "Write-Ahead Log / Checkpoints" msgstr "Журнал WAL / Контрольні точки" -#: utils/misc/guc.c:746 +#: utils/misc/guc.c:747 msgid "Write-Ahead Log / Archiving" msgstr "Журнал WAL / Архівація" -#: utils/misc/guc.c:748 +#: utils/misc/guc.c:749 msgid "Write-Ahead Log / Archive Recovery" msgstr "Журнал WAL / Відновлення архіву" -#: utils/misc/guc.c:750 +#: utils/misc/guc.c:751 msgid "Write-Ahead Log / Recovery Target" msgstr "Журнал WAL / Мета відновлення" -#: utils/misc/guc.c:752 +#: utils/misc/guc.c:753 msgid "Replication / Sending Servers" msgstr "Реплікація / Надсилання серверів" -#: utils/misc/guc.c:754 +#: utils/misc/guc.c:755 msgid "Replication / Primary Server" msgstr "Реплікація / Основний сервер" -#: utils/misc/guc.c:756 +#: utils/misc/guc.c:757 msgid "Replication / Standby Servers" msgstr "Реплікація / Резервні сервера" -#: utils/misc/guc.c:758 +#: utils/misc/guc.c:759 msgid "Replication / Subscribers" msgstr "Реплікація / Підписники" -#: utils/misc/guc.c:760 +#: utils/misc/guc.c:761 msgid "Query Tuning / Planner Method Configuration" msgstr "Налаштування запитів / Конфігурація методів планувальника" -#: utils/misc/guc.c:762 +#: utils/misc/guc.c:763 msgid "Query Tuning / Planner Cost Constants" msgstr "Налаштування запитів / Константи вартості для планувальника" -#: utils/misc/guc.c:764 +#: utils/misc/guc.c:765 msgid "Query Tuning / Genetic Query Optimizer" msgstr "Налаштування запитів / Генетичний оптимізатор запитів" -#: utils/misc/guc.c:766 +#: utils/misc/guc.c:767 msgid "Query Tuning / Other Planner Options" msgstr "Налаштування запитів / Інші параметри планувальника" -#: utils/misc/guc.c:768 +#: utils/misc/guc.c:769 msgid "Reporting and Logging / Where to Log" msgstr "Звіти і журналювання / Куди записувати" -#: utils/misc/guc.c:770 +#: utils/misc/guc.c:771 msgid "Reporting and Logging / When to Log" msgstr "Звіти і журналювання / Коли записувати" -#: utils/misc/guc.c:772 +#: utils/misc/guc.c:773 msgid "Reporting and Logging / What to Log" msgstr "Звіти і журналювання / Що записувати" -#: utils/misc/guc.c:774 +#: utils/misc/guc.c:775 msgid "Reporting and Logging / Process Title" msgstr "Звітування і журналювання / Назва процесу" -#: utils/misc/guc.c:776 +#: utils/misc/guc.c:777 msgid "Statistics / Monitoring" msgstr "Статистика / Моніторинг" -#: utils/misc/guc.c:778 +#: utils/misc/guc.c:779 msgid "Statistics / Query and Index Statistics Collector" msgstr "Статистика / Збирач статистики по запитам і індексам" -#: utils/misc/guc.c:780 +#: utils/misc/guc.c:781 msgid "Autovacuum" msgstr "Автоочистка" -#: utils/misc/guc.c:782 +#: utils/misc/guc.c:783 msgid "Client Connection Defaults / Statement Behavior" msgstr "Параметри клієнтських сеансів за замовчуванням / Поведінка декларацій" -#: utils/misc/guc.c:784 +#: utils/misc/guc.c:785 msgid "Client Connection Defaults / Locale and Formatting" msgstr "Параметри клієнтських сеансів за замовчуванням / Локалізація і форматування" -#: utils/misc/guc.c:786 +#: utils/misc/guc.c:787 msgid "Client Connection Defaults / Shared Library Preloading" msgstr "Параметри клієнтських сеансів за замовчуванням / Попереднє завантаження спільних бібліотек" -#: utils/misc/guc.c:788 +#: utils/misc/guc.c:789 msgid "Client Connection Defaults / Other Defaults" msgstr "Параметри клієнтських сеансів за замовчуванням / Інші параметри за замовчуванням" -#: utils/misc/guc.c:790 +#: utils/misc/guc.c:791 msgid "Lock Management" msgstr "Керування блокуванням" -#: utils/misc/guc.c:792 +#: utils/misc/guc.c:793 msgid "Version and Platform Compatibility / Previous PostgreSQL Versions" msgstr "Сумісність версій і платформ / Попередні версії PostgreSQL" -#: utils/misc/guc.c:794 +#: utils/misc/guc.c:795 msgid "Version and Platform Compatibility / Other Platforms and Clients" msgstr "Сумісність версій і платформ / Інші платформи і клієнти" -#: utils/misc/guc.c:796 +#: utils/misc/guc.c:797 msgid "Error Handling" msgstr "Обробка помилок" -#: utils/misc/guc.c:798 +#: utils/misc/guc.c:799 msgid "Preset Options" msgstr "Визначені параметри" -#: utils/misc/guc.c:800 +#: utils/misc/guc.c:801 msgid "Customized Options" msgstr "Настроєні параметри" -#: utils/misc/guc.c:802 +#: utils/misc/guc.c:803 msgid "Developer Options" msgstr "Параметри для розробників" -#: utils/misc/guc.c:860 +#: utils/misc/guc.c:861 msgid "Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\"." msgstr "Припустимі одиниці для цього параметру: \"B\", \"kB\", \"MB\", \"GB\", і \"TB\"." -#: utils/misc/guc.c:897 +#: utils/misc/guc.c:898 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:959 +#: utils/misc/guc.c:960 msgid "Enables the planner's use of sequential-scan plans." msgstr "Дає змогу планувальнику використати плани послідовного сканування." -#: utils/misc/guc.c:969 +#: utils/misc/guc.c:970 msgid "Enables the planner's use of index-scan plans." msgstr "Дає змогу планувальнику використати плани сканування по індексу." -#: utils/misc/guc.c:979 +#: utils/misc/guc.c:980 msgid "Enables the planner's use of index-only-scan plans." msgstr "Дає змогу планувальнику використати плани сканування лише індекса." -#: utils/misc/guc.c:989 +#: utils/misc/guc.c:990 msgid "Enables the planner's use of bitmap-scan plans." msgstr "Дає змогу планувальнику використати плани сканування по точковому рисунку." -#: utils/misc/guc.c:999 +#: utils/misc/guc.c:1000 msgid "Enables the planner's use of TID scan plans." msgstr "Дає змогу планувальнику використати плани сканування TID." -#: utils/misc/guc.c:1009 +#: utils/misc/guc.c:1010 msgid "Enables the planner's use of explicit sort steps." msgstr "Дає змогу планувальнику використати кроки з явним сортуванням." -#: utils/misc/guc.c:1019 +#: utils/misc/guc.c:1020 msgid "Enables the planner's use of incremental sort steps." msgstr "Дає змогу планувальнику використати кроки інкрементного сортування." -#: utils/misc/guc.c:1028 +#: utils/misc/guc.c:1029 msgid "Enables the planner's use of hashed aggregation plans." msgstr "Дає змогу планувальнику використовувати плани агрегації по гешу." -#: utils/misc/guc.c:1038 +#: utils/misc/guc.c:1039 msgid "Enables the planner's use of materialization." msgstr "Дає змогу планувальнику використовувати матеріалізацію." -#: utils/misc/guc.c:1048 +#: utils/misc/guc.c:1049 msgid "Enables the planner's use of memoization." msgstr "Дає змогу планувальнику використовувати мемоїзацію." -#: utils/misc/guc.c:1058 +#: utils/misc/guc.c:1059 msgid "Enables the planner's use of nested-loop join plans." msgstr "Дає змогу планувальнику використовувати плани з'єднання з вкладеними циклами." -#: utils/misc/guc.c:1068 +#: utils/misc/guc.c:1069 msgid "Enables the planner's use of merge join plans." msgstr "Дає змогу планувальнику використовувати плани з'єднання об'єднанням." -#: utils/misc/guc.c:1078 +#: utils/misc/guc.c:1079 msgid "Enables the planner's use of hash join plans." msgstr "Дає змогу планувальнику використовувати плани з'єднання по гешу." -#: utils/misc/guc.c:1088 +#: utils/misc/guc.c:1089 msgid "Enables the planner's use of gather merge plans." msgstr "Дає змогу планувальнику використовувати плани збору об'єднанням." -#: utils/misc/guc.c:1098 +#: utils/misc/guc.c:1099 msgid "Enables partitionwise join." msgstr "Вмикає з'єднання з урахуванням секціонування." -#: utils/misc/guc.c:1108 +#: utils/misc/guc.c:1109 msgid "Enables partitionwise aggregation and grouping." msgstr "Вмикає агрегацію і групування з урахуванням секціонування." -#: utils/misc/guc.c:1118 +#: utils/misc/guc.c:1119 msgid "Enables the planner's use of parallel append plans." msgstr "Дає змогу планувальнику використовувати плани паралельного додавання." -#: utils/misc/guc.c:1128 +#: utils/misc/guc.c:1129 msgid "Enables the planner's use of parallel hash plans." msgstr "Дає змогу планувальнику використовувати плани паралельного з'єднання по гешу." -#: utils/misc/guc.c:1138 +#: utils/misc/guc.c:1139 msgid "Enables plan-time and execution-time partition pruning." msgstr "Активує видалення розділу під час планування і виконання." -#: utils/misc/guc.c:1139 +#: utils/misc/guc.c:1140 msgid "Allows the query planner and executor to compare partition bounds to conditions in the query to determine which partitions must be scanned." msgstr "Дозволяє планувальнику і виконавцю запитів порівнювати границі секцій з умовами в запиті і визначати які секції повинні бути відскановані." -#: utils/misc/guc.c:1150 +#: utils/misc/guc.c:1151 msgid "Enables the planner's use of async append plans." msgstr "Дає змогу планувальнику використовувати асинхронні плани додавання." -#: utils/misc/guc.c:1160 +#: utils/misc/guc.c:1161 msgid "Enables genetic query optimization." msgstr "Вмикає генетичну оптимізацію запитів." -#: utils/misc/guc.c:1161 +#: utils/misc/guc.c:1162 msgid "This algorithm attempts to do planning without exhaustive searching." msgstr "Цей алгоритм намагається побудувати план без повного перебору." -#: utils/misc/guc.c:1172 +#: utils/misc/guc.c:1173 msgid "Shows whether the current user is a superuser." msgstr "Показує, чи є поточний користувач суперкористувачем." -#: utils/misc/guc.c:1182 +#: utils/misc/guc.c:1183 msgid "Enables advertising the server via Bonjour." msgstr "Вмикає оголошення серверу через Bonjour." -#: utils/misc/guc.c:1191 +#: utils/misc/guc.c:1192 msgid "Collects transaction commit time." msgstr "Збирає час затвердження транзакцій." -#: utils/misc/guc.c:1200 +#: utils/misc/guc.c:1201 msgid "Enables SSL connections." msgstr "Вмикає SSL-підключення." -#: utils/misc/guc.c:1209 +#: utils/misc/guc.c:1210 msgid "Also use ssl_passphrase_command during server reload." msgstr "Також використовувати ssl_passphrase_command під час перезавантаження серверу." -#: utils/misc/guc.c:1218 +#: utils/misc/guc.c:1219 msgid "Give priority to server ciphersuite order." msgstr "Віддавати перевагу замовленню набору шрифтів сервера." -#: utils/misc/guc.c:1227 +#: utils/misc/guc.c:1228 msgid "Forces synchronization of updates to disk." msgstr "Примусова синхронізація оновлень на диск." -#: utils/misc/guc.c:1228 +#: utils/misc/guc.c:1229 msgid "The server will use the fsync() system call in several places to make sure that updates are physically written to disk. This ensures that a database cluster will recover to a consistent state after an operating system or hardware crash." msgstr "Сервер буде використовувати системний виклик fsync() в декількох місцях, щоб переконатися, що оновлення фізично записані на диск. Це гарантує, що кластер баз даних відновиться до узгодженого стану після аварійного завершення роботи операційної системи чи апаратного збою." -#: utils/misc/guc.c:1239 +#: utils/misc/guc.c:1240 msgid "Continues processing after a checksum failure." msgstr "Продовжує обробку після помилки контрольної суми." -#: utils/misc/guc.c:1240 +#: utils/misc/guc.c:1241 msgid "Detection of a checksum failure normally causes PostgreSQL to report an error, aborting the current transaction. Setting ignore_checksum_failure to true causes the system to ignore the failure (but still report a warning), and continue processing. This behavior could cause crashes or other serious problems. Only has an effect if checksums are enabled." msgstr "Виявляючи помилку контрольної суми, PostgreSQL звичайно повідомляє про помилку і перериває поточну транзакцію. Але якщо ignore_checksum_failure дорівнює true, система пропустить помилку (але видасть попередження) і продовжить обробку. Ця поведінка може бути причиною аварійних завершень роботи або інших серйозних проблем. Це має місце, лише якщо ввімкнен контроль цілосності сторінок." -#: utils/misc/guc.c:1254 +#: utils/misc/guc.c:1255 msgid "Continues processing past damaged page headers." msgstr "Продовжує обробку при пошкоджені заголовків сторінок." -#: utils/misc/guc.c:1255 +#: utils/misc/guc.c:1256 msgid "Detection of a damaged page header normally causes PostgreSQL to report an error, aborting the current transaction. Setting zero_damaged_pages to true causes the system to instead report a warning, zero out the damaged page, and continue processing. This behavior will destroy data, namely all the rows on the damaged page." msgstr "Виявляючи пошкоджений заголовок сторінки, PostgreSQL звичайно повідомляє про помилку, перериваючи поточну транзакцію. Але якщо zero_damaged_pages дорівнює true система видасть попередження, обнулить пошкоджену сторінку, і продовжить обробку. Ця поведінка знищить дані, а саме рядків в пошкодженій сторінці." -#: utils/misc/guc.c:1268 +#: utils/misc/guc.c:1269 msgid "Continues recovery after an invalid pages failure." msgstr "Продовжує відновлення після помилки неприпустимих сторінок." -#: utils/misc/guc.c:1269 +#: utils/misc/guc.c:1270 msgid "Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to true causes the system to ignore invalid page references in WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. Only has an effect during recovery or in standby mode." msgstr "Виявлення WAL записів, які мають посилання на неприпустимі сторінки під час відновлення, змушує PostgreSQL підняти помилку на рівень PANIC, перериваючи відновлення. Встановлення параметру ignore_invalid_pages на true змусить систему ігнорувати неприпустимі посилання на сторінки в WAL записах (але все ще буде повідомляти про попередження), і продовжити відновлення. Ця поведінка може викликати збої, втрату даних, розповсюдження або приховання пошкоджень, або інші серйозні проблеми. Діє лише під час відновлення або в режимі очікування." -#: utils/misc/guc.c:1287 +#: utils/misc/guc.c:1288 msgid "Writes full pages to WAL when first modified after a checkpoint." msgstr "Запис повних сторінок до WAL при першій зміні після контрольної точки." -#: utils/misc/guc.c:1288 +#: utils/misc/guc.c:1289 msgid "A page write in process during an operating system crash might be only partially written to disk. During recovery, the row changes stored in WAL are not enough to recover. This option writes pages when first modified after a checkpoint to WAL so full recovery is possible." msgstr "Сторінка, записувана під час аварійного завершення роботи операційної системи може бути записаною на диск частково. Під час відновлення, журналу змін рядків в WAL буде недостатньо для відновлення. Цей параметр записує повні сторінки після першої зміни після контрольної точки, тож відновлення можливе." -#: utils/misc/guc.c:1301 +#: utils/misc/guc.c:1302 msgid "Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modification." msgstr "Запис повних сторінок до WAL при першій зміні після контрольної точки, навіть при некритичних змінах." -#: utils/misc/guc.c:1311 +#: utils/misc/guc.c:1312 msgid "Compresses full-page writes written in WAL file." msgstr "Стискати дані під час запису повних сторінок до файлу WAL." -#: utils/misc/guc.c:1321 +#: utils/misc/guc.c:1322 msgid "Writes zeroes to new WAL files before first use." msgstr "Перед першим використанням записує нулі до нових файлів WAL." -#: utils/misc/guc.c:1331 +#: utils/misc/guc.c:1332 msgid "Recycles WAL files by renaming them." msgstr "Перезаписує файли WAL, перейменувавши їх." -#: utils/misc/guc.c:1341 +#: utils/misc/guc.c:1342 msgid "Logs each checkpoint." msgstr "Журналювати кожну контрольну точку." -#: utils/misc/guc.c:1350 +#: utils/misc/guc.c:1351 msgid "Logs each successful connection." msgstr "Журналювати кожне успішне підключення." -#: utils/misc/guc.c:1359 +#: utils/misc/guc.c:1360 msgid "Logs end of a session, including duration." msgstr "Журналювати кінець сеансу, зокрема тривалість." -#: utils/misc/guc.c:1368 +#: utils/misc/guc.c:1369 msgid "Logs each replication command." msgstr "Журналювати кожну команду реплікації." -#: utils/misc/guc.c:1377 +#: utils/misc/guc.c:1378 msgid "Shows whether the running server has assertion checks enabled." msgstr "Показує, чи активовані перевірки твердження на працюючому сервері." -#: utils/misc/guc.c:1392 +#: utils/misc/guc.c:1393 msgid "Terminate session on any error." msgstr "Припиняти сеанси при будь-якій помилці." -#: utils/misc/guc.c:1401 +#: utils/misc/guc.c:1402 msgid "Reinitialize server after backend crash." msgstr "Повторити ініціалізацію сервера, після внутрішнього аварійного завершення роботи." -#: utils/misc/guc.c:1410 +#: utils/misc/guc.c:1411 msgid "Remove temporary files after backend crash." msgstr "Видалити тимчасові файли після аварійного завершення роботи внутрішнього сервера." -#: utils/misc/guc.c:1421 +#: utils/misc/guc.c:1422 msgid "Logs the duration of each completed SQL statement." msgstr "Журналювати тривалість кожного виконаного SQL-оператора." -#: utils/misc/guc.c:1430 +#: utils/misc/guc.c:1431 msgid "Logs each query's parse tree." msgstr "Журналювати дерево аналізу для кожного запиту." -#: utils/misc/guc.c:1439 +#: utils/misc/guc.c:1440 msgid "Logs each query's rewritten parse tree." msgstr "Журналювати переписане дерево аналізу для кожного запиту." -#: utils/misc/guc.c:1448 +#: utils/misc/guc.c:1449 msgid "Logs each query's execution plan." msgstr "Журналювати план виконання кожного запиту." -#: utils/misc/guc.c:1457 +#: utils/misc/guc.c:1458 msgid "Indents parse and plan tree displays." msgstr "Відступи при відображенні дерев аналізу і плану запитів." -#: utils/misc/guc.c:1466 +#: utils/misc/guc.c:1467 msgid "Writes parser performance statistics to the server log." msgstr "Запис статистики продуктивності аналізу до запису сервера." -#: utils/misc/guc.c:1475 +#: utils/misc/guc.c:1476 msgid "Writes planner performance statistics to the server log." msgstr "Запис статистики продуктивності планувальника до запису сервера." -#: utils/misc/guc.c:1484 +#: utils/misc/guc.c:1485 msgid "Writes executor performance statistics to the server log." msgstr "Запис статистики продуктивності виконувача до запису сервера." -#: utils/misc/guc.c:1493 +#: utils/misc/guc.c:1494 msgid "Writes cumulative performance statistics to the server log." msgstr "Запис сукупної статистики продуктивності до запису сервера." -#: utils/misc/guc.c:1503 +#: utils/misc/guc.c:1504 msgid "Logs system resource usage statistics (memory and CPU) on various B-tree operations." msgstr "Журналювати статистику використання системних ресурсів (пам'яті і ЦП) при різноманітних операціях з B-tree." -#: utils/misc/guc.c:1515 +#: utils/misc/guc.c:1516 msgid "Collects information about executing commands." msgstr "Збирати інформацію про команди які виконуються." -#: utils/misc/guc.c:1516 +#: utils/misc/guc.c:1517 msgid "Enables the collection of information on the currently executing command of each session, along with the time at which that command began execution." msgstr "Активує збір інформації про поточні команди, які виконуються в кожному сеансі, разом з часом запуску команди." -#: utils/misc/guc.c:1526 +#: utils/misc/guc.c:1527 msgid "Collects statistics on database activity." msgstr "Збирати статистику про активність бази даних." -#: utils/misc/guc.c:1535 +#: utils/misc/guc.c:1536 msgid "Collects timing statistics for database I/O activity." msgstr "Збирати статистику за часом активності введення/виведення для бази даних." -#: utils/misc/guc.c:1544 +#: utils/misc/guc.c:1545 msgid "Collects timing statistics for WAL I/O activity." msgstr "Збирає статистику часу для активності вводу/виводу WAL." -#: utils/misc/guc.c:1554 +#: utils/misc/guc.c:1555 msgid "Updates the process title to show the active SQL command." msgstr "Оновлення виводить в заголовок процесу активну SQL-команду." -#: utils/misc/guc.c:1555 +#: utils/misc/guc.c:1556 msgid "Enables updating of the process title every time a new SQL command is received by the server." msgstr "Відображає в заголовку процеса кожну SQL-команду, отриману сервером." -#: utils/misc/guc.c:1568 +#: utils/misc/guc.c:1569 msgid "Starts the autovacuum subprocess." msgstr "Запускає підпроцес автоочистки." -#: utils/misc/guc.c:1578 +#: utils/misc/guc.c:1579 msgid "Generates debugging output for LISTEN and NOTIFY." msgstr "Генерує налагодженні повідомлення для LISTEN і NOTIFY." -#: utils/misc/guc.c:1590 +#: utils/misc/guc.c:1591 msgid "Emits information about lock usage." msgstr "Видає інформацію про блокування, які використовуються." -#: utils/misc/guc.c:1600 +#: utils/misc/guc.c:1601 msgid "Emits information about user lock usage." msgstr "Видає інформацію про користувацькі блокування, які використовуються." -#: utils/misc/guc.c:1610 +#: utils/misc/guc.c:1611 msgid "Emits information about lightweight lock usage." msgstr "Видає інформацію про спрощені блокування, які використовуються." -#: utils/misc/guc.c:1620 +#: utils/misc/guc.c:1621 msgid "Dumps information about all current locks when a deadlock timeout occurs." msgstr "Виводить інформацію про всі поточні блокування, при тайм-ауті взаємного блокування." -#: utils/misc/guc.c:1632 +#: utils/misc/guc.c:1633 msgid "Logs long lock waits." msgstr "Журналювати тривалі очікування в блокуваннях." -#: utils/misc/guc.c:1641 +#: utils/misc/guc.c:1642 msgid "Logs standby recovery conflict waits." msgstr "Журналює очікування конфлікту відновлення." -#: utils/misc/guc.c:1650 +#: utils/misc/guc.c:1651 msgid "Logs the host name in the connection logs." msgstr "Журналювати ім’я хоста до записів підключення." -#: utils/misc/guc.c:1651 +#: utils/misc/guc.c:1652 msgid "By default, connection logs only show the IP address of the connecting host. If you want them to show the host name you can turn this on, but depending on your host name resolution setup it might impose a non-negligible performance penalty." msgstr "За замовчуванням, записи підключень показують лише IP-адреси хостів, які підключилися. Якщо ви хочете бачити імена хостів ви можете ввімкнути цей параметр, але врахуйте, що це може значно вплинути на продуктивність." -#: utils/misc/guc.c:1662 +#: utils/misc/guc.c:1663 msgid "Treats \"expr=NULL\" as \"expr IS NULL\"." msgstr "Вважати \"expr=NULL\" як \"expr IS NULL\"." -#: utils/misc/guc.c:1663 +#: utils/misc/guc.c:1664 msgid "When turned on, expressions of the form expr = NULL (or NULL = expr) are treated as expr IS NULL, that is, they return true if expr evaluates to the null value, and false otherwise. The correct behavior of expr = NULL is to always return null (unknown)." msgstr "Коли цей параметр ввімкнений, вирази форми expr = NULL (або NULL = expr) вважаються як expr IS NULL, тобто, повертають true, якщо expr співпадає зі значенням null, і false в іншому разі. Правильна поведінка expr = NULL - завжди повертати null (невідомо)." -#: utils/misc/guc.c:1675 +#: utils/misc/guc.c:1676 msgid "Enables per-database user names." msgstr "Вмикає зв'язування імен користувачів з базами даних." -#: utils/misc/guc.c:1684 +#: utils/misc/guc.c:1685 msgid "Sets the default read-only status of new transactions." msgstr "Встановлює статус \"лише читання\" за замовчуванням для нових транзакцій." -#: utils/misc/guc.c:1694 +#: utils/misc/guc.c:1695 msgid "Sets the current transaction's read-only status." msgstr "Встановлює статус \"лише читання\" для поточної транзакції." -#: utils/misc/guc.c:1704 +#: utils/misc/guc.c:1705 msgid "Sets the default deferrable status of new transactions." msgstr "Встановлює статус відкладеного виконання за замовчуванням для нових транзакцій." -#: utils/misc/guc.c:1713 +#: utils/misc/guc.c:1714 msgid "Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures." msgstr "Визначає, чи відкладати серіалізовану транзакцію \"лише читання\" до моменту, коли збій серіалізації буде виключений." -#: utils/misc/guc.c:1723 +#: utils/misc/guc.c:1724 msgid "Enable row security." msgstr "Вмикає захист на рівні рядків." -#: utils/misc/guc.c:1724 +#: utils/misc/guc.c:1725 msgid "When enabled, row security will be applied to all users." msgstr "Коли ввімкнено, захист на рівні рядків буде застосовано до всіх користувачів." -#: utils/misc/guc.c:1732 +#: utils/misc/guc.c:1733 msgid "Check routine bodies during CREATE FUNCTION and CREATE PROCEDURE." msgstr "Перевірте тіла підпрограм під час CREATE FUNCTION і CREATE PROCEDURE." -#: utils/misc/guc.c:1741 +#: utils/misc/guc.c:1742 msgid "Enable input of NULL elements in arrays." msgstr "Дозволяє введення NULL елементів у масивах." -#: utils/misc/guc.c:1742 +#: utils/misc/guc.c:1743 msgid "When turned on, unquoted NULL in an array input value means a null value; otherwise it is taken literally." msgstr "Коли цей параметр ввімкнений, NULL без лапок при введенні до масиву сприймається як значення null; в іншому разі як рядок." -#: utils/misc/guc.c:1758 +#: utils/misc/guc.c:1759 msgid "WITH OIDS is no longer supported; this can only be false." msgstr "WITH OIDS більше не підтримується; це може бути помилковим." -#: utils/misc/guc.c:1768 -msgid "Start a subprocess to capture stderr output and/or csvlogs into log files." -msgstr "Запускає підпроцес записування виводу stderr і/або csvlogs до файлів журналу." +#: utils/misc/guc.c:1769 +msgid "Start a subprocess to capture stderr, csvlog and/or jsonlog into log files." +msgstr "Запускає підпроцес записування виводу stderr, csvlog і/або jsonlog до файлів журналу." -#: utils/misc/guc.c:1777 +#: utils/misc/guc.c:1778 msgid "Truncate existing log files of same name during log rotation." msgstr "Скорочувати існуючі файли журналу з тим самим іменем під час обертання журналу." -#: utils/misc/guc.c:1788 +#: utils/misc/guc.c:1789 msgid "Emit information about resource usage in sorting." msgstr "Виводити інформацію про використання ресурсу при сортуванні." -#: utils/misc/guc.c:1802 +#: utils/misc/guc.c:1803 msgid "Generate debugging output for synchronized scanning." msgstr "Створює налагодженні повідомлення для синхронного сканування." -#: utils/misc/guc.c:1817 +#: utils/misc/guc.c:1818 msgid "Enable bounded sorting using heap sort." msgstr "Вмикає обмежене сортування використовуючи динамічне сортування." -#: utils/misc/guc.c:1830 +#: utils/misc/guc.c:1831 msgid "Emit WAL-related debugging output." msgstr "Виводити налагодженні повідомлення пов'язані з WAL." -#: utils/misc/guc.c:1842 +#: utils/misc/guc.c:1843 msgid "Shows whether datetimes are integer based." msgstr "Показує, чи базуються дати на цілих числах." -#: utils/misc/guc.c:1853 +#: utils/misc/guc.c:1854 msgid "Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive." msgstr "Встановлює обробку без урахування регістру імен користувачів Kerberos і GSSAPI." -#: utils/misc/guc.c:1863 +#: utils/misc/guc.c:1864 msgid "Warn about backslash escapes in ordinary string literals." msgstr "Попередження про спецсимволи \"\\\" в звичайних рядках." -#: utils/misc/guc.c:1873 +#: utils/misc/guc.c:1874 msgid "Causes '...' strings to treat backslashes literally." msgstr "Вмикає буквальну обробку символів \"\\\" в рядках '...'." -#: utils/misc/guc.c:1884 +#: utils/misc/guc.c:1885 msgid "Enable synchronized sequential scans." msgstr "Вмикає синхронізацію послідовного сканування." -#: utils/misc/guc.c:1894 +#: utils/misc/guc.c:1895 msgid "Sets whether to include or exclude transaction with recovery target." msgstr "Встановлює, включати чи виключати транзакції з метою відновлення." -#: utils/misc/guc.c:1904 +#: utils/misc/guc.c:1905 msgid "Allows connections and queries during recovery." msgstr "Дозволяє підключення і запити під час відновлення." -#: utils/misc/guc.c:1914 +#: utils/misc/guc.c:1915 msgid "Allows feedback from a hot standby to the primary that will avoid query conflicts." msgstr "Дозволяє зворотній зв'язок серверу hot standby з основним для уникнення конфліктів запитів." -#: utils/misc/guc.c:1924 +#: utils/misc/guc.c:1925 msgid "Shows whether hot standby is currently active." msgstr "Показує, чи hot standby наразі активний." -#: utils/misc/guc.c:1935 +#: utils/misc/guc.c:1936 msgid "Allows modifications of the structure of system tables." msgstr "Дозволяє модифікації структури системних таблиць." -#: utils/misc/guc.c:1946 +#: utils/misc/guc.c:1947 msgid "Disables reading from system indexes." msgstr "Вимикає читання з системних індексів." -#: utils/misc/guc.c:1947 +#: utils/misc/guc.c:1948 msgid "It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness." msgstr "Це не забороняє оновлення індексів, тож дана поведінка безпечна. Найгірший наслідок це сповільнення." -#: utils/misc/guc.c:1958 +#: utils/misc/guc.c:1959 msgid "Allows tablespaces directly inside pg_tblspc, for testing." msgstr "Дозволяє табличні простори безпосередньо всередині pg_tblspc, для тестування." -#: utils/misc/guc.c:1969 +#: utils/misc/guc.c:1970 msgid "Enables backward compatibility mode for privilege checks on large objects." msgstr "Вмикає режим зворотньої сумісності при перевірці прав для великих об'єктів." -#: utils/misc/guc.c:1970 +#: utils/misc/guc.c:1971 msgid "Skips privilege checks when reading or modifying large objects, for compatibility with PostgreSQL releases prior to 9.0." msgstr "Пропускає перевірки прав при читанні або зміненні великих об'єктів, для сумісності з версіями PostgreSQL до 9.0." -#: utils/misc/guc.c:1980 +#: utils/misc/guc.c:1981 msgid "When generating SQL fragments, quote all identifiers." msgstr "Генеруючи SQL-фрагменти, включати всі ідентифікатори в лапки." -#: utils/misc/guc.c:1990 +#: utils/misc/guc.c:1991 msgid "Shows whether data checksums are turned on for this cluster." msgstr "Показує, чи ввімкнена контрольна сума даних для цього кластеру." -#: utils/misc/guc.c:2001 +#: utils/misc/guc.c:2002 msgid "Add sequence number to syslog messages to avoid duplicate suppression." msgstr "Додає послідовне число до повідомлень syslog, щоб уникнути ігнорування дублікатів." -#: utils/misc/guc.c:2011 +#: utils/misc/guc.c:2012 msgid "Split messages sent to syslog by lines and to fit into 1024 bytes." msgstr "Розділяє повідомлення, які передаються в syslog, рядками розміром не більше 1024 байт." -#: utils/misc/guc.c:2021 +#: utils/misc/guc.c:2022 msgid "Controls whether Gather and Gather Merge also run subplans." msgstr "Визначає, чи вузли зібрання і зібрання об'єднанням також виконають підплани." -#: utils/misc/guc.c:2022 +#: utils/misc/guc.c:2023 msgid "Should gather nodes also run subplans or just gather tuples?" msgstr "Чи повинні вузли збірки також виконувати підплани або тільки збирати кортежі?" -#: utils/misc/guc.c:2032 +#: utils/misc/guc.c:2033 msgid "Allow JIT compilation." msgstr "Дозволити JIT-компіляцію." -#: utils/misc/guc.c:2043 +#: utils/misc/guc.c:2044 msgid "Register JIT-compiled functions with debugger." msgstr "Зареєструйте функції JIT-compiled за допомогою налагоджувача." -#: utils/misc/guc.c:2060 +#: utils/misc/guc.c:2061 msgid "Write out LLVM bitcode to facilitate JIT debugging." msgstr "Виводити бітовий код LLVM для полегшення налагодження JIT." -#: utils/misc/guc.c:2071 +#: utils/misc/guc.c:2072 msgid "Allow JIT compilation of expressions." msgstr "Дозволити JIT-компіляцію виразів." -#: utils/misc/guc.c:2082 +#: utils/misc/guc.c:2083 msgid "Register JIT-compiled functions with perf profiler." msgstr "Зареєструйте функції JIT-compiled за допомогою профілювальника perf." -#: utils/misc/guc.c:2099 +#: utils/misc/guc.c:2100 msgid "Allow JIT compilation of tuple deforming." msgstr "Дозволити JIT-компіляцію перетворення кортежів." -#: utils/misc/guc.c:2110 +#: utils/misc/guc.c:2111 msgid "Whether to continue running after a failure to sync data files." msgstr "Чи продовжувати виконання після помилки синхронізації файлів даних на диску." -#: utils/misc/guc.c:2119 +#: utils/misc/guc.c:2120 msgid "Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured." msgstr "Встановлює чи повинен одержувач WAL створити тимчасовий слот реплікації, якщо постійний слот не налаштований." -#: utils/misc/guc.c:2137 +#: utils/misc/guc.c:2138 msgid "Forces a switch to the next WAL file if a new file has not been started within N seconds." msgstr "Примусово переключитися на наступний файл WAL, якщо новий файл не був розпочат за N секунд." -#: utils/misc/guc.c:2148 +#: utils/misc/guc.c:2149 msgid "Waits N seconds on connection startup after authentication." msgstr "Чекати N секунд при підключенні після автентифікації." -#: utils/misc/guc.c:2149 utils/misc/guc.c:2747 +#: utils/misc/guc.c:2150 utils/misc/guc.c:2748 msgid "This allows attaching a debugger to the process." msgstr "Це дозволяє підключити налагоджувач до процесу." -#: utils/misc/guc.c:2158 +#: utils/misc/guc.c:2159 msgid "Sets the default statistics target." msgstr "Встановлює мету статистики за замовчуванням." -#: utils/misc/guc.c:2159 +#: utils/misc/guc.c:2160 msgid "This applies to table columns that have not had a column-specific target set via ALTER TABLE SET STATISTICS." msgstr "Це застосовується до стовпців таблиці, для котрих мета статистики не встановлена явно через ALTER TABLE SET STATISTICS." -#: utils/misc/guc.c:2168 +#: utils/misc/guc.c:2169 msgid "Sets the FROM-list size beyond which subqueries are not collapsed." msgstr "Встановлює розмір для списку FROM, при перевищені котрого вкладені запити не згортаються." -#: utils/misc/guc.c:2170 +#: utils/misc/guc.c:2171 msgid "The planner will merge subqueries into upper queries if the resulting FROM list would have no more than this many items." msgstr "Планувальник об'єднає вкладені запити з зовнішніми, якщо в отриманому списку FROM буде не більше заданої кількості елементів." -#: utils/misc/guc.c:2181 +#: utils/misc/guc.c:2182 msgid "Sets the FROM-list size beyond which JOIN constructs are not flattened." msgstr "Встановлює розмір для списку FROM, при перевищенні котрого конструкції JOIN не подаються у вигляді рядка." -#: utils/misc/guc.c:2183 +#: utils/misc/guc.c:2184 msgid "The planner will flatten explicit JOIN constructs into lists of FROM items whenever a list of no more than this many items would result." msgstr "Планувальник буде подавати у вигляді рядка явні конструкції JOIN в списки FROM, допоки в отриманому списку не більше заданої кількості елементів." -#: utils/misc/guc.c:2194 +#: utils/misc/guc.c:2195 msgid "Sets the threshold of FROM items beyond which GEQO is used." msgstr "Встановлює граничне значення для елементів FROM, при перевищенні котрого використовується GEQO." -#: utils/misc/guc.c:2204 +#: utils/misc/guc.c:2205 msgid "GEQO: effort is used to set the default for other GEQO parameters." msgstr "GEQO: зусилля використовувались щоб встановити значення за замовчуванням для інших параметрів GEQO." -#: utils/misc/guc.c:2214 +#: utils/misc/guc.c:2215 msgid "GEQO: number of individuals in the population." msgstr "GEQO: кількість користувачів у популяції." -#: utils/misc/guc.c:2215 utils/misc/guc.c:2225 +#: utils/misc/guc.c:2216 utils/misc/guc.c:2226 msgid "Zero selects a suitable default value." msgstr "Нуль вибирає придатне значення за замовчуванням." -#: utils/misc/guc.c:2224 +#: utils/misc/guc.c:2225 msgid "GEQO: number of iterations of the algorithm." msgstr "GEQO: кількість ітерацій в алгоритмі." -#: utils/misc/guc.c:2236 +#: utils/misc/guc.c:2237 msgid "Sets the time to wait on a lock before checking for deadlock." msgstr "Встановлює час очікування в блокуванні до перевірки на взаємне блокування." -#: utils/misc/guc.c:2247 +#: utils/misc/guc.c:2248 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data." msgstr "Встановлює максимальну затримку до скасування запитів, коли hot standby сервер обробляє архівні дані WAL." -#: utils/misc/guc.c:2258 +#: utils/misc/guc.c:2259 msgid "Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data." msgstr "Встановлює максимальну затримку до скасування запитів, коли hot standby сервер обробляє дані WAL з потоку." -#: utils/misc/guc.c:2269 +#: utils/misc/guc.c:2270 msgid "Sets the minimum delay for applying changes during recovery." msgstr "Встановлює мінімальну затримку для застосування змін під час відновлення." -#: utils/misc/guc.c:2280 +#: utils/misc/guc.c:2281 msgid "Sets the maximum interval between WAL receiver status reports to the sending server." msgstr "Встановлює максимальний інтервал між звітами про стан одержувачів WAL для серверу надсилання." -#: utils/misc/guc.c:2291 +#: utils/misc/guc.c:2292 msgid "Sets the maximum wait time to receive data from the sending server." msgstr "Встановлює максимальний час очікування для отримання даних з серверу надсилання." -#: utils/misc/guc.c:2302 +#: utils/misc/guc.c:2303 msgid "Sets the maximum number of concurrent connections." msgstr "Встановлює максимальну кілкість паралельних підключень." -#: utils/misc/guc.c:2313 +#: utils/misc/guc.c:2314 msgid "Sets the number of connection slots reserved for superusers." msgstr "Встановлює кількість зарезервованих слотів підключень для суперкористувачів." -#: utils/misc/guc.c:2323 +#: utils/misc/guc.c:2324 msgid "Amount of dynamic shared memory reserved at startup." msgstr "Кількість динамічної спільної пам'яті, зарезервованої під час запуску." -#: utils/misc/guc.c:2338 +#: utils/misc/guc.c:2339 msgid "Sets the number of shared memory buffers used by the server." msgstr "Встановлює кількість буферів спільної пам'яті, використовуваних сервером." -#: utils/misc/guc.c:2349 +#: utils/misc/guc.c:2350 msgid "Sets the maximum number of temporary buffers used by each session." msgstr "Встановлює максимальну кількість використовуваних тимчасових буферів, для кожного сеансу." -#: utils/misc/guc.c:2360 +#: utils/misc/guc.c:2361 msgid "Sets the TCP port the server listens on." msgstr "Встановлює TCP-порт для роботи серверу." -#: utils/misc/guc.c:2370 +#: utils/misc/guc.c:2371 msgid "Sets the access permissions of the Unix-domain socket." msgstr "Встановлює дозволи на доступ для Unix-сокету." -#: utils/misc/guc.c:2371 +#: utils/misc/guc.c:2372 msgid "Unix-domain sockets use the usual Unix file system permission set. The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Для Unix-сокетів використовується звичний набір дозволів, як у файлових системах Unix. Очікується, що значення параметра вказується у формі, яка прийнята для системних викликів chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" -#: utils/misc/guc.c:2385 +#: utils/misc/guc.c:2386 msgid "Sets the file permissions for log files." msgstr "Встановлює права дозволу для файлів журналу." -#: utils/misc/guc.c:2386 +#: utils/misc/guc.c:2387 msgid "The parameter value is expected to be a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Очікується, що значення параметру буде вказано в числовому форматі, який сприймається системними викликами chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" -#: utils/misc/guc.c:2400 +#: utils/misc/guc.c:2401 msgid "Shows the mode of the data directory." msgstr "Показує режим каталогу даних." -#: utils/misc/guc.c:2401 +#: utils/misc/guc.c:2402 msgid "The parameter value is a numeric mode specification in the form accepted by the chmod and umask system calls. (To use the customary octal format the number must start with a 0 (zero).)" msgstr "Значення параметру вказується в числовому форматі, який сприймається системними викликами chmod і umask. (Щоб використати звичний вісімковий формат, додайте в початок 0 (нуль).)" -#: utils/misc/guc.c:2414 +#: utils/misc/guc.c:2415 msgid "Sets the maximum memory to be used for query workspaces." msgstr "Встановлює максимальний об'єм пам'яті для робочих просторів запитів." -#: utils/misc/guc.c:2415 +#: utils/misc/guc.c:2416 msgid "This much memory can be used by each internal sort operation and hash table before switching to temporary disk files." msgstr "Такий об'єм пам'яті може використовуватись кожною внутрішньою операцією сортування і таблицею гешування до переключення на тимчасові файли на диску." -#: utils/misc/guc.c:2427 +#: utils/misc/guc.c:2428 msgid "Sets the maximum memory to be used for maintenance operations." msgstr "Встановлює максимальний об'єм пам'яті для операцій по обслуговуванню." -#: utils/misc/guc.c:2428 +#: utils/misc/guc.c:2429 msgid "This includes operations such as VACUUM and CREATE INDEX." msgstr "Це включає такі операції як VACUUM і CREATE INDEX." -#: utils/misc/guc.c:2438 +#: utils/misc/guc.c:2439 msgid "Sets the maximum memory to be used for logical decoding." msgstr "Встановлює максимальний об'єм пам'яті для логічного декодування." -#: utils/misc/guc.c:2439 +#: utils/misc/guc.c:2440 msgid "This much memory can be used by each internal reorder buffer before spilling to disk." msgstr "Ця велика кількість пам'яті може бути використана кожним внутрішнім перевпорядковуючим буфером перед записом на диск." -#: utils/misc/guc.c:2455 +#: utils/misc/guc.c:2456 msgid "Sets the maximum stack depth, in kilobytes." msgstr "Встановлює максимальну глибину стека, в КБ." -#: utils/misc/guc.c:2466 +#: utils/misc/guc.c:2467 msgid "Limits the total size of all temporary files used by each process." msgstr "Обмежує загальний розмір всіх тимчасових файлів, які використовуються кожним процесом." -#: utils/misc/guc.c:2467 +#: utils/misc/guc.c:2468 msgid "-1 means no limit." msgstr "-1 вимикає обмеження." -#: utils/misc/guc.c:2477 +#: utils/misc/guc.c:2478 msgid "Vacuum cost for a page found in the buffer cache." msgstr "Вартість очистки для сторінки, яка була знайдена в буферному кеші." -#: utils/misc/guc.c:2487 +#: utils/misc/guc.c:2488 msgid "Vacuum cost for a page not found in the buffer cache." msgstr "Вартість очистки для сторінки, яка не була знайдена в буферному кеші." -#: utils/misc/guc.c:2497 +#: utils/misc/guc.c:2498 msgid "Vacuum cost for a page dirtied by vacuum." msgstr "Вартість очистки для сторінки, яка не була \"брудною\"." -#: utils/misc/guc.c:2507 +#: utils/misc/guc.c:2508 msgid "Vacuum cost amount available before napping." msgstr "Кількість доступних витрат вакууму перед від'єднанням." -#: utils/misc/guc.c:2517 +#: utils/misc/guc.c:2518 msgid "Vacuum cost amount available before napping, for autovacuum." msgstr "Кількість доступних витрат вакууму перед від'єднанням, для автовакууму." -#: utils/misc/guc.c:2527 +#: utils/misc/guc.c:2528 msgid "Sets the maximum number of simultaneously open files for each server process." msgstr "Встановлює максимальну кількість одночасно відкритих файлів для кожного процесу." -#: utils/misc/guc.c:2540 +#: utils/misc/guc.c:2541 msgid "Sets the maximum number of simultaneously prepared transactions." msgstr "Встановлює максимальну кількість одночасно підготовлених транзакцій." -#: utils/misc/guc.c:2551 +#: utils/misc/guc.c:2552 msgid "Sets the minimum OID of tables for tracking locks." msgstr "Встановлює мінімальний OID таблиць, для яких відстежуються блокування." -#: utils/misc/guc.c:2552 +#: utils/misc/guc.c:2553 msgid "Is used to avoid output on system tables." msgstr "Використовується для уникнення системних таблиць." -#: utils/misc/guc.c:2561 +#: utils/misc/guc.c:2562 msgid "Sets the OID of the table with unconditionally lock tracing." msgstr "Встановлює OID таблиці для безумовного трасування блокувань." -#: utils/misc/guc.c:2573 +#: utils/misc/guc.c:2574 msgid "Sets the maximum allowed duration of any statement." msgstr "Встановлює максимальну тривалість для будь-якого оператору." -#: utils/misc/guc.c:2574 utils/misc/guc.c:2585 utils/misc/guc.c:2596 -#: utils/misc/guc.c:2607 +#: utils/misc/guc.c:2575 utils/misc/guc.c:2586 utils/misc/guc.c:2597 +#: utils/misc/guc.c:2608 msgid "A value of 0 turns off the timeout." msgstr "Значення 0 (нуль) вимикає тайм-аут." -#: utils/misc/guc.c:2584 +#: utils/misc/guc.c:2585 msgid "Sets the maximum allowed duration of any wait for a lock." msgstr "Встановлює максимально дозволену тривалість очікування блокувань." -#: utils/misc/guc.c:2595 +#: utils/misc/guc.c:2596 msgid "Sets the maximum allowed idle time between queries, when in a transaction." msgstr "Встановлює максимально дозволений час очікування між запитами під час транзакції." -#: utils/misc/guc.c:2606 +#: utils/misc/guc.c:2607 msgid "Sets the maximum allowed idle time between queries, when not in a transaction." msgstr "Встановлює максимально дозволений час очікування між запитами поза транзакцією." -#: utils/misc/guc.c:2617 +#: utils/misc/guc.c:2618 msgid "Minimum age at which VACUUM should freeze a table row." msgstr "Мінімальний вік рядків таблиці, при котрому VACUUM зможе їх закріпити." -#: utils/misc/guc.c:2627 +#: utils/misc/guc.c:2628 msgid "Age at which VACUUM should scan whole table to freeze tuples." msgstr "Вік, при котрому VACUUM повинен сканувати всю таблицю, щоб закріпити кортежі." -#: utils/misc/guc.c:2637 +#: utils/misc/guc.c:2638 msgid "Minimum age at which VACUUM should freeze a MultiXactId in a table row." msgstr "Мінімальний вік, при котрому VACUUM повинен закріпити MultiXactId в рядку таблиці." -#: utils/misc/guc.c:2647 +#: utils/misc/guc.c:2648 msgid "Multixact age at which VACUUM should scan whole table to freeze tuples." msgstr "Вік Multixact, при котрому VACUUM повинен сканувати всю таблицю, щоб закріпити кортежі." -#: utils/misc/guc.c:2657 +#: utils/misc/guc.c:2658 msgid "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any." msgstr "Визначає, кількість транзакцій які потрібно буде відкласти, виконуючи VACUUM і HOT очищення." -#: utils/misc/guc.c:2666 +#: utils/misc/guc.c:2667 msgid "Age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Вік, у якому VACUUM повинен спрацювати безпечно, щоб уникнути зациклення." -#: utils/misc/guc.c:2675 +#: utils/misc/guc.c:2676 msgid "Multixact age at which VACUUM should trigger failsafe to avoid a wraparound outage." msgstr "Вік Multixact, у якому VACUUM повинен спрацювати безпечно, щоб уникнути зациклення." -#: utils/misc/guc.c:2688 +#: utils/misc/guc.c:2689 msgid "Sets the maximum number of locks per transaction." msgstr "Встановлює максимальну кілкість блокувань на транзакцію." -#: utils/misc/guc.c:2689 +#: utils/misc/guc.c:2690 msgid "The shared lock table is sized on the assumption that at most max_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Розмір спільної таблиці блокувань вибирається з припущення, що в один момент часу буде потрібно заблокувати не більше ніж max_locks_per_transaction * max_connections різних об'єктів." -#: utils/misc/guc.c:2700 +#: utils/misc/guc.c:2701 msgid "Sets the maximum number of predicate locks per transaction." msgstr "Встановлює максимальну кількість предикатних блокувань на транзакцію." -#: utils/misc/guc.c:2701 +#: utils/misc/guc.c:2702 msgid "The shared predicate lock table is sized on the assumption that at most max_pred_locks_per_transaction * max_connections distinct objects will need to be locked at any one time." msgstr "Розмір спільної таблиці предикатних блокувань вибирається з припущення, що в один момент часу буде потрібно заблокувати не більше ніж max_locks_per_transaction * max_connections різних об'єктів." -#: utils/misc/guc.c:2712 +#: utils/misc/guc.c:2713 msgid "Sets the maximum number of predicate-locked pages and tuples per relation." msgstr "Встановлює максимальну кількість сторінок і кортежів, блокованих предикатними блокуваннями в одному відношенні." -#: utils/misc/guc.c:2713 +#: utils/misc/guc.c:2714 msgid "If more than this total of pages and tuples in the same relation are locked by a connection, those locks are replaced by a relation-level lock." msgstr "Якщо одним підключенням блокується більше цієї загальної кількості сторінок і кортежів, ці блокування замінюються блокуванням на рівні відношення." -#: utils/misc/guc.c:2723 +#: utils/misc/guc.c:2724 msgid "Sets the maximum number of predicate-locked tuples per page." msgstr "Встановлює максимальну кількість кортежів, блокованих предикатними блокуваннями в одній сторінці." -#: utils/misc/guc.c:2724 +#: utils/misc/guc.c:2725 msgid "If more than this number of tuples on the same page are locked by a connection, those locks are replaced by a page-level lock." msgstr "Якщо одним підключенням блокується більше цієї кількості кортежів на одній і тій же сторінці, ці блокування замінюються блокуванням на рівні сторінки." -#: utils/misc/guc.c:2734 +#: utils/misc/guc.c:2735 msgid "Sets the maximum allowed time to complete client authentication." msgstr "Встановлює максимально допустимий час, за котрий клієнт повинен завершити автентифікацію." -#: utils/misc/guc.c:2746 +#: utils/misc/guc.c:2747 msgid "Waits N seconds on connection startup before authentication." msgstr "Чекати N секунд при підключенні до автентифікації." -#: utils/misc/guc.c:2757 +#: utils/misc/guc.c:2758 msgid "Sets the size of WAL files held for standby servers." msgstr "Встановлює розмір WAL файлів, які потрібно зберігати для резервних серверів." -#: utils/misc/guc.c:2768 +#: utils/misc/guc.c:2769 msgid "Sets the minimum size to shrink the WAL to." msgstr "Встановлює мінімальний розмір WAL при стисканні." -#: utils/misc/guc.c:2780 +#: utils/misc/guc.c:2781 msgid "Sets the WAL size that triggers a checkpoint." msgstr "Встановлює розмір WAL, при котрому ініціюється контрольна точка." -#: utils/misc/guc.c:2792 +#: utils/misc/guc.c:2793 msgid "Sets the maximum time between automatic WAL checkpoints." msgstr "Встановлює максимальний час між автоматичними контрольними точками WAL." -#: utils/misc/guc.c:2803 +#: utils/misc/guc.c:2804 msgid "Enables warnings if checkpoint segments are filled more frequently than this." msgstr "Видає попередження, якщо сегменти контрольних точок заповнуються частіше." -#: utils/misc/guc.c:2805 +#: utils/misc/guc.c:2806 msgid "Write a message to the server log if checkpoints caused by the filling of checkpoint segment files happens more frequently than this number of seconds. Zero turns off the warning." msgstr "Записує в запис серверу повідомлення, якщо контрольні точки, викликані переповненням файлів сегментів контрольних точок, з'являються частіше. 0 (нуль) вимикає попередження." -#: utils/misc/guc.c:2817 utils/misc/guc.c:3033 utils/misc/guc.c:3080 +#: utils/misc/guc.c:2818 utils/misc/guc.c:3034 utils/misc/guc.c:3081 msgid "Number of pages after which previously performed writes are flushed to disk." msgstr "Число сторінок, після досягнення якого раніше виконані операції запису скидаються на диск." -#: utils/misc/guc.c:2828 +#: utils/misc/guc.c:2829 msgid "Sets the number of disk-page buffers in shared memory for WAL." msgstr "Встановлює кількість буферів дискових сторінок в спільній пам'яті для WAL." -#: utils/misc/guc.c:2839 +#: utils/misc/guc.c:2840 msgid "Time between WAL flushes performed in the WAL writer." msgstr "Час між скиданням WAL в процесі, записуючого WAL." -#: utils/misc/guc.c:2850 +#: utils/misc/guc.c:2851 msgid "Amount of WAL written out by WAL writer that triggers a flush." msgstr "Обсяг WAL, оброблений пишучим WAL процесом, при котрому ініціюється скидання журналу на диск." -#: utils/misc/guc.c:2861 +#: utils/misc/guc.c:2862 msgid "Minimum size of new file to fsync instead of writing WAL." msgstr "Мінімальний розмір нового файлу для fsync замість записування WAL." -#: utils/misc/guc.c:2872 +#: utils/misc/guc.c:2873 msgid "Sets the maximum number of simultaneously running WAL sender processes." msgstr "Встановлює максимальну кількість одночасно працюючих процесів передачі WAL." -#: utils/misc/guc.c:2883 +#: utils/misc/guc.c:2884 msgid "Sets the maximum number of simultaneously defined replication slots." msgstr "Встановлює максимальну кількість одночасно визначених слотів реплікації." -#: utils/misc/guc.c:2893 +#: utils/misc/guc.c:2894 msgid "Sets the maximum WAL size that can be reserved by replication slots." msgstr "Встановлює максимальний розмір WAL, який може бути зарезервований слотами реплікації." -#: utils/misc/guc.c:2894 +#: utils/misc/guc.c:2895 msgid "Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk." msgstr "Слоти реплікації будуть позначені як невдалі, і розблоковані сегменти для видалення або переробки, якщо цю кількість місця на диску займає WAL." -#: utils/misc/guc.c:2906 +#: utils/misc/guc.c:2907 msgid "Sets the maximum time to wait for WAL replication." msgstr "Встановлює максимальний час очікування реплікації WAL." -#: utils/misc/guc.c:2917 +#: utils/misc/guc.c:2918 msgid "Sets the delay in microseconds between transaction commit and flushing WAL to disk." msgstr "Встановлює затримку в мілісекундах між затвердженням транзакцій і скиданням WAL на диск." -#: utils/misc/guc.c:2929 +#: utils/misc/guc.c:2930 msgid "Sets the minimum concurrent open transactions before performing commit_delay." msgstr "Встановлює мінімальну кількість одночасно відкритих транзакцій до виконання commit_delay." -#: utils/misc/guc.c:2940 +#: utils/misc/guc.c:2941 msgid "Sets the number of digits displayed for floating-point values." msgstr "Встановлює кількість виведених чисел для значень з плаваючою точкою." -#: utils/misc/guc.c:2941 +#: utils/misc/guc.c:2942 msgid "This affects real, double precision, and geometric data types. A zero or negative parameter value is added to the standard number of digits (FLT_DIG or DBL_DIG as appropriate). Any value greater than zero selects precise output mode." msgstr "Це впливає на типи реальних, подвійної точності та геометричних даних. Нульове або від'ємне значення параметру додається до стандартної кількості цифр (FLT_DIG або DBL_DIG у відповідних випадках). Будь-яке значення більше нуля, обирає точний режим виводу." -#: utils/misc/guc.c:2953 +#: utils/misc/guc.c:2954 msgid "Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate." msgstr "Встановлює мінімальний час виконання, понад якого вибірка тверджень буде записуватись. Вибірка визначається log_statement_sample_rate." -#: utils/misc/guc.c:2956 +#: utils/misc/guc.c:2957 msgid "Zero logs a sample of all queries. -1 turns this feature off." msgstr "При 0 (нуль) фіксує зразок всіх запитів. -1 вимикає цю функцію." -#: utils/misc/guc.c:2966 +#: utils/misc/guc.c:2967 msgid "Sets the minimum execution time above which all statements will be logged." msgstr "Встановлює мінімальний час виконання, понад якого всі твердження будуть записуватись." -#: utils/misc/guc.c:2968 +#: utils/misc/guc.c:2969 msgid "Zero prints all queries. -1 turns this feature off." msgstr "При 0 (нуль) протоколюються всі запити. -1 вимикає цю функцію." -#: utils/misc/guc.c:2978 +#: utils/misc/guc.c:2979 msgid "Sets the minimum execution time above which autovacuum actions will be logged." msgstr "Встановлює мінімальний час виконання автоочистки, при перевищенні котрого ця дія фіксується в протоколі." -#: utils/misc/guc.c:2980 +#: utils/misc/guc.c:2981 msgid "Zero prints all actions. -1 turns autovacuum logging off." msgstr "При 0 (нуль) протоколюються всі дії автоочистки. -1 вимикає журналювання автоочистки." -#: utils/misc/guc.c:2990 +#: utils/misc/guc.c:2991 msgid "When logging statements, limit logged parameter values to first N bytes." msgstr "Під час журналювання тверджень, обмежте записуваних параметрів до перших N байт." -#: utils/misc/guc.c:2991 utils/misc/guc.c:3002 +#: utils/misc/guc.c:2992 utils/misc/guc.c:3003 msgid "-1 to print values in full." msgstr "-1 для друку значень в повному вигляді." -#: utils/misc/guc.c:3001 +#: utils/misc/guc.c:3002 msgid "When reporting an error, limit logged parameter values to first N bytes." msgstr "Під час звітування про помилку, обмежте значення записуваних параметрів до перших N байт." -#: utils/misc/guc.c:3012 +#: utils/misc/guc.c:3013 msgid "Background writer sleep time between rounds." msgstr "Час призупинення в процесі фонового запису між підходами." -#: utils/misc/guc.c:3023 +#: utils/misc/guc.c:3024 msgid "Background writer maximum number of LRU pages to flush per round." msgstr "Максимальна кількість LRU-сторінок, які скидаються за один підхід, в процесі фонового запису." -#: utils/misc/guc.c:3046 +#: utils/misc/guc.c:3047 msgid "Number of simultaneous requests that can be handled efficiently by the disk subsystem." msgstr "Кількість одночасних запитів, які можуть бути ефективно оброблені дисковою підсистемою." -#: utils/misc/guc.c:3064 +#: utils/misc/guc.c:3065 msgid "A variant of effective_io_concurrency that is used for maintenance work." msgstr "Варіант effective_io_concurrency, що використовується для роботи з обслуговування." -#: utils/misc/guc.c:3093 +#: utils/misc/guc.c:3094 msgid "Maximum number of concurrent worker processes." msgstr "Максимальна кількість одночасно працюючих процесів." -#: utils/misc/guc.c:3105 +#: utils/misc/guc.c:3106 msgid "Maximum number of logical replication worker processes." msgstr "Максимальна кількість працюючих процесів логічної реплікації." -#: utils/misc/guc.c:3117 +#: utils/misc/guc.c:3118 msgid "Maximum number of table synchronization workers per subscription." msgstr "Максимальна кількість процесів синхронізації таблиць для однієї підписки." -#: utils/misc/guc.c:3127 +#: utils/misc/guc.c:3128 msgid "Automatic log file rotation will occur after N minutes." msgstr "Автоматичне обертання файлу журналу буде здійснюватись через кожні N хвилин." -#: utils/misc/guc.c:3138 +#: utils/misc/guc.c:3139 msgid "Automatic log file rotation will occur after N kilobytes." msgstr "Автоматичне обертання файлу журналу буде здійснюватись після кожних N кілобайт." -#: utils/misc/guc.c:3149 +#: utils/misc/guc.c:3150 msgid "Shows the maximum number of function arguments." msgstr "Показує максимальну кількість аргументів функції." -#: utils/misc/guc.c:3160 +#: utils/misc/guc.c:3161 msgid "Shows the maximum number of index keys." msgstr "Показує максимальну кількість ключів в індексі." -#: utils/misc/guc.c:3171 +#: utils/misc/guc.c:3172 msgid "Shows the maximum identifier length." msgstr "Показує максимальну довжину ідентифікатора." -#: utils/misc/guc.c:3182 +#: utils/misc/guc.c:3183 msgid "Shows the size of a disk block." msgstr "Показує розмір дискового блоку." -#: utils/misc/guc.c:3193 +#: utils/misc/guc.c:3194 msgid "Shows the number of pages per disk file." msgstr "Показує кількість сторінок в одному дисковому файлі." -#: utils/misc/guc.c:3204 +#: utils/misc/guc.c:3205 msgid "Shows the block size in the write ahead log." msgstr "Показує розмір блоку в журналі WAL." -#: utils/misc/guc.c:3215 +#: utils/misc/guc.c:3216 msgid "Sets the time to wait before retrying to retrieve WAL after a failed attempt." msgstr "Встановлює час очікування перед повторною спробою звертання до WAL після невдачі." -#: utils/misc/guc.c:3227 +#: utils/misc/guc.c:3228 msgid "Shows the size of write ahead log segments." msgstr "Показує розмір сегментів WAL." -#: utils/misc/guc.c:3240 +#: utils/misc/guc.c:3241 msgid "Time to sleep between autovacuum runs." msgstr "Час призупинення між запусками автоочистки." -#: utils/misc/guc.c:3250 +#: utils/misc/guc.c:3251 msgid "Minimum number of tuple updates or deletes prior to vacuum." msgstr "Мінімальна кількість оновлень або видалень кортежів перед очисткою." -#: utils/misc/guc.c:3259 +#: utils/misc/guc.c:3260 msgid "Minimum number of tuple inserts prior to vacuum, or -1 to disable insert vacuums." msgstr "Мінімальна кількість вставлених кортежів перед очищенням, або -1 щоб вимкнути очищення після вставки." -#: utils/misc/guc.c:3268 +#: utils/misc/guc.c:3269 msgid "Minimum number of tuple inserts, updates, or deletes prior to analyze." msgstr "Мінімальна кількість вставлень, оновлень або видалень кортежів перед аналізом." -#: utils/misc/guc.c:3278 +#: utils/misc/guc.c:3279 msgid "Age at which to autovacuum a table to prevent transaction ID wraparound." msgstr "Вік, при котрому необхідна автоочистка таблиці для запобігання зациклення ID транзакцій." -#: utils/misc/guc.c:3293 +#: utils/misc/guc.c:3294 msgid "Multixact age at which to autovacuum a table to prevent multixact wraparound." msgstr "Вік Multixact, при котрому необхідна автоочистка таблиці для запобігання зациклення multixact." -#: utils/misc/guc.c:3303 +#: utils/misc/guc.c:3304 msgid "Sets the maximum number of simultaneously running autovacuum worker processes." msgstr "Встановлює максимальну кількість одночасно працюючих робочих процесів автоочистки." -#: utils/misc/guc.c:3313 +#: utils/misc/guc.c:3314 msgid "Sets the maximum number of parallel processes per maintenance operation." msgstr "Встановлює максимальну кількість паралельних процесів на одну операцію обслуговування." -#: utils/misc/guc.c:3323 +#: utils/misc/guc.c:3324 msgid "Sets the maximum number of parallel processes per executor node." msgstr "Встановлює максимальну кількість паралельних процесів на вузол виконавця." -#: utils/misc/guc.c:3334 +#: utils/misc/guc.c:3335 msgid "Sets the maximum number of parallel workers that can be active at one time." msgstr "Встановлює максимальну кількість паралельних процесів, які можуть бути активні в один момент." -#: utils/misc/guc.c:3345 +#: utils/misc/guc.c:3346 msgid "Sets the maximum memory to be used by each autovacuum worker process." msgstr "Встановлює максимальний об'єм пам'яті для кожного робочого процесу автоочистки." -#: utils/misc/guc.c:3356 +#: utils/misc/guc.c:3357 msgid "Time before a snapshot is too old to read pages changed after the snapshot was taken." msgstr "Термін, після закінчення котрого знімок вважається занадто старим для отримання сторінок, змінених після створення знімку." -#: utils/misc/guc.c:3357 +#: utils/misc/guc.c:3358 msgid "A value of -1 disables this feature." msgstr "Значення -1 вимикає цю функцію." -#: utils/misc/guc.c:3367 +#: utils/misc/guc.c:3368 msgid "Time between issuing TCP keepalives." msgstr "Час між видачею TCP keepalives." -#: utils/misc/guc.c:3368 utils/misc/guc.c:3379 utils/misc/guc.c:3503 +#: utils/misc/guc.c:3369 utils/misc/guc.c:3380 utils/misc/guc.c:3504 msgid "A value of 0 uses the system default." msgstr "Значення 0 (нуль) використовує систему за замовчуванням." -#: utils/misc/guc.c:3378 +#: utils/misc/guc.c:3379 msgid "Time between TCP keepalive retransmits." msgstr "Час між повтореннями TCP keepalive." -#: utils/misc/guc.c:3389 +#: utils/misc/guc.c:3390 msgid "SSL renegotiation is no longer supported; this can only be 0." msgstr "Повторне узгодження SSL більше не підтримується; єдине допустиме значення - 0 (нуль)." -#: utils/misc/guc.c:3400 +#: utils/misc/guc.c:3401 msgid "Maximum number of TCP keepalive retransmits." msgstr "Максимальна кількість повторень TCP keepalive." -#: utils/misc/guc.c:3401 +#: utils/misc/guc.c:3402 msgid "This controls the number of consecutive keepalive retransmits that can be lost before a connection is considered dead. A value of 0 uses the system default." msgstr "Цей параметр визначає, яка кількість послідовних повторень keepalive може бути втрачена, перед тим як підключення буде вважатись \"мертвим\". Значення 0 (нуль) використовує систему за замовчуванням." -#: utils/misc/guc.c:3412 +#: utils/misc/guc.c:3413 msgid "Sets the maximum allowed result for exact search by GIN." msgstr "Встановлює максимально допустимий результат для точного пошуку з використанням GIN." -#: utils/misc/guc.c:3423 +#: utils/misc/guc.c:3424 msgid "Sets the planner's assumption about the total size of the data caches." msgstr "Встановлює планувальнику припустимий загальний розмір кешей даних." -#: utils/misc/guc.c:3424 +#: utils/misc/guc.c:3425 msgid "That is, the total size of the caches (kernel cache and shared buffers) used for PostgreSQL data files. This is measured in disk pages, which are normally 8 kB each." msgstr "Мається на увазі загальний розмір кешей (кеша ядра і спільних буферів), які використовуються для файлів даних PostgreSQL. Розмір задається в дискових сторінках, звичайно це 8 КБ." -#: utils/misc/guc.c:3435 +#: utils/misc/guc.c:3436 msgid "Sets the minimum amount of table data for a parallel scan." msgstr "Встановлює мінімальний обсяг даних в таблиці для паралельного сканування." -#: utils/misc/guc.c:3436 +#: utils/misc/guc.c:3437 msgid "If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered." msgstr "Якщо планувальник вважає, що він прочитає меньше сторінок таблиці, ніж задано цим обмеженням, паралельне сканування не буде розглядатись." -#: utils/misc/guc.c:3446 +#: utils/misc/guc.c:3447 msgid "Sets the minimum amount of index data for a parallel scan." msgstr "Встановлює мінімальний обсяг даних в індексі для паралельного сканування." -#: utils/misc/guc.c:3447 +#: utils/misc/guc.c:3448 msgid "If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered." msgstr "Якщо планувальник вважає, що він прочитає меньше сторінок індексу, ніж задано цим обмеженням, паралельне сканування не буде розглядатись." -#: utils/misc/guc.c:3458 +#: utils/misc/guc.c:3459 msgid "Shows the server version as an integer." msgstr "Показує версію сервера у вигляді цілого числа." -#: utils/misc/guc.c:3469 +#: utils/misc/guc.c:3470 msgid "Log the use of temporary files larger than this number of kilobytes." msgstr "Записує до журналу перевищення тимчасовими файлами заданого розміру в КБ." -#: utils/misc/guc.c:3470 +#: utils/misc/guc.c:3471 msgid "Zero logs all files. The default is -1 (turning this feature off)." msgstr "0 (нуль) фіксує всі файли. -1 вимикає цю функцію (за замовчуванням)." -#: utils/misc/guc.c:3480 +#: utils/misc/guc.c:3481 msgid "Sets the size reserved for pg_stat_activity.query, in bytes." msgstr "Встановлює розмір, зарезервований для pg_stat_activity.query, в байтах." -#: utils/misc/guc.c:3491 +#: utils/misc/guc.c:3492 msgid "Sets the maximum size of the pending list for GIN index." msgstr "Встановлює максимальний розмір списку-очікування для GIN-індексу." -#: utils/misc/guc.c:3502 +#: utils/misc/guc.c:3503 msgid "TCP user timeout." msgstr "Таймаут користувача TCP." -#: utils/misc/guc.c:3513 +#: utils/misc/guc.c:3514 msgid "The size of huge page that should be requested." msgstr "Розмір величезної сторінки, яку необхідно затребувати." -#: utils/misc/guc.c:3524 +#: utils/misc/guc.c:3525 msgid "Aggressively flush system caches for debugging purposes." msgstr "Агресивно скидати системні кеші для цілей налагодження." -#: utils/misc/guc.c:3547 +#: utils/misc/guc.c:3548 msgid "Sets the time interval between checks for disconnection while running queries." msgstr "Встановлює інтервал часу між перевірками відключення під час виконання запитів." -#: utils/misc/guc.c:3567 +#: utils/misc/guc.c:3568 msgid "Sets the planner's estimate of the cost of a sequentially fetched disk page." msgstr "Встановлює для планувальника орієнтир вартості послідовного читання дискових сторінок." -#: utils/misc/guc.c:3578 +#: utils/misc/guc.c:3579 msgid "Sets the planner's estimate of the cost of a nonsequentially fetched disk page." msgstr "Встановлює для планувальника орієнтир вартості непослідовного читання дискових сторінок." -#: utils/misc/guc.c:3589 +#: utils/misc/guc.c:3590 msgid "Sets the planner's estimate of the cost of processing each tuple (row)." msgstr "Встановлює для планувальника орієнтир вартості обробки кожного кортежу (рядка)." -#: utils/misc/guc.c:3600 +#: utils/misc/guc.c:3601 msgid "Sets the planner's estimate of the cost of processing each index entry during an index scan." msgstr "Встановлює для планувальника орієнтир вартості обробки кожного елементу індекса під час сканування індексу." -#: utils/misc/guc.c:3611 +#: utils/misc/guc.c:3612 msgid "Sets the planner's estimate of the cost of processing each operator or function call." msgstr "Встановлює для планувальника орієнтир вартості обробки кожного оператора або виклику функції." -#: utils/misc/guc.c:3622 +#: utils/misc/guc.c:3623 msgid "Sets the planner's estimate of the cost of passing each tuple (row) from worker to leader backend." msgstr "Встановлює для планувальника приблизну вартість передавання кожного кортежу (рядка) від робочого процесу вихідному процесу." -#: utils/misc/guc.c:3633 +#: utils/misc/guc.c:3634 msgid "Sets the planner's estimate of the cost of starting up worker processes for parallel query." msgstr "Встановлює для планувальника орієнтир вартості запуску робочих процесів для паралельного запиту." -#: utils/misc/guc.c:3645 +#: utils/misc/guc.c:3646 msgid "Perform JIT compilation if query is more expensive." msgstr "Якщо запит дорожчий, виконується JIT-компіляція." -#: utils/misc/guc.c:3646 +#: utils/misc/guc.c:3647 msgid "-1 disables JIT compilation." msgstr "-1 вимикає JIT-компіляцію." -#: utils/misc/guc.c:3656 +#: utils/misc/guc.c:3657 msgid "Optimize JIT-compiled functions if query is more expensive." msgstr "Оптимізувати функції JIT-compiled, якщо запит дорожчий." -#: utils/misc/guc.c:3657 +#: utils/misc/guc.c:3658 msgid "-1 disables optimization." msgstr "-1 вимикає оптимізацію." -#: utils/misc/guc.c:3667 +#: utils/misc/guc.c:3668 msgid "Perform JIT inlining if query is more expensive." msgstr "Якщо запит дорожчий, виконується вбудовування JIT." -#: utils/misc/guc.c:3668 +#: utils/misc/guc.c:3669 msgid "-1 disables inlining." msgstr "-1 вимикає вбудовування." -#: utils/misc/guc.c:3678 +#: utils/misc/guc.c:3679 msgid "Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved." msgstr "Встановлює для планувальника орієнтир частки необхідних рядків курсора в загальній кількості." -#: utils/misc/guc.c:3690 +#: utils/misc/guc.c:3691 msgid "GEQO: selective pressure within the population." msgstr "GEQO: вибірковий тиск в популяції." -#: utils/misc/guc.c:3701 +#: utils/misc/guc.c:3702 msgid "GEQO: seed for random path selection." msgstr "GEQO: відправна значення для випадкового вибору шляху." -#: utils/misc/guc.c:3712 +#: utils/misc/guc.c:3713 msgid "Multiple of work_mem to use for hash tables." msgstr "Декілька work_mem для використання геш-таблиць." -#: utils/misc/guc.c:3723 +#: utils/misc/guc.c:3724 msgid "Multiple of the average buffer usage to free per round." msgstr "Множник для середньої кількості використаних буферів, який визначає кількість буферів, які звільняються за один підхід." -#: utils/misc/guc.c:3733 +#: utils/misc/guc.c:3734 msgid "Sets the seed for random-number generation." msgstr "Встановлює відправне значення для генератора випадкових чисел." -#: utils/misc/guc.c:3744 +#: utils/misc/guc.c:3745 msgid "Vacuum cost delay in milliseconds." msgstr "Затримка вартості очистки в мілісекундах." -#: utils/misc/guc.c:3755 +#: utils/misc/guc.c:3756 msgid "Vacuum cost delay in milliseconds, for autovacuum." msgstr "Затримка вартості очистки в мілісекундах, для автоочистки." -#: utils/misc/guc.c:3766 +#: utils/misc/guc.c:3767 msgid "Number of tuple updates or deletes prior to vacuum as a fraction of reltuples." msgstr "Кількість оновлень або видалень кортежів до reltuples, яка визначає потребу в очистці." -#: utils/misc/guc.c:3776 +#: utils/misc/guc.c:3777 msgid "Number of tuple inserts prior to vacuum as a fraction of reltuples." msgstr "Кількість вставлень кортежів до reltuples, яка визначає потребу в очистці." -#: utils/misc/guc.c:3786 +#: utils/misc/guc.c:3787 msgid "Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples." msgstr "Кількість вставлень, оновлень або видалень кортежів до reltuples, яка визначає потребу в аналізі." -#: utils/misc/guc.c:3796 +#: utils/misc/guc.c:3797 msgid "Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval." msgstr "Час тривалості очищення \"брудних\" буферів під час контрольної точки до інтервалу контрольних точок." -#: utils/misc/guc.c:3806 +#: utils/misc/guc.c:3807 msgid "Fraction of statements exceeding log_min_duration_sample to be logged." msgstr "Частка тверджень, перевищує log_min_duration_sample, що підлягає запису." -#: utils/misc/guc.c:3807 +#: utils/misc/guc.c:3808 msgid "Use a value between 0.0 (never log) and 1.0 (always log)." msgstr "Використайте значення між 0.0 (ніколи не записувати) і 1.0 (завжди записувати)." -#: utils/misc/guc.c:3816 +#: utils/misc/guc.c:3817 msgid "Sets the fraction of transactions from which to log all statements." msgstr "Встановлює частину транзакцій, від яких необхідно журналювати всі команди." -#: utils/misc/guc.c:3817 +#: utils/misc/guc.c:3818 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.c:3836 +#: utils/misc/guc.c:3837 msgid "Sets the shell command that will be called to archive a WAL file." msgstr "Встановлює команду оболонки, яка буде викликатись для архівації файлу WAL." -#: utils/misc/guc.c:3846 +#: utils/misc/guc.c:3847 msgid "Sets the shell command that will be called to retrieve an archived WAL file." msgstr "Встановлює команду оболонки, яка буде викликана для отримання архівованого файлу WAL." -#: utils/misc/guc.c:3856 +#: utils/misc/guc.c:3857 msgid "Sets the shell command that will be executed at every restart point." msgstr "Встановлює команду оболонки, яка буде виконуватися в кожній точці перезапуску." -#: utils/misc/guc.c:3866 +#: utils/misc/guc.c:3867 msgid "Sets the shell command that will be executed once at the end of recovery." msgstr "Встановлює команду оболонки, яка буде виконуватися один раз в кінці відновлення." -#: utils/misc/guc.c:3876 +#: utils/misc/guc.c:3877 msgid "Specifies the timeline to recover into." msgstr "Вказує лінію часу для відновлення." -#: utils/misc/guc.c:3886 +#: utils/misc/guc.c:3887 msgid "Set to \"immediate\" to end recovery as soon as a consistent state is reached." msgstr "Встановіть на \"негайно\" щоб закінчити відновлення як тільки буде досягнуто узгодженого стану." -#: utils/misc/guc.c:3895 +#: utils/misc/guc.c:3896 msgid "Sets the transaction ID up to which recovery will proceed." msgstr "Встановлює ідентифікатор транзакції, до якої буде продовжуватися відновлення." -#: utils/misc/guc.c:3904 +#: utils/misc/guc.c:3905 msgid "Sets the time stamp up to which recovery will proceed." msgstr "Встановлює позначку часу, до якої буде продовжуватися відновлення." -#: utils/misc/guc.c:3913 +#: utils/misc/guc.c:3914 msgid "Sets the named restore point up to which recovery will proceed." msgstr "Встановлює назву точки відновлення, до якої буде продовжуватися відновлення." -#: utils/misc/guc.c:3922 +#: utils/misc/guc.c:3923 msgid "Sets the LSN of the write-ahead log location up to which recovery will proceed." msgstr "Встановлює номер LSN розташування випереджувального журналювання, до якого буде продовжуватися відновлення." -#: utils/misc/guc.c:3932 +#: utils/misc/guc.c:3933 msgid "Specifies a file name whose presence ends recovery in the standby." msgstr "Вказує назву файлу, наявність якого закінчує відновлення в режимі очікування." -#: utils/misc/guc.c:3942 +#: utils/misc/guc.c:3943 msgid "Sets the connection string to be used to connect to the sending server." msgstr "Встановлює рядок підключення який буде використовуватися для підключення до серверу надсилання." -#: utils/misc/guc.c:3953 +#: utils/misc/guc.c:3954 msgid "Sets the name of the replication slot to use on the sending server." msgstr "Встановлює назву слота реплікації, для використання на сервері надсилання." -#: utils/misc/guc.c:3963 +#: utils/misc/guc.c:3964 msgid "Sets the client's character set encoding." msgstr "Встановлює кодування символів, використовуване клієнтом." -#: utils/misc/guc.c:3974 +#: utils/misc/guc.c:3975 msgid "Controls information prefixed to each log line." msgstr "Визначає інформацію префікса кожного рядка протокола." -#: utils/misc/guc.c:3975 +#: utils/misc/guc.c:3976 msgid "If blank, no prefix is used." msgstr "При пустому значенні, префікс також відсутній." -#: utils/misc/guc.c:3984 +#: utils/misc/guc.c:3985 msgid "Sets the time zone to use in log messages." msgstr "Встановлює часовий пояс для виведення часу в повідомленях протокола." -#: utils/misc/guc.c:3994 +#: utils/misc/guc.c:3995 msgid "Sets the display format for date and time values." msgstr "Встановлює формат виведення значень часу і дат." -#: utils/misc/guc.c:3995 +#: utils/misc/guc.c:3996 msgid "Also controls interpretation of ambiguous date inputs." msgstr "Також визначає багатозначні задані дати, які вводяться." -#: utils/misc/guc.c:4006 +#: utils/misc/guc.c:4007 msgid "Sets the default table access method for new tables." msgstr "Встановлює метод доступу до таблиці за замовчуванням для нових таблиць." -#: utils/misc/guc.c:4017 +#: utils/misc/guc.c:4018 msgid "Sets the default tablespace to create tables and indexes in." msgstr "Встановлює табличний простір за замовчуванням, для створення таблиць і індексів." -#: utils/misc/guc.c:4018 +#: utils/misc/guc.c:4019 msgid "An empty string selects the database's default tablespace." msgstr "Пустий рядок вибирає табличний простір за замовчуванням бази даних." -#: utils/misc/guc.c:4028 +#: utils/misc/guc.c:4029 msgid "Sets the tablespace(s) to use for temporary tables and sort files." msgstr "Встановлює табличний простір(простори) для використання в тимчасових таблицях і файлах сортування." -#: utils/misc/guc.c:4039 +#: utils/misc/guc.c:4040 msgid "Sets the path for dynamically loadable modules." msgstr "Встановлює шлях для динамічно завантажуваних модулів." -#: utils/misc/guc.c:4040 +#: utils/misc/guc.c:4041 msgid "If a dynamically loadable module needs to be opened and the specified name does not have a directory component (i.e., the name does not contain a slash), the system will search this path for the specified file." msgstr "Якщо динамічно завантажений модуль потрібно відкрити і у вказаному імені немає компонента каталогу (наприклад, ім'я не містить символ \"/\"), система буде шукати цей шлях у вказаному файлі." -#: utils/misc/guc.c:4053 +#: utils/misc/guc.c:4054 msgid "Sets the location of the Kerberos server key file." msgstr "Встановлює розташування файлу з ключем Kerberos для даного сервера." -#: utils/misc/guc.c:4064 +#: utils/misc/guc.c:4065 msgid "Sets the Bonjour service name." msgstr "Встановлює ім'я служби Bonjour." -#: utils/misc/guc.c:4076 +#: utils/misc/guc.c:4077 msgid "Shows the collation order locale." msgstr "Показує порядок локалізації параметра сортування." -#: utils/misc/guc.c:4087 +#: utils/misc/guc.c:4088 msgid "Shows the character classification and case conversion locale." msgstr "Показує класифікацію символу і перетворення локалізації." -#: utils/misc/guc.c:4098 +#: utils/misc/guc.c:4099 msgid "Sets the language in which messages are displayed." msgstr "Встановлює мову виведених повідомлень." -#: utils/misc/guc.c:4108 +#: utils/misc/guc.c:4109 msgid "Sets the locale for formatting monetary amounts." msgstr "Встановлює локалізацію для форматування грошових сум." -#: utils/misc/guc.c:4118 +#: utils/misc/guc.c:4119 msgid "Sets the locale for formatting numbers." msgstr "Встановлює локалізацію для форматування чисел." -#: utils/misc/guc.c:4128 +#: utils/misc/guc.c:4129 msgid "Sets the locale for formatting date and time values." msgstr "Встановлює локалізацію для форматування значень дати і часу." -#: utils/misc/guc.c:4138 +#: utils/misc/guc.c:4139 msgid "Lists shared libraries to preload into each backend." msgstr "Список спільних бібліотек, попередньо завантажених до кожного внутрішнього серверу." -#: utils/misc/guc.c:4149 +#: utils/misc/guc.c:4150 msgid "Lists shared libraries to preload into server." msgstr "Список спільних бібліотек, попередньо завантажених до серверу." -#: utils/misc/guc.c:4160 +#: utils/misc/guc.c:4161 msgid "Lists unprivileged shared libraries to preload into each backend." msgstr "Список непривілейованих спільних бібліотек, попередньо завантажених до кожного внутрішнього серверу." -#: utils/misc/guc.c:4171 +#: utils/misc/guc.c:4172 msgid "Sets the schema search order for names that are not schema-qualified." msgstr "Встановлює порядок пошуку схеми для імен, які не є схемо-кваліфікованими." -#: utils/misc/guc.c:4183 +#: utils/misc/guc.c:4184 msgid "Shows the server (database) character set encoding." msgstr "Показує набір символів кодування сервера (бази даних)." -#: utils/misc/guc.c:4195 +#: utils/misc/guc.c:4196 msgid "Shows the server version." msgstr "Показує версію сервера." -#: utils/misc/guc.c:4207 +#: utils/misc/guc.c:4208 msgid "Sets the current role." msgstr "Встановлює чинну роль." -#: utils/misc/guc.c:4219 +#: utils/misc/guc.c:4220 msgid "Sets the session user name." msgstr "Встановлює ім'я користувача в сеансі." -#: utils/misc/guc.c:4230 +#: utils/misc/guc.c:4231 msgid "Sets the destination for server log output." msgstr "Встановлює, куди буде виводитися протокол серверу." -#: utils/misc/guc.c:4231 +#: utils/misc/guc.c:4232 msgid "Valid values are combinations of \"stderr\", \"syslog\", \"csvlog\", and \"eventlog\", depending on the platform." msgstr "Дійсними значеннями є комбінації \"stderr\", \"syslog\", \"csvlog\", і \"eventlog\" в залежності від платформи." -#: utils/misc/guc.c:4242 +#: utils/misc/guc.c:4243 msgid "Sets the destination directory for log files." msgstr "Встановлює каталог призначення для файлів журналу." -#: utils/misc/guc.c:4243 +#: utils/misc/guc.c:4244 msgid "Can be specified as relative to the data directory or as absolute path." msgstr "Шлях може бути абсолютним або вказуватися відносно каталогу даних." -#: utils/misc/guc.c:4253 +#: utils/misc/guc.c:4254 msgid "Sets the file name pattern for log files." msgstr "Встановлює шаблон імені для файлів журналу." -#: utils/misc/guc.c:4264 +#: utils/misc/guc.c:4265 msgid "Sets the program name used to identify PostgreSQL messages in syslog." msgstr "Встановлює ім'я програми для ідентифікації повідомлень PostgreSQL в syslog." -#: utils/misc/guc.c:4275 +#: utils/misc/guc.c:4276 msgid "Sets the application name used to identify PostgreSQL messages in the event log." msgstr "Встановлює ім'я програми для ідентифікації повідомлень PostgreSQL в журналі подій." -#: utils/misc/guc.c:4286 +#: utils/misc/guc.c:4287 msgid "Sets the time zone for displaying and interpreting time stamps." msgstr "Встановлює часовий пояс для відображення та інтерпретації позначок часу." -#: utils/misc/guc.c:4296 +#: utils/misc/guc.c:4297 msgid "Selects a file of time zone abbreviations." msgstr "Вибирає файл з скороченими іменами часових поясів." -#: utils/misc/guc.c:4306 +#: utils/misc/guc.c:4307 msgid "Sets the owning group of the Unix-domain socket." msgstr "Встановлює відповідальну групу Unix-сокету." -#: utils/misc/guc.c:4307 +#: utils/misc/guc.c:4308 msgid "The owning user of the socket is always the user that starts the server." msgstr "Відповідальний користувач сокету це завжди той користувач який запустив сервер." -#: utils/misc/guc.c:4317 +#: utils/misc/guc.c:4318 msgid "Sets the directories where Unix-domain sockets will be created." msgstr "Встановлює каталоги, де будуть створюватись Unix-сокети." -#: utils/misc/guc.c:4332 +#: utils/misc/guc.c:4333 msgid "Sets the host name or IP address(es) to listen to." msgstr "Встановлює ім'я хосту або IP-адресу для прив'язки." -#: utils/misc/guc.c:4347 +#: utils/misc/guc.c:4348 msgid "Sets the server's data directory." msgstr "Встановлює каталог даних серверу." -#: utils/misc/guc.c:4358 +#: utils/misc/guc.c:4359 msgid "Sets the server's main configuration file." msgstr "Встановлює основний файл конфігурації серверу." -#: utils/misc/guc.c:4369 +#: utils/misc/guc.c:4370 msgid "Sets the server's \"hba\" configuration file." msgstr "Встановлює \"hba\" файл конфігурації серверу." -#: utils/misc/guc.c:4380 +#: utils/misc/guc.c:4381 msgid "Sets the server's \"ident\" configuration file." msgstr "Встановлює \"ident\" файл конфігурації серверу." -#: utils/misc/guc.c:4391 +#: utils/misc/guc.c:4392 msgid "Writes the postmaster PID to the specified file." msgstr "Записує ідентифікатор процесу (PID) postmaster у вказаний файл." -#: utils/misc/guc.c:4402 +#: utils/misc/guc.c:4403 msgid "Shows the name of the SSL library." msgstr "Показує назву бібліотеки SSL." -#: utils/misc/guc.c:4417 +#: utils/misc/guc.c:4418 msgid "Location of the SSL server certificate file." msgstr "Розташування файла сертифікату сервера для SSL." -#: utils/misc/guc.c:4427 +#: utils/misc/guc.c:4428 msgid "Location of the SSL server private key file." msgstr "Розташування файла з закритим ключем сервера для SSL." -#: utils/misc/guc.c:4437 +#: utils/misc/guc.c:4438 msgid "Location of the SSL certificate authority file." msgstr "Розташування файла центру сертифікації для SSL." -#: utils/misc/guc.c:4447 +#: utils/misc/guc.c:4448 msgid "Location of the SSL certificate revocation list file." msgstr "Розташування файла зі списком відкликаних сертфікатів для SSL." -#: utils/misc/guc.c:4457 +#: utils/misc/guc.c:4458 msgid "Location of the SSL certificate revocation list directory." msgstr "Розташування каталогу списку відкликаних сертифікатів SSL." -#: utils/misc/guc.c:4467 +#: utils/misc/guc.c:4468 msgid "Writes temporary statistics files to the specified directory." msgstr "Записує тимчасові файли статистики у вказаний каталог." -#: utils/misc/guc.c:4478 +#: utils/misc/guc.c:4479 msgid "Number of synchronous standbys and list of names of potential synchronous ones." msgstr "Кількість потенційно синхронних режимів очікування і список їх імен." -#: utils/misc/guc.c:4489 +#: utils/misc/guc.c:4490 msgid "Sets default text search configuration." msgstr "Встановлює конфігурацію текстового пошуку за замовчуванням." -#: utils/misc/guc.c:4499 +#: utils/misc/guc.c:4500 msgid "Sets the list of allowed SSL ciphers." msgstr "Встановлює список дозволених шифрів для SSL." -#: utils/misc/guc.c:4514 +#: utils/misc/guc.c:4515 msgid "Sets the curve to use for ECDH." msgstr "Встановлює криву для ECDH." -#: utils/misc/guc.c:4529 +#: utils/misc/guc.c:4530 msgid "Location of the SSL DH parameters file." msgstr "Розташування файла з параметрами SSL DH." -#: utils/misc/guc.c:4540 +#: utils/misc/guc.c:4541 msgid "Command to obtain passphrases for SSL." msgstr "Команда, що дозволяє отримати парольну фразу для SSL." -#: utils/misc/guc.c:4551 +#: utils/misc/guc.c:4552 msgid "Sets the application name to be reported in statistics and logs." msgstr "Встановлює ім'я програми, яке буде повідомлятись у статистиці і протоколах." -#: utils/misc/guc.c:4562 +#: utils/misc/guc.c:4563 msgid "Sets the name of the cluster, which is included in the process title." msgstr "Встановлює ім'я кластеру, яке буде включене до заголовка процесу." -#: utils/misc/guc.c:4573 +#: utils/misc/guc.c:4574 msgid "Sets the WAL resource managers for which WAL consistency checks are done." msgstr "Встановлює менеджерів ресурсу WAL, для яких виконано перевірки узгодженості WAL." -#: utils/misc/guc.c:4574 +#: utils/misc/guc.c:4575 msgid "Full-page images will be logged for all data blocks and cross-checked against the results of WAL replay." msgstr "При цьому до журналу будуть записуватись зображення повнихс сторінок для всіх блоків даних для перевірки з результатами відтворення WAL." -#: utils/misc/guc.c:4584 +#: utils/misc/guc.c:4585 msgid "JIT provider to use." msgstr "Використовувати провайдер JIT." -#: utils/misc/guc.c:4595 +#: utils/misc/guc.c:4596 msgid "Log backtrace for errors in these functions." msgstr "Відстежувати записи помилок у ціх функціях." -#: utils/misc/guc.c:4615 +#: utils/misc/guc.c:4607 +msgid "Prohibits access to non-system relations of specified kinds." +msgstr "Забороняє доступ до несистемних відносин вказаних типів." + +#: utils/misc/guc.c:4627 msgid "Sets whether \"\\'\" is allowed in string literals." msgstr "Встановлює, чи дозволене використання \"\\\" в текстових рядках." -#: utils/misc/guc.c:4625 +#: utils/misc/guc.c:4637 msgid "Sets the output format for bytea." msgstr "Встановлює формат виводу для типу bytea." -#: utils/misc/guc.c:4635 +#: utils/misc/guc.c:4647 msgid "Sets the message levels that are sent to the client." msgstr "Встановлює рівень повідомлень, переданих клієнту." -#: utils/misc/guc.c:4636 utils/misc/guc.c:4722 utils/misc/guc.c:4733 -#: utils/misc/guc.c:4809 +#: utils/misc/guc.c:4648 utils/misc/guc.c:4734 utils/misc/guc.c:4745 +#: utils/misc/guc.c:4821 msgid "Each level includes all the levels that follow it. The later the level, the fewer messages are sent." msgstr "Кожен рівень включає всі наступні рівні. Чим вище рівень, тим менше повідомлень надіслано." -#: utils/misc/guc.c:4646 +#: utils/misc/guc.c:4658 msgid "Compute query identifiers." msgstr "Обчислення ідентифікаторів запитів." -#: utils/misc/guc.c:4656 +#: utils/misc/guc.c:4668 msgid "Enables the planner to use constraints to optimize queries." msgstr "Дає змогу планувальнику оптимізувати запити, використовуючи обмеження." -#: utils/misc/guc.c:4657 +#: utils/misc/guc.c:4669 msgid "Table scans will be skipped if their constraints guarantee that no rows match the query." msgstr "Сканування таблиці буде пропущено, якщо її обмеження гарантують, що запиту не відповідають ніякі рядки." -#: utils/misc/guc.c:4668 +#: utils/misc/guc.c:4680 msgid "Sets the default compression method for compressible values." msgstr "Встановлює метод стискання за замовчуванням для стисливих значень." -#: utils/misc/guc.c:4679 +#: utils/misc/guc.c:4691 msgid "Sets the transaction isolation level of each new transaction." msgstr "Встановлює рівень ізоляції транзакції для кожної нової транзакції." -#: utils/misc/guc.c:4689 +#: utils/misc/guc.c:4701 msgid "Sets the current transaction's isolation level." msgstr "Встановлює чинний рівень ізоляції транзакцій." -#: utils/misc/guc.c:4700 +#: utils/misc/guc.c:4712 msgid "Sets the display format for interval values." msgstr "Встановлює формат відображення внутрішніх значень." -#: utils/misc/guc.c:4711 +#: utils/misc/guc.c:4723 msgid "Sets the verbosity of logged messages." msgstr "Встановлює детальність повідомлень, які протоколюються." -#: utils/misc/guc.c:4721 +#: utils/misc/guc.c:4733 msgid "Sets the message levels that are logged." msgstr "Встанолвює рівні повідомлень, які протоколюються." -#: utils/misc/guc.c:4732 +#: utils/misc/guc.c:4744 msgid "Causes all statements generating error at or above this level to be logged." msgstr "Вмикає протоколювання для всіх операторів, виконаних з помилкою цього або вище рівня." -#: utils/misc/guc.c:4743 +#: utils/misc/guc.c:4755 msgid "Sets the type of statements logged." msgstr "Встановлює тип операторів, які протоколюються." -#: utils/misc/guc.c:4753 +#: utils/misc/guc.c:4765 msgid "Sets the syslog \"facility\" to be used when syslog enabled." msgstr "Встановлює отримувача повідомлень, які відправляються до syslog." -#: utils/misc/guc.c:4768 +#: utils/misc/guc.c:4780 msgid "Sets the session's behavior for triggers and rewrite rules." msgstr "Встановлює поведінку для тригерів і правил перезапису для сеансу." -#: utils/misc/guc.c:4778 +#: utils/misc/guc.c:4790 msgid "Sets the current transaction's synchronization level." msgstr "Встановлює рівень синхронізації поточної транзакції." -#: utils/misc/guc.c:4788 +#: utils/misc/guc.c:4800 msgid "Allows archiving of WAL files using archive_command." msgstr "Дозволяє архівацію файлів WAL, використовуючи archive_command." -#: utils/misc/guc.c:4798 +#: utils/misc/guc.c:4810 msgid "Sets the action to perform upon reaching the recovery target." msgstr "Встновлює дію яку потрібно виконати в разі досягнення мети відновлення." -#: utils/misc/guc.c:4808 +#: utils/misc/guc.c:4820 msgid "Enables logging of recovery-related debugging information." msgstr "Вмикає протоколювання налагодженної інформації, пов'язаної з відновленням." -#: utils/misc/guc.c:4824 +#: utils/misc/guc.c:4836 msgid "Collects function-level statistics on database activity." msgstr "Збирає статистику активності в базі даних на рівні функцій." -#: utils/misc/guc.c:4834 +#: utils/misc/guc.c:4846 msgid "Sets the level of information written to the WAL." msgstr "Встановлює рівень інформації, яка записується до WAL." -#: utils/misc/guc.c:4844 +#: utils/misc/guc.c:4856 msgid "Selects the dynamic shared memory implementation used." msgstr "Вибирає використовуване впровадження динамічної спільної пам'яті." -#: utils/misc/guc.c:4854 +#: utils/misc/guc.c:4866 msgid "Selects the shared memory implementation used for the main shared memory region." msgstr "Вибирає впровадження спільної пам'яті, що використовується для основної області спільної пам'яті." -#: utils/misc/guc.c:4864 +#: utils/misc/guc.c:4876 msgid "Selects the method used for forcing WAL updates to disk." msgstr "Вибирає метод примусового запису оновлень в WAL на диск." -#: utils/misc/guc.c:4874 +#: utils/misc/guc.c:4886 msgid "Sets how binary values are to be encoded in XML." msgstr "Встановлює, як повинні кодуватись двійкові значення в XML." -#: utils/misc/guc.c:4884 +#: utils/misc/guc.c:4896 msgid "Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments." msgstr "Встановлює, чи слід розглядати XML-дані в неявних операціях аналізу і серіалізації як документи або як фрагменти змісту." -#: utils/misc/guc.c:4895 +#: utils/misc/guc.c:4907 msgid "Use of huge pages on Linux or Windows." msgstr "Використовувати величезні сторінки в Linux або Windows." -#: utils/misc/guc.c:4905 +#: utils/misc/guc.c:4917 msgid "Forces use of parallel query facilities." msgstr "Примусово використовувати паралельне виконання запитів." -#: utils/misc/guc.c:4906 +#: utils/misc/guc.c:4918 msgid "If possible, run query using a parallel worker and with parallel restrictions." msgstr "Якщо можливо, виконувати запит використовуючи паралельного працівника і з обмеженнями паралельності." -#: utils/misc/guc.c:4916 +#: utils/misc/guc.c:4928 msgid "Chooses the algorithm for encrypting passwords." msgstr "Виберіть алгоритм для шифрування паролів." -#: utils/misc/guc.c:4926 +#: utils/misc/guc.c:4938 msgid "Controls the planner's selection of custom or generic plan." msgstr "Контролює вибір планувальником спеціального або загального плану." -#: utils/misc/guc.c:4927 +#: utils/misc/guc.c:4939 msgid "Prepared statements can have custom and generic plans, and the planner will attempt to choose which is better. This can be set to override the default behavior." msgstr "Підготовлені оператори можуть мати спеціальні або загальні плани, і планувальник спробує вибрати, який краще. Це може бути встановлено для зміни поведінки за замовчуванням." -#: utils/misc/guc.c:4939 +#: utils/misc/guc.c:4951 msgid "Sets the minimum SSL/TLS protocol version to use." msgstr "Встановлює мінімальну версію протоколу SSL/TLS для використання." -#: utils/misc/guc.c:4951 +#: utils/misc/guc.c:4963 msgid "Sets the maximum SSL/TLS protocol version to use." msgstr "Встановлює максимальну версію протоколу SSL/TLS для використання." -#: utils/misc/guc.c:4963 +#: utils/misc/guc.c:4975 msgid "Sets the method for synchronizing the data directory before crash recovery." msgstr "Встановлює метод для синхронізації каталогу даних перед аварійним відновленням." -#: utils/misc/guc.c:5532 +#: utils/misc/guc.c:5544 #, c-format msgid "invalid configuration parameter name \"%s\"" msgstr "неприпустима назва параметра конфігурації \"%s\"" -#: utils/misc/guc.c:5534 +#: utils/misc/guc.c:5546 #, c-format msgid "Custom parameter names must be two or more simple identifiers separated by dots." msgstr "Власні назви параметрів повинні містити два або більше простих ідентифікаторів, розділених крапками." -#: utils/misc/guc.c:5543 utils/misc/guc.c:9302 +#: utils/misc/guc.c:5555 utils/misc/guc.c:9366 #, c-format msgid "unrecognized configuration parameter \"%s\"" msgstr "нерозпізнаний параметр конфігурації \"%s\"" -#: utils/misc/guc.c:5836 +#: utils/misc/guc.c:5848 #, c-format msgid "%s: could not access directory \"%s\": %s\n" msgstr "%s: немає доступу до каталогу \"%s\": %s\n" -#: utils/misc/guc.c:5841 +#: utils/misc/guc.c:5853 #, 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:5861 +#: utils/misc/guc.c:5873 #, c-format msgid "%s does not know where to find the server configuration file.\n" "You must specify the --config-file or -D invocation option or set the PGDATA environment variable.\n" msgstr "%s не знає де знайти файл конфігурації сервера.\n" -"Ви повинні вказати його розташування в параметрі --config-file або -D, або встановити змінну середовища PGDATA.\n" +"Ви повинні вказати його розташування в параметрі --config-file або -D, або встановити змінну середовища PGDATA.\n" -#: utils/misc/guc.c:5880 +#: utils/misc/guc.c:5892 #, c-format msgid "%s: could not access the server configuration file \"%s\": %s\n" msgstr "%s: не вдалося отримати доступ до файлу конфігурації сервера \"%s\": %s\n" -#: utils/misc/guc.c:5906 +#: utils/misc/guc.c:5918 #, c-format msgid "%s does not know where to find the database system data.\n" "This can be specified as \"data_directory\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" msgstr "%s не знає де знайти дані системи бази даних.\n" "Їх розташування може бути вказано як \"data_directory\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" -#: utils/misc/guc.c:5954 +#: utils/misc/guc.c:5966 #, c-format msgid "%s does not know where to find the \"hba\" configuration file.\n" "This can be specified as \"hba_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" msgstr "%s не знає де знайти файл конфігурації \"hba\".\n" "Його розташування може бути вказано як \"hba_file\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" -#: utils/misc/guc.c:5977 +#: utils/misc/guc.c:5989 #, c-format msgid "%s does not know where to find the \"ident\" configuration file.\n" "This can be specified as \"ident_file\" in \"%s\", or by the -D invocation option, or by the PGDATA environment variable.\n" msgstr "%s не знає де знайти файл конфігурації \"ident\".\n" "Його розташування може бути вказано як \"ident_file\" в \"%s\", або передано в параметрі -D, або встановлено змінну середовища PGDATA.\n" -#: utils/misc/guc.c:6902 +#: utils/misc/guc.c:6914 msgid "Value exceeds integer range." msgstr "Значення перевищує діапазон цілих чисел." -#: utils/misc/guc.c:7138 +#: utils/misc/guc.c:7150 #, c-format msgid "%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)" msgstr "%d%s%s поза припустимим діапазоном для параметру \"%s\" (%d .. %d)" -#: utils/misc/guc.c:7174 +#: utils/misc/guc.c:7186 #, c-format msgid "%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)" msgstr "%g%s%s поза припустимим діапазоном для параметру \"%s\" (%g .. %g)" -#: utils/misc/guc.c:7334 utils/misc/guc.c:8706 +#: utils/misc/guc.c:7356 #, 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:7351 utils/misc/guc.c:8547 +#: utils/misc/guc.c:7372 utils/misc/guc.c:8611 #, c-format msgid "parameter \"%s\" cannot be changed" msgstr "параметр \"%s\" не може бути змінений" -#: utils/misc/guc.c:7374 utils/misc/guc.c:7572 utils/misc/guc.c:7666 -#: utils/misc/guc.c:7760 utils/misc/guc.c:7880 utils/misc/guc.c:7979 +#: utils/misc/guc.c:7395 utils/misc/guc.c:7597 utils/misc/guc.c:7691 +#: utils/misc/guc.c:7785 utils/misc/guc.c:7907 utils/misc/guc.c:8043 #: guc-file.l:353 #, c-format msgid "parameter \"%s\" cannot be changed without restarting the server" msgstr "параметр \"%s\" не може бути змінений, без перезавантаження сервера" -#: utils/misc/guc.c:7384 +#: utils/misc/guc.c:7405 #, c-format msgid "parameter \"%s\" cannot be changed now" msgstr "параметр \"%s\" не може бути змінений зараз" -#: utils/misc/guc.c:7402 utils/misc/guc.c:7449 utils/misc/guc.c:11365 +#: utils/misc/guc.c:7423 utils/misc/guc.c:7474 utils/misc/guc.c:11423 #, c-format msgid "permission denied to set parameter \"%s\"" msgstr "немає прав для встановлення параметру \"%s\"" -#: utils/misc/guc.c:7439 +#: utils/misc/guc.c:7464 #, c-format msgid "parameter \"%s\" cannot be set after connection start" msgstr "параметр \"%s\" не можна встановити після встановлення підключення" -#: utils/misc/guc.c:7487 +#: utils/misc/guc.c:7512 #, c-format msgid "cannot set parameter \"%s\" within security-definer function" msgstr "параметр \"%s\" не можна встановити в межах функції безпеки" -#: utils/misc/guc.c:8120 utils/misc/guc.c:8167 utils/misc/guc.c:9581 +#: utils/misc/guc.c:8184 utils/misc/guc.c:8231 utils/misc/guc.c:9645 #, c-format msgid "must be superuser or a member of pg_read_all_settings to examine \"%s\"" msgstr "щоб дослідити \"%s\" потрібно бути суперкористувачем або учасником ролі pg_read_all_settings" -#: utils/misc/guc.c:8251 +#: utils/misc/guc.c:8315 #, c-format msgid "SET %s takes only one argument" msgstr "SET %s приймає лише один аргумент" -#: utils/misc/guc.c:8499 +#: utils/misc/guc.c:8563 #, c-format msgid "must be superuser to execute ALTER SYSTEM command" msgstr "щоб виконати команду ALTER SYSTEM потрібно бути суперкористувачем" -#: utils/misc/guc.c:8580 +#: utils/misc/guc.c:8644 #, c-format msgid "parameter value for ALTER SYSTEM must not contain a newline" msgstr "значення параметру для ALTER SYSTEM не повинне містити нового рядка" -#: utils/misc/guc.c:8625 +#: utils/misc/guc.c:8689 #, c-format msgid "could not parse contents of file \"%s\"" msgstr "не вдалося аналізувати зміст файла \"%s\"" -#: utils/misc/guc.c:8782 +#: utils/misc/guc.c:8770 +#, c-format +msgid "cannot set parameters during a parallel operation" +msgstr "встановити параметри під час паралельної операції не можна" + +#: utils/misc/guc.c:8846 #, c-format msgid "SET LOCAL TRANSACTION SNAPSHOT is not implemented" msgstr "SET LOCAL TRANSACTION SNAPSHOT не реалізовано" -#: utils/misc/guc.c:8866 +#: utils/misc/guc.c:8930 #, c-format msgid "SET requires parameter name" msgstr "SET потребує ім'я параметра" -#: utils/misc/guc.c:8999 +#: utils/misc/guc.c:9063 #, c-format msgid "attempt to redefine parameter \"%s\"" msgstr "спроба перевизначити параметр \"%s\"" -#: utils/misc/guc.c:10812 +#: utils/misc/guc.c:10870 #, c-format msgid "while setting parameter \"%s\" to \"%s\"" msgstr "під час налаштування параметру \"%s\" на \"%s\"" -#: utils/misc/guc.c:10977 +#: utils/misc/guc.c:11035 #, c-format msgid "parameter \"%s\" could not be set" msgstr "параметр \"%s\" не вдалося встановити" -#: utils/misc/guc.c:11069 +#: utils/misc/guc.c:11127 #, c-format msgid "could not parse setting for parameter \"%s\"" msgstr "не вдалося аналізувати налаштування параметру \"%s\"" -#: utils/misc/guc.c:11427 utils/misc/guc.c:11461 +#: utils/misc/guc.c:11485 utils/misc/guc.c:11519 #, c-format msgid "invalid value for parameter \"%s\": %d" msgstr "неприпустиме значення для параметра \"%s\": %d" -#: utils/misc/guc.c:11495 +#: utils/misc/guc.c:11553 #, c-format msgid "invalid value for parameter \"%s\": %g" msgstr "неприпустиме значення для параметра \"%s\": %g" -#: utils/misc/guc.c:11782 +#: utils/misc/guc.c:11840 #, c-format msgid "\"temp_buffers\" cannot be changed after any temporary tables have been accessed in the session." msgstr "параметр \"temp_buffers\" не можна змінити після того, як тимчасові таблиці отримали доступ в сеансі." -#: utils/misc/guc.c:11794 +#: utils/misc/guc.c:11852 #, c-format msgid "Bonjour is not supported by this build" msgstr "Bonjour не підтримується даною збіркою" -#: utils/misc/guc.c:11807 +#: utils/misc/guc.c:11865 #, c-format msgid "SSL is not supported by this build" msgstr "SSL не підтримується даною збіркою" -#: utils/misc/guc.c:11819 +#: utils/misc/guc.c:11877 #, c-format msgid "Cannot enable parameter when \"log_statement_stats\" is true." msgstr "Не можна ввімкнути параметр, коли \"log_statement_stats\" дорівнює true." -#: utils/misc/guc.c:11831 +#: utils/misc/guc.c:11889 #, c-format msgid "Cannot enable \"log_statement_stats\" when \"log_parser_stats\", \"log_planner_stats\", or \"log_executor_stats\" is true." msgstr "Не можна ввімкнути \"log_statement_stats\", коли \"log_parser_stats\", \"log_planner_stats\", або \"log_executor_stats\" дорівнюють true." -#: utils/misc/guc.c:12061 +#: utils/misc/guc.c:12119 #, c-format msgid "effective_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "значення effective_io_concurrency повинне дорівнювати 0 (нулю) на платформах, де відсутній posix_fadvise()." -#: utils/misc/guc.c:12074 +#: utils/misc/guc.c:12132 #, c-format msgid "maintenance_io_concurrency must be set to 0 on platforms that lack posix_fadvise()." msgstr "maintenance_io_concurrency повинне бути встановлене на 0, на платформах які не мають posix_fadvise()." -#: utils/misc/guc.c:12088 +#: utils/misc/guc.c:12146 #, c-format msgid "huge_page_size must be 0 on this platform." msgstr "huge_page_size повинен бути 0 на цій платформі." -#: utils/misc/guc.c:12102 +#: utils/misc/guc.c:12160 #, c-format msgid "client_connection_check_interval must be set to 0 on platforms that lack POLLRDHUP." msgstr "client_connection_check_interval повинен бути встановлений в 0, на платформах де відсутній POLLRDHUP." -#: utils/misc/guc.c:12230 +#: utils/misc/guc.c:12288 #, c-format msgid "invalid character" msgstr "неприпустимий символ" -#: utils/misc/guc.c:12290 +#: utils/misc/guc.c:12348 #, c-format msgid "recovery_target_timeline is not a valid number." msgstr "recovery_target_timeline не є допустимим числом." -#: utils/misc/guc.c:12330 +#: utils/misc/guc.c:12388 #, c-format msgid "multiple recovery targets specified" msgstr "вказано декілька цілей відновлення" -#: utils/misc/guc.c:12331 +#: utils/misc/guc.c:12389 #, c-format msgid "At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set." msgstr "Максимум один із recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid може бути встановлений." -#: utils/misc/guc.c:12339 +#: utils/misc/guc.c:12397 #, c-format msgid "The only allowed value is \"immediate\"." msgstr "Єдиним дозволеним значенням є \"immediate\"." @@ -27739,20 +27839,20 @@ msgstr "в @INCLUDE не вказано ім'я файла у файлі час msgid "Failed while creating memory context \"%s\"." msgstr "Помилка під час створення контексту пам'яті \"%s\"." -#: utils/mmgr/dsa.c:520 utils/mmgr/dsa.c:1334 +#: utils/mmgr/dsa.c:520 utils/mmgr/dsa.c:1338 #, c-format msgid "could not attach to dynamic shared area" msgstr "не вдалося підключитись до динамічно-спільної області" -#: utils/mmgr/mcxt.c:889 utils/mmgr/mcxt.c:925 utils/mmgr/mcxt.c:963 -#: utils/mmgr/mcxt.c:1001 utils/mmgr/mcxt.c:1089 utils/mmgr/mcxt.c:1120 -#: utils/mmgr/mcxt.c:1156 utils/mmgr/mcxt.c:1208 utils/mmgr/mcxt.c:1243 -#: utils/mmgr/mcxt.c:1278 +#: utils/mmgr/mcxt.c:892 utils/mmgr/mcxt.c:928 utils/mmgr/mcxt.c:966 +#: utils/mmgr/mcxt.c:1004 utils/mmgr/mcxt.c:1112 utils/mmgr/mcxt.c:1143 +#: utils/mmgr/mcxt.c:1179 utils/mmgr/mcxt.c:1231 utils/mmgr/mcxt.c:1266 +#: utils/mmgr/mcxt.c:1301 #, c-format msgid "Failed on request of size %zu in memory context \"%s\"." msgstr "Помилка в запиті розміру %zu в контексті пам'яті \"%s\"." -#: utils/mmgr/mcxt.c:1052 +#: utils/mmgr/mcxt.c:1067 #, c-format msgid "logging memory contexts of PID %d" msgstr "журналювання контекстів пам'яті PID %d" @@ -27787,7 +27887,7 @@ msgstr "видалити активний портал \"%s\" не можна" msgid "cannot PREPARE a transaction that has created a cursor WITH HOLD" msgstr "не можна виконати PREPARE для транзакції, яка створила курсор WITH HOLD" -#: utils/mmgr/portalmem.c:1279 +#: utils/mmgr/portalmem.c:1282 #, c-format msgid "cannot perform transaction commands inside a cursor loop that is not read-only" msgstr "виконати команди транзакції всередині циклу з курсором, який не є \"лише для читання\", не можна" @@ -27800,7 +27900,7 @@ msgstr "не вдалося знайти шлях до блокування %ld #: utils/sort/logtape.c:297 #, c-format msgid "could not read block %ld of temporary file: read only %zu of %zu bytes" -msgstr "не вдалося прочитати блок %ld тимчасового файлу: прочитано лише %zu з %zu байт." +msgstr "не вдалося прочитати блок %ld тимчасового файлу: прочитано лише %zu з %zu байт" #: utils/sort/sharedtuplestore.c:431 utils/sort/sharedtuplestore.c:440 #: utils/sort/sharedtuplestore.c:463 utils/sort/sharedtuplestore.c:480 diff --git a/src/backend/port/sysv_sema.c b/src/backend/port/sysv_sema.c index 21c883ba9ac..366859d7777 100644 --- a/src/backend/port/sysv_sema.c +++ b/src/backend/port/sysv_sema.c @@ -73,7 +73,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); @@ -92,9 +92,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; @@ -105,16 +109,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; /* @@ -211,17 +226,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 */ @@ -258,7 +278,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 e70f32d0ab4..d0931ee5c0f 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -2321,6 +2321,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; @@ -2333,6 +2339,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(); @@ -2616,7 +2623,10 @@ do_autovacuum(void) workitem->avw_active = true; LWLockRelease(AutovacuumLock); + PushActiveSnapshot(GetTransactionSnapshot()); perform_work_item(workitem); + if (ActiveSnapshotSet()) /* transaction could have aborted */ + PopActiveSnapshot(); /* * Check for config changes before acquiring lock for further jobs. diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index 3b1049faef6..afaa580ae4d 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -140,6 +140,9 @@ static CheckpointerShmemStruct *CheckpointerShmem; /* interval for calling AbsorbSyncRequests in CheckpointWriteDelay */ #define WRITES_PER_ABSORB 1000 +/* Max number of requests the checkpointer request queue can hold */ +#define MAX_CHECKPOINT_REQUESTS 10000000 + /* * GUC parameters */ @@ -873,11 +876,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; } @@ -906,7 +912,7 @@ CheckpointerShmemInit(void) */ MemSet(CheckpointerShmem, 0, size); SpinLockInit(&CheckpointerShmem->ckpt_lck); - CheckpointerShmem->max_requests = NBuffers; + CheckpointerShmem->max_requests = Min(NBuffers, MAX_CHECKPOINT_REQUESTS); ConditionVariableInit(&CheckpointerShmem->start_cv); ConditionVariableInit(&CheckpointerShmem->done_cv); } diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ef28acf163a..d3b7fc5c8a1 100755 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -970,7 +970,9 @@ PostmasterMain(int argc, char *argv[]) { +#if !defined(WIN32) || defined(_MSC_VER) extern char **environ; +#endif char **p; ereport(DEBUG3, diff --git a/src/backend/replication/backup_manifest.c b/src/backend/replication/backup_manifest.c index 27191044871..0968d91c61b 100644 --- a/src/backend/replication/backup_manifest.c +++ b/src/backend/replication/backup_manifest.c @@ -249,7 +249,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr, if (first_wal_range && endtli != entry->tli) ereport(ERROR, errmsg("expected end timeline %u but found timeline %u", - starttli, entry->tli)); + endtli, entry->tli)); /* * If this timeline entry matches with the timeline on which the diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 3c0286f85e1..148efc02859 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -622,12 +622,9 @@ libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn, * Send a query and wait for the results by using the asynchronous libpq * functions and socket readiness events. * - * We must not use the regular blocking libpq functions like PQexec() - * since they are uninterruptible by signals on some platforms, such as - * Windows. - * - * The function is modeled on PQexec() in libpq, but only implements - * those parts that are in use in the walreceiver api. + * 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. */ diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 1c0058fc8fd..c6858da9b0b 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -449,20 +449,24 @@ DecodeHeap2Op(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 (!ctx->fast_forward && - 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; @@ -509,16 +513,20 @@ DecodeHeapOp(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; @@ -529,17 +537,20 @@ DecodeHeapOp(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; @@ -548,26 +559,20 @@ DecodeHeapOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) /* * Inplace updates are only ever performed on catalog tuples and * can, per definition, not change tuple visibility. Since we - * don't decode catalog tuples, we're not interested in the + * also don't decode catalog tuples, we're not interested in the * record's contents. - * - * In-place updates can be used either by XID-bearing transactions - * (e.g. in CREATE INDEX CONCURRENTLY) or by XID-less - * transactions (e.g. VACUUM). In the former case, the commit - * record will include cache invalidations, so we mark the - * transaction as catalog modifying here. Currently that's - * redundant because the commit will do that as well, but once we - * support decoding in-progress relations, this will be important. */ if (!TransactionIdIsValid(xid)) break; + /* PostgreSQL 13 was the last to need these actions. */ SnapBuildProcessChange(builder, xid, buf->origptr); ReorderBufferXidSetCatalogChanges(ctx->reorder, xid, buf->origptr); 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/logical.c b/src/backend/replication/logical/logical.c index 2d76164de53..39bcf844694 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -388,11 +388,11 @@ CreateInitDecodingContext(const char *plugin, * without further interlock its return value might immediately be out of * date. * - * So we have to acquire the ProcArrayLock to prevent computation of new - * xmin horizons by other backends, get the safe decoding xid, and inform - * the slot machinery about the new limit. Once that's done the - * ProcArrayLock can be released as the slot machinery now is - * protecting against vacuum. + * So we have to acquire both the ReplicationSlotControlLock and the + * ProcArrayLock to prevent concurrent computation and update of new xmin + * horizons by other backends, get the safe decoding xid, and inform the + * slot machinery about the new limit. Once that's done both locks can be + * released as the slot machinery now is protecting against vacuum. * * Note that, temporarily, the data, not just the catalog, xmin has to be * reserved if a data snapshot is to be exported. Otherwise the initial @@ -405,6 +405,7 @@ CreateInitDecodingContext(const char *plugin, * * ---- */ + LWLockAcquire(ReplicationSlotControlLock, LW_EXCLUSIVE); LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); xmin_horizon = GetOldestSafeDecodingTransactionId(!need_full_snapshot); @@ -419,6 +420,7 @@ CreateInitDecodingContext(const char *plugin, ReplicationSlotsComputeRequiredXmin(true); LWLockRelease(ProcArrayLock); + LWLockRelease(ReplicationSlotControlLock); ReplicationSlotMarkDirty(); ReplicationSlotSave(); @@ -1718,7 +1720,19 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) SpinLockAcquire(&MyReplicationSlot->mutex); - MyReplicationSlot->data.confirmed_flush = 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 && @@ -1756,7 +1770,15 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) SpinLockRelease(&MyReplicationSlot->mutex); - /* first write new xmin to disk, so we know what's up after a crash */ + /* + * First, write new xmin and restart_lsn to disk so we know what's up + * after a crash. Even when we do this, the checkpointer can see the + * updated restart_lsn value in the shared memory; then, a crash can + * happen before we manage to write that value to the disk. Thus, + * checkpointer still needs to make special efforts to keep WAL + * segments required by the restart_lsn written to the disk. See + * CreateCheckPoint() and CreateRestartPoint() for details. + */ if (updated_xmin || updated_restart) { ReplicationSlotMarkDirty(); @@ -1783,7 +1805,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/proto.c b/src/backend/replication/logical/proto.c index 1cf59e0fb0f..7b9beb7797a 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -17,6 +17,7 @@ #include "catalog/pg_type.h" #include "libpq/pqformat.h" #include "replication/logicalproto.h" +#include "replication/logicalrelation.h" #include "utils/lsyscache.h" #include "utils/syscache.h" @@ -396,6 +397,7 @@ void logicalrep_write_rel(StringInfo out, TransactionId xid, Relation rel) { char *relname; + char relreplident = rel->rd_rel->relreplident; pq_sendbyte(out, LOGICAL_REP_MSG_RELATION); @@ -412,7 +414,9 @@ logicalrep_write_rel(StringInfo out, TransactionId xid, Relation rel) pq_sendstring(out, relname); /* send replica identity */ - pq_sendbyte(out, rel->rd_rel->relreplident); + if (logicalrep_identity_is_full(rel)) + relreplident = REPLICA_IDENTITY_FULL; + pq_sendbyte(out, relreplident); /* send the attribute info */ logicalrep_write_attrs(out, rel); @@ -666,7 +670,7 @@ logicalrep_write_attrs(StringInfo out, Relation rel) pq_sendint16(out, nliveatts); /* fetch bitmap of REPLICATION IDENTITY attributes */ - replidentfull = (rel->rd_rel->relreplident == REPLICA_IDENTITY_FULL); + replidentfull = logicalrep_identity_is_full(rel); if (!replidentfull) idattrs = RelationGetIdentityKeyBitmap(rel); diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index a5e5bf9f41a..2f56a398ca8 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -25,8 +25,11 @@ #include "replication/logicalrelation.h" #include "replication/worker_internal.h" #include "utils/inval.h" +#include "utils/syscache.h" +bool logical_replication_fallback_to_full_identity = false; + static MemoryContext LogicalRepRelMapContext = NULL; static HTAB *LogicalRepRelMap = NULL; @@ -703,3 +706,28 @@ logicalrep_partition_open(LogicalRepRelMapEntry *root, return entry; } + +/* + * logicalrep_identity_is_full + * + * Check whether the replica identity of the relation is full or not. + * When a table's replica identity is default, but there is no primary key, + * if logical_replication_fallback_to_full_identity is true, we consider the + * replica identity as full. This function should only be called on the + * publisher. + */ +bool +logicalrep_identity_is_full(Relation relation) +{ + Form_pg_class relform = RelationGetForm(relation); + + if (relform->relreplident == REPLICA_IDENTITY_FULL) + return true; + + if (relform->relreplident == REPLICA_IDENTITY_DEFAULT && + logical_replication_fallback_to_full_identity && + !OidIsValid(RelationGetReplicaIndex(relation))) + return true; + + return false; +} diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index c3385749d27..bf9aa6c8558 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -103,12 +103,24 @@ #include "storage/sinval.h" #include "utils/builtins.h" #include "utils/combocid.h" +#include "utils/inval.h" #include "utils/memdebug.h" #include "utils/memutils.h" #include "utils/rel.h" #include "utils/relfilenodemap.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 { @@ -453,6 +465,12 @@ ReorderBufferReturnTXN(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); @@ -2500,7 +2518,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(); @@ -2546,8 +2574,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(); @@ -2873,7 +2910,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, @@ -2961,9 +2999,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, @@ -3218,6 +3257,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 = ReorderBufferGetChange(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. * @@ -3238,7 +3328,6 @@ ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, { ReorderBufferTXN *txn; MemoryContext oldcontext; - ReorderBufferChange *change; txn = ReorderBufferTXNByXid(rb, xid, true, NULL, lsn, true); @@ -3254,35 +3343,77 @@ 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. + */ + if (txn->toptxn) + txn = txn->toptxn; + + 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 = ReorderBufferGetChange(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); } @@ -5196,3 +5327,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/snapbuild.c b/src/backend/replication/logical/snapbuild.c index 7b1571c060a..8f8546922fe 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -290,7 +290,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); /* xlog reading helper functions for SnapBuildProcessRunningXacts */ static bool SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *running); @@ -843,15 +843,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; @@ -859,7 +859,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) { @@ -872,6 +873,14 @@ 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 @@ -881,13 +890,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_prepared(txn) || rbtxn_skip_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/%X", txn->xid, LSN_FORMAT_ARGS(lsn)); /* @@ -897,6 +906,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); + } + } } } @@ -1175,8 +1219,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); } } @@ -1982,8 +2029,12 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn) if (TransactionIdPrecedes(ondisk.builder.xmin, builder->initial_xmin_horizon)) goto snapshot_not_interesting; - /* consistent snapshots have no next phase */ + /* + * Consistent snapshots have no next phase. Reset next_phase_at as it is + * possible that an old value may remain. + */ Assert(ondisk.builder.next_phase_at == InvalidTransactionId); + builder->next_phase_at = InvalidTransactionId; /* ok, we think the snapshot is sensible, copy over everything important */ builder->xmin = ondisk.builder.xmin; diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 26b71dee672..c02d2b7b5f7 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -366,6 +366,7 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) static HTAB *last_start_times = NULL; ListCell *lc; bool started_tx = false; + Relation rel = NULL; Assert(!IsTransactionState()); @@ -463,7 +464,16 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) * refresh for the subscription where we remove the table * state and its origin and by this time the origin might be * already removed. 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); + ReplicationOriginNameForTablesync(MyLogicalRepWorker->subid, rstate->relid, originname, @@ -473,9 +483,9 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) /* * Update the state to READY only after the origin cleanup. */ - UpdateSubscriptionRelState(MyLogicalRepWorker->subid, - rstate->relid, rstate->state, - rstate->lsn); + UpdateSubscriptionRelStateEx(MyLogicalRepWorker->subid, + rstate->relid, rstate->state, + rstate->lsn, true); } } else @@ -526,7 +536,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); } @@ -586,6 +603,10 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) } } + /* Close table if opened */ + if (rel) + table_close(rel, NoLock); + if (started_tx) { CommitTransactionCommand(); @@ -1036,12 +1057,26 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) MyLogicalRepWorker->relstate_lsn = InvalidXLogRecPtr; SpinLockRelease(&MyLogicalRepWorker->relmutex); - /* Update the state and make it visible to others. */ + /* + * Update the state, create the replication origin, and make them visible + * to others. + */ StartTransactionCommand(); UpdateSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, MyLogicalRepWorker->relstate, MyLogicalRepWorker->relstate_lsn); + + /* + * Create the replication origin in a separate transaction from the one + * that sets up the origin in shared memory. This prevents the risk that + * changes to the origin in shared memory cannot be rolled back if the + * transaction aborts. + */ + originid = replorigin_by_name(originname, true); + if (!OidIsValid(originid)) + originid = replorigin_create(originname); + CommitTransactionCommand(); pgstat_report_stat(false); @@ -1079,37 +1114,21 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) CRS_USE_SNAPSHOT, origin_startpos); /* - * Setup replication origin tracking. The purpose of doing this before the - * copy is to avoid doing the copy again due to any error in setting up - * origin tracking. + * Advance the origin to the LSN got from walrcv_create_slot and then set + * up the origin. The advancement is WAL logged for the purpose of + * recovery. Locks are to prevent the replication origin from vanishing + * while advancing. + * + * The purpose of doing these before the copy is to avoid doing the copy + * again due to any error in advancing or setting up origin tracking. */ - originid = replorigin_by_name(originname, true); - if (!OidIsValid(originid)) - { - /* - * Origin tracking does not exist, so create it now. - * - * Then advance to the LSN got from walrcv_create_slot. This is WAL - * logged for the purpose of recovery. Locks are to prevent the - * replication origin from vanishing while advancing. - */ - originid = replorigin_create(originname); - - LockRelationOid(ReplicationOriginRelationId, RowExclusiveLock); - replorigin_advance(originid, *origin_startpos, InvalidXLogRecPtr, - true /* go backward */ , true /* WAL log */ ); - UnlockRelationOid(ReplicationOriginRelationId, RowExclusiveLock); + LockRelationOid(ReplicationOriginRelationId, RowExclusiveLock); + replorigin_advance(originid, *origin_startpos, InvalidXLogRecPtr, + true /* go backward */ , true /* WAL log */ ); + UnlockRelationOid(ReplicationOriginRelationId, RowExclusiveLock); - replorigin_session_setup(originid); - replorigin_session_origin = originid; - } - else - { - ereport(ERROR, - (errcode(ERRCODE_DUPLICATE_OBJECT), - errmsg("replication origin \"%s\" already exists", - originname))); - } + replorigin_session_setup(originid); + replorigin_session_origin = originid; /* Now do the initial data copy */ PushActiveSnapshot(GetTransactionSnapshot()); diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index d1c7d352363..93a7714922e 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -3129,6 +3129,13 @@ ApplyWorkerMain(Datum main_arg) 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) { diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index a81215cff86..e7b85fcdddf 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -220,7 +220,11 @@ parse_output_parameters(List *options, PGOutputData *data) errmsg("conflicting or redundant options"))); publication_names_given = true; - if (!SplitIdentifierString(strVal(defel->arg), ',', + /* + * Pass a copy of the DefElem->arg since SplitIdentifierString + * modifies its input. + */ + if (!SplitIdentifierString(pstrdup(strVal(defel->arg)), ',', &data->publication_names)) ereport(ERROR, (errcode(ERRCODE_INVALID_NAME), diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 037a347cba0..78e5566b5d8 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -163,31 +163,62 @@ ReplicationSlotsShmemInit(void) /* * Check whether the passed slot name is valid and report errors at elevel. * + * See comments for ReplicationSlotValidateNameInternal(). + */ +bool +ReplicationSlotValidateName(const char *name, int elevel) +{ + int err_code; + char *err_msg = NULL; + char *err_hint = NULL; + + if (!ReplicationSlotValidateNameInternal(name, &err_code, &err_msg, + &err_hint)) + { + ereport(elevel, + errcode(err_code), + errmsg_internal("%s", err_msg), + (err_hint != NULL) ? errhint("%s", err_hint) : 0); + + pfree(err_msg); + if (err_hint != NULL) + pfree(err_hint); + return false; + } + + return true; +} + +/* + * Check whether the passed slot name is valid. + * * 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. + * Returns true if the slot name is valid. Otherwise, returns false and stores + * the error code, error message, and optional hint in err_code, err_msg, and + * err_hint, respectively. The caller is responsible for freeing err_msg and + * err_hint, which are palloc'd. */ bool -ReplicationSlotValidateName(const char *name, int elevel) +ReplicationSlotValidateNameInternal(const char *name, int *err_code, + char **err_msg, char **err_hint) { const char *cp; if (strlen(name) == 0) { - ereport(elevel, - (errcode(ERRCODE_INVALID_NAME), - errmsg("replication slot name \"%s\" is too short", - name))); + *err_code = ERRCODE_INVALID_NAME; + *err_msg = psprintf(_("replication slot name \"%s\" is too short"), name); + *err_hint = NULL; return false; } if (strlen(name) >= NAMEDATALEN) { - ereport(elevel, - (errcode(ERRCODE_NAME_TOO_LONG), - errmsg("replication slot name \"%s\" is too long", - name))); + *err_code = ERRCODE_NAME_TOO_LONG; + *err_msg = psprintf(_("replication slot name \"%s\" is too long"), name); + *err_hint = NULL; return false; } @@ -197,11 +228,9 @@ ReplicationSlotValidateName(const char *name, int elevel) || (*cp >= '0' && *cp <= '9') || (*cp == '_'))) { - ereport(elevel, - (errcode(ERRCODE_INVALID_NAME), - errmsg("replication slot name \"%s\" contains invalid character", - name), - errhint("Replication slot names may only contain lower case letters, numbers, and the underscore character."))); + *err_code = ERRCODE_INVALID_NAME; + *err_msg = psprintf(_("replication slot name \"%s\" contains invalid character"), name); + *err_hint = psprintf(_("Replication slot names may only contain lower case letters, numbers, and the underscore character.")); return false; } } @@ -424,7 +453,7 @@ ReplicationSlotAcquire(const char *name, bool nowait) SpinLockRelease(&s->mutex); } else - active_pid = MyProcPid; + s->active_pid = active_pid = MyProcPid; LWLockRelease(ReplicationSlotControlLock); /* @@ -759,8 +788,11 @@ ReplicationSlotPersist(void) /* * Compute the oldest xmin across all slots and store it in the ProcArray. * - * If already_locked is true, ProcArrayLock has already been acquired - * exclusively. + * If already_locked is true, both the ReplicationSlotControlLock and the + * ProcArrayLock have already been acquired exclusively. It is crucial that the + * caller first acquires the ReplicationSlotControlLock, followed by the + * ProcArrayLock, to prevent any undetectable deadlocks since this function + * acquires them in that order. */ void ReplicationSlotsComputeRequiredXmin(bool already_locked) @@ -770,8 +802,33 @@ ReplicationSlotsComputeRequiredXmin(bool already_locked) TransactionId agg_catalog_xmin = InvalidTransactionId; Assert(ReplicationSlotCtl != NULL); + Assert(!already_locked || + (LWLockHeldByMeInMode(ReplicationSlotControlLock, LW_EXCLUSIVE) && + LWLockHeldByMeInMode(ProcArrayLock, LW_EXCLUSIVE))); - LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); + /* + * Hold the ReplicationSlotControlLock until after updating the slot xmin + * values, so no backend updates the initial xmin for newly created slot + * concurrently. A shared lock is used here to minimize lock contention, + * especially when many slots exist and advancements occur frequently. + * This is safe since an exclusive lock is taken during initial slot xmin + * update in slot creation. + * + * One might think that we can hold the ProcArrayLock exclusively and + * update the slot xmin values, but it could increase lock contention on + * the ProcArrayLock, which is not great since this function can be called + * at non-negligible frequency. + * + * Concurrent invocation of this function may cause the computed slot xmin + * to regress. However, this is harmless because tuples prior to the most + * recent xmin are no longer useful once advancement occurs (see + * LogicalConfirmReceivedLocation where the slot's xmin value is flushed + * before updating the effective_xmin). Thus, such regression merely + * prevents VACUUM from prematurely removing tuples without causing the + * early deletion of required data. + */ + if (!already_locked) + LWLockAcquire(ReplicationSlotControlLock, LW_SHARED); for (i = 0; i < max_replication_slots; i++) { @@ -807,9 +864,10 @@ ReplicationSlotsComputeRequiredXmin(bool already_locked) agg_catalog_xmin = effective_catalog_xmin; } - LWLockRelease(ReplicationSlotControlLock); - ProcArraySetReplicationSlotXmin(agg_xmin, agg_catalog_xmin, already_locked); + + if (!already_locked) + LWLockRelease(ReplicationSlotControlLock); } /* @@ -1075,71 +1133,73 @@ void ReplicationSlotReserveWal(void) { ReplicationSlot *slot = MyReplicationSlot; + XLogSegNo segno; + XLogRecPtr restart_lsn; Assert(slot != NULL); Assert(slot->data.restart_lsn == InvalidXLogRecPtr); /* - * The replication slot mechanism is used to prevent removal of required - * WAL. As there is no interlock between this routine and checkpoints, WAL - * segments could concurrently be removed when a now stale return value of - * ReplicationSlotsComputeRequiredLSN() is used. In the unlikely case that - * this happens we'll just retry. + * The replication slot mechanism is used to prevent the removal of + * required WAL. + * + * Acquire an exclusive lock to prevent the checkpoint process from + * concurrently computing the minimum slot LSN (see the call to + * XLogGetReplicationSlotMinimumLSN in CreateCheckPoint). This ensures + * that the WAL reserved for replication cannot be removed during a + * checkpoint. + * + * The mechanism is reliable because if WAL reservation occurs first, the + * checkpoint must wait for the restart_lsn update before determining the + * minimum non-removable LSN. On the other hand, if the checkpoint happens + * first, subsequent WAL reservations will select positions at or beyond + * the redo pointer of that checkpoint. */ - while (true) + LWLockAcquire(ReplicationSlotAllocationLock, LW_EXCLUSIVE); + + /* + * For logical slots log a standby snapshot and start logical decoding at + * exactly that position. That allows the slot to start up more quickly. + * + * That's not needed (or indeed helpful) for physical slots as they'll + * start replay at the last logged checkpoint anyway. Instead return the + * location of the last redo LSN, where a base backup has to start replay + * at. + */ + if (!RecoveryInProgress() && SlotIsLogical(slot)) { - XLogSegNo segno; - XLogRecPtr restart_lsn; + XLogRecPtr flushptr; - /* - * For logical slots log a standby snapshot and start logical decoding - * at exactly that position. That allows the slot to start up more - * quickly. - * - * That's not needed (or indeed helpful) for physical slots as they'll - * start replay at the last logged checkpoint anyway. Instead return - * the location of the last redo LSN. While that slightly increases - * the chance that we have to retry, it's where a base backup has to - * start replay at. - */ - if (!RecoveryInProgress() && SlotIsLogical(slot)) - { - XLogRecPtr flushptr; + /* start at current insert position */ + restart_lsn = GetXLogInsertRecPtr(); + SpinLockAcquire(&slot->mutex); + slot->data.restart_lsn = restart_lsn; + SpinLockRelease(&slot->mutex); - /* start at current insert position */ - restart_lsn = GetXLogInsertRecPtr(); - SpinLockAcquire(&slot->mutex); - slot->data.restart_lsn = restart_lsn; - SpinLockRelease(&slot->mutex); + /* make sure we have enough information to start */ + flushptr = LogStandbySnapshot(); - /* make sure we have enough information to start */ - flushptr = LogStandbySnapshot(); + /* and make sure it's fsynced to disk */ + XLogFlush(flushptr); + } + else + { + restart_lsn = GetRedoRecPtr(); + SpinLockAcquire(&slot->mutex); + slot->data.restart_lsn = restart_lsn; + SpinLockRelease(&slot->mutex); + } - /* and make sure it's fsynced to disk */ - XLogFlush(flushptr); - } - else - { - restart_lsn = GetRedoRecPtr(); - SpinLockAcquire(&slot->mutex); - slot->data.restart_lsn = restart_lsn; - SpinLockRelease(&slot->mutex); - } + /* prevent WAL removal as fast as possible */ + ReplicationSlotsComputeRequiredLSN(); - /* prevent WAL removal as fast as possible */ - ReplicationSlotsComputeRequiredLSN(); + /* Checkpoint shouldn't remove the required WAL. */ + XLByteToSeg(slot->data.restart_lsn, segno, wal_segment_size); + if (XLogGetLastRemovedSegno() >= segno) + elog(ERROR, "WAL required by replication slot %s has been removed concurrently", + NameStr(slot->data.name)); - /* - * If all required WAL is still there, great, otherwise retry. The - * slot should prevent further removal of WAL, unless there's a - * concurrent ReplicationSlotsComputeRequiredLSN() after we've written - * the new restart_lsn above, so normally we should never need to loop - * more than twice. - */ - XLByteToSeg(slot->data.restart_lsn, segno, wal_segment_size); - if (XLogGetLastRemovedSegno() < segno) - break; - } + LWLockRelease(ReplicationSlotAllocationLock); } /* @@ -1577,6 +1637,7 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel) pgstat_report_wait_end(); CloseTransientFile(fd); + unlink(tmppath); LWLockRelease(&slot->io_in_progress_lock); /* if write didn't set errno, assume problem is no disk space */ @@ -1597,7 +1658,9 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel) pgstat_report_wait_end(); CloseTransientFile(fd); + unlink(tmppath); LWLockRelease(&slot->io_in_progress_lock); + errno = save_errno; ereport(elevel, (errcode_for_file_access(), @@ -1611,7 +1674,9 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel) { int save_errno = errno; + unlink(tmppath); LWLockRelease(&slot->io_in_progress_lock); + errno = save_errno; ereport(elevel, (errcode_for_file_access(), @@ -1625,7 +1690,9 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel) { int save_errno = errno; + unlink(tmppath); LWLockRelease(&slot->io_in_progress_lock); + errno = save_errno; ereport(elevel, (errcode_for_file_access(), diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index bdbc9ef844b..ff74ccf99b6 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -163,16 +163,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. */ @@ -188,16 +195,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; } @@ -938,7 +981,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. @@ -948,7 +991,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); @@ -972,7 +1016,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/walreceiver.c b/src/backend/replication/walreceiver.c index 4831a259c48..7ae04b9682c 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -890,11 +890,9 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) if (recvFile < 0) { - bool use_existent = true; - /* Create/use new log file */ XLByteToSeg(recptr, recvSegNo, wal_segment_size); - recvFile = XLogFileInit(recvSegNo, &use_existent, true); + recvFile = XLogFileInit(recvSegNo); recvFileTLI = ThisTimeLineID; } diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 28f0a294736..3fe24bb44ab 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -214,6 +214,20 @@ typedef struct int write_head; int read_heads[NUM_SYNC_REP_WAIT_MODE]; WalTimeSample last_read[NUM_SYNC_REP_WAIT_MODE]; + + /* + * Overflow entries for read heads that collide with the write head. + * + * When the cyclic buffer fills (write head is about to collide with a + * read head), we save that read head's current sample here and mark it as + * using overflow (read_heads[i] = -1). This allows the write head to + * continue advancing while the overflowed mode continues lag computation + * using the saved sample. + * + * Once the standby's reported LSN advances past the overflow entry's LSN, + * we transition back to normal buffer-based tracking. + */ + WalTimeSample overflowed[NUM_SYNC_REP_WAIT_MODE]; } LagTracker; static LagTracker *lag_tracker; @@ -1906,6 +1920,10 @@ PhysicalConfirmReceivedLocation(XLogRecPtr lsn) * be energy wasted - the worst lost information can do here is give us * wrong information in a statistics view - we'll just potentially be more * conservative in removing files. + * + * Checkpointer makes special efforts to keep the WAL segments required by + * the restart_lsn written to the disk. See CreateCheckPoint() and + * CreateRestartPoint() for details. */ } @@ -3568,7 +3586,6 @@ WalSndKeepaliveIfNecessary(void) static void LagTrackerWrite(XLogRecPtr lsn, TimestampTz local_flush_time) { - bool buffer_full; int new_write_head; int i; @@ -3590,25 +3607,19 @@ LagTrackerWrite(XLogRecPtr lsn, TimestampTz local_flush_time) * of space. */ new_write_head = (lag_tracker->write_head + 1) % LAG_TRACKER_BUFFER_SIZE; - buffer_full = false; for (i = 0; i < NUM_SYNC_REP_WAIT_MODE; ++i) { + /* + * If the buffer is full, move the slowest reader to a separate + * overflow entry and free its space in the buffer so the write head + * can advance. + */ if (new_write_head == lag_tracker->read_heads[i]) - buffer_full = true; - } - - /* - * If the buffer is full, for now we just rewind by one slot and overwrite - * the last sample, as a simple (if somewhat uneven) way to lower the - * sampling rate. There may be better adaptive compaction algorithms. - */ - if (buffer_full) - { - new_write_head = lag_tracker->write_head; - if (lag_tracker->write_head > 0) - lag_tracker->write_head--; - else - lag_tracker->write_head = LAG_TRACKER_BUFFER_SIZE - 1; + { + lag_tracker->overflowed[i] = + lag_tracker->buffer[lag_tracker->read_heads[i]]; + lag_tracker->read_heads[i] = -1; + } } /* Store a sample at the current write head position. */ @@ -3635,6 +3646,28 @@ LagTrackerRead(int head, XLogRecPtr lsn, TimestampTz now) { TimestampTz time = 0; + /* + * If 'lsn' has not passed the WAL position stored in the overflow entry, + * return the elapsed time (in microseconds) since the saved local flush + * time. If the flush time is in the future (due to clock drift), return + * -1 to treat as no valid sample. + * + * Otherwise, switch back to using the buffer to control the read head and + * compute the elapsed time. The read head is then reset to point to the + * oldest entry in the buffer. + */ + if (lag_tracker->read_heads[head] == -1) + { + if (lag_tracker->overflowed[head].lsn > lsn) + return (now >= lag_tracker->overflowed[head].time) ? + now - lag_tracker->overflowed[head].time : -1; + + time = lag_tracker->overflowed[head].time; + lag_tracker->last_read[head] = lag_tracker->overflowed[head]; + lag_tracker->read_heads[head] = + (lag_tracker->write_head + 1) % LAG_TRACKER_BUFFER_SIZE; + } + /* Read all unread samples up to this LSN or end of buffer. */ while (lag_tracker->read_heads[head] != lag_tracker->write_head && lag_tracker->buffer[lag_tracker->read_heads[head]].lsn <= lsn) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 6a892ee9cc9..70f755ab9fd 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -585,7 +585,10 @@ rewriteRuleAction(Query *parsetree, } } - /* OK, it's safe to combine the CTE lists */ + /* + * OK, it's safe to combine the CTE lists. Beware that RewriteQuery + * knows we concatenate the lists in this order. + */ sub_action->cteList = list_concat(sub_action->cteList, copyObject(parsetree->cteList)); /* ... and don't forget about the associated flags */ @@ -1941,8 +1944,12 @@ ApplyRetrieveRule(Query *parsetree, rte->rtekind = RTE_SUBQUERY; rte->subquery = rule_action; rte->security_barrier = RelationIsSecurityView(relation); - /* Clear fields that should not be set in a subquery RTE */ - rte->relid = InvalidOid; + + /* + * Clear fields that should not be set in a subquery RTE. However, we + * retain the relid for now, to support correct operation of + * makeWholeRowVar during planning. + */ rte->relkind = 0; rte->rellockmode = 0; rte->tablesample = NULL; @@ -3759,9 +3766,13 @@ rewriteTargetView(Query *parsetree, Relation view) * orig_rt_length is the length of the originating query's rtable, for product * queries created by fireRules(), and 0 otherwise. This is used to skip any * already-processed VALUES RTEs from the original query. + * + * num_ctes_processed is the number of CTEs at the end of the query's cteList + * that have already been rewritten, and must not be rewritten again. */ static List * -RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length) +RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length, + int num_ctes_processed) { CmdType event = parsetree->commandType; bool instead = false; @@ -3775,17 +3786,29 @@ RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length) * First, recursively process any insert/update/delete statements in WITH * clauses. (We have to do this first because the WITH clauses may get * copied into rule actions below.) + * + * Any new WITH clauses from rule actions are processed when we recurse + * into product queries below. However, when recursing, we must take care + * to avoid rewriting a CTE query more than once (because expanding + * generated columns in the targetlist more than once would fail). Since + * new CTEs from product queries are added to the start of the list (see + * rewriteRuleAction), we just skip the last num_ctes_processed items. */ foreach(lc1, parsetree->cteList) { CommonTableExpr *cte = lfirst_node(CommonTableExpr, lc1); Query *ctequery = castNode(Query, cte->ctequery); + int i = foreach_current_index(lc1); List *newstuff; + /* Skip already-processed CTEs at the end of the list */ + if (i >= list_length(parsetree->cteList) - num_ctes_processed) + break; + if (ctequery->commandType == CMD_SELECT) continue; - newstuff = RewriteQuery(ctequery, rewrite_events, 0); + newstuff = RewriteQuery(ctequery, rewrite_events, 0, 0); /* * Currently we can only handle unconditional, single-statement DO @@ -3844,6 +3867,7 @@ RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length) errmsg("multi-statement DO INSTEAD rules are not supported for data-modifying statements in WITH"))); } } + num_ctes_processed = list_length(parsetree->cteList); /* * If the statement is an insert, update, delete, or merge, adjust its @@ -4202,7 +4226,8 @@ RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length) newstuff = RewriteQuery(pt, rewrite_events, pt == parsetree ? orig_rt_length : - product_orig_rt_length); + product_orig_rt_length, + num_ctes_processed); rewritten = list_concat(rewritten, newstuff); } @@ -4354,7 +4379,7 @@ QueryRewrite(Query *parsetree) * * Apply all non-SELECT rules possibly getting 0 or many queries */ - querylist = RewriteQuery(parsetree, NIL, 0); + querylist = RewriteQuery(parsetree, NIL, 0, 0); /* * Step 2 diff --git a/src/backend/snowball/libstemmer/api.c b/src/backend/snowball/libstemmer/api.c index 375938e6d13..358f5633b28 100644 --- a/src/backend/snowball/libstemmer/api.c +++ b/src/backend/snowball/libstemmer/api.c @@ -34,7 +34,7 @@ extern struct SN_env * SN_create_env(int S_size, int I_size) extern void SN_close_env(struct SN_env * z, int S_size) { if (z == NULL) return; - if (S_size) + if (z->S) { int i; for (i = 0; i < S_size; i++) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 4212e0cd249..483b266f282 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -1345,6 +1345,9 @@ choose_best_statistics(List *stats, char requiredkind, * 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. @@ -1352,7 +1355,7 @@ choose_best_statistics(List *stats, char requiredkind, 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)) @@ -1387,7 +1390,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; @@ -1422,24 +1424,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 leak-proof. - * - * 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); @@ -1449,7 +1442,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; @@ -1489,24 +1481,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 leak-proof. - * - * 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); @@ -1543,7 +1526,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; } @@ -1557,8 +1541,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); @@ -1597,10 +1583,9 @@ static bool statext_is_compatible_clause(PlannerInfo *root, Node *clause, Index relid, Bitmapset **attnums, List **exprs) { - RangeTblEntry *rte = root->simple_rte_array[relid]; RestrictInfo *rinfo; int clause_relid; - Oid userid; + bool leakproof; /* * Special-case handling for bare BoolExpr AND clauses, because the @@ -1640,19 +1625,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. Use - * checkAsUser if it's set, in case we're accessing the table via a view. + * 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 = rte->checkAsUser ? rte->checkAsUser : 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; @@ -1677,26 +1674,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 */ diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index adb39dada4c..c831ec4ac46 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -36,6 +36,9 @@ #include "access/tableam.h" #include "access/xlog.h" #include "catalog/catalog.h" +#ifdef USE_ASSERT_CHECKING +#include "catalog/pg_tablespace_d.h" +#endif #include "catalog/storage.h" #include "executor/instrument.h" #include "lib/binaryheap.h" @@ -487,6 +490,10 @@ static void FindAndDropRelFileNodeBuffers(RelFileNode rnode, BlockNumber firstDelBlock); 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 rnode_comparator(const void *p1, const void *p2); static inline int buffertag_comparator(const BufferTag *a, const BufferTag *b); static inline int ckpt_buforder_comparator(const CkptSortItem *a, const CkptSortItem *b); @@ -2697,6 +2704,65 @@ 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 relNode==relid assumption holds until a catalog experiences VACUUM + * FULL or similar. After a command like that, relNode will be in the + * normal (non-catalog) range, and we lose the ability to detect hazardous + * access to that catalog. Calling RelidByRelfilenode() would close that + * gap, but RelidByRelfilenode() might then deadlock with a held lock. + */ + relid = tag.rnode.relNode; + + Assert(!IsCatalogRelationOid(relid)); + /* Shared rels are always catalogs: detect even after VACUUM FULL. */ + Assert(tag.rnode.spcNode != GLOBALTABLESPACE_OID); +} +#endif + + /* * Helper routine to issue warnings when a buffer is unexpectedly pinned */ @@ -2962,6 +3028,7 @@ RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum) case RELKIND_SEQUENCE: case RELKIND_INDEX: case RELKIND_PARTITIONED_INDEX: + case RELKIND_GLOBAL_INDEX: return smgrnblocks(RelationGetSmgr(relation), forkNum); case RELKIND_RELATION: @@ -3030,8 +3097,8 @@ BufferIsPermanent(Buffer buffer) XLogRecPtr BufferGetLSNAtomic(Buffer buffer) { - BufferDesc *bufHdr = GetBufferDescriptor(buffer - 1); char *page = BufferGetPage(buffer); + BufferDesc *bufHdr; XLogRecPtr lsn; uint32 buf_state; @@ -3045,6 +3112,7 @@ BufferGetLSNAtomic(Buffer buffer) Assert(BufferIsValid(buffer)); Assert(BufferIsPinned(buffer)); + bufHdr = GetBufferDescriptor(buffer - 1); buf_state = LockBufHdr(bufHdr); lsn = PageGetLSN(page); UnlockBufHdr(bufHdr, buf_state); diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 87dbdd94431..2b9ab42f77c 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -366,25 +366,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 @@ -834,10 +831,7 @@ durable_rename_excl(const char *oldfile, const char *newfile, int elevel) ereport(elevel, (errcode_for_file_access(), errmsg("could not link file \"%s\" to \"%s\": %m", - oldfile, newfile), - (AmCheckpointerProcess() ? - errhint("This is known to fail occasionally during archive recovery, where it is harmless.") : - 0))); + oldfile, newfile))); return -1; } unlink(oldfile); @@ -847,10 +841,7 @@ durable_rename_excl(const char *oldfile, const char *newfile, int elevel) ereport(elevel, (errcode_for_file_access(), errmsg("could not rename file \"%s\" to \"%s\": %m", - oldfile, newfile), - (AmCheckpointerProcess() ? - errhint("This is known to fail occasionally during archive recovery, where it is harmless.") : - 0))); + oldfile, newfile))); return -1; } #endif diff --git a/src/backend/storage/file/sharedfileset.c b/src/backend/storage/file/sharedfileset.c index ed37c940adc..35f156d4e08 100644 --- a/src/backend/storage/file/sharedfileset.c +++ b/src/backend/storage/file/sharedfileset.c @@ -230,6 +230,16 @@ SharedFileSetDeleteAll(SharedFileSet *fileset) SharedFileSetUnregister(fileset); } +/* + * Register cleanup callback of an already initialized fileset. + */ +void +SharedFileSetRegisterCleanupCallback(SharedFileSet *fileset, dsm_segment *seg) +{ + /* Register our cleanup callback. */ + if (seg) + on_dsm_detach(seg, SharedFileSetOnDetach, PointerGetDatum(fileset)); +} /* * Callback function that will be invoked when this backend detaches from a * DSM segment holding a SharedFileSet that it has created or attached to. If diff --git a/src/backend/storage/freespace/indexfsm.c b/src/backend/storage/freespace/indexfsm.c index d66e10b89d2..4a2087d415c 100644 --- a/src/backend/storage/freespace/indexfsm.c +++ b/src/backend/storage/freespace/indexfsm.c @@ -16,7 +16,7 @@ * This is similar to the FSM used for heap, in freespace.c, but instead * of tracking the amount of free space on pages, we only track whether * pages are completely free or in-use. We use the same FSM implementation - * as for heaps, using BLCKSZ - 1 to denote used pages, and 0 for unused. + * as for heaps, using 0 to denote used pages, and (BLCKSZ - 1) for unused. * *------------------------------------------------------------------------- */ diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c index fa807c4e673..b2503fd22b1 100644 --- a/src/backend/storage/ipc/ipc.c +++ b/src/backend/storage/ipc/ipc.c @@ -29,6 +29,7 @@ #endif #include "storage/dsm.h" #include "storage/ipc.h" +#include "storage/lwlock.h" #include "tcop/tcopprot.h" @@ -229,13 +230,19 @@ shmem_exit(int code) { shmem_exit_inprogress = true; + /* + * Release any LWLocks we might be holding before callbacks run. This + * prevents accessing locks in detached DSM segments and allows callbacks + * to acquire new locks. + */ + LWLockReleaseAll(); + /* * Call before_shmem_exit callbacks. * * These should be things that need most of the system to still be up and * working, such as cleanup of temp relations, which requires catalog - * access; or things that need to be completed because later cleanup steps - * depend on them, such as releasing lwlocks. + * access. */ elog(DEBUG3, "shmem_exit(%d): %d before_shmem_exit callbacks to make", code, before_shmem_exit_index); diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 27a4a708e5b..ac4c755ee17 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -4609,9 +4609,23 @@ ExpireTreeKnownAssignedTransactionIds(TransactionId xid, int nsubxids, void ExpireAllKnownAssignedTransactionIds(void) { + FullTransactionId latestXid; + LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); KnownAssignedXidsRemovePreceding(InvalidTransactionId); + /* Reset latestCompletedXid to nextXid - 1 */ + Assert(FullTransactionIdIsValid(ShmemVariableCache->nextXid)); + latestXid = ShmemVariableCache->nextXid; + FullTransactionIdRetreat(&latestXid); + ShmemVariableCache->latestCompletedXid = latestXid; + + /* + * Any transactions that were in-progress were effectively aborted, so + * advance xactCompletionCount. + */ + ShmemVariableCache->xactCompletionCount++; + /* * Reset lastOverflowedXid. Currently, lastOverflowedXid has no use after * the call of this function. But do this for unification with what @@ -4629,8 +4643,18 @@ ExpireAllKnownAssignedTransactionIds(void) void ExpireOldKnownAssignedTransactionIds(TransactionId xid) { + TransactionId latestXid; + LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); + /* As in ProcArrayEndTransaction, advance latestCompletedXid */ + latestXid = xid; + TransactionIdRetreat(latestXid); + MaintainLatestCompletedXidRecovery(latestXid); + + /* ... and xactCompletionCount */ + ShmemVariableCache->xactCompletionCount++; + /* * Reset lastOverflowedXid if we know all transactions that have been * possibly running are being gone. Not doing so could cause an incorrect diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c index b54f3fb5382..7e75dad2b34 100644 --- a/src/backend/storage/lmgr/lmgr.c +++ b/src/backend/storage/lmgr/lmgr.c @@ -688,7 +688,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); } @@ -726,7 +729,10 @@ ConditionalXactLockTableWait(TransactionId xid) /* 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/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 85601e06e12..5fd74cc7ef2 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -1029,7 +1029,7 @@ LWLockWakeup(LWLock *lock) else desired_state &= ~LW_FLAG_RELEASE_OK; - if (proclist_is_empty(&wakeup)) + if (proclist_is_empty(&lock->waiters)) desired_state &= ~LW_FLAG_HAS_WAITERS; desired_state &= ~LW_FLAG_LOCKED; /* release lock */ @@ -1908,6 +1908,10 @@ LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val) * unchanged by this operation. This is necessary since InterruptHoldoffCount * has been set to an appropriate level earlier in error recovery. We could * decrement it below zero if we allow it to drop for each released lock! + * + * Note that this function must be safe to call even before the LWLock + * subsystem has been initialized (e.g., during early startup failures). + * In that case, num_held_lwlocks will be 0 and we do nothing. */ void LWLockReleaseAll(void) @@ -1918,9 +1922,26 @@ LWLockReleaseAll(void) LWLockRelease(held_lwlocks[num_held_lwlocks - 1].lock); } + + Assert(num_held_lwlocks == 0); } +/* + * 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/smgr/md.c b/src/backend/storage/smgr/md.c index b48a6d49681..f0e5abb2e22 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -825,6 +825,9 @@ mdnblocks(SMgrRelation reln, ForkNumber forknum) * functions for this relation or handled interrupts in between. This makes * sure we have opened all active segments, so that truncate loop will get * them all! + * + * If nblocks > curnblk, the request is ignored when we are in InRecovery, + * otherwise, an error is raised. */ void mdtruncate(SMgrRelation reln, ForkNumber forknum, diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 8892473d858..880f59fea1d 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -652,11 +652,20 @@ smgrtruncate2(SMgrRelation reln, ForkNumber *forknum, int nforks, /* * We might as well update the local smgr_cached_nblocks values. The * smgr cache inval message that this function sent will cause other - * backends to invalidate their copies of smgr_fsm_nblocks and - * smgr_vm_nblocks, and these ones too at the next command boundary. - * But these ensure they aren't outright wrong until then. + * backends to invalidate their copies of smgr_cached_nblocks, and + * these ones too at the next command boundary. But ensure they aren't + * outright wrong until then. + * + * We can have nblocks > old_nblocks when a relation was truncated + * multiple times, a replica applied all the truncations, and later + * restarts from a restartpoint located before the truncations. The + * relation on disk will be the size of the last truncate. When + * replaying the first truncate, we will have nblocks > current size. + * In such cases, smgr_truncate does nothing, so set the cached size + * to the old size rather than the requested size. */ - reln->smgr_cached_nblocks[forknum[i]] = nblocks[i]; + reln->smgr_cached_nblocks[forknum[i]] = + nblocks[i] > old_nblocks[i] ? old_nblocks[i] : nblocks[i]; } } diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 9df654f2f5a..614b2b0f952 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -779,45 +779,10 @@ pg_rewrite_query(Query *query) } #endif -#ifdef WRITE_READ_PARSE_PLAN_TREES - - { - List *new_list = NIL; - ListCell *lc; - - /* - * We currently lack outfuncs/readfuncs support for most utility - * statement types, so only attempt to write/read non-utility queries. - */ - foreach(lc, querytree_list) - { - Query *query = castNode(Query, lfirst(lc)); - - if (query->commandType != CMD_UTILITY) - { - char *str = nodeToString(query); - Query *new_query = stringToNodeWithLocations(str); - - /* - * queryId is not saved in stored rules, but we must preserve - * it here to avoid breaking pg_stat_statements. - */ - new_query->queryId = query->queryId; - - new_list = lappend(new_list, new_query); - pfree(str); - } - else - new_list = lappend(new_list, query); - } - - /* This checks both outfuncs/readfuncs and the equal() routines... */ - if (!equal(new_list, querytree_list)) - elog(WARNING, "outfuncs/readfuncs failed to produce equal parse tree"); - else - querytree_list = new_list; - } -#endif + /* + * We don't apply WRITE_READ_PARSE_PLAN_TREES to rewritten query trees, + * because it breaks the hack of preserving relid for rewritten views. + */ if (Debug_print_rewritten) elog_node_display(LOG, "rewritten parse tree", querytree_list, diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 13563135a45..027941b667f 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -1353,24 +1353,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 1fe0b048e7b..f58c50131e6 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -1871,7 +1871,7 @@ ProcessUtilitySlow(ParseState *pstate, if (!IsA(rel, RangeVar)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("only a single relation is allowed in CREATE STATISTICS"))); + errmsg("CREATE STATISTICS only supports relation names in the FROM clause"))); /* * CREATE STATISTICS will influence future execution plans @@ -1889,7 +1889,7 @@ ProcessUtilitySlow(ParseState *pstate, /* Run parse analysis ... */ stmt = transformStatsStmt(relid, stmt, queryString); - address = CreateStatistics(stmt); + address = CreateStatistics(stmt, true); } break; diff --git a/src/backend/tsearch/dict_synonym.c b/src/backend/tsearch/dict_synonym.c index 2e8afb5af98..dcb25665b5d 100644 --- a/src/backend/tsearch/dict_synonym.c +++ b/src/backend/tsearch/dict_synonym.c @@ -47,8 +47,8 @@ findwrd(char *in, char **end, uint16 *flags) char *lastchar; /* Skip leading spaces */ - while (*in && t_isspace(in)) - in += pg_mblen(in); + while (*in && t_isspace_cstr(in)) + in += pg_mblen_cstr(in); /* Return NULL on empty lines */ if (*in == '\0') @@ -60,10 +60,10 @@ findwrd(char *in, char **end, uint16 *flags) lastchar = start = in; /* Find end of word */ - while (*in && !t_isspace(in)) + while (*in && !t_isspace_cstr(in)) { lastchar = in; - in += pg_mblen(in); + in += pg_mblen_cstr(in); } if (in - lastchar == 1 && t_iseq(lastchar, '*') && flags) diff --git a/src/backend/tsearch/dict_thesaurus.c b/src/backend/tsearch/dict_thesaurus.c index a95ed0891dd..45686654c93 100644 --- a/src/backend/tsearch/dict_thesaurus.c +++ b/src/backend/tsearch/dict_thesaurus.c @@ -190,8 +190,8 @@ thesaurusRead(const char *filename, DictThesaurus *d) ptr = line; /* is it a comment? */ - while (*ptr && t_isspace(ptr)) - ptr += pg_mblen(ptr); + while (*ptr && t_isspace_cstr(ptr)) + ptr += pg_mblen_cstr(ptr); if (t_iseq(ptr, '#') || *ptr == '\0' || t_iseq(ptr, '\n') || t_iseq(ptr, '\r')) @@ -212,7 +212,7 @@ thesaurusRead(const char *filename, DictThesaurus *d) errmsg("unexpected delimiter"))); state = TR_WAITSUBS; } - else if (!t_isspace(ptr)) + else if (!t_isspace_cstr(ptr)) { beginwrd = ptr; state = TR_INLEX; @@ -225,7 +225,7 @@ thesaurusRead(const char *filename, DictThesaurus *d) newLexeme(d, beginwrd, ptr, idsubst, posinsubst++); state = TR_WAITSUBS; } - else if (t_isspace(ptr)) + else if (t_isspace_cstr(ptr)) { newLexeme(d, beginwrd, ptr, idsubst, posinsubst++); state = TR_WAITLEX; @@ -237,15 +237,15 @@ thesaurusRead(const char *filename, DictThesaurus *d) { useasis = true; state = TR_INSUBS; - beginwrd = ptr + pg_mblen(ptr); + beginwrd = ptr + pg_mblen_cstr(ptr); } else if (t_iseq(ptr, '\\')) { useasis = false; state = TR_INSUBS; - beginwrd = ptr + pg_mblen(ptr); + beginwrd = ptr + pg_mblen_cstr(ptr); } - else if (!t_isspace(ptr)) + else if (!t_isspace_cstr(ptr)) { useasis = false; beginwrd = ptr; @@ -254,7 +254,7 @@ thesaurusRead(const char *filename, DictThesaurus *d) } else if (state == TR_INSUBS) { - if (t_isspace(ptr)) + if (t_isspace_cstr(ptr)) { if (ptr == beginwrd) ereport(ERROR, @@ -267,7 +267,7 @@ thesaurusRead(const char *filename, DictThesaurus *d) else elog(ERROR, "unrecognized thesaurus state: %d", state); - ptr += pg_mblen(ptr); + ptr += pg_mblen_cstr(ptr); } if (state == TR_INSUBS) diff --git a/src/backend/tsearch/regis.c b/src/backend/tsearch/regis.c index 80017177222..d890b65b063 100644 --- a/src/backend/tsearch/regis.c +++ b/src/backend/tsearch/regis.c @@ -37,7 +37,7 @@ RS_isRegis(const char *str) { if (state == RS_IN_WAIT) { - if (t_isalpha(c)) + if (t_isalpha_cstr(c)) /* okay */ ; else if (t_iseq(c, '[')) state = RS_IN_ONEOF; @@ -48,14 +48,14 @@ RS_isRegis(const char *str) { if (t_iseq(c, '^')) state = RS_IN_NONEOF; - else if (t_isalpha(c)) + else if (t_isalpha_cstr(c)) state = RS_IN_ONEOF_IN; else return false; } else if (state == RS_IN_ONEOF_IN || state == RS_IN_NONEOF) { - if (t_isalpha(c)) + if (t_isalpha_cstr(c)) /* okay */ ; else if (t_iseq(c, ']')) state = RS_IN_WAIT; @@ -64,7 +64,7 @@ RS_isRegis(const char *str) } else elog(ERROR, "internal error in RS_isRegis: state %d", state); - c += pg_mblen(c); + c += pg_mblen_cstr(c); } return (state == RS_IN_WAIT); @@ -96,15 +96,14 @@ RS_compile(Regis *r, bool issuffix, const char *str) { if (state == RS_IN_WAIT) { - if (t_isalpha(c)) + if (t_isalpha_cstr(c)) { if (ptr) ptr = newRegisNode(ptr, len); else ptr = r->node = newRegisNode(NULL, len); - COPYCHAR(ptr->data, c); ptr->type = RSF_ONEOF; - ptr->len = pg_mblen(c); + ptr->len = ts_copychar_cstr(ptr->data, c); } else if (t_iseq(c, '[')) { @@ -125,10 +124,9 @@ RS_compile(Regis *r, bool issuffix, const char *str) ptr->type = RSF_NONEOF; state = RS_IN_NONEOF; } - else if (t_isalpha(c)) + else if (t_isalpha_cstr(c)) { - COPYCHAR(ptr->data, c); - ptr->len = pg_mblen(c); + ptr->len = ts_copychar_cstr(ptr->data, c); state = RS_IN_ONEOF_IN; } else /* shouldn't get here */ @@ -136,11 +134,8 @@ RS_compile(Regis *r, bool issuffix, const char *str) } else if (state == RS_IN_ONEOF_IN || state == RS_IN_NONEOF) { - if (t_isalpha(c)) - { - COPYCHAR(ptr->data + ptr->len, c); - ptr->len += pg_mblen(c); - } + if (t_isalpha_cstr(c)) + ptr->len += ts_copychar_cstr(ptr->data + ptr->len, c); else if (t_iseq(c, ']')) state = RS_IN_WAIT; else /* shouldn't get here */ @@ -148,7 +143,7 @@ RS_compile(Regis *r, bool issuffix, const char *str) } else elog(ERROR, "internal error in RS_compile: state %d", state); - c += pg_mblen(c); + c += pg_mblen_cstr(c); } if (state != RS_IN_WAIT) /* shouldn't get here */ @@ -187,10 +182,10 @@ mb_strchr(char *str, char *c) char *ptr = str; bool res = false; - clen = pg_mblen(c); + clen = pg_mblen_cstr(c); while (*ptr && !res) { - plen = pg_mblen(ptr); + plen = pg_mblen_cstr(ptr); if (plen == clen) { i = plen; @@ -219,7 +214,7 @@ RS_execute(Regis *r, char *str) while (*c) { len++; - c += pg_mblen(c); + c += pg_mblen_cstr(c); } if (len < r->nchar) @@ -230,7 +225,7 @@ RS_execute(Regis *r, char *str) { len -= r->nchar; while (len-- > 0) - c += pg_mblen(c); + c += pg_mblen_cstr(c); } @@ -250,7 +245,7 @@ RS_execute(Regis *r, char *str) elog(ERROR, "unrecognized regis node type: %d", ptr->type); } ptr = ptr->next; - c += pg_mblen(c); + c += pg_mblen_cstr(c); } return true; diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index 961eb2709ca..f65c083c06f 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -232,7 +232,7 @@ findchar(char *str, int c) { if (t_iseq(str, c)) return str; - str += pg_mblen(str); + str += pg_mblen_cstr(str); } return NULL; @@ -245,7 +245,7 @@ findchar2(char *str, int c1, int c2) { if (t_iseq(str, c1) || t_iseq(str, c2)) return str; - str += pg_mblen(str); + str += pg_mblen_cstr(str); } return NULL; @@ -352,6 +352,7 @@ getNextFlagFromString(IspellDict *Conf, char **sflagset, char *sflag) char *next, *sbuf = *sflagset; int maxstep; + int clen; bool stop = false; bool met_comma = false; @@ -363,17 +364,18 @@ getNextFlagFromString(IspellDict *Conf, char **sflagset, char *sflag) { case FM_LONG: case FM_CHAR: - COPYCHAR(sflag, *sflagset); - sflag += pg_mblen(*sflagset); + clen = ts_copychar_cstr(sflag, *sflagset); + sflag += clen; /* Go to start of the next flag */ - *sflagset += pg_mblen(*sflagset); + *sflagset += clen; /* Check if we get all characters of flag */ maxstep--; stop = (maxstep == 0); break; case FM_NUM: + errno = 0; s = strtol(*sflagset, &next, 10); if (*sflagset == next || errno == ERANGE) ereport(ERROR, @@ -390,7 +392,7 @@ getNextFlagFromString(IspellDict *Conf, char **sflagset, char *sflag) *sflagset = next; while (**sflagset) { - if (t_isdigit(*sflagset)) + if (t_isdigit_cstr(*sflagset)) { if (!met_comma) ereport(ERROR, @@ -408,7 +410,7 @@ getNextFlagFromString(IspellDict *Conf, char **sflagset, char *sflag) *sflagset))); met_comma = true; } - else if (!t_isspace(*sflagset)) + else if (!t_isspace_cstr(*sflagset)) { ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), @@ -416,7 +418,7 @@ getNextFlagFromString(IspellDict *Conf, char **sflagset, char *sflag) *sflagset))); } - *sflagset += pg_mblen(*sflagset); + *sflagset += pg_mblen_cstr(*sflagset); } stop = true; break; @@ -542,7 +544,7 @@ NIImportDictionary(IspellDict *Conf, const char *filename) while (*s) { /* we allow only single encoded flags for faster works */ - if (pg_mblen(s) == 1 && t_isprint(s) && !t_isspace(s)) + if (pg_mblen_cstr(s) == 1 && t_isprint_unbounded(s) && !t_isspace_unbounded(s)) s++; else { @@ -558,12 +560,12 @@ NIImportDictionary(IspellDict *Conf, const char *filename) s = line; while (*s) { - if (t_isspace(s)) + if (t_isspace_cstr(s)) { *s = '\0'; break; } - s += pg_mblen(s); + s += pg_mblen_cstr(s); } pstr = lowerstr_ctx(Conf, line); @@ -815,17 +817,17 @@ get_nextfield(char **str, char *next) while (**str) { + int clen = pg_mblen_cstr(*str); + if (state == PAE_WAIT_MASK) { if (t_iseq(*str, '#')) return false; - else if (!t_isspace(*str)) + else if (!t_isspace_cstr(*str)) { - int clen = pg_mblen(*str); - if (clen < avail) { - COPYCHAR(next, *str); + ts_copychar_with_len(next, *str, clen); next += clen; avail -= clen; } @@ -834,24 +836,22 @@ get_nextfield(char **str, char *next) } else /* state == PAE_INMASK */ { - if (t_isspace(*str)) + if (t_isspace_cstr(*str)) { *next = '\0'; return true; } else { - int clen = pg_mblen(*str); - if (clen < avail) { - COPYCHAR(next, *str); + ts_copychar_with_len(next, *str, clen); next += clen; avail -= clen; } } } - *str += pg_mblen(*str); + *str += clen; } *next = '\0'; @@ -941,14 +941,15 @@ parse_affentry(char *str, char *mask, char *find, char *repl) while (*str) { + int clen = pg_mblen_cstr(str); + if (state == PAE_WAIT_MASK) { if (t_iseq(str, '#')) return false; - else if (!t_isspace(str)) + else if (!t_isspace_cstr(str)) { - COPYCHAR(pmask, str); - pmask += pg_mblen(str); + pmask += ts_copychar_with_len(pmask, str, clen); state = PAE_INMASK; } } @@ -959,10 +960,9 @@ parse_affentry(char *str, char *mask, char *find, char *repl) *pmask = '\0'; state = PAE_WAIT_FIND; } - else if (!t_isspace(str)) + else if (!t_isspace_cstr(str)) { - COPYCHAR(pmask, str); - pmask += pg_mblen(str); + pmask += ts_copychar_with_len(pmask, str, clen); } } else if (state == PAE_WAIT_FIND) @@ -971,13 +971,12 @@ parse_affentry(char *str, char *mask, char *find, char *repl) { state = PAE_INFIND; } - else if (t_isalpha(str) || t_iseq(str, '\'') /* english 's */ ) + else if (t_isalpha_cstr(str) || t_iseq(str, '\'') /* english 's */ ) { - COPYCHAR(prepl, str); - prepl += pg_mblen(str); + prepl += ts_copychar_with_len(prepl, str, clen); state = PAE_INREPL; } - else if (!t_isspace(str)) + else if (!t_isspace_cstr(str)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("syntax error"))); @@ -989,12 +988,11 @@ parse_affentry(char *str, char *mask, char *find, char *repl) *pfind = '\0'; state = PAE_WAIT_REPL; } - else if (t_isalpha(str)) + else if (t_isalpha_cstr(str)) { - COPYCHAR(pfind, str); - pfind += pg_mblen(str); + pfind += ts_copychar_with_len(pfind, str, clen); } - else if (!t_isspace(str)) + else if (!t_isspace_cstr(str)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("syntax error"))); @@ -1005,13 +1003,12 @@ parse_affentry(char *str, char *mask, char *find, char *repl) { break; /* void repl */ } - else if (t_isalpha(str)) + else if (t_isalpha_cstr(str)) { - COPYCHAR(prepl, str); - prepl += pg_mblen(str); + prepl += ts_copychar_with_len(prepl, str, clen); state = PAE_INREPL; } - else if (!t_isspace(str)) + else if (!t_isspace_cstr(str)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("syntax error"))); @@ -1023,12 +1020,11 @@ parse_affentry(char *str, char *mask, char *find, char *repl) *prepl = '\0'; break; } - else if (t_isalpha(str)) + else if (t_isalpha_cstr(str)) { - COPYCHAR(prepl, str); - prepl += pg_mblen(str); + prepl += ts_copychar_with_len(prepl, str, clen); } - else if (!t_isspace(str)) + else if (!t_isspace_cstr(str)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("syntax error"))); @@ -1036,7 +1032,7 @@ parse_affentry(char *str, char *mask, char *find, char *repl) else elog(ERROR, "unrecognized state in parse_affentry: %d", state); - str += pg_mblen(str); + str += clen; } *pmask = *pfind = *prepl = '\0'; @@ -1056,6 +1052,7 @@ setCompoundAffixFlagValue(IspellDict *Conf, CompoundAffixFlag *entry, char *next; int i; + errno = 0; i = strtol(s, &next, 10); if (s == next || errno == ERANGE) ereport(ERROR, @@ -1088,10 +1085,9 @@ addCompoundAffixFlagValue(IspellDict *Conf, char *s, uint32 val) CompoundAffixFlag *newValue; char sbuf[BUFSIZ]; char *sflag; - int clen; - while (*s && t_isspace(s)) - s += pg_mblen(s); + while (*s && t_isspace_cstr(s)) + s += pg_mblen_cstr(s); if (!*s) ereport(ERROR, @@ -1100,10 +1096,10 @@ addCompoundAffixFlagValue(IspellDict *Conf, char *s, uint32 val) /* Get flag without \n */ sflag = sbuf; - while (*s && !t_isspace(s) && *s != '\n') + while (*s && !t_isspace_cstr(s) && *s != '\n') { - clen = pg_mblen(s); - COPYCHAR(sflag, s); + int clen = ts_copychar_cstr(sflag, s); + sflag += clen; s += clen; } @@ -1183,6 +1179,7 @@ getAffixFlagSet(IspellDict *Conf, char *s) int curaffix; char *end; + errno = 0; curaffix = strtol(s, &end, 10); if (s == end || errno == ERANGE) ereport(ERROR, @@ -1245,7 +1242,7 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename) while ((recoded = tsearch_readline(&trst)) != NULL) { - if (*recoded == '\0' || t_isspace(recoded) || t_iseq(recoded, '#')) + if (*recoded == '\0' || t_isspace_cstr(recoded) || t_iseq(recoded, '#')) { pfree(recoded); continue; @@ -1282,8 +1279,8 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename) { char *s = recoded + strlen("FLAG"); - while (*s && t_isspace(s)) - s += pg_mblen(s); + while (*s && t_isspace_cstr(s)) + s += pg_mblen_cstr(s); if (*s) { @@ -1318,7 +1315,7 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename) { int fields_read; - if (*recoded == '\0' || t_isspace(recoded) || t_iseq(recoded, '#')) + if (*recoded == '\0' || t_isspace_cstr(recoded) || t_iseq(recoded, '#')) goto nextline; fields_read = parse_ooaffentry(recoded, type, sflag, find, repl, mask); @@ -1481,12 +1478,12 @@ NIImportAffixes(IspellDict *Conf, const char *filename) s = findchar2(recoded, 'l', 'L'); if (s) { - while (*s && !t_isspace(s)) - s += pg_mblen(s); - while (*s && t_isspace(s)) - s += pg_mblen(s); + while (*s && !t_isspace_cstr(s)) + s += pg_mblen_cstr(s); + while (*s && t_isspace_cstr(s)) + s += pg_mblen_cstr(s); - if (*s && pg_mblen(s) == 1) + if (*s && pg_mblen_cstr(s) == 1) { addCompoundAffixFlagValue(Conf, s, FF_COMPOUNDFLAG); Conf->usecompound = true; @@ -1514,8 +1511,8 @@ NIImportAffixes(IspellDict *Conf, const char *filename) s = recoded + 4; /* we need non-lowercased string */ flagflags = 0; - while (*s && t_isspace(s)) - s += pg_mblen(s); + while (*s && t_isspace_cstr(s)) + s += pg_mblen_cstr(s); if (*s == '*') { @@ -1536,14 +1533,13 @@ NIImportAffixes(IspellDict *Conf, const char *filename) * be followed by EOL, whitespace, or ':'. Otherwise this is a * new-format flag command. */ - if (*s && pg_mblen(s) == 1) + if (*s && pg_mblen_cstr(s) == 1) { - COPYCHAR(flag, s); + flag[0] = *s++; flag[1] = '\0'; - s++; if (*s == '\0' || *s == '#' || *s == '\n' || *s == ':' || - t_isspace(s)) + t_isspace_cstr(s)) { oldformat = true; goto nextline; @@ -1754,6 +1750,7 @@ NISortDictionary(IspellDict *Conf) if (*Conf->Spell[i]->p.flag != '\0') { + errno = 0; curaffix = strtol(Conf->Spell[i]->p.flag, &end, 10); if (Conf->Spell[i]->p.flag == end || errno == ERANGE) ereport(ERROR, @@ -1765,7 +1762,7 @@ NISortDictionary(IspellDict *Conf) (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("invalid affix alias \"%s\"", Conf->Spell[i]->p.flag))); - if (*end != '\0' && !t_isdigit(end) && !t_isspace(end)) + if (*end != '\0' && !t_isdigit_cstr(end) && !t_isspace_cstr(end)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("invalid affix alias \"%s\"", diff --git a/src/backend/tsearch/ts_locale.c b/src/backend/tsearch/ts_locale.c index f918cc8908b..cc9e71ec708 100644 --- a/src/backend/tsearch/ts_locale.c +++ b/src/backend/tsearch/ts_locale.c @@ -33,70 +33,43 @@ static void tsearch_readline_callback(void *arg); */ #define WC_BUF_LEN 3 -int -t_isdigit(const char *ptr) -{ - int clen = pg_mblen(ptr); - wchar_t character[WC_BUF_LEN]; - Oid collation = DEFAULT_COLLATION_OID; /* TODO */ - pg_locale_t mylocale = 0; /* TODO */ - - if (clen == 1 || lc_ctype_is_c(collation)) - return isdigit(TOUCHAR(ptr)); - - char2wchar(character, WC_BUF_LEN, ptr, clen, mylocale); - - return iswdigit((wint_t) character[0]); -} - -int -t_isspace(const char *ptr) -{ - int clen = pg_mblen(ptr); - wchar_t character[WC_BUF_LEN]; - Oid collation = DEFAULT_COLLATION_OID; /* TODO */ - pg_locale_t mylocale = 0; /* TODO */ - - if (clen == 1 || lc_ctype_is_c(collation)) - return isspace(TOUCHAR(ptr)); - - char2wchar(character, WC_BUF_LEN, ptr, clen, mylocale); - - return iswspace((wint_t) character[0]); -} - -int -t_isalpha(const char *ptr) -{ - int clen = pg_mblen(ptr); - wchar_t character[WC_BUF_LEN]; - Oid collation = DEFAULT_COLLATION_OID; /* TODO */ - pg_locale_t mylocale = 0; /* TODO */ - - if (clen == 1 || lc_ctype_is_c(collation)) - return isalpha(TOUCHAR(ptr)); - - char2wchar(character, WC_BUF_LEN, ptr, clen, mylocale); - - return iswalpha((wint_t) character[0]); -} - -int -t_isprint(const char *ptr) -{ - int clen = pg_mblen(ptr); - wchar_t character[WC_BUF_LEN]; - Oid collation = DEFAULT_COLLATION_OID; /* TODO */ - pg_locale_t mylocale = 0; /* TODO */ - - if (clen == 1 || lc_ctype_is_c(collation)) - return isprint(TOUCHAR(ptr)); - - char2wchar(character, WC_BUF_LEN, ptr, clen, mylocale); - - return iswprint((wint_t) character[0]); +#define GENERATE_T_ISCLASS_DEF(character_class) \ +/* mblen shall be that of the first character */ \ +int \ +t_is##character_class##_with_len(const char *ptr, int mblen) \ +{ \ + int clen = pg_mblen_with_len(ptr, mblen); \ + wchar_t character[WC_BUF_LEN]; \ + pg_locale_t mylocale = 0; /* TODO */ \ + if (clen == 1 || lc_ctype_is_c(DEFAULT_COLLATION_OID)) \ + return is##character_class(TOUCHAR(ptr)); \ + char2wchar(character, WC_BUF_LEN, ptr, clen, mylocale); \ + return isw##character_class((wint_t) character[0]); \ +} \ +\ +/* ptr shall point to a NUL-terminated string */ \ +int \ +t_is##character_class##_cstr(const char *ptr) \ +{ \ + return t_is##character_class##_with_len(ptr, pg_mblen_cstr(ptr)); \ +} \ +/* ptr shall point to a string with pre-validated encoding */ \ +int \ +t_is##character_class##_unbounded(const char *ptr) \ +{ \ + return t_is##character_class##_with_len(ptr, pg_mblen_unbounded(ptr)); \ +} \ +/* historical name for _unbounded */ \ +int \ +t_is##character_class(const char *ptr) \ +{ \ + return t_is##character_class##_unbounded(ptr); \ } +GENERATE_T_ISCLASS_DEF(alpha) +GENERATE_T_ISCLASS_DEF(digit) +GENERATE_T_ISCLASS_DEF(print) +GENERATE_T_ISCLASS_DEF(space) /* * Set up to read a file using tsearch_readline(). This facility is diff --git a/src/backend/tsearch/ts_selfuncs.c b/src/backend/tsearch/ts_selfuncs.c index be2546a86ea..7796c63af94 100644 --- a/src/backend/tsearch/ts_selfuncs.c +++ b/src/backend/tsearch/ts_selfuncs.c @@ -109,12 +109,14 @@ tsmatchsel(PG_FUNCTION_ARGS) * OK, there's a Var and a Const we're dealing with here. We need the * Const to be a TSQuery, else we can't do anything useful. We have to * check this because the Var might be the TSQuery not the TSVector. + * + * Also check that the Var really is a TSVector, in case this estimator is + * mistakenly attached to some other operator. */ - if (((Const *) other)->consttype == TSQUERYOID) + if (((Const *) other)->consttype == TSQUERYOID && + vardata.vartype == TSVECTOROID) { /* tsvector @@ tsquery or the other way around */ - Assert(vardata.vartype == TSVECTOROID); - selec = tsquerysel(&vardata, ((Const *) other)->constvalue); } else diff --git a/src/backend/tsearch/ts_utils.c b/src/backend/tsearch/ts_utils.c index ed16a2e25a2..51902ab1e14 100644 --- a/src/backend/tsearch/ts_utils.c +++ b/src/backend/tsearch/ts_utils.c @@ -88,8 +88,8 @@ readstoplist(const char *fname, StopList *s, char *(*wordop) (const char *)) char *pbuf = line; /* Trim trailing space */ - while (*pbuf && !t_isspace(pbuf)) - pbuf += pg_mblen(pbuf); + while (*pbuf && !t_isspace_cstr(pbuf)) + pbuf += pg_mblen_cstr(pbuf); *pbuf = '\0'; /* Skip empty lines */ diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index ff7be55f610..5e3d0e20b5a 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -1728,7 +1728,8 @@ TParserGet(TParser *prs) prs->state->charlen = 0; else prs->state->charlen = (prs->charmaxlen == 1) ? prs->charmaxlen : - pg_mblen(prs->str + prs->state->posbyte); + pg_mblen_range(prs->str + prs->state->posbyte, + prs->str + prs->lenstr); Assert(prs->state->posbyte + prs->state->charlen <= prs->lenstr); Assert(prs->state->state >= TPS_Base && prs->state->state < TPS_Null); diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index a44428da7ae..9489e01193a 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -115,6 +115,22 @@ 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 @@ -137,21 +153,22 @@ getid(const char *s, char *n) 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 */ @@ -185,10 +202,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/amutils.c b/src/backend/utils/adt/amutils.c index 569412fcacf..30da865c01b 100644 --- a/src/backend/utils/adt/amutils.c +++ b/src/backend/utils/adt/amutils.c @@ -176,6 +176,7 @@ indexam_property(FunctionCallInfo fcinfo, PG_RETURN_NULL(); rd_rel = (Form_pg_class) GETSTRUCT(tuple); if (rd_rel->relkind != RELKIND_INDEX && + rd_rel->relkind != RELKIND_GLOBAL_INDEX && rd_rel->relkind != RELKIND_PARTITIONED_INDEX) { ReleaseSysCache(tuple); diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index ce659b554ef..6eb9f293318 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -3384,6 +3384,92 @@ construct_array(Datum *elems, int nelems, elmtype, elmlen, elmbyval, elmalign); } +/* + * Like construct_array(), where elmtype must be a built-in type, and + * elmlen/elmbyval/elmalign is looked up from hardcoded data. This is often + * useful when manipulating arrays from/for system catalogs. + */ +ArrayType * +construct_array_builtin(Datum *elems, int nelems, Oid elmtype) +{ + int elmlen; + bool elmbyval; + char elmalign; + + switch (elmtype) + { + case CHAROID: + elmlen = 1; + elmbyval = true; + elmalign = TYPALIGN_CHAR; + break; + + case CSTRINGOID: + elmlen = -2; + elmbyval = false; + elmalign = TYPALIGN_CHAR; + break; + + case FLOAT4OID: + elmlen = sizeof(float4); + elmbyval = true; + elmalign = TYPALIGN_INT; + break; + + case INT2OID: + elmlen = sizeof(int16); + elmbyval = true; + elmalign = TYPALIGN_SHORT; + break; + + case INT4OID: + elmlen = sizeof(int32); + elmbyval = true; + elmalign = TYPALIGN_INT; + break; + + case INT8OID: + elmlen = sizeof(int64); + elmbyval = FLOAT8PASSBYVAL; + elmalign = TYPALIGN_DOUBLE; + break; + + case NAMEOID: + elmlen = NAMEDATALEN; + elmbyval = false; + elmalign = TYPALIGN_CHAR; + break; + + case OIDOID: + case REGTYPEOID: + elmlen = sizeof(Oid); + elmbyval = true; + elmalign = TYPALIGN_INT; + break; + + case TEXTOID: + elmlen = -1; + elmbyval = false; + elmalign = TYPALIGN_INT; + break; + + case TIDOID: + elmlen = sizeof(ItemPointerData); + elmbyval = false; + elmalign = TYPALIGN_SHORT; + break; + + default: + elog(ERROR, "type %u not supported by construct_array_builtin()", elmtype); + /* keep compiler quiet */ + elmlen = 0; + elmbyval = false; + elmalign = 0; + } + + return construct_array(elems, nelems, elmtype, elmlen, elmbyval, elmalign); +} + /* * construct_md_array --- simple method for constructing an array object * with arbitrary dimensions and possible NULLs @@ -3602,6 +3688,81 @@ deconstruct_array(ArrayType *array, } } +/* + * Like deconstruct_array(), where elmtype must be a built-in type, and + * elmlen/elmbyval/elmalign is looked up from hardcoded data. This is often + * useful when manipulating arrays from/for system catalogs. + */ +void +deconstruct_array_builtin(ArrayType *array, + Oid elmtype, + Datum **elemsp, bool **nullsp, int *nelemsp) +{ + int elmlen; + bool elmbyval; + char elmalign; + + switch (elmtype) + { + case CHAROID: + elmlen = 1; + elmbyval = true; + elmalign = TYPALIGN_CHAR; + break; + + case CSTRINGOID: + elmlen = -2; + elmbyval = false; + elmalign = TYPALIGN_CHAR; + break; + + case FLOAT8OID: + elmlen = sizeof(float8); + elmbyval = FLOAT8PASSBYVAL; + elmalign = TYPALIGN_DOUBLE; + break; + + case INT2OID: + elmlen = sizeof(int16); + elmbyval = true; + elmalign = TYPALIGN_SHORT; + break; + + case INT4OID: + elmlen = sizeof(int32); + elmbyval = true; + elmalign = TYPALIGN_INT; + break; + + case OIDOID: + elmlen = sizeof(Oid); + elmbyval = true; + elmalign = TYPALIGN_INT; + break; + + case TEXTOID: + elmlen = -1; + elmbyval = false; + elmalign = TYPALIGN_INT; + break; + + case TIDOID: + elmlen = sizeof(ItemPointerData); + elmbyval = false; + elmalign = TYPALIGN_SHORT; + break; + + default: + elog(ERROR, "type %u not supported by deconstruct_array_builtin()", elmtype); + /* keep compiler quiet */ + elmlen = 0; + elmbyval = false; + elmalign = 0; + } + + deconstruct_array(array, elmtype, elmlen, elmbyval, elmalign, elemsp, nullsp, nelemsp); +} + /* * array_contains_nulls --- detect whether an array has any null elements * @@ -5602,9 +5763,14 @@ ArrayBuildStateAny * initArrayResultAny(Oid input_type, MemoryContext rcontext, bool subcontext) { ArrayBuildStateAny *astate; - Oid element_type = get_element_type(input_type); - if (OidIsValid(element_type)) + /* + * int2vector and oidvector will satisfy both get_element_type and + * get_array_type. We prefer to treat them as scalars, to be consistent + * with get_promoted_array_type. Hence, check get_array_type not + * get_element_type. + */ + if (!OidIsValid(get_array_type(input_type))) { /* Array case */ ArrayBuildStateArr *arraystate; @@ -5621,9 +5787,6 @@ initArrayResultAny(Oid input_type, MemoryContext rcontext, bool subcontext) /* Scalar case */ ArrayBuildState *scalarstate; - /* Let's just check that we have a type that can be put into arrays */ - Assert(OidIsValid(get_array_type(input_type))); - scalarstate = initArrayResult(input_type, rcontext, subcontext); astate = (ArrayBuildStateAny *) MemoryContextAlloc(scalarstate->mcontext, diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 9de2ed09d99..9f42a46f4fc 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -900,6 +900,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/encode.c b/src/backend/utils/adt/encode.c index 6dd93f9a322..06ea275c59c 100644 --- a/src/backend/utils/adt/encode.c +++ b/src/backend/utils/adt/encode.c @@ -172,7 +172,7 @@ hex_encode(const char *src, size_t len, char *dst) } static inline char -get_hex(const char *cp) +get_hex(const char *cp, const char *end) { unsigned char c = (unsigned char) *cp; int res = -1; @@ -184,7 +184,7 @@ get_hex(const char *cp) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid hexadecimal digit: \"%.*s\"", - pg_mblen(cp), cp))); + pg_mblen_range(cp, end), cp))); return (char) res; } @@ -208,14 +208,14 @@ hex_decode(const char *src, size_t len, char *dst) s++; continue; } - v1 = get_hex(s) << 4; + v1 = get_hex(s, srcend) << 4; s++; if (s >= srcend) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid hexadecimal data: odd number of digits"))); - v2 = get_hex(s); + v2 = get_hex(s, srcend); s++; *p++ = v1 | v2; } @@ -344,7 +344,7 @@ pg_base64_decode(const char *src, size_t len, char *dst) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid symbol \"%.*s\" found while decoding base64 sequence", - pg_mblen(s - 1), s - 1))); + pg_mblen_range(s - 1, srcend), s - 1))); } /* add it to buffer */ buf = (buf << 6) + b; diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 098bbb372bf..adb8c74cdde 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -4010,8 +4010,8 @@ 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 + * 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 "NaN" for any of the float8 inputs, and we * don't allow either of the histogram bounds to be +/- infinity. */ diff --git a/src/backend/utils/adt/format_type.c b/src/backend/utils/adt/format_type.c index 1200bb83bb7..badc4fa6e7a 100644 --- a/src/backend/utils/adt/format_type.c +++ b/src/backend/utils/adt/format_type.c @@ -524,11 +524,15 @@ oidvectortypes(PG_FUNCTION_ARGS) { oidvector *oidArray = (oidvector *) PG_GETARG_POINTER(0); char *result; - int numargs = oidArray->dim1; + int numargs; int num; size_t total; size_t left; + /* validate input before fetching dim1 */ + check_valid_oidvector(oidArray); + numargs = oidArray->dim1; + total = 20 * numargs + 1; result = palloc(total); result[0] = '\0'; diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 6495168c60e..f053af660d2 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1466,7 +1466,7 @@ parse_format(FormatNode *node, const char *str, const KeyWord *kw, ereport(ERROR, (errcode(ERRCODE_INVALID_DATETIME_FORMAT), errmsg("invalid datetime format separator: \"%s\"", - pnstrdup(str, pg_mblen(str))))); + pnstrdup(str, pg_mblen_cstr(str))))); if (*str == ' ') n->type = NODE_TYPE_SPACE; @@ -1496,7 +1496,7 @@ parse_format(FormatNode *node, const char *str, const KeyWord *kw, /* backslash quotes the next character, if any */ if (*str == '\\' && *(str + 1)) str++; - chlen = pg_mblen(str); + chlen = pg_mblen_cstr(str); n->type = NODE_TYPE_CHAR; memcpy(n->character, str, chlen); n->character[chlen] = '\0'; @@ -1514,7 +1514,7 @@ parse_format(FormatNode *node, const char *str, const KeyWord *kw, */ if (*str == '\\' && *(str + 1) == '"') str++; - chlen = pg_mblen(str); + chlen = pg_mblen_cstr(str); if ((flags & DCH_FLAG) && is_separator_char(str)) n->type = NODE_TYPE_SEPARATOR; @@ -2234,8 +2234,8 @@ asc_toupper_z(const char *buff) do { \ if (S_THth(_suf)) \ { \ - if (*(ptr)) (ptr) += pg_mblen(ptr); \ - if (*(ptr)) (ptr) += pg_mblen(ptr); \ + if (*(ptr)) (ptr) += pg_mblen_cstr(ptr); \ + if (*(ptr)) (ptr) += pg_mblen_cstr(ptr); \ } \ } while (0) @@ -3636,7 +3636,7 @@ DCH_from_char(FormatNode *node, const char *in, TmFromChar *out, * insist that the consumed character match the format's * character. */ - s += pg_mblen(s); + s += pg_mblen_cstr(s); } continue; } @@ -3658,11 +3658,11 @@ DCH_from_char(FormatNode *node, const char *in, TmFromChar *out, if (extra_skip > 0) extra_skip--; else - s += pg_mblen(s); + s += pg_mblen_cstr(s); } else { - int chlen = pg_mblen(s); + int chlen = pg_mblen_cstr(s); /* * Standard mode requires strict match of format characters. @@ -6805,13 +6805,15 @@ NUM_numpart_to_char(NUMProc *Np, int id) static void NUM_eat_non_data_chars(NUMProc *Np, int n, int input_len) { + const char *end = Np->inout + input_len; + while (n-- > 0) { if (OVERLOAD_TEST) break; /* end of input */ if (strchr("0123456789.,+-", *Np->inout_p) != NULL) break; /* it's a data character */ - Np->inout_p += pg_mblen(Np->inout_p); + Np->inout_p += pg_mblen_range(Np->inout_p, end); } } @@ -7934,7 +7936,7 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, } else { - Np->inout_p += pg_mblen(Np->inout_p); + Np->inout_p += pg_mblen_range(Np->inout_p, Np->inout + input_len); } continue; } diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c index 9701dfb9190..886f40f8a00 100644 --- a/src/backend/utils/adt/int.c +++ b/src/backend/utils/adt/int.c @@ -134,6 +134,30 @@ buildint2vector(const int16 *int2s, int n) return result; } +/* + * validate that an array object meets the restrictions of int2vector + * + * We need this because there are pathways by which a general int2[] array can + * be cast to int2vector, allowing the type's restrictions to be violated. + * All code that receives an int2vector as a SQL parameter should check this. + */ +static void +check_valid_int2vector(const int2vector *int2Array) +{ + /* + * We insist on ndim == 1 and dataoffset == 0 (that is, no nulls) because + * otherwise the array's layout will not be what calling code expects. We + * needn't be picky about the index lower bound though. Checking elemtype + * is just paranoia. + */ + if (int2Array->ndim != 1 || + int2Array->dataoffset != 0 || + int2Array->elemtype != INT2OID) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("array is not a valid int2vector"))); +} + /* * int2vectorin - converts "num num ..." to internal form */ @@ -181,10 +205,14 @@ int2vectorout(PG_FUNCTION_ARGS) { int2vector *int2Array = (int2vector *) PG_GETARG_POINTER(0); int num, - nnums = int2Array->dim1; + nnums; char *rp; char *result; + /* validate input before fetching dim1 */ + check_valid_int2vector(int2Array); + nnums = int2Array->dim1; + /* assumes sign, 5 digits, ' ' */ rp = result = (char *) palloc(nnums * 7 + 1); for (num = 0; num < nnums; num++) @@ -251,6 +279,7 @@ int2vectorrecv(PG_FUNCTION_ARGS) Datum int2vectorsend(PG_FUNCTION_ARGS) { + /* We don't do check_valid_int2vector, since array_send won't care */ return array_send(fcinfo); } diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index 57111877959..2a5764b5193 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -270,9 +270,6 @@ 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 @@ -840,15 +837,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 @@ -886,6 +888,7 @@ JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested) * nesting). */ *it = freeAndGetParent(*it); + val->type = jbvNull; return WJB_END_ARRAY; } @@ -939,6 +942,7 @@ JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested) * of nesting). */ *it = freeAndGetParent(*it); + val->type = jbvNull; return WJB_END_OBJECT; } else @@ -983,8 +987,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 f6a074aa7d0..583c1712ad1 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -663,7 +663,7 @@ report_json_context(JsonLexContext *lex) { /* Advance to next multibyte character */ if (IS_HIGHBIT_SET(*context_start)) - context_start += pg_mblen(context_start); + context_start += pg_mblen_range(context_start, context_end); else context_start++; } diff --git a/src/backend/utils/adt/jsonpath_gram.y b/src/backend/utils/adt/jsonpath_gram.y index 3377cc81cbf..30183f66b15 100644 --- a/src/backend/utils/adt/jsonpath_gram.y +++ b/src/backend/utils/adt/jsonpath_gram.y @@ -527,7 +527,7 @@ makeItemLikeRegex(JsonPathParseItem *expr, JsonPathString *pattern, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("invalid input syntax for type %s", "jsonpath"), errdetail("unrecognized flag character \"%.*s\" in LIKE_REGEX predicate", - pg_mblen(flags->val + i), flags->val + i))); + pg_mblen_range(flags->val + i, flags->val + flags->len), flags->val + i))); break; } } diff --git a/src/backend/utils/adt/levenshtein.c b/src/backend/utils/adt/levenshtein.c index f8979776d0d..38d4f580d01 100644 --- a/src/backend/utils/adt/levenshtein.c +++ b/src/backend/utils/adt/levenshtein.c @@ -84,6 +84,8 @@ varstr_levenshtein(const char *source, int slen, int i, j; const char *y; + const char *send = source + slen; + const char *tend = target + tlen; /* * For varstr_levenshtein_less_equal, we have real variables called @@ -184,10 +186,10 @@ varstr_levenshtein(const char *source, int slen, #endif /* - * In order to avoid calling pg_mblen() repeatedly on each character in s, - * we cache all the lengths before starting the main loop -- but if all - * the characters in both strings are single byte, then we skip this and - * use a fast-path in the main loop. If only one string contains + * In order to avoid calling pg_mblen_range() repeatedly on each character + * in s, we cache all the lengths before starting the main loop -- but if + * all the characters in both strings are single byte, then we skip this + * and use a fast-path in the main loop. If only one string contains * multi-byte characters, we still build the array, so that the fast-path * needn't deal with the case where the array hasn't been initialized. */ @@ -199,7 +201,7 @@ varstr_levenshtein(const char *source, int slen, s_char_len = (int *) palloc((m + 1) * sizeof(int)); for (i = 0; i < m; ++i) { - s_char_len[i] = pg_mblen(cp); + s_char_len[i] = pg_mblen_range(cp, send); cp += s_char_len[i]; } s_char_len[i] = 0; @@ -225,7 +227,7 @@ varstr_levenshtein(const char *source, int slen, { int *temp; const char *x = source; - int y_char_len = n != tlen + 1 ? pg_mblen(y) : 1; + int y_char_len = n != tlen + 1 ? pg_mblen_range(y, tend) : 1; #ifdef LEVENSHTEIN_LESS_EQUAL diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index eed183cd0dc..080bb6af840 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -54,20 +54,20 @@ static int Generic_Text_IC_like(text *str, text *pat, Oid collation); *-------------------- */ static inline int -wchareq(const char *p1, const char *p2) +wchareq(const char *p1, int p1len, const char *p2, int p2len) { - int p1_len; + int p1clen; /* Optimization: quickly compare the first byte. */ if (*p1 != *p2) return 0; - p1_len = pg_mblen(p1); - if (pg_mblen(p2) != p1_len) + p1clen = pg_mblen_with_len(p1, p1len); + if (pg_mblen_with_len(p2, p2len) != p1clen) return 0; /* They are the same length */ - while (p1_len--) + while (p1clen--) { if (*p1++ != *p2++) return 0; @@ -106,11 +106,11 @@ SB_lower_char(unsigned char c, pg_locale_t locale, bool locale_is_c) #define NextByte(p, plen) ((p)++, (plen)--) /* Set up to compile like_match.c for multibyte characters */ -#define CHAREQ(p1, p2) wchareq((p1), (p2)) +#define CHAREQ(p1, p1len, p2, p2len) wchareq((p1), (p1len), (p2), (p2len)) #define NextChar(p, plen) \ - do { int __l = pg_mblen(p); (p) +=__l; (plen) -=__l; } while (0) + do { int __l = pg_mblen_with_len((p), (plen)); (p) +=__l; (plen) -=__l; } while (0) #define CopyAdvChar(dst, src, srclen) \ - do { int __l = pg_mblen(src); \ + do { int __l = pg_mblen_with_len((src), (srclen)); \ (srclen) -= __l; \ while (__l-- > 0) \ *(dst)++ = *(src)++; \ @@ -122,7 +122,7 @@ SB_lower_char(unsigned char c, pg_locale_t locale, bool locale_is_c) #include "like_match.c" /* Set up to compile like_match.c for single-byte characters */ -#define CHAREQ(p1, p2) (*(p1) == *(p2)) +#define CHAREQ(p1, p1len, p2, p2len) (*(p1) == *(p2)) #define NextChar(p, plen) NextByte((p), (plen)) #define CopyAdvChar(dst, src, srclen) (*(dst)++ = *(src)++, (srclen)--) diff --git a/src/backend/utils/adt/like_match.c b/src/backend/utils/adt/like_match.c index 2f32cdaf020..9df572e92bd 100644 --- a/src/backend/utils/adt/like_match.c +++ b/src/backend/utils/adt/like_match.c @@ -294,6 +294,7 @@ do_like_escape(text *pat, text *esc) errhint("Escape string must be empty or one character."))); e = VARDATA_ANY(esc); + elen = VARSIZE_ANY_EXHDR(esc); /* * If specified escape is '\', just copy the pattern as-is. @@ -312,7 +313,7 @@ do_like_escape(text *pat, text *esc) afterescape = false; while (plen > 0) { - if (CHAREQ(p, e) && !afterescape) + if (CHAREQ(p, plen, e, elen) && !afterescape) { *r++ = '\\'; NextChar(p, plen); diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index 51b0ec95ab4..64d25fbfe66 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -477,8 +477,9 @@ multirange_canonicalize(TypeCacheEntry *rangetyp, int32 input_range_count, int32 output_range_count = 0; /* Sort the ranges so we can find the ones that overlap/meet. */ - qsort_arg(ranges, input_range_count, sizeof(RangeType *), range_compare, - rangetyp); + if (ranges != NULL) + qsort_arg(ranges, input_range_count, sizeof(RangeType *), + range_compare, rangetyp); /* Now merge where possible: */ for (i = 0; i < input_range_count; i++) diff --git a/src/backend/utils/adt/network_selfuncs.c b/src/backend/utils/adt/network_selfuncs.c index dca2c632123..ff4ec8d91e0 100644 --- a/src/backend/utils/adt/network_selfuncs.c +++ b/src/backend/utils/adt/network_selfuncs.c @@ -43,9 +43,9 @@ /* Maximum number of items to consider in join selectivity calculations */ #define MAX_CONSIDERED_ELEMS 1024 -static Selectivity networkjoinsel_inner(Oid operator, +static Selectivity networkjoinsel_inner(Oid operator, int opr_codenum, VariableStatData *vardata1, VariableStatData *vardata2); -static Selectivity networkjoinsel_semi(Oid operator, +static Selectivity networkjoinsel_semi(Oid operator, int opr_codenum, VariableStatData *vardata1, VariableStatData *vardata2); static Selectivity mcv_population(float4 *mcv_numbers, int mcv_nvalues); static Selectivity inet_hist_value_sel(Datum *values, int nvalues, @@ -82,6 +82,7 @@ networksel(PG_FUNCTION_ARGS) Oid operator = PG_GETARG_OID(1); List *args = (List *) PG_GETARG_POINTER(2); int varRelid = PG_GETARG_INT32(3); + int opr_codenum; VariableStatData vardata; Node *other; bool varonleft; @@ -95,6 +96,14 @@ networksel(PG_FUNCTION_ARGS) nullfrac; FmgrInfo proc; + /* + * Before all else, verify that the operator is one of the ones supported + * by this function, which in turn proves that the input datatypes are + * what we expect. Otherwise, attaching this selectivity function to some + * unexpected operator could cause trouble. + */ + opr_codenum = inet_opr_codenum(operator); + /* * If expression is not (variable op something) or (something op * variable), then punt and return a default estimate. @@ -150,13 +159,12 @@ networksel(PG_FUNCTION_ARGS) STATISTIC_KIND_HISTOGRAM, InvalidOid, ATTSTATSSLOT_VALUES)) { - int opr_codenum = inet_opr_codenum(operator); + int h_codenum; /* Commute if needed, so we can consider histogram to be on the left */ - if (!varonleft) - opr_codenum = -opr_codenum; + h_codenum = varonleft ? opr_codenum : -opr_codenum; non_mcv_selec = inet_hist_value_sel(hslot.values, hslot.nvalues, - constvalue, opr_codenum); + constvalue, h_codenum); free_attstatsslot(&hslot); } @@ -203,10 +211,19 @@ networkjoinsel(PG_FUNCTION_ARGS) #endif SpecialJoinInfo *sjinfo = (SpecialJoinInfo *) PG_GETARG_POINTER(4); double selec; + int opr_codenum; VariableStatData vardata1; VariableStatData vardata2; bool join_is_reversed; + /* + * Before all else, verify that the operator is one of the ones supported + * by this function, which in turn proves that the input datatypes are + * what we expect. Otherwise, attaching this selectivity function to some + * unexpected operator could cause trouble. + */ + opr_codenum = inet_opr_codenum(operator); + get_join_variables(root, args, sjinfo, &vardata1, &vardata2, &join_is_reversed); @@ -220,15 +237,18 @@ networkjoinsel(PG_FUNCTION_ARGS) * Selectivity for left/full join is not exactly the same as inner * join, but we neglect the difference, as eqjoinsel does. */ - selec = networkjoinsel_inner(operator, &vardata1, &vardata2); + selec = networkjoinsel_inner(operator, opr_codenum, + &vardata1, &vardata2); break; case JOIN_SEMI: case JOIN_ANTI: /* Here, it's important that we pass the outer var on the left. */ if (!join_is_reversed) - selec = networkjoinsel_semi(operator, &vardata1, &vardata2); + selec = networkjoinsel_semi(operator, opr_codenum, + &vardata1, &vardata2); else selec = networkjoinsel_semi(get_commutator(operator), + -opr_codenum, &vardata2, &vardata1); break; default: @@ -260,7 +280,7 @@ networkjoinsel(PG_FUNCTION_ARGS) * Also, MCV vs histogram selectivity is not neglected as in eqjoinsel_inner(). */ static Selectivity -networkjoinsel_inner(Oid operator, +networkjoinsel_inner(Oid operator, int opr_codenum, VariableStatData *vardata1, VariableStatData *vardata2) { Form_pg_statistic stats; @@ -273,7 +293,6 @@ networkjoinsel_inner(Oid operator, mcv2_exists = false, hist1_exists = false, hist2_exists = false; - int opr_codenum; int mcv1_length = 0, mcv2_length = 0; AttStatsSlot mcv1_slot; @@ -325,8 +344,6 @@ networkjoinsel_inner(Oid operator, memset(&hist2_slot, 0, sizeof(hist2_slot)); } - opr_codenum = inet_opr_codenum(operator); - /* * Calculate selectivity for MCV vs MCV matches. */ @@ -387,7 +404,7 @@ networkjoinsel_inner(Oid operator, * histogram selectivity for semi/anti join cases. */ static Selectivity -networkjoinsel_semi(Oid operator, +networkjoinsel_semi(Oid operator, int opr_codenum, VariableStatData *vardata1, VariableStatData *vardata2) { Form_pg_statistic stats; @@ -401,7 +418,6 @@ networkjoinsel_semi(Oid operator, mcv2_exists = false, hist1_exists = false, hist2_exists = false; - int opr_codenum; FmgrInfo proc; int i, mcv1_length = 0, @@ -455,7 +471,6 @@ networkjoinsel_semi(Oid operator, memset(&hist2_slot, 0, sizeof(hist2_slot)); } - opr_codenum = inet_opr_codenum(operator); fmgr_info(get_opcode(operator), &proc); /* Estimate number of input rows represented by RHS histogram. */ @@ -827,6 +842,9 @@ inet_semi_join_sel(Datum lhs_value, /* * Assign useful code numbers for the subnet inclusion/overlap operators * + * This will throw an error if the operator is not one of the ones we + * support in networksel() and networkjoinsel(). + * * Only inet_masklen_inclusion_cmp() and inet_hist_match_divider() depend * on the exact codes assigned here; but many other places in this file * know that they can negate a code to obtain the code for the commutator diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index c7958417b0e..439cd6e3c3d 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -1753,9 +1753,10 @@ generate_series_step_numeric(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 "NaN" for any of the numeric inputs, and we + * don't allow either of the histogram bounds to be +/- infinity. */ Datum width_bucket_numeric(PG_FUNCTION_ARGS) diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c index fd94e0c8818..dbab114a6e1 100644 --- a/src/backend/utils/adt/oid.c +++ b/src/backend/utils/adt/oid.c @@ -187,6 +187,30 @@ buildoidvector(const Oid *oids, int n) return result; } +/* + * validate that an array object meets the restrictions of oidvector + * + * We need this because there are pathways by which a general oid[] array can + * be cast to oidvector, allowing the type's restrictions to be violated. + * All code that receives an oidvector as a SQL parameter should check this. + */ +void +check_valid_oidvector(const oidvector *oidArray) +{ + /* + * We insist on ndim == 1 and dataoffset == 0 (that is, no nulls) because + * otherwise the array's layout will not be what calling code expects. We + * needn't be picky about the index lower bound though. Checking elemtype + * is just paranoia. + */ + if (oidArray->ndim != 1 || + oidArray->dataoffset != 0 || + oidArray->elemtype != OIDOID) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("array is not a valid oidvector"))); +} + /* * oidvectorin - converts "num num ..." to internal form */ @@ -232,10 +256,14 @@ oidvectorout(PG_FUNCTION_ARGS) { oidvector *oidArray = (oidvector *) PG_GETARG_POINTER(0); int num, - nnums = oidArray->dim1; + nnums; char *rp; char *result; + /* validate input before fetching dim1 */ + check_valid_oidvector(oidArray); + nnums = oidArray->dim1; + /* assumes sign, 10 digits, ' ' */ rp = result = (char *) palloc(nnums * 12 + 1); for (num = 0; num < nnums; num++) @@ -304,6 +332,7 @@ oidvectorrecv(PG_FUNCTION_ARGS) Datum oidvectorsend(PG_FUNCTION_ARGS) { + /* We don't do check_valid_oidvector, since array_send won't care */ return array_send(fcinfo); } diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c index bd9e5f9e243..471c6967be0 100644 --- a/src/backend/utils/adt/oracle_compat.c +++ b/src/backend/utils/adt/oracle_compat.c @@ -150,8 +150,8 @@ lpad(PG_FUNCTION_ARGS) char *ptr1, *ptr2, *ptr2start, - *ptr2end, *ptr_ret; + const char *ptr2end; int m, s1len, s2len; @@ -196,7 +196,7 @@ lpad(PG_FUNCTION_ARGS) while (m--) { - int mlen = pg_mblen(ptr2); + int mlen = pg_mblen_range(ptr2, ptr2end); memcpy(ptr_ret, ptr2, mlen); ptr_ret += mlen; @@ -209,7 +209,7 @@ lpad(PG_FUNCTION_ARGS) while (s1len--) { - int mlen = pg_mblen(ptr1); + int mlen = pg_mblen_unbounded(ptr1); memcpy(ptr_ret, ptr1, mlen); ptr_ret += mlen; @@ -248,8 +248,8 @@ rpad(PG_FUNCTION_ARGS) char *ptr1, *ptr2, *ptr2start, - *ptr2end, *ptr_ret; + const char *ptr2end; int m, s1len, s2len; @@ -288,11 +288,12 @@ rpad(PG_FUNCTION_ARGS) m = len - s1len; ptr1 = VARDATA_ANY(string1); + ptr_ret = VARDATA(ret); while (s1len--) { - int mlen = pg_mblen(ptr1); + int mlen = pg_mblen_unbounded(ptr1); memcpy(ptr_ret, ptr1, mlen); ptr_ret += mlen; @@ -304,7 +305,7 @@ rpad(PG_FUNCTION_ARGS) while (m--) { - int mlen = pg_mblen(ptr2); + int mlen = pg_mblen_range(ptr2, ptr2end); memcpy(ptr_ret, ptr2, mlen); ptr_ret += mlen; @@ -389,6 +390,7 @@ dotrim(const char *string, int stringlen, */ const char **stringchars; const char **setchars; + const char *setend; int *stringmblen; int *setmblen; int stringnchars; @@ -396,6 +398,7 @@ dotrim(const char *string, int stringlen, int resultndx; int resultnchars; const char *p; + const char *pend; int len; int mblen; const char *str_pos; @@ -406,10 +409,11 @@ dotrim(const char *string, int stringlen, stringnchars = 0; p = string; len = stringlen; + pend = p + len; while (len > 0) { stringchars[stringnchars] = p; - stringmblen[stringnchars] = mblen = pg_mblen(p); + stringmblen[stringnchars] = mblen = pg_mblen_range(p, pend); stringnchars++; p += mblen; len -= mblen; @@ -420,10 +424,11 @@ dotrim(const char *string, int stringlen, setnchars = 0; p = set; len = setlen; + setend = set + setlen; while (len > 0) { setchars[setnchars] = p; - setmblen[setnchars] = mblen = pg_mblen(p); + setmblen[setnchars] = mblen = pg_mblen_range(p, setend); setnchars++; p += mblen; len -= mblen; @@ -801,6 +806,8 @@ translate(PG_FUNCTION_ARGS) *to_end; char *source, *target; + const char *source_end; + const char *from_end; int m, fromlen, tolen, @@ -815,9 +822,11 @@ translate(PG_FUNCTION_ARGS) if (m <= 0) PG_RETURN_TEXT_P(string); source = VARDATA_ANY(string); + source_end = source + m; fromlen = VARSIZE_ANY_EXHDR(from); from_ptr = VARDATA_ANY(from); + from_end = from_ptr + fromlen; tolen = VARSIZE_ANY_EXHDR(to); to_ptr = VARDATA_ANY(to); to_end = to_ptr + tolen; @@ -840,12 +849,12 @@ translate(PG_FUNCTION_ARGS) while (m > 0) { - source_len = pg_mblen(source); + source_len = pg_mblen_range(source, source_end); from_index = 0; for (i = 0; i < fromlen; i += len) { - len = pg_mblen(&from_ptr[i]); + len = pg_mblen_range(&from_ptr[i], from_end); if (len == source_len && memcmp(source, &from_ptr[i], len) == 0) break; @@ -861,11 +870,11 @@ translate(PG_FUNCTION_ARGS) { if (p >= to_end) break; - p += pg_mblen(p); + p += pg_mblen_range(p, to_end); } if (p < to_end) { - len = pg_mblen(p); + len = pg_mblen_range(p, to_end); memcpy(target, p, len); target += len; retlen += len; diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index bf523c18249..8ae101cefc2 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -64,6 +64,7 @@ #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/pg_locale.h" +#include "utils/relcache.h" #include "utils/syscache.h" #ifdef USE_ICU @@ -1262,6 +1263,8 @@ lookup_collation_cache(Oid collation, bool set_flags) Assert(OidIsValid(collation)); Assert(collation != DEFAULT_COLLATION_OID); + AssertCouldGetRelation(); + if (collation_cache == NULL) { /* First time through, initialize the hash table */ diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 6fc2196d59a..e79b54775bb 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1028,7 +1028,7 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS) activity = beentry->st_activity_raw; clipped_activity = pgstat_clip_activity(activity); - ret = cstring_to_text(activity); + ret = cstring_to_text(clipped_activity); pfree(clipped_activity); PG_RETURN_TEXT_P(ret); @@ -1046,8 +1046,14 @@ pg_stat_get_backend_wait_event_type(PG_FUNCTION_ARGS) wait_event_type = ""; else if (!HAS_PGSTAT_PERMISSIONS(beentry->st_userid)) wait_event_type = ""; - else if ((proc = BackendPidGetProc(beentry->st_procpid)) != NULL) - wait_event_type = pgstat_get_wait_event_type(proc->wait_event_info); + else + { + proc = BackendPidGetProc(beentry->st_procpid); + if (!proc) + proc = AuxiliaryPidGetProc(beentry->st_procpid); + if (proc) + wait_event_type = pgstat_get_wait_event_type(proc->wait_event_info); + } if (!wait_event_type) PG_RETURN_NULL(); @@ -1067,8 +1073,14 @@ pg_stat_get_backend_wait_event(PG_FUNCTION_ARGS) wait_event = ""; else if (!HAS_PGSTAT_PERMISSIONS(beentry->st_userid)) wait_event = ""; - else if ((proc = BackendPidGetProc(beentry->st_procpid)) != NULL) - wait_event = pgstat_get_wait_event(proc->wait_event_info); + else + { + proc = BackendPidGetProc(beentry->st_procpid); + if (!proc) + proc = AuxiliaryPidGetProc(beentry->st_procpid); + if (proc) + wait_event = pgstat_get_wait_event(proc->wait_event_info); + } if (!wait_event) PG_RETURN_NULL(); diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index 6a53206520a..d7d5e90c316 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -436,7 +436,7 @@ parse_re_flags(pg_re_flags *flags, text *opts) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid regular expression option: \"%.*s\"", - pg_mblen(opt_p + i), opt_p + i))); + pg_mblen_range(opt_p + i, opt_p + opt_len), opt_p + i))); break; } } @@ -692,12 +692,15 @@ similar_escape_internal(text *pat_text, text *esc_text) *r; int plen, elen; + const char *pend; bool afterescape = false; - bool incharclass = false; int nquotes = 0; + int bracket_depth = 0; /* square bracket nesting level */ + int charclass_pos = 0; /* position inside a character class */ p = VARDATA_ANY(pat_text); plen = VARSIZE_ANY_EXHDR(pat_text); + pend = p + plen; if (esc_text == NULL) { /* No ESCAPE clause provided; default to backslash as escape */ @@ -753,6 +756,17 @@ similar_escape_internal(text *pat_text, text *esc_text) * the relevant part separators in the above expansion. If the result * of this function is used in a plain regexp match (SIMILAR TO), the * escape-double-quotes have no effect on the match behavior. + * + * While we don't fully validate character classes (bracket expressions), + * we do need to parse them well enough to know where they end. + * "charclass_pos" tracks where we are in a character class. + * Its value is uninteresting when bracket_depth is 0. + * But when bracket_depth > 0, it will be + * 1: right after the opening '[' (a following '^' will negate + * the class, while ']' is a literal character) + * 2: right after a '^' after the opening '[' (']' is still a literal + * character) + * 3 or more: further inside the character class (']' ends the class) *---------- */ @@ -786,7 +800,7 @@ similar_escape_internal(text *pat_text, text *esc_text) if (elen > 1) { - int mblen = pg_mblen(p); + int mblen = pg_mblen_range(p, pend); if (mblen > 1) { @@ -824,7 +838,7 @@ similar_escape_internal(text *pat_text, text *esc_text) /* fast path */ if (afterescape) { - if (pchar == '"' && !incharclass) /* escape-double-quote? */ + if (pchar == '"' && bracket_depth < 1) /* escape-double-quote? */ { /* emit appropriate part separator, per notes above */ if (nquotes == 0) @@ -865,6 +879,12 @@ similar_escape_internal(text *pat_text, text *esc_text) */ *r++ = '\\'; *r++ = pchar; + + /* + * If we encounter an escaped character in a character class, + * we are no longer at the beginning. + */ + charclass_pos = 3; } afterescape = false; } @@ -873,18 +893,69 @@ similar_escape_internal(text *pat_text, text *esc_text) /* SQL escape character; do not send to output */ afterescape = true; } - else if (incharclass) + else if (bracket_depth > 0) { + /* inside a character class */ if (pchar == '\\') + { + /* + * If we're here, backslash is not the SQL escape character, + * so treat it as a literal class element, which requires + * doubling it. (This matches our behavior for backslashes + * outside character classes.) + */ *r++ = '\\'; + } *r++ = pchar; - if (pchar == ']') - incharclass = false; + + /* parse the character class well enough to identify ending ']' */ + if (pchar == ']' && charclass_pos > 2) + { + /* found the real end of a bracket pair */ + bracket_depth--; + /* don't reset charclass_pos, this may be an inner bracket */ + } + else if (pchar == '[') + { + /* start of a nested bracket pair */ + bracket_depth++; + + /* + * We are no longer at the beginning of a character class. + * (The nested bracket pair is a collating element, not a + * character class in its own right.) + */ + charclass_pos = 3; + } + else if (pchar == '^') + { + /* + * A caret right after the opening bracket negates the + * character class. In that case, the following will + * increment charclass_pos from 1 to 2, so that a following + * ']' is still a literal character and does not end the + * character class. If we are further inside a character + * class, charclass_pos might get incremented past 3, which is + * fine. + */ + charclass_pos++; + } + else + { + /* + * Anything else (including a backslash or leading ']') is an + * element of the character class, so we are no longer at the + * beginning of the class. + */ + charclass_pos = 3; + } } else if (pchar == '[') { + /* start of a character class */ *r++ = pchar; - incharclass = true; + bracket_depth = 1; + charclass_pos = 1; } else if (pchar == '%') { diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index a0fd4d25bf8..496c4eb7a57 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -20,6 +20,7 @@ #include #include "access/amapi.h" +#include "access/genam.h" #include "access/htup_details.h" #include "access/relation.h" #include "access/sysattr.h" @@ -30,6 +31,7 @@ #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" +#include "catalog/pg_rewrite.h" #include "catalog/pg_language.h" #include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" @@ -1569,6 +1571,116 @@ pg_get_statisticsobjdef_string(Oid statextid) return pg_get_statisticsobj_worker(statextid, false, false); } +/* + * pg_get_view_createcommand + * Get the full CREATE OR REPLACE VIEW command for a view, suitable for + * use in rebuilding the view after an ALTER TABLE ... ALTER COLUMN TYPE + * operation. Returns a palloc'd string. + * + * This function reads pg_rewrite directly (without SPI) to obtain the view's + * stored query, then deparses it. The returned string includes the view's + * schema-qualified name and any view options (security_barrier, check_option). + */ +char * +pg_get_view_createcommand(Oid viewoid) +{ + StringInfoData buf; + Relation viewrel; + HeapTuple ruletup; + Form_pg_rewrite ruleform; + Datum dat; + bool isnull; + char *ev_action_str; + List *actions; + Query *query; + char *nsp; + Relation rewriteRel; + TupleDesc rewriteTupdesc; + ScanKeyData key[2]; + SysScanDesc scan; + + initStringInfo(&buf); + + /* Open the view relation to get its name, schema, and options */ + viewrel = table_open(viewoid, AccessShareLock); + + Assert(viewrel->rd_rel->relkind == RELKIND_VIEW); + + nsp = get_namespace_name(RelationGetNamespace(viewrel)); + + /* Build the CREATE OR REPLACE VIEW prefix */ + appendStringInfoString(&buf, "CREATE OR REPLACE VIEW "); + appendStringInfo(&buf, "%s.%s", + quote_identifier(nsp), + quote_identifier(RelationGetRelationName(viewrel))); + + /* Add security_barrier option if applicable */ + if (RelationIsSecurityView(viewrel)) + appendStringInfoString(&buf, " WITH (security_barrier='true')"); + + appendStringInfoString(&buf, " AS "); + + /* + * Look up the view's SELECT rule in pg_rewrite using the + * (ev_class, rulename) index. + */ + rewriteRel = table_open(RewriteRelationId, AccessShareLock); + rewriteTupdesc = RelationGetDescr(rewriteRel); + + ScanKeyInit(&key[0], + Anum_pg_rewrite_ev_class, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(viewoid)); + ScanKeyInit(&key[1], + Anum_pg_rewrite_rulename, + BTEqualStrategyNumber, F_NAMEEQ, + PointerGetDatum(ViewSelectRuleName)); + + scan = systable_beginscan(rewriteRel, RewriteRelRulenameIndexId, true, + NULL, 2, key); + + ruletup = systable_getnext(scan); + if (!HeapTupleIsValid(ruletup)) + elog(ERROR, "could not find SELECT rule for view %u", viewoid); + + ruleform = (Form_pg_rewrite) GETSTRUCT(ruletup); + + if (ruleform->ev_type != '1' || !ruleform->is_instead) + elog(ERROR, "unexpected rule type for view %u", viewoid); + + /* Get and deparse the ev_action (stored query tree) */ + dat = heap_getattr(ruletup, Anum_pg_rewrite_ev_action, rewriteTupdesc, &isnull); + Assert(!isnull); + ev_action_str = TextDatumGetCString(dat); + actions = (List *) stringToNode(ev_action_str); + pfree(ev_action_str); + + systable_endscan(scan); + table_close(rewriteRel, AccessShareLock); + + if (list_length(actions) != 1) + elog(ERROR, "unexpected number of actions for view %u", viewoid); + + query = (Query *) linitial(actions); + + /* + * Deparse the query into the buffer. We use the view's tuple descriptor + * as resultDesc so that output column names match the view definition. + */ + get_query_def(query, &buf, NIL, RelationGetDescr(viewrel), + true, PRETTYFLAG_INDENT, WRAP_COLUMN_DEFAULT, 0); + + /* Append WITH CHECK OPTION if the view was defined with it */ + if (RelationHasLocalCheckOption(viewrel)) + appendStringInfoString(&buf, " WITH LOCAL CHECK OPTION"); + else if (RelationHasCascadedCheckOption(viewrel)) + appendStringInfoString(&buf, " WITH CASCADED CHECK OPTION"); + + table_close(viewrel, AccessShareLock); + + return buf.data; +} + /* * pg_get_statisticsobjdef_columns * Get columns and expressions for an extended statistics object @@ -5986,9 +6098,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 diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 87879c9ddc8..6a8d2fd7a8c 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -4958,8 +4958,8 @@ ReleaseDummy(HeapTuple tuple) * 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. @@ -5138,78 +5138,32 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, if (HeapTupleIsValid(vardata->statsTuple)) { - /* Get index's table for permission check */ - RangeTblEntry *rte; - Oid userid; - - rte = planner_rt_fetch(index->rel->relid, root); - Assert(rte->rtekind == RTE_RELATION); - - /* - * Use checkAsUser if it's set, in case we're - * accessing the table via a view. - */ - userid = rte->checkAsUser ? rte->checkAsUser : GetUserId(); - /* + * 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); - - userid = rte->checkAsUser ? rte->checkAsUser : GetUserId(); - - 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 { @@ -5278,10 +5232,6 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, { HeapTuple t = statext_expressions_load(info->statOid, pos); - /* Get statistics object's table for permission check */ - RangeTblEntry *rte; - Oid userid; - vardata->statsTuple = t; /* @@ -5290,70 +5240,27 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, */ vardata->freefunc = ReleaseDummy; - rte = planner_rt_fetch(onerel->relid, root); - Assert(rte->rtekind == RTE_RELATION); - - /* - * Use checkAsUser if it's set, in case we're accessing - * the table via a view. - */ - userid = rte->checkAsUser ? rte->checkAsUser : GetUserId(); - /* + * 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. - */ - 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. + * 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. */ - 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); - - userid = rte->checkAsUser ? rte->checkAsUser : GetUserId(); - - 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; } @@ -5406,92 +5313,20 @@ examine_simple_variable(PlannerInfo *root, Var *var, if (HeapTupleIsValid(vardata->statsTuple)) { - 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. Use checkAsUser - * if it's set, in case we're accessing the table via a view. + * Test if user has permission to read all rows from this column. + * + * 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(). */ - userid = rte->checkAsUser ? rte->checkAsUser : 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); - - userid = rte->checkAsUser ? rte->checkAsUser : GetUserId(); - - 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 { @@ -5615,17 +5450,208 @@ 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) +{ + RangeTblEntry *rte = planner_rt_fetch(varno, root); + int varattno; + Oid userid; + + Assert(rte->rtekind == RTE_RELATION); + + /* + * 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; + + /* + * Use checkAsUser for privilege checks if it's set, in case we're + * accessing the table via a view. + */ + userid = rte->checkAsUser ? rte->checkAsUser : GetUserId(); + + /* + * 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; +} + /* * 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 leak-proof. + * 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; diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c index 1a146372f7a..370f57ede58 100644 --- a/src/backend/utils/adt/tsquery.c +++ b/src/backend/utils/adt/tsquery.c @@ -109,7 +109,7 @@ get_modifiers(char *buf, int16 *weight, bool *prefix) return buf; buf++; - while (*buf && pg_mblen(buf) == 1) + while (*buf && pg_mblen_cstr(buf) == 1) { switch (*buf) { @@ -186,7 +186,7 @@ parse_phrase_operator(TSQueryParserState pstate, int16 *distance) continue; } - if (!t_isdigit(ptr)) + if (!t_isdigit_cstr(ptr)) return false; errno = 0; @@ -248,12 +248,12 @@ parse_or_operator(TSQueryParserState pstate) return false; /* it shouldn't be a part of any word */ - if (t_iseq(ptr, '-') || t_iseq(ptr, '_') || t_isalpha(ptr) || t_isdigit(ptr)) + if (t_iseq(ptr, '-') || t_iseq(ptr, '_') || t_isalpha_cstr(ptr) || t_isdigit_cstr(ptr)) return false; for (;;) { - ptr += pg_mblen(ptr); + ptr += pg_mblen_cstr(ptr); if (*ptr == '\0') /* got end of string without operand */ return false; @@ -263,7 +263,7 @@ parse_or_operator(TSQueryParserState pstate) * So we still treat OR literal as operation with possibly incorrect * operand and will not search it as lexeme */ - if (!t_isspace(ptr)) + if (!t_isspace_cstr(ptr)) break; } @@ -306,7 +306,7 @@ gettoken_query_standard(TSQueryParserState state, int8 *operator, errmsg("syntax error in tsquery: \"%s\"", state->buffer))); } - else if (!t_isspace(state->buf)) + else if (!t_isspace_cstr(state->buf)) { /* * We rely on the tsvector parser to parse the value for @@ -364,14 +364,14 @@ gettoken_query_standard(TSQueryParserState state, int8 *operator, { return (state->count) ? PT_ERR : PT_END; } - else if (!t_isspace(state->buf)) + else if (!t_isspace_cstr(state->buf)) { return PT_ERR; } break; } - state->buf += pg_mblen(state->buf); + state->buf += pg_mblen_cstr(state->buf); } } @@ -425,7 +425,7 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator, state->state = WAITOPERAND; continue; } - else if (!t_isspace(state->buf)) + else if (!t_isspace_cstr(state->buf)) { /* * We rely on the tsvector parser to parse the value for @@ -468,7 +468,7 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator, state->buf++; continue; } - else if (!t_isspace(state->buf)) + else if (!t_isspace_cstr(state->buf)) { /* insert implicit AND between operands */ state->state = WAITOPERAND; @@ -478,7 +478,7 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator, break; } - state->buf += pg_mblen(state->buf); + state->buf += pg_mblen_cstr(state->buf); } } @@ -961,9 +961,8 @@ infix(INFIX *in, int parentPriority, bool rightPhraseOp) *(in->cur) = '\\'; in->cur++; } - COPYCHAR(in->cur, op); - clen = pg_mblen(op); + clen = ts_copychar_cstr(in->cur, op); op += clen; in->cur += clen; } @@ -1123,10 +1122,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 62f0926d864..bc600915f74 100644 --- a/src/backend/utils/adt/tsvector.c +++ b/src/backend/utils/adt/tsvector.c @@ -22,7 +22,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; @@ -78,16 +78,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) @@ -316,9 +313,9 @@ tsvectorout(PG_FUNCTION_ARGS) lenbuf = 0, pp; WordEntry *ptr = ARRPTR(out); - char *curbegin, - *curin, + char *curin, *curout; + const char *curend; lenbuf = out->size * 2 /* '' */ + out->size - 1 /* space */ + 2 /* \0 */ ; for (i = 0; i < out->size; i++) @@ -331,13 +328,14 @@ tsvectorout(PG_FUNCTION_ARGS) curout = outbuf = (char *) palloc(lenbuf); for (i = 0; i < out->size; i++) { - curbegin = curin = STRPTR(out) + ptr->pos; + curin = STRPTR(out) + ptr->pos; + curend = curin + ptr->len; if (i != 0) *curout++ = ' '; *curout++ = '\''; - while (curin - curbegin < ptr->len) + while (curin < curend) { - int len = pg_mblen(curin); + int len = pg_mblen_range(curin, curend); if (t_iseq(curin, '\'')) *curout++ = '\''; @@ -505,7 +503,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 4237806d6d8..d9562e209da 100644 --- a/src/backend/utils/adt/tsvector_op.c +++ b/src/backend/utils/adt/tsvector_op.c @@ -2434,11 +2434,15 @@ ts_stat_sql(MemoryContext persistentContext, text *txt, text *ws) if (ws) { char *buf; + const char *end; buf = VARDATA_ANY(ws); - while (buf - VARDATA_ANY(ws) < VARSIZE_ANY_EXHDR(ws)) + end = buf + VARSIZE_ANY_EXHDR(ws); + while (buf < end) { - if (pg_mblen(buf) == 1) + int len = pg_mblen_range(buf, end); + + if (len == 1) { switch (*buf) { @@ -2462,7 +2466,7 @@ ts_stat_sql(MemoryContext persistentContext, text *txt, text *ws) stat->weight |= 0; } } - buf += pg_mblen(buf); + buf += len; } } diff --git a/src/backend/utils/adt/tsvector_parser.c b/src/backend/utils/adt/tsvector_parser.c index c2df4093e6b..1187f0af523 100644 --- a/src/backend/utils/adt/tsvector_parser.c +++ b/src/backend/utils/adt/tsvector_parser.c @@ -185,10 +185,9 @@ gettoken_tsvector(TSVectorParseState state, else if ((state->oprisdelim && ISOPERATOR(state->prsbuf)) || (state->is_web && t_iseq(state->prsbuf, '"'))) PRSSYNTAXERROR; - else if (!t_isspace(state->prsbuf)) + else if (!t_isspace_cstr(state->prsbuf)) { - COPYCHAR(curpos, state->prsbuf); - curpos += pg_mblen(state->prsbuf); + curpos += ts_copychar_cstr(curpos, state->prsbuf); statecode = WAITENDWORD; } } @@ -202,8 +201,7 @@ gettoken_tsvector(TSVectorParseState state, else { RESIZEPRSBUF; - COPYCHAR(curpos, state->prsbuf); - curpos += pg_mblen(state->prsbuf); + curpos += ts_copychar_cstr(curpos, state->prsbuf); Assert(oldstate != 0); statecode = oldstate; } @@ -215,7 +213,7 @@ gettoken_tsvector(TSVectorParseState state, statecode = WAITNEXTCHAR; oldstate = WAITENDWORD; } - else if (t_isspace(state->prsbuf) || *(state->prsbuf) == '\0' || + else if (t_isspace_cstr(state->prsbuf) || *(state->prsbuf) == '\0' || (state->oprisdelim && ISOPERATOR(state->prsbuf)) || (state->is_web && t_iseq(state->prsbuf, '"'))) { @@ -238,8 +236,7 @@ gettoken_tsvector(TSVectorParseState state, else { RESIZEPRSBUF; - COPYCHAR(curpos, state->prsbuf); - curpos += pg_mblen(state->prsbuf); + curpos += ts_copychar_cstr(curpos, state->prsbuf); } } else if (statecode == WAITENDCMPLX) @@ -258,8 +255,7 @@ gettoken_tsvector(TSVectorParseState state, else { RESIZEPRSBUF; - COPYCHAR(curpos, state->prsbuf); - curpos += pg_mblen(state->prsbuf); + curpos += ts_copychar_cstr(curpos, state->prsbuf); } } else if (statecode == WAITCHARCMPLX) @@ -267,8 +263,7 @@ gettoken_tsvector(TSVectorParseState state, if (!state->is_web && t_iseq(state->prsbuf, '\'')) { RESIZEPRSBUF; - COPYCHAR(curpos, state->prsbuf); - curpos += pg_mblen(state->prsbuf); + curpos += ts_copychar_cstr(curpos, state->prsbuf); statecode = WAITENDCMPLX; } else @@ -279,7 +274,7 @@ gettoken_tsvector(TSVectorParseState state, PRSSYNTAXERROR; if (state->oprisdelim) { - /* state->prsbuf+=pg_mblen(state->prsbuf); */ + /* state->prsbuf+=pg_mblen_cstr(state->prsbuf); */ RETURN_TOKEN; } else @@ -296,7 +291,7 @@ gettoken_tsvector(TSVectorParseState state, } else if (statecode == INPOSINFO) { - if (t_isdigit(state->prsbuf)) + if (t_isdigit_cstr(state->prsbuf)) { if (posalen == 0) { @@ -351,10 +346,10 @@ gettoken_tsvector(TSVectorParseState state, PRSSYNTAXERROR; WEP_SETWEIGHT(pos[npos - 1], 0); } - else if (t_isspace(state->prsbuf) || + else if (t_isspace_cstr(state->prsbuf) || *(state->prsbuf) == '\0') RETURN_TOKEN; - else if (!t_isdigit(state->prsbuf)) + else if (!t_isdigit_cstr(state->prsbuf)) PRSSYNTAXERROR; } else /* internal error */ @@ -362,6 +357,6 @@ gettoken_tsvector(TSVectorParseState state, statecode); /* get next char */ - state->prsbuf += pg_mblen(state->prsbuf); + state->prsbuf += pg_mblen_cstr(state->prsbuf); } } diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c index 0d0c0fd9f3c..b008959ab54 100644 --- a/src/backend/utils/adt/varbit.c +++ b/src/backend/utils/adt/varbit.c @@ -232,7 +232,7 @@ bit_in(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("\"%.*s\" is not a valid binary digit", - pg_mblen(sp), sp))); + pg_mblen_cstr(sp), sp))); x >>= 1; if (x == 0) @@ -257,7 +257,7 @@ bit_in(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("\"%.*s\" is not a valid hexadecimal digit", - pg_mblen(sp), sp))); + pg_mblen_cstr(sp), sp))); if (bc) { @@ -533,7 +533,7 @@ varbit_in(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("\"%.*s\" is not a valid binary digit", - pg_mblen(sp), sp))); + pg_mblen_cstr(sp), sp))); x >>= 1; if (x == 0) @@ -558,7 +558,7 @@ varbit_in(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("\"%.*s\" is not a valid hexadecimal digit", - pg_mblen(sp), sp))); + pg_mblen_cstr(sp), sp))); if (bc) { diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 556a57ba00c..2cfe66ff966 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -137,6 +137,7 @@ static text *text_substring(Datum str, int32 start, int32 length, bool length_not_specified); +static int pg_mbcharcliplen_chars(const char *mbstr, int len, int limit); static text *text_overlay(text *t1, text *t2, int sp, int sl); static int text_position(text *t1, text *t2, Oid collid); static void text_position_setup(text *t1, text *t2, Oid collid, TextPositionState *state); @@ -803,8 +804,11 @@ text_catenate(text *t1, text *t2) * charlen_to_bytelen() * Compute the number of bytes occupied by n characters starting at *p * - * It is caller's responsibility that there actually are n characters; - * the string need not be null-terminated. + * The caller shall ensure there are n complete characters. Callers achieve + * this by deriving "n" from regmatch_t findings from searching a wchar array. + * pg_mb2wchar_with_len() skips any trailing incomplete character, so regex + * matches will end no later than the last complete character. (The string + * need not be null-terminated.) * * remove static. */ @@ -821,7 +825,7 @@ charlen_to_bytelen(const char *p, int n) const char *s; for (s = p; n > 0; n--) - s += pg_mblen(s); + s += pg_mblen_unbounded(s); /* caller verified encoding */ return s - p; } @@ -894,7 +898,7 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) int32 S = start; /* start position */ int32 S1; /* adjusted start position */ int32 L1; /* adjusted substring length */ - int32 E; /* end position */ + int32 E; /* end position, exclusive */ /* * SQL99 says S can be zero or negative, but we still must fetch from the @@ -954,6 +958,7 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) int32 slice_start; int32 slice_size; int32 slice_strlen; + int32 slice_len; text *slice; int32 E1; int32 i; @@ -970,14 +975,14 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) if (length_not_specified) /* special case - get length to end of * string */ - slice_size = L1 = -1; + E = slice_size = L1 = -1; else if (length < 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"))); - slice_size = L1 = -1; /* silence stupider compilers */ + E = slice_size = L1 = -1; /* silence stupider compilers */ } else if (pg_add_s32_overflow(S, length, &E)) { @@ -990,11 +995,11 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) 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. + * Ending at position 1, exclusive, obviously yields an empty + * string. A zero or negative value can happen if the start was + * negative or one. SQL99 says to return a zero-length string. */ - if (E < 1) + if (E <= 1) return cstring_to_text(""); /* @@ -1004,11 +1009,11 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) L1 = E - S1; /* - * Total slice size in bytes can't be any longer than the start - * position plus substring length times the encoding max length. - * If that overflows, we can just use -1. + * Total slice size in bytes can't be any longer than the + * inclusive end position times the encoding max length. If that + * overflows, we can just use -1. */ - if (pg_mul_s32_overflow(E, eml, &slice_size)) + if (pg_mul_s32_overflow(E - 1, eml, &slice_size)) slice_size = -1; } @@ -1023,16 +1028,25 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) slice = (text *) DatumGetPointer(str); /* see if we got back an empty string */ - if (VARSIZE_ANY_EXHDR(slice) == 0) + slice_len = VARSIZE_ANY_EXHDR(slice); + if (slice_len == 0) { if (slice != (text *) DatumGetPointer(str)) pfree(slice); return cstring_to_text(""); } - /* Now we can get the actual length of the slice in MB characters */ - slice_strlen = pg_mbstrlen_with_len(VARDATA_ANY(slice), - VARSIZE_ANY_EXHDR(slice)); + /* + * Now we can get the actual length of the slice in MB characters, + * stopping at the end of the substring. Continuing beyond the + * substring end could find an incomplete character attributable + * solely to DatumGetTextPSlice() chopping in the middle of a + * character, and it would be superfluous work at best. + */ + slice_strlen = + (slice_size == -1 ? + pg_mbstrlen_with_len(VARDATA_ANY(slice), slice_len) : + pg_mbcharcliplen_chars(VARDATA_ANY(slice), slice_len, E - 1)); /* * Check that the start position wasn't > slice_strlen. If so, SQL99 @@ -1059,7 +1073,7 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) */ p = VARDATA_ANY(slice); for (i = 0; i < S1 - 1; i++) - p += pg_mblen(p); + p += pg_mblen_unbounded(p); /* hang onto a pointer to our start position */ s = p; @@ -1069,7 +1083,7 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) * length. */ for (i = S1; i < E1; i++) - p += pg_mblen(p); + p += pg_mblen_unbounded(p); ret = (text *) palloc(VARHDRSZ + (p - s)); SET_VARSIZE(ret, VARHDRSZ + (p - s)); @@ -1087,6 +1101,35 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified) return NULL; } +/* + * pg_mbcharcliplen_chars - + * Mirror pg_mbcharcliplen(), except return value unit is chars, not bytes. + * + * This mirrors all the dubious historical behavior, so it's static to + * discourage proliferation. The assertions are specific to the one caller. + */ +static int +pg_mbcharcliplen_chars(const char *mbstr, int len, int limit) +{ + int nch = 0; + int l; + + Assert(len > 0); + Assert(limit > 0); + Assert(pg_database_encoding_max_length() > 1); + + while (len > 0 && *mbstr) + { + l = pg_mblen_with_len(mbstr, len); + nch++; + if (nch == limit) + break; + len -= l; + mbstr += l; + } + return nch; +} + /* * textoverlay * Replace specified substring of first string with second @@ -1376,6 +1419,8 @@ text_position_next(TextPositionState *state) */ if (state->is_multibyte_char_in_char) { + const char *haystack_end = state->str1 + state->len1; + /* Walk one character at a time, until we reach the match. */ /* the search should never move backwards. */ @@ -1384,7 +1429,7 @@ text_position_next(TextPositionState *state) while (state->refpoint < matchptr) { /* step to next character. */ - state->refpoint += pg_mblen(state->refpoint); + state->refpoint += pg_mblen_range(state->refpoint, haystack_end); state->refpos++; /* @@ -1499,7 +1544,8 @@ text_position_get_match_pos(TextPositionState *state) /* Convert the byte position to char position. */ while (state->refpoint < state->last_match) { - state->refpoint += pg_mblen(state->refpoint); + state->refpoint += pg_mblen_range(state->refpoint, + state->last_match); state->refpos++; } Assert(state->refpoint == state->last_match); @@ -4534,7 +4580,7 @@ check_replace_text_has_escape_char(const text *replace_text) } else { - for (; p < p_end; p += pg_mblen(p)) + for (; p < p_end; p += pg_mblen_range(p, p_end)) { if (*p == '\\') return true; @@ -4574,7 +4620,7 @@ appendStringInfoRegexpSubstr(StringInfo str, text *replace_text, } else { - for (; p < p_end && *p != '\\'; p += pg_mblen(p)) + for (; p < p_end && *p != '\\'; p += pg_mblen_range(p, p_end)) /* nothing */ ; } @@ -5349,6 +5395,8 @@ split_text(FunctionCallInfo fcinfo, SplitTextOutputData *tstate) } else { + const char *end_ptr; + /* * When fldsep is NULL, each character in the input string becomes a * separate element in the result set. The separator is effectively @@ -5357,10 +5405,11 @@ split_text(FunctionCallInfo fcinfo, SplitTextOutputData *tstate) inputstring_len = VARSIZE_ANY_EXHDR(inputstring); start_ptr = VARDATA_ANY(inputstring); + end_ptr = start_ptr + inputstring_len; while (inputstring_len > 0) { - int chunk_len = pg_mblen(start_ptr); + int chunk_len = pg_mblen_range(start_ptr, end_ptr); CHECK_FOR_INTERRUPTS(); @@ -6039,7 +6088,7 @@ text_reverse(PG_FUNCTION_ARGS) { int sz; - sz = pg_mblen(p); + sz = pg_mblen_range(p, endp); dst -= sz; memcpy(dst, p, sz); p += sz; @@ -6200,7 +6249,7 @@ text_format(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized format() type specifier \"%.*s\"", - pg_mblen(cp), cp), + pg_mblen_range(cp, end_ptr), cp), errhint("For a single \"%%\" use \"%%%%\"."))); /* If indirect width was specified, get its value */ @@ -6321,7 +6370,7 @@ text_format(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized format() type specifier \"%.*s\"", - pg_mblen(cp), cp), + pg_mblen_range(cp, end_ptr), cp), errhint("For a single \"%%\" use \"%%%%\"."))); break; } diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index 630b1b84e1c..98dcc04122b 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -1529,6 +1529,7 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, PgXmlErrorContext *xmlerrcxt; volatile xmlParserCtxtPtr ctxt = NULL; volatile xmlDocPtr doc = NULL; + volatile int save_keep_blanks = -1; len = VARSIZE_ANY_EXHDR(data); /* will be useful later */ string = xml_text2xmlChar(data); @@ -1545,7 +1546,6 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, PG_TRY(); { bool parse_as_document = false; - int options; int res_code; size_t count = 0; xmlChar *version = NULL; @@ -1571,25 +1571,28 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, 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); - 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", @@ -1608,36 +1611,22 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, } 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); Assert(doc->encoding == NULL); doc->encoding = xmlStrdup((const xmlChar *) "UTF-8"); 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); - - xmlFreeNodeList(node_list); - - if (res != XML_ERR_OK || xmlerrcxt->err_occurred) + res_code = xmlParseBalancedChunkMemory(doc, NULL, NULL, 0, + utf8string + count, + NULL); + if (res_code != 0 || xmlerrcxt->err_occurred) xml_ereport(xmlerrcxt, ERROR, ERRCODE_INVALID_XML_CONTENT, "invalid XML content"); } @@ -1645,6 +1634,8 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, } PG_CATCH(); { + if (save_keep_blanks != -1) + xmlKeepBlanksDefault(save_keep_blanks); if (doc != NULL) xmlFreeDoc(doc); if (ctxt != NULL) @@ -1656,6 +1647,9 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, } PG_END_TRY(); + if (save_keep_blanks != -1) + xmlKeepBlanksDefault(save_keep_blanks); + if (ctxt != NULL) xmlFreeParserCtxt(ctxt); @@ -2043,8 +2037,7 @@ sqlchar_to_unicode(const char *s) char *utf8string; pg_wchar ret[2]; /* need space for trailing zero */ - /* note we're not assuming s is null-terminated */ - utf8string = pg_server_to_any(s, pg_mblen(s), PG_UTF8); + utf8string = pg_server_to_any(s, pg_mblen_cstr(s), PG_UTF8); pg_encoding_mb2wchar_with_len(PG_UTF8, utf8string, ret, pg_encoding_mblen(PG_UTF8, utf8string)); @@ -2097,7 +2090,7 @@ map_sql_identifier_to_xml_name(const char *ident, bool fully_escaped, initStringInfo(&buf); - for (p = ident; *p; p += pg_mblen(p)) + for (p = ident; *p; p += pg_mblen_cstr(p)) { if (*p == ':' && (p == ident || fully_escaped)) appendStringInfoString(&buf, "_x003A_"); @@ -2122,7 +2115,7 @@ map_sql_identifier_to_xml_name(const char *ident, bool fully_escaped, : !is_valid_xml_namechar(u)) appendStringInfo(&buf, "_x%04X_", (unsigned int) u); else - appendBinaryStringInfo(&buf, p, pg_mblen(p)); + appendBinaryStringInfo(&buf, p, pg_mblen_cstr(p)); } } @@ -2145,7 +2138,7 @@ map_xml_name_to_sql_identifier(const char *name) initStringInfo(&buf); - for (p = name; *p; p += pg_mblen(p)) + for (p = name; *p; p += pg_mblen_cstr(p)) { if (*p == '_' && *(p + 1) == 'x' && isxdigit((unsigned char) *(p + 2)) @@ -2163,7 +2156,7 @@ map_xml_name_to_sql_identifier(const char *name) p += 6; } else - appendBinaryStringInfo(&buf, p, pg_mblen(p)); + appendBinaryStringInfo(&buf, p, pg_mblen_cstr(p)); } return buf.data; diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 7176c29bc6f..114bc2a3da3 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -942,12 +942,41 @@ RehashCatCache(CatCache *cp) cp->cc_bucket = 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 \ @@ -1082,8 +1111,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 && @@ -1262,16 +1290,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++; @@ -1550,8 +1574,7 @@ GetCatCacheHashValue(CatCache *cache, /* * one-time startup overhead for each cache */ - if (cache->cc_tupdesc == NULL) - CatalogCacheInitializeCache(cache); + ConditionalCatalogCacheInitializeCache(cache); /* * calculate the hash value @@ -1600,8 +1623,7 @@ SearchCatCacheList(CatCache *cache, /* * one-time startup overhead for each cache */ - if (cache->cc_tupdesc == NULL) - CatalogCacheInitializeCache(cache); + ConditionalCatalogCacheInitializeCache(cache); Assert(nkeys > 0 && nkeys < cache->cc_nkeys); @@ -2190,7 +2212,8 @@ void PrepareToInvalidateCacheTuple(Relation relation, HeapTuple tuple, HeapTuple newtuple, - void (*function) (int, uint32, Oid)) + void (*function) (int, uint32, Oid, void *), + void *context) { slist_iter iter; Oid reloid; @@ -2225,13 +2248,12 @@ 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; - (*function) (ccp->id, hashvalue, dbid); + (*function) (ccp->id, hashvalue, dbid, context); if (newtuple) { @@ -2240,7 +2262,7 @@ PrepareToInvalidateCacheTuple(Relation relation, newhashvalue = CatalogCacheComputeTupleHashValue(ccp, ccp->cc_nkeys, newtuple); if (newhashvalue != hashvalue) - (*function) (ccp->id, newhashvalue, dbid); + (*function) (ccp->id, newhashvalue, dbid, context); } } } diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index 9d764ad81f9..e1f0cf3347f 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -99,6 +99,10 @@ * worth trying to avoid sending such inval traffic in the future, if those * problems can be overcome cheaply. * + * When making a nontransactional change to a cacheable object, we must + * likewise send the invalidation immediately, before ending the change's + * critical section. This includes inplace heap updates, relmap, and smgr. + * * When wal_level=logical, write invalidations into WAL at each command end to * support the decoding of the in-progress transactions. See * CommandEndInvalidationMessages. @@ -154,7 +158,7 @@ typedef struct InvalidationListHeader } InvalidationListHeader; /*---------------- - * Invalidation info is divided into two lists: + * Transactional invalidation info is divided into two lists: * 1) events so far in current command, not yet reflected to caches. * 2) events in previous commands of current transaction; these have * been reflected to local caches, and must be either broadcast to @@ -170,26 +174,36 @@ typedef struct InvalidationListHeader *---------------- */ -typedef struct TransInvalidationInfo +/* fields common to both transactional and inplace invalidation */ +typedef struct InvalidationInfo { - /* Back link to parent transaction's info */ - struct TransInvalidationInfo *parent; - - /* Subtransaction nesting depth */ - int my_level; - /* head of current-command event list */ InvalidationListHeader CurrentCmdInvalidMsgs; + /* init file must be invalidated? */ + bool RelcacheInitFileInval; +} InvalidationInfo; + +/* subclass adding fields specific to transactional invalidation */ +typedef struct TransInvalidationInfo +{ + /* Base class */ + struct InvalidationInfo ii; + /* head of previous-commands event list */ InvalidationListHeader PriorCmdInvalidMsgs; - /* init file must be invalidated? */ - bool RelcacheInitFileInval; + /* Back link to parent transaction's info */ + struct TransInvalidationInfo *parent; + + /* Subtransaction nesting depth */ + int my_level; } TransInvalidationInfo; static TransInvalidationInfo *transInvalInfo = NULL; +static InvalidationInfo *inplaceInvalInfo = NULL; + static SharedInvalidationMessage *SharedInvalidMessagesArray; static int numSharedInvalidMessagesArray; static int maxSharedInvalidMessagesArray; @@ -505,9 +519,12 @@ ProcessInvalidationMessagesMulti(InvalidationListHeader *hdr, static void RegisterCatcacheInvalidation(int cacheId, uint32 hashValue, - Oid dbId) + Oid dbId, + void *context) { - AddCatcacheInvalidationMessage(&transInvalInfo->CurrentCmdInvalidMsgs, + InvalidationInfo *info = (InvalidationInfo *) context; + + AddCatcacheInvalidationMessage(&info->CurrentCmdInvalidMsgs, cacheId, hashValue, dbId); } @@ -517,10 +534,9 @@ RegisterCatcacheInvalidation(int cacheId, * Register an invalidation event for all catcache entries from a catalog. */ static void -RegisterCatalogInvalidation(Oid dbId, Oid catId) +RegisterCatalogInvalidation(InvalidationInfo *info, Oid dbId, Oid catId) { - AddCatalogInvalidationMessage(&transInvalInfo->CurrentCmdInvalidMsgs, - dbId, catId); + AddCatalogInvalidationMessage(&info->CurrentCmdInvalidMsgs, dbId, catId); } /* @@ -529,10 +545,9 @@ RegisterCatalogInvalidation(Oid dbId, Oid catId) * As above, but register a relcache invalidation event. */ static void -RegisterRelcacheInvalidation(Oid dbId, Oid relId) +RegisterRelcacheInvalidation(InvalidationInfo *info, Oid dbId, Oid relId) { - AddRelcacheInvalidationMessage(&transInvalInfo->CurrentCmdInvalidMsgs, - dbId, relId); + AddRelcacheInvalidationMessage(&info->CurrentCmdInvalidMsgs, dbId, relId); /* * Most of the time, relcache invalidation is associated with system @@ -549,7 +564,7 @@ RegisterRelcacheInvalidation(Oid dbId, Oid relId) * as well. Also zap when we are invalidating whole relcache. */ if (relId == InvalidOid || RelationIdIsInInitFile(relId)) - transInvalInfo->RelcacheInitFileInval = true; + info->RelcacheInitFileInval = true; } /* @@ -559,10 +574,9 @@ RegisterRelcacheInvalidation(Oid dbId, Oid relId) * Only needed for catalogs that don't have catcaches. */ static void -RegisterSnapshotInvalidation(Oid dbId, Oid relId) +RegisterSnapshotInvalidation(InvalidationInfo *info, Oid dbId, Oid relId) { - AddSnapshotInvalidationMessage(&transInvalInfo->CurrentCmdInvalidMsgs, - dbId, relId); + AddSnapshotInvalidationMessage(&info->CurrentCmdInvalidMsgs, dbId, relId); } /* @@ -706,6 +720,12 @@ InvalidateSystemCachesExtended(bool debug_discard) void AcceptInvalidationMessages(void) { +#ifdef USE_ASSERT_CHECKING + /* message handlers shall access catalogs only during transactions */ + if (IsTransactionState()) + AssertCouldGetRelation(); +#endif + ReceiveSharedInvalidMessages(LocalExecuteInvalidationMessage, InvalidateSystemCaches); @@ -752,14 +772,19 @@ AcceptInvalidationMessages(void) * PrepareInvalidationState * Initialize inval lists for the current (sub)transaction. */ -static void +static InvalidationInfo * PrepareInvalidationState(void) { TransInvalidationInfo *myInfo; + /* PrepareToInvalidateCacheTuple() needs relcache */ + AssertCouldGetRelation(); + /* Can't queue transactional message while collecting inplace messages. */ + Assert(inplaceInvalInfo == NULL); + if (transInvalInfo != NULL && transInvalInfo->my_level == GetCurrentTransactionNestLevel()) - return; + return (InvalidationInfo *) transInvalInfo; myInfo = (TransInvalidationInfo *) MemoryContextAllocZero(TopTransactionContext, @@ -775,6 +800,29 @@ PrepareInvalidationState(void) myInfo->my_level > transInvalInfo->my_level); transInvalInfo = myInfo; + return (InvalidationInfo *) myInfo; +} + +/* + * PrepareInplaceInvalidationState + * Initialize inval data for an inplace update. + * + * See previous function for more background. + */ +static InvalidationInfo * +PrepareInplaceInvalidationState(void) +{ + InvalidationInfo *myInfo; + + AssertCouldGetRelation(); + /* limit of one inplace update under assembly */ + Assert(inplaceInvalInfo == NULL); + + /* gone after WAL insertion CritSection ends, so use current context */ + myInfo = (InvalidationInfo *) palloc0(sizeof(InvalidationInfo)); + + inplaceInvalInfo = myInfo; + return myInfo; } /* @@ -870,7 +918,7 @@ xactGetCommittedInvalidationMessages(SharedInvalidationMessage **msgs, * after we send the SI messages. However, we need not do anything unless * we committed. */ - *RelcacheInitFileInval = transInvalInfo->RelcacheInitFileInval; + *RelcacheInitFileInval = transInvalInfo->ii.RelcacheInitFileInval; /* * Walk through TransInvalidationInfo to collect all the messages into a @@ -882,7 +930,7 @@ xactGetCommittedInvalidationMessages(SharedInvalidationMessage **msgs, */ oldcontext = MemoryContextSwitchTo(CurTransactionContext); - ProcessInvalidationMessagesMulti(&transInvalInfo->CurrentCmdInvalidMsgs, + ProcessInvalidationMessagesMulti(&transInvalInfo->ii.CurrentCmdInvalidMsgs, MakeSharedInvalidMessagesArray); ProcessInvalidationMessagesMulti(&transInvalInfo->PriorCmdInvalidMsgs, MakeSharedInvalidMessagesArray); @@ -972,7 +1020,9 @@ ProcessCommittedInvalidationMessages(SharedInvalidationMessage *msgs, void AtEOXact_Inval(bool isCommit) { - /* Quick exit if no messages */ + inplaceInvalInfo = NULL; + + /* Quick exit if no transactional messages */ if (transInvalInfo == NULL) return; @@ -986,16 +1036,16 @@ AtEOXact_Inval(bool isCommit) * after we send the SI messages. However, we need not do anything * unless we committed. */ - if (transInvalInfo->RelcacheInitFileInval) + if (transInvalInfo->ii.RelcacheInitFileInval) RelationCacheInitFilePreInvalidate(); AppendInvalidationMessages(&transInvalInfo->PriorCmdInvalidMsgs, - &transInvalInfo->CurrentCmdInvalidMsgs); + &transInvalInfo->ii.CurrentCmdInvalidMsgs); ProcessInvalidationMessagesMulti(&transInvalInfo->PriorCmdInvalidMsgs, SendSharedInvalidMessages); - if (transInvalInfo->RelcacheInitFileInval) + if (transInvalInfo->ii.RelcacheInitFileInval) RelationCacheInitFilePostInvalidate(); } else @@ -1010,6 +1060,57 @@ AtEOXact_Inval(bool isCommit) numSharedInvalidMessagesArray = 0; } +/* + * PreInplace_Inval + * Process queued-up invalidation before inplace update critical section. + * + * Tasks belong here if they are safe even if the inplace update does not + * complete. Currently, this just unlinks a cache file, which can fail. The + * sum of this and AtInplace_Inval() mirrors AtEOXact_Inval(isCommit=true). + */ +void +PreInplace_Inval(void) +{ + Assert(CritSectionCount == 0); + + if (inplaceInvalInfo && inplaceInvalInfo->RelcacheInitFileInval) + RelationCacheInitFilePreInvalidate(); +} + +/* + * AtInplace_Inval + * Process queued-up invalidations after inplace update buffer mutation. + */ +void +AtInplace_Inval(void) +{ + Assert(CritSectionCount > 0); + + if (inplaceInvalInfo == NULL) + return; + + ProcessInvalidationMessagesMulti(&inplaceInvalInfo->CurrentCmdInvalidMsgs, + SendSharedInvalidMessages); + + if (inplaceInvalInfo->RelcacheInitFileInval) + RelationCacheInitFilePostInvalidate(); + + inplaceInvalInfo = NULL; + /* inplace doesn't use SharedInvalidMessagesArray */ +} + +/* + * ForgetInplace_Inval + * Alternative to PreInplace_Inval()+AtInplace_Inval(): discard queued-up + * invalidations. This lets inplace update enumerate invalidations + * optimistically, before locking the buffer. + */ +void +ForgetInplace_Inval(void) +{ + inplaceInvalInfo = NULL; +} + /* * AtEOSubXact_Inval * Process queued-up invalidation messages at end of subtransaction. @@ -1032,9 +1133,20 @@ void AtEOSubXact_Inval(bool isCommit) { int my_level; - TransInvalidationInfo *myInfo = transInvalInfo; + TransInvalidationInfo *myInfo; - /* Quick exit if no messages. */ + /* + * Successful inplace update must clear this, but we clear it on abort. + * Inplace updates allocate this in CurrentMemoryContext, which has + * lifespan <= subtransaction lifespan. Hence, don't free it explicitly. + */ + if (isCommit) + Assert(inplaceInvalInfo == NULL); + else + inplaceInvalInfo = NULL; + + /* Quick exit if no transactional messages. */ + myInfo = transInvalInfo; if (myInfo == NULL) return; @@ -1068,8 +1180,8 @@ AtEOSubXact_Inval(bool isCommit) &myInfo->PriorCmdInvalidMsgs); /* Pending relcache inval becomes parent's problem too */ - if (myInfo->RelcacheInitFileInval) - myInfo->parent->RelcacheInitFileInval = true; + if (myInfo->ii.RelcacheInitFileInval) + myInfo->parent->ii.RelcacheInitFileInval = true; /* Pop the transaction state stack */ transInvalInfo = myInfo->parent; @@ -1116,7 +1228,7 @@ CommandEndInvalidationMessages(void) if (transInvalInfo == NULL) return; - ProcessInvalidationMessages(&transInvalInfo->CurrentCmdInvalidMsgs, + ProcessInvalidationMessages(&transInvalInfo->ii.CurrentCmdInvalidMsgs, LocalExecuteInvalidationMessage); /* WAL Log per-command invalidation messages for wal_level=logical */ @@ -1124,30 +1236,28 @@ CommandEndInvalidationMessages(void) LogLogicalInvalidations(); AppendInvalidationMessages(&transInvalInfo->PriorCmdInvalidMsgs, - &transInvalInfo->CurrentCmdInvalidMsgs); + &transInvalInfo->ii.CurrentCmdInvalidMsgs); } /* - * CacheInvalidateHeapTuple - * Register the given tuple for invalidation at end of command - * (ie, current command is creating or outdating this tuple). - * Also, detect whether a relcache invalidation is implied. - * - * For an insert or delete, tuple is the target tuple and newtuple is NULL. - * For an update, we are called just once, with tuple being the old tuple - * version and newtuple the new version. This allows avoidance of duplicate - * effort during an update. + * CacheInvalidateHeapTupleCommon + * Common logic for end-of-command and inplace variants. */ -void -CacheInvalidateHeapTuple(Relation relation, - HeapTuple tuple, - HeapTuple newtuple) +static void +CacheInvalidateHeapTupleCommon(Relation relation, + HeapTuple tuple, + HeapTuple newtuple, + InvalidationInfo *(*prepare_callback) (void)) { + InvalidationInfo *info; Oid tupleRelId; Oid databaseId; Oid relationId; + /* PrepareToInvalidateCacheTuple() needs relcache */ + AssertCouldGetRelation(); + /* Do nothing during bootstrap */ if (IsBootstrapProcessingMode()) return; @@ -1167,11 +1277,8 @@ CacheInvalidateHeapTuple(Relation relation, if (IsToastRelation(relation)) return; - /* - * If we're not prepared to queue invalidation messages for this - * subtransaction level, get ready now. - */ - PrepareInvalidationState(); + /* Allocate any required resources. */ + info = prepare_callback(); /* * First let the catcache do its thing @@ -1180,11 +1287,12 @@ CacheInvalidateHeapTuple(Relation relation, if (RelationInvalidatesSnapshotsOnly(tupleRelId)) { databaseId = IsSharedRelation(tupleRelId) ? InvalidOid : MyDatabaseId; - RegisterSnapshotInvalidation(databaseId, tupleRelId); + RegisterSnapshotInvalidation(info, databaseId, tupleRelId); } else PrepareToInvalidateCacheTuple(relation, tuple, newtuple, - RegisterCatcacheInvalidation); + RegisterCatcacheInvalidation, + (void *) info); /* * Now, is this tuple one of the primary definers of a relcache entry? See @@ -1257,7 +1365,48 @@ CacheInvalidateHeapTuple(Relation relation, /* * Yes. We need to register a relcache invalidation event. */ - RegisterRelcacheInvalidation(databaseId, relationId); + RegisterRelcacheInvalidation(info, databaseId, relationId); +} + +/* + * CacheInvalidateHeapTuple + * Register the given tuple for invalidation at end of command + * (ie, current command is creating or outdating this tuple) and end of + * transaction. Also, detect whether a relcache invalidation is implied. + * + * For an insert or delete, tuple is the target tuple and newtuple is NULL. + * For an update, we are called just once, with tuple being the old tuple + * version and newtuple the new version. This allows avoidance of duplicate + * effort during an update. + */ +void +CacheInvalidateHeapTuple(Relation relation, + HeapTuple tuple, + HeapTuple newtuple) +{ + CacheInvalidateHeapTupleCommon(relation, tuple, newtuple, + PrepareInvalidationState); +} + +/* + * CacheInvalidateHeapTupleInplace + * Register the given tuple for nontransactional invalidation pertaining + * to an inplace update. Also, detect whether a relcache invalidation is + * implied. + * + * Like CacheInvalidateHeapTuple(), but for inplace updates. + * + * Just before and just after the inplace update, the tuple's cache keys must + * match those in key_equivalent_tuple. Cache keys consist of catcache lookup + * key columns and columns referencing pg_class.oid values, + * e.g. pg_constraint.conrelid, which would trigger relcache inval. + */ +void +CacheInvalidateHeapTupleInplace(Relation relation, + HeapTuple key_equivalent_tuple) +{ + CacheInvalidateHeapTupleCommon(relation, key_equivalent_tuple, NULL, + PrepareInplaceInvalidationState); } /* @@ -1276,14 +1425,13 @@ CacheInvalidateCatalog(Oid catalogId) { Oid databaseId; - PrepareInvalidationState(); - if (IsSharedRelation(catalogId)) databaseId = InvalidOid; else databaseId = MyDatabaseId; - RegisterCatalogInvalidation(databaseId, catalogId); + RegisterCatalogInvalidation(PrepareInvalidationState(), + databaseId, catalogId); } /* @@ -1301,15 +1449,14 @@ CacheInvalidateRelcache(Relation relation) Oid databaseId; Oid relationId; - PrepareInvalidationState(); - relationId = RelationGetRelid(relation); if (relation->rd_rel->relisshared) databaseId = InvalidOid; else databaseId = MyDatabaseId; - RegisterRelcacheInvalidation(databaseId, relationId); + RegisterRelcacheInvalidation(PrepareInvalidationState(), + databaseId, relationId); } /* @@ -1322,9 +1469,8 @@ CacheInvalidateRelcache(Relation relation) void CacheInvalidateRelcacheAll(void) { - PrepareInvalidationState(); - - RegisterRelcacheInvalidation(InvalidOid, InvalidOid); + RegisterRelcacheInvalidation(PrepareInvalidationState(), + InvalidOid, InvalidOid); } /* @@ -1338,14 +1484,13 @@ CacheInvalidateRelcacheByTuple(HeapTuple classTuple) Oid databaseId; Oid relationId; - PrepareInvalidationState(); - relationId = classtup->oid; if (classtup->relisshared) databaseId = InvalidOid; else databaseId = MyDatabaseId; - RegisterRelcacheInvalidation(databaseId, relationId); + RegisterRelcacheInvalidation(PrepareInvalidationState(), + databaseId, relationId); } /* @@ -1359,8 +1504,6 @@ CacheInvalidateRelcacheByRelid(Oid relid) { HeapTuple tup; - PrepareInvalidationState(); - tup = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); if (!HeapTupleIsValid(tup)) elog(ERROR, "cache lookup failed for relation %u", relid); @@ -1549,7 +1692,7 @@ LogLogicalInvalidations() if (transInvalInfo == NULL) return; - ProcessInvalidationMessagesMulti(&transInvalInfo->CurrentCmdInvalidMsgs, + ProcessInvalidationMessagesMulti(&transInvalInfo->ii.CurrentCmdInvalidMsgs, MakeSharedInvalidMessagesArray); Assert(!(numSharedInvalidMessagesArray > 0 && diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 01ff1528da9..7a7165eb71e 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -41,6 +41,7 @@ #include "access/tupdesc_details.h" #include "access/xact.h" #include "access/xlog.h" +#include "catalog/binary_upgrade.h" #include "catalog/catalog.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -477,6 +478,7 @@ RelationParseRelOptions(Relation relation, HeapTuple tuple) amoptsfn = NULL; break; case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: amoptsfn = relation->rd_indam->amoptions; break; @@ -1206,6 +1208,7 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) switch (relation->rd_rel->relkind) { case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_PARTITIONED_INDEX: Assert(relation->rd_rel->relam != InvalidOid); RelationInitIndexAccessInfo(relation); @@ -2020,6 +2023,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 @@ -2047,8 +2067,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 @@ -2074,6 +2093,7 @@ RelationIdGetRelation(Oid relationId) * a headache for indexes that reload itself depends on. */ if (rd->rd_rel->relkind == RELKIND_INDEX || + rd->rd_rel->relkind == RELKIND_GLOBAL_INDEX || rd->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) RelationReloadIndexInfo(rd); else @@ -2214,6 +2234,7 @@ RelationReloadIndexInfo(Relation relation) /* Should be called only for invalidated, live indexes */ Assert((relation->rd_rel->relkind == RELKIND_INDEX || + relation->rd_rel->relkind == RELKIND_GLOBAL_INDEX || relation->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) && !relation->rd_isvalid && relation->rd_droppedSubid == InvalidSubTransactionId); @@ -2341,7 +2362,8 @@ RelationReloadNailed(Relation relation) if (!IsTransactionState() || relation->rd_refcnt <= 1) return; - if (relation->rd_rel->relkind == RELKIND_INDEX) + if (relation->rd_rel->relkind == RELKIND_INDEX || + relation->rd_rel->relkind == RELKIND_GLOBAL_INDEX) { /* * If it's a nailed-but-not-mapped index, then we need to re-read the @@ -2531,6 +2553,7 @@ RelationClearRelation(Relation relation, bool rebuild) * index, and we check for pg_index updates too. */ if ((relation->rd_rel->relkind == RELKIND_INDEX || + relation->rd_rel->relkind == RELKIND_GLOBAL_INDEX || relation->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) && relation->rd_refcnt > 0 && relation->rd_indexcxt != NULL) @@ -3700,9 +3723,47 @@ RelationSetNewRelfilenode(Relation relation, char persistence) TransactionId freezeXid = InvalidTransactionId; RelFileNode newrnode; - /* Allocate a new relfilenode */ - newrelfilenode = GetNewRelFileNode(relation->rd_rel->reltablespace, NULL, - persistence); + if (!IsBinaryUpgrade) + { + /* Allocate a new relfilenode */ + newrelfilenode = GetNewRelFileNode(relation->rd_rel->reltablespace, + NULL, persistence); + } + else if (relation->rd_rel->relkind == RELKIND_INDEX || + relation->rd_rel->relkind == RELKIND_GLOBAL_INDEX) + { + /* + * In PG14, the OID and relfilenode are the same. Use the index OID + * override variable (binary_upgrade_next_index_pg_class_relfilenode + * was added in PG15 and is not available here). + */ + if (!OidIsValid(binary_upgrade_next_index_pg_class_oid)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("index relfilenode value not set when in binary upgrade mode"))); + + newrelfilenode = binary_upgrade_next_index_pg_class_oid; + binary_upgrade_next_index_pg_class_oid = InvalidOid; + } + else if (relation->rd_rel->relkind == RELKIND_RELATION) + { + /* + * In PG14, the OID and relfilenode are the same. Use the heap OID + * override variable (binary_upgrade_next_heap_pg_class_relfilenode + * was added in PG15 and is not available here). + */ + if (!OidIsValid(binary_upgrade_next_heap_pg_class_oid)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("heap relfilenode value not set when in binary upgrade mode"))); + + newrelfilenode = binary_upgrade_next_heap_pg_class_oid; + binary_upgrade_next_heap_pg_class_oid = InvalidOid; + } + else + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("unexpected request for new relfilenode in binary upgrade mode"))); /* * Get a writable copy of the pg_class tuple for the given relation. @@ -3736,6 +3797,7 @@ RelationSetNewRelfilenode(Relation relation, char persistence) switch (relation->rd_rel->relkind) { case RELKIND_INDEX: + case RELKIND_GLOBAL_INDEX: case RELKIND_SEQUENCE: { /* handle these directly, at least for now */ @@ -5994,7 +6056,8 @@ load_relcache_init_file(bool shared) * If it's an index, there's more to do. Note we explicitly ignore * partitioned indexes here. */ - if (rel->rd_rel->relkind == RELKIND_INDEX) + if (rel->rd_rel->relkind == RELKIND_INDEX || + rel->rd_rel->relkind == RELKIND_GLOBAL_INDEX) { MemoryContext indexcxt; Oid *opfamily; @@ -6392,7 +6455,8 @@ write_relcache_init_file(bool shared) * If it's an index, there's more to do. Note we explicitly ignore * partitioned indexes here. */ - if (rel->rd_rel->relkind == RELKIND_INDEX) + if (rel->rd_rel->relkind == RELKIND_INDEX || + rel->rd_rel->relkind == RELKIND_GLOBAL_INDEX) { /* write the pg_index tuple */ /* we assume this was created by heap_copytuple! */ diff --git a/src/backend/utils/cache/relfilenodemap.c b/src/backend/utils/cache/relfilenodemap.c index 56d7c73d339..6658f9bc473 100644 --- a/src/backend/utils/cache/relfilenodemap.c +++ b/src/backend/utils/cache/relfilenodemap.c @@ -132,6 +132,11 @@ InitializeRelfilenodeMap(void) * Map a relation's (tablespace, filenode) 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 @@ -211,6 +216,9 @@ RelidByRelfilenode(Oid reltablespace, Oid relfilenode) { Form_pg_class classform = (Form_pg_class) GETSTRUCT(ntp); + if (classform->relpersistence == RELPERSISTENCE_TEMP) + continue; + if (found) elog(ERROR, "unexpected duplicate for tablespace %u, relfilenode %u", diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index b4f45cf4f2d..5d0cca6177c 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -39,6 +39,7 @@ #include "catalog/pg_description.h" #include "catalog/pg_enum.h" #include "catalog/pg_event_trigger.h" +#include "catalog/pg_extension.h" #include "catalog/pg_foreign_data_wrapper.h" #include "catalog/pg_foreign_server.h" #include "catalog/pg_foreign_table.h" @@ -994,6 +995,18 @@ static const struct cachedesc cacheinfo[] = { 0 }, 2 + }, + /* intentionally out of alphabetical order, to avoid an ABI break: */ + {ExtensionRelationId, /* EXTENSIONOID */ + ExtensionOidIndexId, + 1, + { + Anum_pg_extension_oid, + 0, + 0, + 0 + }, + 2 } }; @@ -1265,8 +1278,7 @@ SearchSysCacheLocked1(int cacheId, /* * If an inplace update just finished, ensure we process the syscache - * inval. XXX this is insufficient: the inplace updater may not yet - * have reached AtEOXact_Inval(). See test at inplace-inval.spec. + * inval. * * If a heap_update() call just released its LOCKTAG_TUPLE, we'll * probably find the old tuple and reach "tuple concurrently updated". diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 7ee60ddfec6..f8c0f0d3843 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -3577,13 +3577,24 @@ write_stderr(const char *fmt,...) { va_list ap; + va_start(ap, fmt); + vwrite_stderr(fmt, ap); + va_end(ap); +} + + +/* + * Write errors to stderr (or by equal means when stderr is + * not available) - va_list version + */ +void +vwrite_stderr(const char *fmt, va_list ap) +{ #ifdef WIN32 char errbuf[2048]; /* Arbitrary size? */ #endif fmt = _(fmt); - - va_start(ap, fmt); #ifndef WIN32 /* On Unix, we just fprintf to stderr */ vfprintf(stderr, fmt, ap); @@ -3606,7 +3617,6 @@ write_stderr(const char *fmt,...) fflush(stderr); } #endif - va_end(ap); } diff --git a/src/backend/utils/hash/dynahash.c b/src/backend/utils/hash/dynahash.c index 6546e3c7c79..7047919b91c 100644 --- a/src/backend/utils/hash/dynahash.c +++ b/src/backend/utils/hash/dynahash.c @@ -756,7 +756,7 @@ init_htab(HTAB *hashp, long nelem) 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", + fprintf(stderr, "init_htab:\n%s%p\n%s%ld\n%s%ld\n%s%d\n%s%u\n%s%x\n%s%x\n%s%ld\n", "TABLE POINTER ", hashp, "DIRECTORY SIZE ", hctl->dsize, "SEGMENT SIZE ", hctl->ssize, diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index a13c398f4ac..d3dc745f5d3 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -38,7 +38,9 @@ #include "catalog/namespace.h" #include "mb/pg_wchar.h" #include "utils/builtins.h" +#include "utils/memdebug.h" #include "utils/memutils.h" +#include "utils/relcache.h" #include "utils/syscache.h" /* @@ -96,6 +98,13 @@ static char *perform_default_encoding_conversion(const char *src, int len, bool is_client_to_server); static int cliplen(const char *str, int len, int limit); +pg_attribute_noreturn() +static void report_invalid_encoding_int(int encoding, const char *mbstr, + int mblen, int len); + +pg_attribute_noreturn() +static void report_invalid_encoding_db(const char *mbstr, int mblen, int len); + /* * Prepare for a future call to SetClientEncoding. Success should mean @@ -310,7 +319,7 @@ InitializeClientEncoding(void) { Oid utf8_to_server_proc; - Assert(IsTransactionState()); + AssertCouldGetRelation(); utf8_to_server_proc = FindDefaultConversionProc(PG_UTF8, current_server_encoding); @@ -961,11 +970,128 @@ pg_encoding_wchar2mb_with_len(int encoding, return pg_wchar_table[encoding].wchar2mb_with_len(from, (unsigned char *) to, len); } -/* returns the byte length of a multibyte character */ +/* + * Returns the byte length of a multibyte character sequence in a + * null-terminated string. Raises an illegal byte sequence error if the + * sequence would hit a null terminator. + * + * The caller is expected to have checked for a terminator at *mbstr == 0 + * before calling, but some callers want 1 in that case, so this function + * continues that tradition. + * + * This must only be used for strings that have a null-terminator to enable + * bounds detection. + */ +int +pg_mblen_cstr(const char *mbstr) +{ + int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr); + + /* + * The .mblen functions return 1 when given a pointer to a terminator. + * Some callers depend on that, so we tolerate it for now. Well-behaved + * callers check the leading byte for a terminator *before* calling. + */ + for (int i = 1; i < length; ++i) + if (unlikely(mbstr[i] == 0)) + report_invalid_encoding_db(mbstr, length, i); + + /* + * String should be NUL-terminated, but checking that would make typical + * callers O(N^2), tripling Valgrind check-world time. Unless + * VALGRIND_EXPENSIVE, check 1 byte after each actual character. (If we + * found a character, not a terminator, the next byte must be a terminator + * or the start of the next character.) If the caller iterates the whole + * string, the last call will diagnose a missing terminator. + */ + if (mbstr[0] != '\0') + { +#ifdef VALGRIND_EXPENSIVE + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, strlen(mbstr)); +#else + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr + length, 1); +#endif + } + + return length; +} + +/* + * Returns the byte length of a multibyte character sequence bounded by a range + * [mbstr, end) of at least one byte in size. Raises an illegal byte sequence + * error if the sequence would exceed the range. + */ +int +pg_mblen_range(const char *mbstr, const char *end) +{ + int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr); + + Assert(end > mbstr); + + if (unlikely(mbstr + length > end)) + report_invalid_encoding_db(mbstr, length, end - mbstr); + +#ifdef VALGRIND_EXPENSIVE + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, end - mbstr); +#else + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, length); +#endif + + return length; +} + +/* + * Returns the byte length of a multibyte character sequence bounded by a range + * extending for 'limit' bytes, which must be at least one. Raises an illegal + * byte sequence error if the sequence would exceed the range. + */ +int +pg_mblen_with_len(const char *mbstr, int limit) +{ + int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr); + + Assert(limit >= 1); + + if (unlikely(length > limit)) + report_invalid_encoding_db(mbstr, length, limit); + +#ifdef VALGRIND_EXPENSIVE + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, limit); +#else + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, length); +#endif + + return length; +} + + +/* + * Returns the length of a multibyte character sequence, without any + * validation of bounds. + * + * PLEASE NOTE: This function can only be used safely if the caller has + * already verified the input string, since otherwise there is a risk of + * overrunning the buffer if the string is invalid. A prior call to a + * pg_mbstrlen* function suffices. + */ +int +pg_mblen_unbounded(const char *mbstr) +{ + int length = pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr); + + VALGRIND_CHECK_MEM_IS_DEFINED(mbstr, length); + + return length; +} + +/* + * Historical name for pg_mblen_unbounded(). Should not be used and will be + * removed in a later version. + */ int pg_mblen(const char *mbstr) { - return pg_wchar_table[DatabaseEncoding->encoding].mblen((const unsigned char *) mbstr); + return pg_mblen_unbounded(mbstr); } /* returns the display length of a multibyte character */ @@ -987,14 +1113,14 @@ pg_mbstrlen(const char *mbstr) while (*mbstr) { - mbstr += pg_mblen(mbstr); + mbstr += pg_mblen_cstr(mbstr); len++; } return len; } /* returns the length (counted in wchars) of a multibyte string - * (not necessarily NULL terminated) + * (stops at the first of "limit" or a NUL) */ int pg_mbstrlen_with_len(const char *mbstr, int limit) @@ -1007,7 +1133,7 @@ pg_mbstrlen_with_len(const char *mbstr, int limit) while (limit > 0 && *mbstr) { - int l = pg_mblen(mbstr); + int l = pg_mblen_with_len(mbstr, limit); limit -= l; mbstr += l; @@ -1030,7 +1156,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, @@ -1077,7 +1203,7 @@ pg_mbcharcliplen(const char *mbstr, int len, int limit) while (len > 0 && *mbstr) { - l = pg_mblen(mbstr); + l = pg_mblen_with_len(mbstr, len); nch++; if (nch > limit) break; @@ -1641,18 +1767,25 @@ 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); + + report_invalid_encoding_int(encoding, mbstr, l, len); +} + +static void +report_invalid_encoding_int(int encoding, const char *mbstr, int mblen, int len) +{ char buf[8 * 5 + 1]; char *p = buf; int j, jlimit; - jlimit = Min(l, len); + jlimit = Min(mblen, len); jlimit = Min(jlimit, 8); /* prevent buffer overrun */ for (j = 0; j < jlimit; j++) @@ -1669,22 +1802,36 @@ report_invalid_encoding(int encoding, const char *mbstr, int len) buf))); } +static void +report_invalid_encoding_db(const char *mbstr, int mblen, int len) +{ + report_invalid_encoding_int(GetDatabaseEncoding(), mbstr, mblen, 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 7105911dc5e..a6974d8e48f 100755 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -75,6 +75,7 @@ #include "postmaster/syslogger.h" #include "postmaster/walwriter.h" #include "replication/logicallauncher.h" +#include "replication/logicalrelation.h" #include "replication/reorderbuffer.h" #include "replication/slot.h" #include "replication/syncrep.h" @@ -1223,6 +1224,15 @@ static struct config_bool ConfigureNamesBool[] = false, NULL, NULL, NULL }, + { + {"logical_replication_fallback_to_full_identity", PGC_SIGHUP, REPLICATION_SENDING, + gettext_noop("Use REPLICA IDENTITY FULL automatically when a table with DEFAULT identity has no primary key."), + gettext_noop("When enabled, logical replication will automatically send full-row data for tables that specify REPLICA IDENTITY DEFAULT but lack a primary key, instead of raising an error.") + }, + &logical_replication_fallback_to_full_identity, + false, + NULL, NULL, NULL + }, { {"ssl", PGC_SIGHUP, CONN_AUTH_SSL, gettext_noop("Enables SSL connections."), @@ -12635,9 +12645,20 @@ assign_recovery_target_lsn(const char *newval, void *extra) static bool check_primary_slot_name(char **newval, void **extra, GucSource source) { + int err_code; + char *err_msg = NULL; + char *err_hint = NULL; + if (*newval && strcmp(*newval, "") != 0 && - !ReplicationSlotValidateName(*newval, WARNING)) + !ReplicationSlotValidateNameInternal(*newval, &err_code, &err_msg, + &err_hint)) + { + GUC_check_errcode(err_code); + GUC_check_errdetail("%s", err_msg); + if (err_hint != NULL) + GUC_check_errhint("%s", err_hint); return false; + } return true; } diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 0f01dcd71b7..ae1f16998e9 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -229,7 +229,7 @@ #wal_skip_threshold = 2MB #commit_delay = 0 # range 0-100000, in microseconds -#commit_siblings = 5 # range 1-1000 +#commit_siblings = 5 # range 0-1000 # - Checkpoints - @@ -304,6 +304,8 @@ #wal_sender_timeout = 60s # in milliseconds; 0 disables #track_commit_timestamp = off # collect timestamp of transaction commit # (change requires restart) +#logical_replication_fallback_to_full_identity = off # fallback default + # replication identity to full if no primary key # - Primary Server - diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c index 15ce28d9998..9162226032d 100644 --- a/src/backend/utils/misc/ps_status.c +++ b/src/backend/utils/misc/ps_status.c @@ -32,7 +32,9 @@ #include "utils/guc.h" #include "utils/ps_status.h" +#if !defined(WIN32) || defined(_MSC_VER) extern char **environ; +#endif bool update_process_title = true; @@ -71,9 +73,9 @@ bool update_process_title = true; #define PS_USE_PSTAT #elif defined(HAVE_PS_STRINGS) #define PS_USE_PS_STRINGS -#elif (defined(BSD) || defined(__hurd__)) && !defined(__darwin__) +#elif defined(BSD) && !defined(__darwin__) #define PS_USE_CHANGE_ARGV -#elif defined(__linux__) || defined(_AIX) || defined(__sgi) || (defined(sun) && !defined(BSD)) || defined(__svr5__) || defined(__darwin__) +#elif defined(__linux__) || defined(_AIX) || defined(__sgi) || (defined(sun) && !defined(BSD)) || defined(__svr5__) || defined(__darwin__) || defined(__GNU__) #define PS_USE_CLOBBER_ARGV #elif defined(WIN32) #define PS_USE_WIN32 @@ -83,7 +85,7 @@ bool update_process_title = true; /* Different systems want the buffer padded differently */ -#if defined(_AIX) || defined(__linux__) || defined(__darwin__) +#if defined(_AIX) || defined(__linux__) || defined(__darwin__) || defined(__GNU__) #define PS_PADDING '\0' #else #define PS_PADDING ' ' diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index e51caf7ef95..35e3733ac07 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -1431,9 +1431,9 @@ AllocSetCheck(MemoryContext context) prevblock = block, block = block->next) { char *bpoz = ((char *) block) + ALLOC_BLOCKHDRSZ; - long blk_used = block->freeptr - bpoz; - long blk_data = 0; - long nchunks = 0; + Size blk_used = block->freeptr - bpoz; + Size blk_data = 0; + Size nchunks = 0; if (set->keeper == block) total_allocated += block->endptr - ((char *) set); diff --git a/src/backend/utils/mmgr/freepage.c b/src/backend/utils/mmgr/freepage.c index 3e9e3a0066e..df418370edb 100644 --- a/src/backend/utils/mmgr/freepage.c +++ b/src/backend/utils/mmgr/freepage.c @@ -894,14 +894,14 @@ FreePageBtreeGetRecycled(FreePageManager *fpm) } /* - * Insert an item into an internal page. + * Insert an item into an internal page (there must be room). */ static void FreePageBtreeInsertInternal(char *base, FreePageBtree *btp, Size index, Size first_page, FreePageBtree *child) { Assert(btp->hdr.magic == FREE_PAGE_INTERNAL_MAGIC); - Assert(btp->hdr.nused <= FPM_ITEMS_PER_INTERNAL_PAGE); + Assert(btp->hdr.nused < FPM_ITEMS_PER_INTERNAL_PAGE); Assert(index <= btp->hdr.nused); memmove(&btp->u.internal_key[index + 1], &btp->u.internal_key[index], sizeof(FreePageBtreeInternalKey) * (btp->hdr.nused - index)); @@ -911,14 +911,14 @@ FreePageBtreeInsertInternal(char *base, FreePageBtree *btp, Size index, } /* - * Insert an item into a leaf page. + * Insert an item into a leaf page (there must be room). */ static void FreePageBtreeInsertLeaf(FreePageBtree *btp, Size index, Size first_page, Size npages) { Assert(btp->hdr.magic == FREE_PAGE_LEAF_MAGIC); - Assert(btp->hdr.nused <= FPM_ITEMS_PER_LEAF_PAGE); + Assert(btp->hdr.nused < FPM_ITEMS_PER_LEAF_PAGE); Assert(index <= btp->hdr.nused); memmove(&btp->u.leaf_key[index + 1], &btp->u.leaf_key[index], sizeof(FreePageBtreeLeafKey) * (btp->hdr.nused - index)); diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index a5f31e23a02..ffdab7b087d 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -56,6 +56,9 @@ MemoryContext CurTransactionContext = NULL; /* This is a transient link to the active portal's memory context: */ MemoryContext PortalContext = NULL; +/* Is memory context logging currently in progress? */ +static bool LogMemoryContextInProgress = false; + static void MemoryContextCallResetCallbacks(MemoryContext context); static void MemoryContextStatsInternal(MemoryContext context, int level, bool print, int max_children, @@ -1043,25 +1046,45 @@ ProcessLogMemoryContextInterrupt(void) LogMemoryContextPending = false; /* - * Use LOG_SERVER_ONLY to prevent this message from being sent to the - * connected client. + * Exit immediately if memory context logging is already in progress. This + * prevents recursive calls, which could occur if logging is requested + * repeatedly and rapidly, potentially leading to infinite recursion and a + * crash. */ - ereport(LOG_SERVER_ONLY, - (errhidestmt(true), - errhidecontext(true), - errmsg("logging memory contexts of PID %d", MyProcPid))); + if (LogMemoryContextInProgress) + return; + LogMemoryContextInProgress = true; - /* - * When a backend process is consuming huge memory, logging all its memory - * contexts might overrun available disk space. To prevent this, we limit - * the number of child contexts to log per parent to 100. - * - * As with MemoryContextStats(), we suppose that practical cases where the - * dump gets long will typically be huge numbers of siblings under the - * same parent context; while the additional debugging value from seeing - * details about individual siblings beyond 100 will not be large. - */ - MemoryContextStatsDetail(TopMemoryContext, 100, false); + PG_TRY(); + { + /* + * Use LOG_SERVER_ONLY to prevent this message from being sent to the + * connected client. + */ + ereport(LOG_SERVER_ONLY, + (errhidestmt(true), + errhidecontext(true), + errmsg("logging memory contexts of PID %d", MyProcPid))); + + /* + * When a backend process is consuming huge memory, logging all its + * memory contexts might overrun available disk space. To prevent + * this, we limit the number of child contexts to log per parent to + * 100. + * + * As with MemoryContextStats(), we suppose that practical cases where + * the dump gets long will typically be huge numbers of siblings under + * the same parent context; while the additional debugging value from + * seeing details about individual siblings beyond 100 will not be + * large. + */ + MemoryContextStatsDetail(TopMemoryContext, 100, false); + } + PG_FINALLY(); + { + LogMemoryContextInProgress = false; + } + PG_END_TRY(); } void * diff --git a/src/backend/utils/sort/sharedtuplestore.c b/src/backend/utils/sort/sharedtuplestore.c index fd29ce9609e..fd246a60b6b 100644 --- a/src/backend/utils/sort/sharedtuplestore.c +++ b/src/backend/utils/sort/sharedtuplestore.c @@ -320,7 +320,8 @@ sts_puttuple(SharedTuplestoreAccessor *accessor, void *meta_data, /* Do we have space? */ size = accessor->sts->meta_data_size + tuple->t_len; - if (accessor->write_pointer + size > accessor->write_end) + if (accessor->write_pointer == NULL || + accessor->write_pointer + size > accessor->write_end) { if (accessor->write_chunk == NULL) { diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 9f1df874389..3097de8db49 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -443,6 +443,7 @@ struct Tuplesortstate */ int64 abbrevNext; /* Tuple # at which to next check * applicability */ + bool isglobalsort; /* * These variables are specific to the CLUSTER case; they are set by @@ -2949,7 +2950,14 @@ mergeruns(Tuplesortstate *state) /* Tell logtape.c we won't be writing anymore */ LogicalTapeSetForgetFreeSpace(state->tapeset); /* Initialize for the final merge pass */ - beginmerge(state); + if (state->isglobalsort) + { + elog(DEBUG2, "global unique index final merge run..."); + mergeonerun(state); + } + else + beginmerge(state); + state->status = TSS_FINALMERGE; return; } @@ -4606,6 +4614,51 @@ tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg) SharedFileSetAttach(&shared->fileset, seg); } +void +tuplesort_mark_global_sort(Tuplesortstate *state) +{ + state->isglobalsort = true; +} + +void +tuplesort_copy_sharedsort(Sharedsort *shared1, Sharedsort *shared2) +{ + if (!shared1 || !shared2) + elog(ERROR, "%s: cannot do sharedsort copy due to bad input", __FUNCTION__); + + shared1->currentWorker = shared2->currentWorker; + shared1->mutex = shared2->mutex; + shared1->nTapes = shared2->nTapes; + shared1->fileset = shared2->fileset; + shared1->workersFinished = shared2->workersFinished; + memcpy(shared1->tapes, shared2->tapes, sizeof(TapeShare) * shared2->nTapes); +} + +void +tuplesort_copy_sharedsort2(Sharedsort *shared1, Tuplesortstate *state) +{ + if (!shared1 || !state) + elog(ERROR, "%s: cannot do sharedsort copy due to bad input", __FUNCTION__); + + shared1->currentWorker = state->shared->currentWorker; + shared1->mutex = state->shared->mutex; + shared1->nTapes = state->shared->nTapes; + shared1->fileset = state->shared->fileset; + shared1->workersFinished = state->shared->workersFinished; + memcpy(shared1->tapes, state->shared->tapes, sizeof(TapeShare) * state->shared->nTapes); +} + +int +tuplesort_get_curr_workers(Sharedsort *shared) +{ + return shared->currentWorker; +} + +void tuplesort_register_cleanup_callback(Sharedsort *shared, dsm_segment *seg) +{ + SharedFileSetRegisterCleanupCallback(&shared->fileset, seg); +} + /* * worker_get_identifier - Assign and return ordinal identifier for worker * diff --git a/src/bin/initdb/po/es.po b/src/bin/initdb/po/es.po index 43970b98336..555208939f5 100644 --- a/src/bin/initdb/po/es.po +++ b/src/bin/initdb/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:37+0000\n" +"POT-Creation-Date: 2026-02-06 21:32+0000\n" "PO-Revision-Date: 2021-10-13 23:44-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/initdb/po/ru.po b/src/bin/initdb/po/ru.po index da32f327fd8..0678730dcce 100644 --- a/src/bin/initdb/po/ru.po +++ b/src/bin/initdb/po/ru.po @@ -6,7 +6,7 @@ # Sergey Burladyan , 2009. # Andrey Sudnik , 2010. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: initdb (PostgreSQL current)\n" diff --git a/src/bin/pg_amcheck/nls.mk b/src/bin/pg_amcheck/nls.mk index e8b71ceba52..d646c08611c 100644 --- a/src/bin/pg_amcheck/nls.mk +++ b/src/bin/pg_amcheck/nls.mk @@ -1,6 +1,6 @@ # src/bin/pg_amcheck/nls.mk CATALOG_NAME = pg_amcheck -AVAIL_LANGUAGES = de el es fr ja ru sv uk zh_CN +AVAIL_LANGUAGES = de el es fr ja pl ru sv uk zh_CN GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \ pg_amcheck.c \ ../../fe_utils/cancel.c \ diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c index 8ae0d7c77c4..0f5c750cdf6 100644 --- a/src/bin/pg_amcheck/pg_amcheck.c +++ b/src/bin/pg_amcheck/pg_amcheck.c @@ -579,7 +579,7 @@ main(int argc, char *argv[]) executeCommand(conn, install_sql, opts.echo); pfree(install_sql); - pfree(schema); + PQfreemem(schema); } /* diff --git a/src/bin/pg_amcheck/po/es.po b/src/bin/pg_amcheck/po/es.po index 9b5ce604e47..93611aa5b10 100644 --- a/src/bin/pg_amcheck/po/es.po +++ b/src/bin/pg_amcheck/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_amcheck (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-09 06:39+0000\n" +"POT-Creation-Date: 2026-02-06 21:33+0000\n" "PO-Revision-Date: 2021-10-13 23:57-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_amcheck/po/pl.po b/src/bin/pg_amcheck/po/pl.po new file mode 100644 index 00000000000..89db1e1d36f --- /dev/null +++ b/src/bin/pg_amcheck/po/pl.po @@ -0,0 +1,506 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-03-27 18:55+0000\n" +"PO-Revision-Date: 2026-01-03 14:10\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"Language: pl_PL\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==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /REL_14_STABLE/pg_amcheck.pot\n" +"X-Crowdin-File-ID: 786\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "" + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "błąd: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "ostrzeżenie: " + +#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238 +msgid "Cancel request sent\n" +msgstr "Wysłano żądanie anulowania\n" + +#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239 +msgid "Could not send cancel request: " +msgstr "" + +#: ../../fe_utils/connect_utils.c:92 +#, c-format +msgid "could not connect to database %s: out of memory" +msgstr "" + +#: ../../fe_utils/connect_utils.c:120 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58 +#: pg_amcheck.c:1680 pg_amcheck.c:2128 +#, c-format +msgid "query failed: %s" +msgstr "zapytanie nie powiodło się: %s" + +#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59 +#: pg_amcheck.c:598 pg_amcheck.c:1130 pg_amcheck.c:1681 pg_amcheck.c:2129 +#, c-format +msgid "query was: %s" +msgstr "" + +#: pg_amcheck.c:330 +#, c-format +msgid "number of parallel jobs must be at least 1" +msgstr "" + +#: pg_amcheck.c:402 +#, c-format +msgid "invalid argument for option %s" +msgstr "" + +#: pg_amcheck.c:411 +#, c-format +msgid "invalid start block" +msgstr "nieprawidłowy blok startowy" + +#: pg_amcheck.c:416 +#, c-format +msgid "start block out of bounds" +msgstr "blok startowy jest poza zakresem" + +#: pg_amcheck.c:426 +#, c-format +msgid "invalid end block" +msgstr "nieprawidłowy blok końcowy" + +#: pg_amcheck.c:431 +#, c-format +msgid "end block out of bounds" +msgstr "book końcowy poza zakresem" + +#: pg_amcheck.c:456 pg_amcheck.c:482 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Użyj \"%s --help\" aby uzyskać więcej informacji.\n" + +#: pg_amcheck.c:464 +#, c-format +msgid "end block precedes start block" +msgstr "blok końcowy poprzedza blok startowy" + +#: pg_amcheck.c:480 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "" + +#: pg_amcheck.c:501 +#, c-format +msgid "cannot specify a database name with --all" +msgstr "nie można określić nazwy bazy danych z --all" + +#: pg_amcheck.c:510 +#, c-format +msgid "cannot specify both a database name and database patterns" +msgstr "nie można określić nazwy bazy danych i wzorców bazy danych" + +#: pg_amcheck.c:540 +#, c-format +msgid "no databases to check" +msgstr "brak baz danych do sprawdzenia" + +#: pg_amcheck.c:596 +#, c-format +msgid "database \"%s\": %s" +msgstr "baza danych \"%s\": %s" + +#: pg_amcheck.c:607 +#, c-format +msgid "skipping database \"%s\": amcheck is not installed" +msgstr "pominięto bazę danych \"%s\": amcheck nie jest zainstalowany" + +#: pg_amcheck.c:615 +#, c-format +msgid "in database \"%s\": using amcheck version \"%s\" in schema \"%s\"" +msgstr "w bazie danych \"%s\": używana wersja amcheck \"%s\" w schemacie \"%s\"" + +#: pg_amcheck.c:637 +#, c-format +msgid "no heap tables to check matching \"%s\"" +msgstr "brak tablic kopca do sprawdzania pasujących \"%s\"" + +#: pg_amcheck.c:640 +#, c-format +msgid "no btree indexes to check matching \"%s\"" +msgstr "brak indeksów bdrzewa by sprawdzić pasujące \"%s\"" + +#: pg_amcheck.c:643 +#, c-format +msgid "no relations to check in schemas matching \"%s\"" +msgstr "brak relacji do sprawdzenia w schematach postaciach do \"%s\"" + +#: pg_amcheck.c:646 +#, c-format +msgid "no relations to check matching \"%s\"" +msgstr "brak relacji do sprawdzenia pasujących \"%s\"" + +#: pg_amcheck.c:674 +#, c-format +msgid "no relations to check" +msgstr "brak relacji do sprawdzenia" + +#: pg_amcheck.c:758 +#, c-format +msgid "checking heap table \"%s.%s.%s\"" +msgstr "sprawdzanie kopca tabeli \"%s.%s.%s\"" + +#: pg_amcheck.c:774 +#, c-format +msgid "checking btree index \"%s.%s.%s\"" +msgstr "sprawdzanie indeksu bdrzewa \"%s.%s.%s\"" + +#: pg_amcheck.c:921 +#, c-format +msgid "error sending command to database \"%s\": %s" +msgstr "błąd wysyłania polecania do bazy danych \"%s\": %s" + +#: pg_amcheck.c:924 +#, c-format +msgid "command was: %s" +msgstr "polecenie było: %s" + +#: pg_amcheck.c:1043 +#, c-format +msgid "heap table \"%s.%s.%s\", block %s, offset %s, attribute %s:\n" +msgstr "kopiec tabeli \"%s.%s.%s\", blok %s, przesunięcie %s, atrybut %s:\n" + +#: pg_amcheck.c:1050 +#, c-format +msgid "heap table \"%s.%s.%s\", block %s, offset %s:\n" +msgstr "kopiec tabeli \"%s.%s.%s\", blok %s, przesunięcie %s:\n" + +#: pg_amcheck.c:1056 +#, c-format +msgid "heap table \"%s.%s.%s\", block %s:\n" +msgstr "kopiec tabeli \"%s.%s.%s\", blok %s:\n" + +#: pg_amcheck.c:1061 pg_amcheck.c:1072 +#, c-format +msgid "heap table \"%s.%s.%s\":\n" +msgstr "kopiec tabeli \"%s.%s.%s\":\n" + +#: pg_amcheck.c:1076 pg_amcheck.c:1145 +#, c-format +msgid "query was: %s\n" +msgstr "zapytanie brzmiało: %s\n" + +#: pg_amcheck.c:1127 +#, c-format +msgid "btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d" +msgstr "indeks btree \"%s.%s.%s\": funkcja sprawdzania btree zwróciła nieoczekiwaną liczbę wierszy: %d" + +#: pg_amcheck.c:1131 +#, c-format +msgid "Are %s's and amcheck's versions compatible?" +msgstr "Czy wersje %s i amcheck są kompatybilne?" + +#: pg_amcheck.c:1141 +#, c-format +msgid "btree index \"%s.%s.%s\":\n" +msgstr "indeks btree \"%s.%s.%s\":\n" + +#: pg_amcheck.c:1166 +#, c-format +msgid "%s checks objects in a PostgreSQL database for corruption.\n\n" +msgstr "%s sprawdza obiekty w bazie danych PostgreSQL pod kątem korupcji.\n\n" + +#: pg_amcheck.c:1167 +#, c-format +msgid "Usage:\n" +msgstr "Składnia:\n" + +#: pg_amcheck.c:1168 +#, c-format +msgid " %s [OPTION]... [DBNAME]\n" +msgstr " %s [OPCJA]... [NAZWADB]\n" + +#: pg_amcheck.c:1169 +#, c-format +msgid "\n" +"Target options:\n" +msgstr "\n" +"Opcje docelowe:\n" + +#: pg_amcheck.c:1170 +#, c-format +msgid " -a, --all check all databases\n" +msgstr " -a, --all sprawdź wszystkie bazy danych\n" + +#: pg_amcheck.c:1171 +#, c-format +msgid " -d, --database=PATTERN check matching database(s)\n" +msgstr " -d, --database=WZORZEC sprawdź pasujące bazy danych\n" + +#: pg_amcheck.c:1172 +#, c-format +msgid " -D, --exclude-database=PATTERN do NOT check matching database(s)\n" +msgstr " -D, --exclude-database=WZORZEC nie sprawdzaj bez danych pasujących do wzoru\n" + +#: pg_amcheck.c:1173 +#, c-format +msgid " -i, --index=PATTERN check matching index(es)\n" +msgstr " -i, --index=WZORZEC sprawdź pasujące indeksy\n" + +#: pg_amcheck.c:1174 +#, c-format +msgid " -I, --exclude-index=PATTERN do NOT check matching index(es)\n" +msgstr " -I, --exclude-index=WZORZEC nie sprawdzaj pasujących indeksów\n" + +#: pg_amcheck.c:1175 +#, c-format +msgid " -r, --relation=PATTERN check matching relation(s)\n" +msgstr " -r, --relation=WZORZEC sprawdź pasujące relacje\n" + +#: pg_amcheck.c:1176 +#, c-format +msgid " -R, --exclude-relation=PATTERN do NOT check matching relation(s)\n" +msgstr " -R, --exclude-relation=WZORZEC NIE sprawdza pasujących relacji\n" + +#: pg_amcheck.c:1177 +#, c-format +msgid " -s, --schema=PATTERN check matching schema(s)\n" +msgstr " -s, --schema=WZORZEC sprawdza pasujące schematy\n" + +#: pg_amcheck.c:1178 +#, c-format +msgid " -S, --exclude-schema=PATTERN do NOT check matching schema(s)\n" +msgstr " -S, --exclude-shema=WZORZEC NIE sprawdza pasujących schematów\n" + +#: pg_amcheck.c:1179 +#, c-format +msgid " -t, --table=PATTERN check matching table(s)\n" +msgstr " -t, --table=WZORZEC sprawdź pasujące tabele\n" + +#: pg_amcheck.c:1180 +#, c-format +msgid " -T, --exclude-table=PATTERN do NOT check matching table(s)\n" +msgstr " -T, --exclude-table=WZORZEC NIE sprawdzaj pasujących tabeli\n" + +#: pg_amcheck.c:1181 +#, c-format +msgid " --no-dependent-indexes do NOT expand list of relations to include indexes\n" +msgstr " --no-dependent-indexes NIE rozszerzaj listy relacji by włączyć indeksy\n" + +#: pg_amcheck.c:1182 +#, c-format +msgid " --no-dependent-toast do NOT expand list of relations to include TOAST tables\n" +msgstr " --no-dependent-toast NIE rozszerza listy relacji, aby włączyć tabele TOAST\n" + +#: pg_amcheck.c:1183 +#, c-format +msgid " --no-strict-names do NOT require patterns to match objects\n" +msgstr " --no-strict-names NIE wymaga by wzorce pasowały do obiektów\n" + +#: pg_amcheck.c:1184 +#, c-format +msgid "\n" +"Table checking options:\n" +msgstr "\n" +"Opcje sprawdzania tabeli:\n" + +#: pg_amcheck.c:1185 +#, c-format +msgid " --exclude-toast-pointers do NOT follow relation TOAST pointers\n" +msgstr " --exclude-toast-pointers ignoruj relacje wskaźników TOAST\n" + +#: pg_amcheck.c:1186 +#, c-format +msgid " --on-error-stop stop checking at end of first corrupt page\n" +msgstr " --on-error-stop zatrzymaj sprawdzanie po pierwszej uszkodzonej stronie\n" + +#: pg_amcheck.c:1187 +#, c-format +msgid " --skip=OPTION do NOT check \"all-frozen\" or \"all-visible\" blocks\n" +msgstr " --skip=OPTION NIE sprawdzaj bloków \"all-frozen\" oraz \"all-visible\"\n" + +#: pg_amcheck.c:1188 +#, c-format +msgid " --startblock=BLOCK begin checking table(s) at the given block number\n" +msgstr " --startblock=BLOCK rozpocznij sprawdzanie tabeli od bloku o podanym numerze\n" + +#: pg_amcheck.c:1189 +#, c-format +msgid " --endblock=BLOCK check table(s) only up to the given block number\n" +msgstr " --endblock=BLOCK sprawdzaj tabele tylko do bloku o podanym numerze\n" + +#: pg_amcheck.c:1190 +#, c-format +msgid "\n" +"B-tree index checking options:\n" +msgstr "\n" +"Opcje sprawdzania indeksu B-tree:\n" + +#: pg_amcheck.c:1191 +#, c-format +msgid " --heapallindexed check that all heap tuples are found within indexes\n" +msgstr " --heapallindexed sprawdź czy wszystkie krotki kopca znajdują się pomiędzy indeksami\n" + +#: pg_amcheck.c:1192 +#, c-format +msgid " --parent-check check index parent/child relationships\n" +msgstr " --parent-check sprawdź indeks relacji nadrzędne/podrzędne\n" + +#: pg_amcheck.c:1193 +#, c-format +msgid " --rootdescend search from root page to refind tuples\n" +msgstr " --rootdescend szukaj od strony początkowej, by ponownie zneleźdź krotki\n" + +#: pg_amcheck.c:1194 +#, c-format +msgid "\n" +"Connection options:\n" +msgstr "\n" +"Opcje połączenia:\n" + +#: pg_amcheck.c:1195 +#, c-format +msgid " -h, --host=HOSTNAME database server host or socket directory\n" +msgstr " -h, --host=HOSTNAME host serwera bazy danych lub katalog gniazda\n" + +#: pg_amcheck.c:1196 +#, c-format +msgid " -p, --port=PORT database server port\n" +msgstr " -p, --port=PORT port serwera bazy danych\n" + +#: pg_amcheck.c:1197 +#, c-format +msgid " -U, --username=USERNAME user name to connect as\n" +msgstr " -U --username=USERNAME nazwa użytkownika użyta do nawiązania połączenia\n" + +#: pg_amcheck.c:1198 +#, c-format +msgid " -w, --no-password never prompt for password\n" +msgstr " -w, --no-password nigdy nie pytaj o hasło\n" + +#: pg_amcheck.c:1199 +#, c-format +msgid " -W, --password force password prompt\n" +msgstr " -W, --password wymuś zapytanie o hasło\n" + +#: pg_amcheck.c:1200 +#, c-format +msgid " --maintenance-db=DBNAME alternate maintenance database\n" +msgstr " --maintenance-db=DBNAME alternatywna baza danych do konserwacji\n" + +#: pg_amcheck.c:1201 +#, c-format +msgid "\n" +"Other options:\n" +msgstr "\n" +"Pozostałe opcje:\n" + +#: pg_amcheck.c:1202 +#, c-format +msgid " -e, --echo show the commands being sent to the server\n" +msgstr " -e, --echo pokazuje polecenia przesyłane do serwera\n" + +#: pg_amcheck.c:1203 +#, c-format +msgid " -j, --jobs=NUM use this many concurrent connections to the server\n" +msgstr " -j, --jobs=NUM liczba równoczesnych połączeń do serwera\n" + +#: pg_amcheck.c:1204 +#, c-format +msgid " -P, --progress show progress information\n" +msgstr " -P, --progress pokazanie informacji o postępie\n" + +#: pg_amcheck.c:1205 +#, c-format +msgid " -v, --verbose write a lot of output\n" +msgstr " -v, --verbose wypisuje dużo danych wyjściowych\n" + +#: pg_amcheck.c:1206 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version pokaż informacje o wersji i zakończ\n" + +#: pg_amcheck.c:1207 +#, c-format +msgid " --install-missing install missing extensions\n" +msgstr " --install-missing zainstaluj brakujące rozszerzenia\n" + +#: pg_amcheck.c:1208 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" + +#: pg_amcheck.c:1210 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Zgłoś błędy do <%s>.\n" + +#: pg_amcheck.c:1211 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s strona główna: <%s>\n" + +#: pg_amcheck.c:1269 +#, c-format +msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) %*s" +msgstr "%*s/%s relacje (%d%%), %*s/%s strony (%d%%) %*s" + +#: pg_amcheck.c:1280 +#, c-format +msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%) (%s%-*.*s)" +msgstr "%*s/%s relacje (%d%%), %*s/%s strony (%d%%) (%s%-*.*s)" + +#: pg_amcheck.c:1295 +#, c-format +msgid "%*s/%s relations (%d%%), %*s/%s pages (%d%%)" +msgstr "%*s/%s relacje (%d%%), %*s/%s strony (%d%%)" + +#: pg_amcheck.c:1354 pg_amcheck.c:1387 +#, c-format +msgid "improper qualified name (too many dotted names): %s" +msgstr "niewłaściwa nazwa kwalifikowana (zbyt dużo nazw kropkowanych): %s" + +#: pg_amcheck.c:1432 +#, c-format +msgid "improper relation name (too many dotted names): %s" +msgstr "niewłaściwa nazwa relacji (zbyt dużo nazw kropkowanych): %s" + +#: pg_amcheck.c:1585 pg_amcheck.c:1727 +#, c-format +msgid "including database \"%s\"" +msgstr "wliczając w to bazę danych \"%s\"" + +#: pg_amcheck.c:1707 +#, c-format +msgid "internal error: received unexpected database pattern_id %d" +msgstr "błąd wewnętrzny: otrzymano nieoczekiwany pattern_id bazy danych %d" + +#: pg_amcheck.c:1711 +#, c-format +msgid "no connectable databases to check matching \"%s\"" +msgstr "brak baz danych możliwych do połączenia do sprawdzenia pasujących \"%s\"" + +#: pg_amcheck.c:2170 +#, c-format +msgid "internal error: received unexpected relation pattern_id %d" +msgstr "błąd wewnętrzny: otrzymano nieoczekiwany pattern_id relacji %d" + diff --git a/src/bin/pg_archivecleanup/po/es.po b/src/bin/pg_archivecleanup/po/es.po index adf6129466b..7599227b408 100644 --- a/src/bin/pg_archivecleanup/po/es.po +++ b/src/bin/pg_archivecleanup/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:38+0000\n" +"POT-Creation-Date: 2026-02-06 21:33+0000\n" "PO-Revision-Date: 2020-09-12 23:13-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_archivecleanup/po/ru.po b/src/bin/pg_archivecleanup/po/ru.po index ea01fcc9af0..90dedca9b2d 100644 --- a/src/bin/pg_archivecleanup/po/ru.po +++ b/src/bin/pg_archivecleanup/po/ru.po @@ -1,7 +1,7 @@ # 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, 2024. +# SPDX-FileCopyrightText: 2017, 2019, 2020, 2022, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_archivecleanup (PostgreSQL) 10\n" diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po index b9c9fea4ff8..0fb6360e311 100644 --- a/src/bin/pg_basebackup/po/es.po +++ b/src/bin/pg_basebackup/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:36+0000\n" +"POT-Creation-Date: 2026-02-06 21:31+0000\n" "PO-Revision-Date: 2022-01-12 17:29-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_basebackup/po/ru.po b/src/bin/pg_basebackup/po/ru.po index c384a6e61a5..8c1fd78a0ae 100644 --- a/src/bin/pg_basebackup/po/ru.po +++ b/src/bin/pg_basebackup/po/ru.po @@ -1,7 +1,7 @@ # 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, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_basebackup (PostgreSQL current)\n" diff --git a/src/bin/pg_checksums/po/es.po b/src/bin/pg_checksums/po/es.po index 17ff7158618..b96f3c53a2c 100644 --- a/src/bin/pg_checksums/po/es.po +++ b/src/bin/pg_checksums/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_checksums (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:39+0000\n" +"POT-Creation-Date: 2026-02-06 21:34+0000\n" "PO-Revision-Date: 2021-05-20 21:25-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: pgsql-es-ayuda \n" diff --git a/src/bin/pg_checksums/po/ru.po b/src/bin/pg_checksums/po/ru.po index e6c72a7b78b..a625e98781d 100644 --- a/src/bin/pg_checksums/po/ru.po +++ b/src/bin/pg_checksums/po/ru.po @@ -1,4 +1,4 @@ -# Alexander Lakhin , 2019, 2020, 2021, 2022, 2024. +# SPDX-FileCopyrightText: 2019, 2020, 2021, 2022, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_verify_checksums (PostgreSQL) 11\n" diff --git a/src/bin/pg_config/po/es.po b/src/bin/pg_config/po/es.po index 61b7cca563f..7714ca73b8b 100644 --- a/src/bin/pg_config/po/es.po +++ b/src/bin/pg_config/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_config (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:35+0000\n" +"POT-Creation-Date: 2026-02-06 21:31+0000\n" "PO-Revision-Date: 2021-05-20 23:11-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_controldata/po/es.po b/src/bin/pg_controldata/po/es.po index 5c957ee8014..efaa2703c29 100644 --- a/src/bin/pg_controldata/po/es.po +++ b/src/bin/pg_controldata/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:39+0000\n" +"POT-Creation-Date: 2026-02-06 21:34+0000\n" "PO-Revision-Date: 2020-09-12 22:55-0300\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_controldata/po/ru.po b/src/bin/pg_controldata/po/ru.po index 1c69b5a9b62..12e0d56cd35 100644 --- a/src/bin/pg_controldata/po/ru.po +++ b/src/bin/pg_controldata/po/ru.po @@ -4,7 +4,7 @@ # Serguei A. Mokhov , 2002-2004. # Oleg Bartunov , 2004. # Andrey Sudnik , 2011. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_controldata (PostgreSQL current)\n" diff --git a/src/bin/pg_ctl/nls.mk b/src/bin/pg_ctl/nls.mk index aa8b5ac546b..0ce4ab5d787 100644 --- a/src/bin/pg_ctl/nls.mk +++ b/src/bin/pg_ctl/nls.mk @@ -1,4 +1,4 @@ # src/bin/pg_ctl/nls.mk CATALOG_NAME = pg_ctl -AVAIL_LANGUAGES = cs de el es fr it ja ko ru sv tr uk zh_CN +AVAIL_LANGUAGES = cs de el es fr it ja ko pl ru sv tr uk zh_CN GETTEXT_FILES = pg_ctl.c ../../common/exec.c ../../common/fe_memutils.c ../../common/wait_error.c ../../port/path.c diff --git a/src/bin/pg_ctl/po/es.po b/src/bin/pg_ctl/po/es.po index 73821bfe88d..19e5698db2d 100644 --- a/src/bin/pg_ctl/po/es.po +++ b/src/bin/pg_ctl/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:36+0000\n" +"POT-Creation-Date: 2026-02-06 21:31+0000\n" "PO-Revision-Date: 2021-05-20 23:12-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_ctl/po/pl.po b/src/bin/pg_ctl/po/pl.po new file mode 100644 index 00000000000..74e62df49ca --- /dev/null +++ b/src/bin/pg_ctl/po/pl.po @@ -0,0 +1,831 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-03-27 18:53+0000\n" +"PO-Revision-Date: 2026-01-03 13:40\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"Language: pl_PL\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==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /REL_14_STABLE/pg_ctl.pot\n" +"X-Crowdin-File-ID: 740\n" + +#: ../../common/exec.c:149 ../../common/exec.c:266 ../../common/exec.c:312 +#, c-format +msgid "could not identify current directory: %m" +msgstr "nie można zidentyfikować bieżącego katalogu: %m" + +#: ../../common/exec.c:168 +#, c-format +msgid "invalid binary \"%s\"" +msgstr "niepoprawny binarny \"%s\"" + +#: ../../common/exec.c:218 +#, c-format +msgid "could not read binary \"%s\"" +msgstr "nie można odczytać binarnego \"%s\"" + +#: ../../common/exec.c:226 +#, c-format +msgid "could not find a \"%s\" to execute" +msgstr "nie znaleziono \"%s\" do wykonania" + +#: ../../common/exec.c:282 ../../common/exec.c:321 +#, c-format +msgid "could not change directory to \"%s\": %m" +msgstr "nie można zmienić katalogu na \"%s\": %m" + +#: ../../common/exec.c:299 +#, c-format +msgid "could not read symbolic link \"%s\": %m" +msgstr "nie można odczytać linku symbolicznego \"%s\": %m" + +#: ../../common/exec.c:422 +#, c-format +msgid "%s() failed: %m" +msgstr "%s() nie powiodło się: %m" + +#: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 +msgid "out of memory" +msgstr "brak pamięci" + +#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75 +#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162 +#: ../../port/path.c:709 ../../port/path.c:747 ../../port/path.c:764 +#, c-format +msgid "out of memory\n" +msgstr "brak pamięci\n" + +#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154 +#, c-format +msgid "cannot duplicate null pointer (internal error)\n" +msgstr "nie można powielić pustego wskazania (błąd wewnętrzny)\n" + +#: ../../common/wait_error.c:45 +#, c-format +msgid "command not executable" +msgstr "polecenie nie wykonywalne" + +#: ../../common/wait_error.c:49 +#, c-format +msgid "command not found" +msgstr "polecenia nie znaleziono" + +#: ../../common/wait_error.c:54 +#, c-format +msgid "child process exited with exit code %d" +msgstr "proces potomny zakończył działanie z kodem %d" + +#: ../../common/wait_error.c:62 +#, c-format +msgid "child process was terminated by exception 0x%X" +msgstr "proces potomny został zatrzymany przez wyjątek 0x%X" + +#: ../../common/wait_error.c:66 +#, c-format +msgid "child process was terminated by signal %d: %s" +msgstr "" + +#: ../../common/wait_error.c:72 +#, c-format +msgid "child process exited with unrecognized status %d" +msgstr "proces potomny zakończył działanie z nieznanym stanem %d" + +#: ../../port/path.c:731 +#, c-format +msgid "could not get current working directory: %s\n" +msgstr "nie można zidentyfikować aktualnego folderu roboczego: %s\n" + +#: pg_ctl.c:260 +#, c-format +msgid "%s: directory \"%s\" does not exist\n" +msgstr "%s: folder \"%s\" nie istnieje\n" + +#: pg_ctl.c:263 +#, c-format +msgid "%s: could not access directory \"%s\": %s\n" +msgstr "%s: brak dostępu do katalogu \"%s\": %s\n" + +#: pg_ctl.c:276 +#, c-format +msgid "%s: directory \"%s\" is not a database cluster directory\n" +msgstr "%s: folder \"%s\" nie jest folderem klastra bazy danych\n" + +#: pg_ctl.c:289 +#, c-format +msgid "%s: could not open PID file \"%s\": %s\n" +msgstr "%s: nie można otworzyć pliku PID \"%s\": %s\n" + +#: pg_ctl.c:298 +#, c-format +msgid "%s: the PID file \"%s\" is empty\n" +msgstr "%s: plik PID \"%s\" jest pusty\n" + +#: pg_ctl.c:301 +#, c-format +msgid "%s: invalid data in PID file \"%s\"\n" +msgstr "%s: niepoprawne dane w pliku PID \"%s\"\n" + +#: pg_ctl.c:464 pg_ctl.c:506 +#, c-format +msgid "%s: could not start server: %s\n" +msgstr "%s: nie można uruchomić serwera: %s\n" + +#: pg_ctl.c:484 +#, c-format +msgid "%s: could not start server due to setsid() failure: %s\n" +msgstr "" + +#: pg_ctl.c:554 +#, c-format +msgid "%s: could not open log file \"%s\": %s\n" +msgstr "%s: nie można otworzyć pliku logów \"%s\": %s\n" + +#: pg_ctl.c:571 +#, c-format +msgid "%s: could not start server: error code %lu\n" +msgstr "%s: nie udało się uruchomić serwera: kod błędu %lu\n" + +#: pg_ctl.c:788 +#, c-format +msgid "%s: cannot set core file size limit; disallowed by hard limit\n" +msgstr "%s: nie można ustawić ograniczenia rozmiaru pliku jądra; zablokowane przez twardy limit\n" + +#: pg_ctl.c:814 +#, c-format +msgid "%s: could not read file \"%s\"\n" +msgstr "%s: nie można czytać z pliku \"%s\"\n" + +#: pg_ctl.c:819 +#, c-format +msgid "%s: option file \"%s\" must have exactly one line\n" +msgstr "%s: plik opcji \"%s\" musi mieć dokładnie jedną linię\n" + +#: pg_ctl.c:861 pg_ctl.c:1049 pg_ctl.c:1132 +#, c-format +msgid "%s: could not send stop signal (PID: %ld): %s\n" +msgstr "%s: nie udało się wysłać sygnału zatrzymującego (PID: %ld): %s\n" + +#: pg_ctl.c:889 +#, 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 "Program \"%s\" jest wymagany przez %s ale nie został znaleziony\n" +"w tym samym folderze co \"%s\".\n" +"Sprawdź instalację.\n" + +#: pg_ctl.c:894 +#, 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 "Program \"%s\" został znaleziony przez \"%s\"\n" +"ale nie jest w tej samej wersji co %s.\n" +"Sprawdź instalację.\n" + +#: pg_ctl.c:927 +#, c-format +msgid "%s: database system initialization failed\n" +msgstr "%s: inicjacja systemu bazy danych nie powiodła się\n" + +#: pg_ctl.c:942 +#, c-format +msgid "%s: another server might be running; trying to start server anyway\n" +msgstr "%s: inny serwer może być uruchomiony, próba uruchomienia serwera mimo to\n" + +#: pg_ctl.c:990 +msgid "waiting for server to start..." +msgstr "oczekiwanie na uruchomienie serwera..." + +#: pg_ctl.c:995 pg_ctl.c:1087 pg_ctl.c:1165 pg_ctl.c:1277 +msgid " done\n" +msgstr " zakończono\n" + +#: pg_ctl.c:996 +msgid "server started\n" +msgstr "uruchomiono serwer\n" + +#: pg_ctl.c:999 pg_ctl.c:1005 pg_ctl.c:1282 +msgid " stopped waiting\n" +msgstr " oczekiwanie zakończone\n" + +#: pg_ctl.c:1000 +#, c-format +msgid "%s: server did not start in time\n" +msgstr "" + +#: pg_ctl.c:1006 +#, c-format +msgid "%s: could not start server\n" +"Examine the log output.\n" +msgstr "%s: Nie udało się uruchomić serwera\n" +"Sprawdź logi wyjścia.\n" + +#: pg_ctl.c:1014 +msgid "server starting\n" +msgstr "serwer w trakcie uruchamiania\n" + +#: pg_ctl.c:1034 pg_ctl.c:1108 pg_ctl.c:1186 pg_ctl.c:1225 pg_ctl.c:1306 +#, c-format +msgid "%s: PID file \"%s\" does not exist\n" +msgstr "%s: plik PID \"%s\" nie istnieje\n" + +#: pg_ctl.c:1035 pg_ctl.c:1110 pg_ctl.c:1187 pg_ctl.c:1226 pg_ctl.c:1307 +msgid "Is server running?\n" +msgstr "Czy serwer działa?\n" + +#: pg_ctl.c:1041 +#, c-format +msgid "%s: cannot stop server; single-user server is running (PID: %ld)\n" +msgstr "%s: Nie można zatrzymać serwera; jest uruchomiony serwer pojedynczego użytkownika (PID: %ld)\n" + +#: pg_ctl.c:1056 +msgid "server shutting down\n" +msgstr "zatrzymywanie serwera\n" + +#: pg_ctl.c:1071 pg_ctl.c:1147 +msgid "WARNING: online backup mode is active\n" +"Shutdown will not complete until pg_stop_backup() is called.\n\n" +msgstr "OSTRZEŻENIE: jest aktywny tryb robienia kopii roboczej online\n" +"Zatrzymanie nie zakończy się póki wywoływana jest pg_stop_backup().\n\n" + +#: pg_ctl.c:1075 pg_ctl.c:1151 +msgid "waiting for server to shut down..." +msgstr "oczekiwanie na zatrzymanie serwera..." + +#: pg_ctl.c:1079 pg_ctl.c:1156 +msgid " failed\n" +msgstr " niepowodzenie\n" + +#: pg_ctl.c:1081 pg_ctl.c:1158 +#, c-format +msgid "%s: server does not shut down\n" +msgstr "%s: serwer nie zatrzymał się\n" + +#: pg_ctl.c:1083 pg_ctl.c:1160 +msgid "HINT: The \"-m fast\" option immediately disconnects sessions rather than\n" +"waiting for session-initiated disconnection.\n" +msgstr "PORADA: Opcja \"-m fast\" rozłącza natychmiast sesje zamiast\n" +"czekać na odłączenie sesji przez użytkowników.\n" + +#: pg_ctl.c:1089 pg_ctl.c:1166 +msgid "server stopped\n" +msgstr "serwer zatrzymany\n" + +#: pg_ctl.c:1111 +msgid "trying to start server anyway\n" +msgstr "" + +#: pg_ctl.c:1120 +#, c-format +msgid "%s: cannot restart server; single-user server is running (PID: %ld)\n" +msgstr "%s: Nie można zrestartować serwera; jest uruchomiony serwer pojedynczego użytkownika (PID: %ld)\n" + +#: pg_ctl.c:1123 pg_ctl.c:1196 +msgid "Please terminate the single-user server and try again.\n" +msgstr "Proszę zakończyć działanie serwera pojedynczego użytkownika i spróbować raz jeszcze.\n" + +#: pg_ctl.c:1170 +#, c-format +msgid "%s: old server process (PID: %ld) seems to be gone\n" +msgstr "%s: poprzedni proces serwera (PID: %ld) wydaje się zginął\n" + +#: pg_ctl.c:1172 +msgid "starting server anyway\n" +msgstr "uruchomienie serwera mimo wszystko\n" + +#: pg_ctl.c:1193 +#, c-format +msgid "%s: cannot reload server; single-user server is running (PID: %ld)\n" +msgstr "%s: Nie można przeładować serwera; jest uruchomiony serwer pojedynczego użytkownika (PID: %ld)\n" + +#: pg_ctl.c:1202 +#, c-format +msgid "%s: could not send reload signal (PID: %ld): %s\n" +msgstr "%s: nie udało się wysłać sygnału przeładowującego (PID: %ld): %s\n" + +#: pg_ctl.c:1207 +msgid "server signaled\n" +msgstr "serwer zasygnalizowany\n" + +#: pg_ctl.c:1232 +#, c-format +msgid "%s: cannot promote server; single-user server is running (PID: %ld)\n" +msgstr "%s: Nie można rozgłosić serwera; jest uruchomiony serwer pojedynczego użytkownika (PID: %ld)\n" + +#: pg_ctl.c:1240 +#, c-format +msgid "%s: cannot promote server; server is not in standby mode\n" +msgstr "%s: nie można rozgłosić serwera; nie jest w trybie gotowości\n" + +#: pg_ctl.c:1250 +#, c-format +msgid "%s: could not create promote signal file \"%s\": %s\n" +msgstr "%s: nie można utworzyć pliku sygnału rozgłoszenia \"%s\": %s\n" + +#: pg_ctl.c:1256 +#, c-format +msgid "%s: could not write promote signal file \"%s\": %s\n" +msgstr "%s: nie można zapisać pliku sygnału rozgłoszenia \"%s\": %s\n" + +#: pg_ctl.c:1264 +#, c-format +msgid "%s: could not send promote signal (PID: %ld): %s\n" +msgstr "%s: nie udało się wysłać sygnału rozgłaszającego (PID: %ld): %s\n" + +#: pg_ctl.c:1267 +#, c-format +msgid "%s: could not remove promote signal file \"%s\": %s\n" +msgstr "%s: nie można usunąć pliku sygnału rozgłoszenia \"%s\": %s\n" + +#: pg_ctl.c:1274 +msgid "waiting for server to promote..." +msgstr "oczekiwanie na rozgłoszenie serwera..." + +#: pg_ctl.c:1278 +msgid "server promoted\n" +msgstr "serwer rozgłoszony\n" + +#: pg_ctl.c:1283 +#, c-format +msgid "%s: server did not promote in time\n" +msgstr "" + +#: pg_ctl.c:1289 +msgid "server promoting\n" +msgstr "serwer w trakcie rozgłaszania\n" + +#: pg_ctl.c:1313 +#, c-format +msgid "%s: cannot rotate log file; single-user server is running (PID: %ld)\n" +msgstr "" + +#: pg_ctl.c:1323 +#, c-format +msgid "%s: could not create log rotation signal file \"%s\": %s\n" +msgstr "" + +#: pg_ctl.c:1329 +#, c-format +msgid "%s: could not write log rotation signal file \"%s\": %s\n" +msgstr "" + +#: pg_ctl.c:1337 +#, c-format +msgid "%s: could not send log rotation signal (PID: %ld): %s\n" +msgstr "" + +#: pg_ctl.c:1340 +#, c-format +msgid "%s: could not remove log rotation signal file \"%s\": %s\n" +msgstr "" + +#: pg_ctl.c:1345 +msgid "server signaled to rotate log file\n" +msgstr "" + +#: pg_ctl.c:1392 +#, c-format +msgid "%s: single-user server is running (PID: %ld)\n" +msgstr "%s: jest uruchomiony serwer pojedynczego użytkownika (PID: %ld)\n" + +#: pg_ctl.c:1406 +#, c-format +msgid "%s: server is running (PID: %ld)\n" +msgstr "%s: jest uruchomiony serwer (PID: %ld)\n" + +#: pg_ctl.c:1422 +#, c-format +msgid "%s: no server running\n" +msgstr "%s: brak uruchomionego serwera\n" + +#: pg_ctl.c:1439 +#, c-format +msgid "%s: could not send signal %d (PID: %ld): %s\n" +msgstr "%s: nie udało się wysłać sygnału %d (PID: %ld): %s\n" + +#: pg_ctl.c:1470 +#, c-format +msgid "%s: could not find own program executable\n" +msgstr "%s: nie udało się znaleźć własnego programu wykonywalnego\n" + +#: pg_ctl.c:1480 +#, c-format +msgid "%s: could not find postgres program executable\n" +msgstr "%s: nie udało się znaleźć programu wykonywalnego postgresa\n" + +#: pg_ctl.c:1550 pg_ctl.c:1584 +#, c-format +msgid "%s: could not open service manager\n" +msgstr "%s: nie udało się otworzyć menadżera usług\n" + +#: pg_ctl.c:1556 +#, c-format +msgid "%s: service \"%s\" already registered\n" +msgstr "%s: usługa \"%s\" jest już zarejestrowana\n" + +#: pg_ctl.c:1567 +#, c-format +msgid "%s: could not register service \"%s\": error code %lu\n" +msgstr "%s: nie udało się zarejestrować usługi \"%s\": kod błędu %lu\n" + +#: pg_ctl.c:1590 +#, c-format +msgid "%s: service \"%s\" not registered\n" +msgstr "%s: usługa \"%s\" niezarejestrowana\n" + +#: pg_ctl.c:1597 +#, c-format +msgid "%s: could not open service \"%s\": error code %lu\n" +msgstr "%s: nie udało się otworzyć usługi \"%s\": kod błędu %lu\n" + +#: pg_ctl.c:1606 +#, c-format +msgid "%s: could not unregister service \"%s\": error code %lu\n" +msgstr "%s: nie udało się wyrejestrować usługi \"%s\": kod błędu %lu\n" + +#: pg_ctl.c:1693 +msgid "Waiting for server startup...\n" +msgstr "Oczekiwanie na uruchomienie serwera...\n" + +#: pg_ctl.c:1696 +msgid "Timed out waiting for server startup\n" +msgstr "Minął czas oczekiwania na uruchomienie serwera\n" + +#: pg_ctl.c:1700 +msgid "Server started and accepting connections\n" +msgstr "Serwer uruchomiony i akceptuje połączenia\n" + +#: pg_ctl.c:1755 +#, c-format +msgid "%s: could not start service \"%s\": error code %lu\n" +msgstr "%s: nie udało się uruchomić usługi \"%s\": kod błędu %lu\n" + +#: pg_ctl.c:1825 +#, c-format +msgid "%s: WARNING: cannot create restricted tokens on this platform\n" +msgstr "%s: OSTRZEŻENIE nie można tworzyć ograniczonych tokenów na tej platformie\n" + +#: pg_ctl.c:1838 +#, c-format +msgid "%s: could not open process token: error code %lu\n" +msgstr "%s: nie można otworzyć tokenu procesu: kod błędu %lu\n" + +#: pg_ctl.c:1852 +#, c-format +msgid "%s: could not allocate SIDs: error code %lu\n" +msgstr "%s: nie udało się przydzielić SIDów: kod błędu %lu\n" + +#: pg_ctl.c:1879 +#, c-format +msgid "%s: could not create restricted token: error code %lu\n" +msgstr "%s: nie udało się utworzyć ograniczonego tokena: kod błędu %lu\n" + +#: pg_ctl.c:1910 +#, c-format +msgid "%s: WARNING: could not locate all job object functions in system API\n" +msgstr "%s: OSTRZEŻENIE: nie może zlokalizować wszystkich funkcji obiektów zadań w systemowym API\n" + +#: pg_ctl.c:2007 +#, c-format +msgid "%s: could not get LUIDs for privileges: error code %lu\n" +msgstr "" + +#: pg_ctl.c:2015 pg_ctl.c:2030 +#, c-format +msgid "%s: could not get token information: error code %lu\n" +msgstr "" + +#: pg_ctl.c:2024 +#, c-format +msgid "%s: out of memory\n" +msgstr "%s: brak pamięci\n" + +#: pg_ctl.c:2054 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Użyj \"%s --help\" aby uzyskać więcej informacji.\n" + +#: pg_ctl.c:2062 +#, c-format +msgid "%s is a utility to initialize, start, stop, or control a PostgreSQL server.\n\n" +msgstr "%s jest narzędziem do inicjacji, uruchamiania, zatrzymywania i kontroli serwera PostgreSQL.\n\n" + +#: pg_ctl.c:2063 +#, c-format +msgid "Usage:\n" +msgstr "Składnia:\n" + +#: pg_ctl.c:2064 +#, c-format +msgid " %s init[db] [-D DATADIR] [-s] [-o OPTIONS]\n" +msgstr "" + +#: pg_ctl.c:2065 +#, c-format +msgid " %s start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-p PATH] [-c]\n" +msgstr "" + +#: pg_ctl.c:2067 +#, c-format +msgid " %s stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +msgstr "" + +#: pg_ctl.c:2068 +#, c-format +msgid " %s restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]\n" +" [-o OPTIONS] [-c]\n" +msgstr "" + +#: pg_ctl.c:2070 +#, c-format +msgid " %s reload [-D DATADIR] [-s]\n" +msgstr "" + +#: pg_ctl.c:2071 +#, c-format +msgid " %s status [-D DATADIR]\n" +msgstr "" + +#: pg_ctl.c:2072 +#, c-format +msgid " %s promote [-D DATADIR] [-W] [-t SECS] [-s]\n" +msgstr "" + +#: pg_ctl.c:2073 +#, c-format +msgid " %s logrotate [-D DATADIR] [-s]\n" +msgstr "" + +#: pg_ctl.c:2074 +#, c-format +msgid " %s kill SIGNALNAME PID\n" +msgstr "" + +#: pg_ctl.c:2076 +#, 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 "" + +#: pg_ctl.c:2078 +#, c-format +msgid " %s unregister [-N SERVICENAME]\n" +msgstr " %s unregister [-N NAZWAUSLUGI]\n" + +#: pg_ctl.c:2081 +#, c-format +msgid "\n" +"Common options:\n" +msgstr "\n" +"Opcje ogólne:\n" + +#: pg_ctl.c:2082 +#, c-format +msgid " -D, --pgdata=DATADIR location of the database storage area\n" +msgstr " -D, --pgdata=KATDANE położenie miejsca przechowywania bazy danych\n" + +#: pg_ctl.c:2084 +#, c-format +msgid " -e SOURCE event source for logging when running as a service\n" +msgstr " -e ŹRÓDŁO źródło zdarzenia do logowania gdy uruchomiono jako usługę\n" + +#: pg_ctl.c:2086 +#, c-format +msgid " -s, --silent only print errors, no informational messages\n" +msgstr " -s, --silent wypisz tylko błędy, bez komunikatów informacyjnych\n" + +#: pg_ctl.c:2087 +#, c-format +msgid " -t, --timeout=SECS seconds to wait when using -w option\n" +msgstr " -t, --timeout=SEKUNDY sekundy oczekiwania podczas użycia opcji -w\n" + +#: pg_ctl.c:2088 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version pokaż informacje o wersji i zakończ\n" + +#: pg_ctl.c:2089 +#, c-format +msgid " -w, --wait wait until operation completes (default)\n" +msgstr " -w, --wait czekaj na zakończenie operacji (domyślnie)\n" + +#: pg_ctl.c:2090 +#, c-format +msgid " -W, --no-wait do not wait until operation completes\n" +msgstr " -W, --no-wait nie czekaj na zakończenie operacji\n" + +#: pg_ctl.c:2091 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help pokaż tą pomoc i zakończ działanie\n" + +#: pg_ctl.c:2092 +#, c-format +msgid "If the -D option is omitted, the environment variable PGDATA is used.\n" +msgstr "Jeśli nie jest podana -D, używana jest zmienna środowiskowa PGDATA.\n" + +#: pg_ctl.c:2094 +#, c-format +msgid "\n" +"Options for start or restart:\n" +msgstr "\n" +"Opcje uruchomienia lub restartu:\n" + +#: pg_ctl.c:2096 +#, c-format +msgid " -c, --core-files allow postgres to produce core files\n" +msgstr " -c, --core-files zezwól postgresowi utworzyć pliki jądra\n" + +#: pg_ctl.c:2098 +#, c-format +msgid " -c, --core-files not applicable on this platform\n" +msgstr " -c, --core-files niedostępne na tej platformie\n" + +#: pg_ctl.c:2100 +#, c-format +msgid " -l, --log=FILENAME write (or append) server log to FILENAME\n" +msgstr " -l, --log=NAZWAPLIKU zapisuje (lub dodaje) komunikaty serwera do NAZWAPLIKU\n" + +#: pg_ctl.c:2101 +#, c-format +msgid " -o, --options=OPTIONS command line options to pass to postgres\n" +" (PostgreSQL server executable) or initdb\n" +msgstr " -o, --options=OPCJE opcje wiersza poleceń przekazywanych postgresowi\n" +" (program wykonywalny PostgreSQL) lub initdb\n" + +#: pg_ctl.c:2103 +#, c-format +msgid " -p PATH-TO-POSTGRES normally not necessary\n" +msgstr " -p ŚCIEŻKA-DO-POSTGRES zwykle niekonieczna\n" + +#: pg_ctl.c:2104 +#, c-format +msgid "\n" +"Options for stop or restart:\n" +msgstr "\n" +"Opcje dla zatrzymania lub restartu:\n" + +#: pg_ctl.c:2105 +#, c-format +msgid " -m, --mode=MODE MODE can be \"smart\", \"fast\", or \"immediate\"\n" +msgstr " -m, --mode=TRYB TRYB może być \"smart\", \"fast\" lub \"immediate\"\n" + +#: pg_ctl.c:2107 +#, c-format +msgid "\n" +"Shutdown modes are:\n" +msgstr "\n" +"Tryby zamknięcia to:\n" + +#: pg_ctl.c:2108 +#, c-format +msgid " smart quit after all clients have disconnected\n" +msgstr " smart wyjście po rozłączeniu się wszystkich klientów\n" + +#: pg_ctl.c:2109 +#, c-format +msgid " fast quit directly, with proper shutdown (default)\n" +msgstr "" + +#: pg_ctl.c:2110 +#, c-format +msgid " immediate quit without complete shutdown; will lead to recovery on restart\n" +msgstr " immediate wyjście bez pełnego zamknięcia; doprowadzi do odzyskiwania przy restarcie\n" + +#: pg_ctl.c:2112 +#, c-format +msgid "\n" +"Allowed signal names for kill:\n" +msgstr "\n" +"Dopuszczalne nazwy sygnałów dla zabicia:\n" + +#: pg_ctl.c:2116 +#, c-format +msgid "\n" +"Options for register and unregister:\n" +msgstr "\n" +"Opcje rejestracji i wyrejestrowania:\n" + +#: pg_ctl.c:2117 +#, c-format +msgid " -N SERVICENAME service name with which to register PostgreSQL server\n" +msgstr " -N SERVICENAME nazwa usługi, na której rejestruje się serwer PostgreSQL\n" + +#: pg_ctl.c:2118 +#, c-format +msgid " -P PASSWORD password of account to register PostgreSQL server\n" +msgstr " -P PASSWORD hasło konta rejestracji serwera PostgreSQL\n" + +#: pg_ctl.c:2119 +#, c-format +msgid " -U USERNAME user name of account to register PostgreSQL server\n" +msgstr " -U USERNAME nazwa użytkownika konta rejestracji serwera PostgreSQL\n" + +#: pg_ctl.c:2120 +#, c-format +msgid " -S START-TYPE service start type to register PostgreSQL server\n" +msgstr " -S TYP-STARTU typ startu usługi rejestracji serwera PostgreSQL\n" + +#: pg_ctl.c:2122 +#, c-format +msgid "\n" +"Start types are:\n" +msgstr "\n" +"Rodzaje startu to:\n" + +#: pg_ctl.c:2123 +#, c-format +msgid " auto start service automatically during system startup (default)\n" +msgstr " auto uruchamia usługę automatycznie w czasie startu systemu (domyślnie)\n" + +#: pg_ctl.c:2124 +#, c-format +msgid " demand start service on demand\n" +msgstr " demand uruchamia usługę na żądanie\n" + +#: pg_ctl.c:2127 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Zgłoś błędy do <%s>.\n" + +#: pg_ctl.c:2128 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s strona główna: <%s>\n" + +#: pg_ctl.c:2153 +#, c-format +msgid "%s: unrecognized shutdown mode \"%s\"\n" +msgstr "%s: nierozpoznany tryb wyłączenia \"%s\"\n" + +#: pg_ctl.c:2182 +#, c-format +msgid "%s: unrecognized signal name \"%s\"\n" +msgstr "%s: nierozpoznana nazwa sygnału \"%s\"\n" + +#: pg_ctl.c:2199 +#, c-format +msgid "%s: unrecognized start type \"%s\"\n" +msgstr "%s: nierozpoznany tryb uruchomienia \"%s\"\n" + +#: pg_ctl.c:2254 +#, c-format +msgid "%s: could not determine the data directory using command \"%s\"\n" +msgstr "%s: nie można określić folderu danych przy użyciu polecenia \"%s\"\n" + +#: pg_ctl.c:2278 +#, c-format +msgid "%s: control file appears to be corrupt\n" +msgstr "%s: plik kontrolny wydaje się uszkodzony\n" + +#: pg_ctl.c:2346 +#, c-format +msgid "%s: cannot be run as root\n" +"Please log in (using, e.g., \"su\") as the (unprivileged) user that will\n" +"own the server process.\n" +msgstr "%s: nie można uruchomić jako root\n" +"Proszę zalogować się (używając np: \"su\") na (nieuprzywilejowanego) użytkownika który\n" +"będzie właścicielem procesu.\n" + +#: pg_ctl.c:2429 +#, c-format +msgid "%s: -S option not supported on this platform\n" +msgstr "%s: opcja -S nieobsługiwana na tej platformie\n" + +#: pg_ctl.c:2466 +#, c-format +msgid "%s: too many command-line arguments (first is \"%s\")\n" +msgstr "%s: za duża ilość parametrów (pierwszy to \"%s\")\n" + +#: pg_ctl.c:2492 +#, c-format +msgid "%s: missing arguments for kill mode\n" +msgstr "%s: nie wskazano wszystkich argumentów trybu zabicia\n" + +#: pg_ctl.c:2510 +#, c-format +msgid "%s: unrecognized operation mode \"%s\"\n" +msgstr "%s: nierozpoznany tryb autoryzacji \"%s\"\n" + +#: pg_ctl.c:2520 +#, c-format +msgid "%s: no operation specified\n" +msgstr "%s: nie podano operacji\n" + +#: pg_ctl.c:2541 +#, c-format +msgid "%s: no database directory specified and environment variable PGDATA unset\n" +msgstr "%s: nie wskazano folderu bazy danych ani nie ustawiono zmiennej środowiska PGDATA\n" + diff --git a/src/bin/pg_ctl/po/ru.po b/src/bin/pg_ctl/po/ru.po index 0f86dad9039..28e08ee1ec3 100644 --- a/src/bin/pg_ctl/po/ru.po +++ b/src/bin/pg_ctl/po/ru.po @@ -6,7 +6,7 @@ # Sergey Burladyan , 2009, 2012. # Andrey Sudnik , 2010. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_ctl (PostgreSQL current)\n" diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 3cabd82e9c7..2d2640c4e3e 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 "fe_utils/string_utils.h" #include "pg_backup_archiver.h" @@ -49,6 +50,7 @@ static DumpableObject **tblinfoindex; static DumpableObject **typinfoindex; static DumpableObject **funinfoindex; static DumpableObject **oprinfoindex; +static DumpableObject **aminfoindex; static DumpableObject **collinfoindex; static DumpableObject **nspinfoindex; static DumpableObject **extinfoindex; @@ -57,6 +59,7 @@ static int numTables; static int numTypes; static int numFuncs; static int numOperators; +static int numAccessMethods; static int numCollations; static int numNamespaces; static int numExtensions; @@ -92,6 +95,7 @@ getSchemaData(Archive *fout, int *numTablesPtr) TypeInfo *typinfo; FuncInfo *funinfo; OprInfo *oprinfo; + AccessMethodInfo *aminfo; CollInfo *collinfo; NamespaceInfo *nspinfo; ExtensionInfo *extinfo; @@ -103,7 +107,6 @@ getSchemaData(Archive *fout, int *numTablesPtr) int numProcLangs; int numCasts; int numTransforms; - int numAccessMethods; int numOpclasses; int numOpfamilies; int numConversions; @@ -166,7 +169,8 @@ getSchemaData(Archive *fout, int *numTablesPtr) oprinfoindex = buildIndexArray(oprinfo, numOperators, sizeof(OprInfo)); pg_log_info("reading user-defined access methods"); - getAccessMethods(fout, &numAccessMethods); + aminfo = getAccessMethods(fout, &numAccessMethods); + aminfoindex = buildIndexArray(aminfo, numAccessMethods, sizeof(AccessMethodInfo)); pg_log_info("reading user-defined operator classes"); getOpclasses(fout, &numOpclasses); @@ -930,6 +934,17 @@ findOprByOid(Oid oid) return (OprInfo *) findObjectByOid(oid, oprinfoindex, numOperators); } +/* + * findAccessMethodByOid + * finds the DumpableObject for the access method with the given oid + * returns NULL if not found + */ +AccessMethodInfo * +findAccessMethodByOid(Oid oid) +{ + return (AccessMethodInfo *) findObjectByOid(oid, aminfoindex, numAccessMethods); +} + /* * findCollationByOid * finds the entry (in collinfo) of the collation with the given oid diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c index 60d306e7c3a..1e24e536f02 100644 --- a/src/bin/pg_dump/dumputils.c +++ b/src/bin/pg_dump/dumputils.c @@ -19,6 +19,7 @@ #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 +30,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. * @@ -1043,3 +1081,40 @@ makeAlterConfigCommand(PGconn *conn, const char *configitem, pg_free(mine); } + +/* + * 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 6e97da7487e..f1cca87f9f9 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 *racls, const char *owner, const char *prefix, int remoteVersion, @@ -66,4 +67,7 @@ extern void makeAlterConfigCommand(PGconn *conn, const char *configitem, const char *type2, const char *name2, PQExpBuffer buf); +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/pg_backup.h b/src/bin/pg_dump/pg_backup.h index 3c1cd858a85..203acffb781 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -134,6 +134,8 @@ typedef struct _restoreOptions int enable_row_security; int sequence_data; /* dump sequence data even in schema-only mode */ int binary_upgrade; + + char *restrict_key; } RestoreOptions; typedef struct _dumpOptions @@ -180,6 +182,8 @@ typedef struct _dumpOptions int sequence_data; /* dump sequence data even in schema-only mode */ int do_nothing; + + char *restrict_key; } DumpOptions; /* diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 202b682ffad..3293bbc5fe3 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -74,7 +74,6 @@ static ArchiveHandle *_allocAH(const char *FileSpec, const ArchiveFormat fmt, SetupWorkerPtrType setupWorkerPtr); static void _getObjectDescription(PQExpBuffer buf, TocEntry *te); static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData); -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); @@ -208,6 +207,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; } @@ -464,6 +464,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); @@ -735,6 +746,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. */ @@ -2839,6 +2858,20 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) if (ropt->no_comments && strcmp(te->desc, "COMMENT") == 0) return 0; + /* + * If it's a comment on a publication or a subscription, maybe ignore it. + */ + if (strcmp(te->desc, "COMMENT") == 0) + { + if (ropt->no_publications && + strncmp(te->tag, "PUBLICATION", strlen("PUBLICATION")) == 0) + return 0; + + if (ropt->no_subscriptions && + strncmp(te->tag, "SUBSCRIPTION", strlen("SUBSCRIPTION")) == 0) + return 0; + } + /* * If it's a publication or a table part of a publication, maybe ignore * it. @@ -2852,6 +2885,21 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) if (ropt->no_security_labels && strcmp(te->desc, "SECURITY LABEL") == 0) return 0; + /* + * If it's a security label on a publication or a subscription, maybe + * ignore it. + */ + if (strcmp(te->desc, "SECURITY LABEL") == 0) + { + if (ropt->no_publications && + strncmp(te->tag, "PUBLICATION", strlen("PUBLICATION")) == 0) + return 0; + + if (ropt->no_subscriptions && + strncmp(te->tag, "SUBSCRIPTION", strlen("SUBSCRIPTION")) == 0) + return 0; + } + /* If it's a subscription, maybe ignore it */ if (ropt->no_subscriptions && strcmp(te->desc, "SUBSCRIPTION") == 0) return 0; @@ -3092,12 +3140,14 @@ _tocEntryRestorePass(TocEntry *te) return RESTORE_PASS_POST_ACL; /* - * Comments need to be emitted in the same pass as their parent objects. - * ACLs haven't got comments, and neither do matview data objects, but - * event triggers do. (Fortunately, event triggers haven't got ACLs, or - * we'd need yet another weird special case.) + * Comments and security labels need to be emitted in the same pass as + * their parent objects. ACLs haven't got comments and security labels, + * and neither do matview data objects, but event triggers do. + * (Fortunately, event triggers haven't got ACLs, or we'd need yet another + * weird special case.) */ - if (strcmp(te->desc, "COMMENT") == 0 && + if ((strcmp(te->desc, "COMMENT") == 0 || + strcmp(te->desc, "SECURITY LABEL") == 0) && strncmp(te->tag, "EVENT TRIGGER ", 14) == 0) return RESTORE_PASS_POST_ACL; @@ -3237,11 +3287,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); } /* @@ -3716,42 +3776,6 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData) } } -/* - * 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 */ diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index 91060944f1f..ef4a6903377 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -38,6 +38,16 @@ */ #ifdef HAVE_LIBZ #include + +/* + * We don't use the gzgetc() macro, because zlib's configuration logic is not + * robust enough to guarantee that the macro will have the same ideas about + * struct field layout as the library itself does; see for example + * https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=59711 + * Instead, #undef the macro and fall back to the underlying function. + */ +#undef gzgetc + #define GZCLOSE(fh) gzclose(fh) #define GZWRITE(p, s, n, fh) gzwrite(fh, p, (n) * (s)) #define GZREAD(p, s, n, fh) gzread(fh, p, (n) * (s)) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 1856aeff109..e42a3a7d44c 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -407,6 +407,7 @@ main(int argc, char **argv) {"on-conflict-do-nothing", no_argument, &dopt.do_nothing, 1}, {"rows-per-insert", required_argument, NULL, 10}, {"include-foreign-data", required_argument, NULL, 11}, + {"restrict-key", required_argument, NULL, 25}, {NULL, 0, NULL, 0} }; @@ -629,6 +630,10 @@ main(int argc, char **argv) optarg); break; + case 25: + dopt.restrict_key = pg_strdup(optarg); + break; + default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit_nicely(1); @@ -697,8 +702,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) + fatal("could not generate restrict key"); + if (!valid_restrict_key(dopt.restrict_key)) + fatal("invalid restrict key"); + } + else if (dopt.restrict_key) + fatal("option --restrict-key can only be used with --format=plain"); + /* Custom and directory formats are compressed by default, others not */ if (compressLevel == -1) { @@ -992,6 +1011,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; if (compressLevel == -1) ropt->compression = 0; @@ -1089,6 +1109,7 @@ 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(_(" --serializable-deferrable wait until the dump can run without anomalies\n")); @@ -1913,6 +1934,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 */ @@ -2545,11 +2573,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 @@ -5539,6 +5570,8 @@ getOperators(Archive *fout, int *numOprs) int i_oprnamespace; int i_rolname; int i_oprkind; + int i_oprleft; + int i_oprright; int i_oprcode; /* @@ -5550,6 +5583,8 @@ getOperators(Archive *fout, int *numOprs) "oprnamespace, " "(%s oprowner) AS rolname, " "oprkind, " + "oprleft, " + "oprright, " "oprcode::oid AS oprcode " "FROM pg_operator", username_subquery); @@ -5567,6 +5602,8 @@ getOperators(Archive *fout, int *numOprs) i_oprnamespace = PQfnumber(res, "oprnamespace"); i_rolname = PQfnumber(res, "rolname"); i_oprkind = PQfnumber(res, "oprkind"); + i_oprleft = PQfnumber(res, "oprleft"); + i_oprright = PQfnumber(res, "oprright"); i_oprcode = PQfnumber(res, "oprcode"); for (i = 0; i < ntups; i++) @@ -5580,6 +5617,8 @@ getOperators(Archive *fout, int *numOprs) findNamespace(atooid(PQgetvalue(res, i, i_oprnamespace))); oprinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname)); oprinfo[i].oprkind = (PQgetvalue(res, i, i_oprkind))[0]; + oprinfo[i].oprleft = atooid(PQgetvalue(res, i, i_oprleft)); + oprinfo[i].oprright = atooid(PQgetvalue(res, i, i_oprright)); oprinfo[i].oprcode = atooid(PQgetvalue(res, i, i_oprcode)); /* Decide whether we want to dump it */ @@ -5620,6 +5659,7 @@ getCollations(Archive *fout, int *numCollations) int i_collname; int i_collnamespace; int i_rolname; + int i_collencoding; /* Collations didn't exist pre-9.1 */ if (fout->remoteVersion < 90100) @@ -5637,7 +5677,8 @@ getCollations(Archive *fout, int *numCollations) appendPQExpBuffer(query, "SELECT tableoid, oid, collname, " "collnamespace, " - "(%s collowner) AS rolname " + "(%s collowner) AS rolname, " + "collencoding " "FROM pg_collation", username_subquery); @@ -5653,6 +5694,7 @@ getCollations(Archive *fout, int *numCollations) i_collname = PQfnumber(res, "collname"); i_collnamespace = PQfnumber(res, "collnamespace"); i_rolname = PQfnumber(res, "rolname"); + i_collencoding = PQfnumber(res, "collencoding"); for (i = 0; i < ntups; i++) { @@ -5664,6 +5706,7 @@ getCollations(Archive *fout, int *numCollations) collinfo[i].dobj.namespace = findNamespace(atooid(PQgetvalue(res, i, i_collnamespace))); collinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname)); + collinfo[i].collencoding = atoi(PQgetvalue(res, i, i_collencoding)); /* Decide whether we want to dump it */ selectDumpableObject(&(collinfo[i].dobj), fout); @@ -5772,19 +5815,28 @@ getAccessMethods(Archive *fout, int *numAccessMethods) int i_amhandler; int i_amtype; - /* Before 9.6, there are no user-defined access methods */ - if (fout->remoteVersion < 90600) - { - *numAccessMethods = 0; - return NULL; - } - query = createPQExpBuffer(); - /* Select all access methods from pg_am table */ - appendPQExpBufferStr(query, "SELECT tableoid, oid, amname, amtype, " - "amhandler::pg_catalog.regproc AS amhandler " - "FROM pg_am"); + /* + * Select all access methods from pg_am table. v9.6 introduced CREATE + * ACCESS METHOD, so earlier versions usually have only built-in access + * methods. v9.6 also changed the access method API, replacing dozens of + * pg_am columns with amhandler. Even if a user created an access method + * by "INSERT INTO pg_am", we have no way to translate pre-v9.6 pg_am + * columns to a v9.6+ CREATE ACCESS METHOD. Hence, before v9.6, read + * pg_am just to facilitate findAccessMethodByOid() providing the + * OID-to-name mapping. + */ + appendPQExpBufferStr(query, "SELECT tableoid, oid, amname, "); + if (fout->remoteVersion >= 90600) + appendPQExpBufferStr(query, + "amtype, " + "amhandler::pg_catalog.regproc AS amhandler "); + else + appendPQExpBufferStr(query, + "'i'::pg_catalog.\"char\" AS amtype, " + "'-'::pg_catalog.regproc AS amhandler "); + appendPQExpBufferStr(query, "FROM pg_am"); res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK); @@ -5842,6 +5894,7 @@ getOpclasses(Archive *fout, int *numOpclasses) OpclassInfo *opcinfo; int i_tableoid; int i_oid; + int i_opcmethod; int i_opcname; int i_opcnamespace; int i_rolname; @@ -5851,11 +5904,20 @@ getOpclasses(Archive *fout, int *numOpclasses) * system-defined opclasses at dump-out time. */ - appendPQExpBuffer(query, "SELECT tableoid, oid, opcname, " - "opcnamespace, " - "(%s opcowner) AS rolname " - "FROM pg_opclass", - username_subquery); + if (fout->remoteVersion >= 80300) + appendPQExpBuffer(query, "SELECT tableoid, oid, " + "opcmethod, opcname, " + "opcnamespace, " + "(%s opcowner) AS rolname " + "FROM pg_opclass", + username_subquery); + else + appendPQExpBuffer(query, "SELECT tableoid, oid, " + "opcamid AS opcmethod, opcname, " + "opcnamespace, " + "(%s opcowner) AS rolname " + "FROM pg_opclass", + username_subquery); res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK); @@ -5866,6 +5928,7 @@ getOpclasses(Archive *fout, int *numOpclasses) i_tableoid = PQfnumber(res, "tableoid"); i_oid = PQfnumber(res, "oid"); + i_opcmethod = PQfnumber(res, "opcmethod"); i_opcname = PQfnumber(res, "opcname"); i_opcnamespace = PQfnumber(res, "opcnamespace"); i_rolname = PQfnumber(res, "rolname"); @@ -5879,6 +5942,7 @@ getOpclasses(Archive *fout, int *numOpclasses) opcinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_opcname)); opcinfo[i].dobj.namespace = findNamespace(atooid(PQgetvalue(res, i, i_opcnamespace))); + opcinfo[i].opcmethod = atooid(PQgetvalue(res, i, i_opcmethod)); opcinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname)); /* Decide whether we want to dump it */ @@ -5916,6 +5980,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies) OpfamilyInfo *opfinfo; int i_tableoid; int i_oid; + int i_opfmethod; int i_opfname; int i_opfnamespace; int i_rolname; @@ -5934,7 +5999,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies) * system-defined opfamilies at dump-out time. */ - appendPQExpBuffer(query, "SELECT tableoid, oid, opfname, " + appendPQExpBuffer(query, "SELECT tableoid, oid, opfmethod, opfname, " "opfnamespace, " "(%s opfowner) AS rolname " "FROM pg_opfamily", @@ -5950,6 +6015,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies) i_tableoid = PQfnumber(res, "tableoid"); i_oid = PQfnumber(res, "oid"); i_opfname = PQfnumber(res, "opfname"); + i_opfmethod = PQfnumber(res, "opfmethod"); i_opfnamespace = PQfnumber(res, "opfnamespace"); i_rolname = PQfnumber(res, "rolname"); @@ -5962,6 +6028,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies) opfinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_opfname)); opfinfo[i].dobj.namespace = findNamespace(atooid(PQgetvalue(res, i, i_opfnamespace))); + opfinfo[i].opfmethod = atooid(PQgetvalue(res, i, i_opfmethod)); opfinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname)); /* Decide whether we want to dump it */ @@ -11652,8 +11719,13 @@ dumpDomain(Archive *fout, const TypeInfo *tyinfo) for (i = 0; i < tyinfo->nDomChecks; i++) { ConstraintInfo *domcheck = &(tyinfo->domChecks[i]); - PQExpBuffer conprefix = createPQExpBuffer(); + PQExpBuffer conprefix; + + /* but only if the constraint itself was dumped here */ + if (domcheck->separate) + continue; + conprefix = createPQExpBuffer(); appendPQExpBuffer(conprefix, "CONSTRAINT %s ON DOMAIN", fmtId(domcheck->dobj.name)); @@ -15788,7 +15860,7 @@ collectSecLabels(Archive *fout, SecLabelItem **items) appendPQExpBufferStr(query, "SELECT label, provider, classoid, objoid, objsubid " - "FROM pg_catalog.pg_seclabel " + "FROM pg_catalog.pg_seclabels " "ORDER BY classoid, objoid, objsubid"); res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK); @@ -17107,7 +17179,17 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo) qindxname); } - appendPQExpBuffer(delq, "DROP INDEX %s;\n", qqindxname); + /* + * If this index is a member of a partitioned index, the backend will + * not allow us to drop it separately, so don't try. It will go away + * automatically when we drop either the index's table or the + * partitioned index. (If, in a selective restore with --clean, we + * drop neither of those, then this index will not be dropped either. + * But that's fine, and even if you think it's not, the backend won't + * let us do differently.) + */ + if (indxinfo->parentidx == 0) + appendPQExpBuffer(delq, "DROP INDEX %s;\n", qqindxname); if (indxinfo->dobj.dump & DUMP_COMPONENT_DEFINITION) ArchiveEntry(fout, indxinfo->dobj.catId, indxinfo->dobj.dumpId, @@ -17161,11 +17243,15 @@ dumpIndexAttach(Archive *fout, const IndexAttachInfo *attachinfo) fmtQualifiedDumpable(attachinfo->partitionIdx)); /* - * There is no point in creating a drop query as the drop is done by - * index drop. (If you think to change this, see also - * _printTocEntry().) Although this object doesn't really have - * ownership as such, set the owner field anyway to ensure that the - * command is run by the correct role at restore time. + * There is no need for a dropStmt since the drop is done implicitly + * when we drop either the index's table or the partitioned index. + * Moreover, since there's no ALTER INDEX DETACH PARTITION command, + * there's no way to do it anyway. (If you think to change this, + * consider also what to do with --if-exists.) + * + * Although this object doesn't really have ownership as such, set the + * owner field anyway to ensure that the command is run by the correct + * role at restore time. */ ArchiveEntry(fout, attachinfo->dobj.catId, attachinfo->dobj.dumpId, ARCHIVE_OPTS(.tag = attachinfo->dobj.name, @@ -17513,6 +17599,22 @@ dumpConstraint(Archive *fout, const ConstraintInfo *coninfo) .section = SECTION_POST_DATA, .createStmt = q->data, .dropStmt = delq->data)); + + if (coninfo->dobj.dump & DUMP_COMPONENT_COMMENT) + { + PQExpBuffer conprefix = createPQExpBuffer(); + char *qtypname = pg_strdup(fmtId(tyinfo->dobj.name)); + + appendPQExpBuffer(conprefix, "CONSTRAINT %s ON DOMAIN", + fmtId(coninfo->dobj.name)); + + dumpComment(fout, conprefix->data, qtypname, + tyinfo->dobj.namespace->dobj.name, + tyinfo->rolname, + coninfo->dobj.catId, 0, coninfo->dobj.dumpId); + destroyPQExpBuffer(conprefix); + free(qtypname); + } } } else @@ -18266,6 +18368,11 @@ dumpEventTrigger(Archive *fout, const EventTriggerInfo *evtinfo) NULL, evtinfo->evtowner, evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId); + if (evtinfo->dobj.dump & DUMP_COMPONENT_SECLABEL) + dumpSecLabel(fout, "EVENT TRIGGER", qevtname, + NULL, evtinfo->evtowner, + evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId); + destroyPQExpBuffer(query); destroyPQExpBuffer(delqry); free(qevtname); diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 832aa86eba1..bcd78414753 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -222,6 +222,8 @@ typedef struct _oprInfo DumpableObject dobj; char *rolname; char oprkind; + Oid oprleft; + Oid oprright; Oid oprcode; } OprInfo; @@ -235,12 +237,14 @@ typedef struct _accessMethodInfo typedef struct _opclassInfo { DumpableObject dobj; + Oid opcmethod; char *rolname; } OpclassInfo; typedef struct _opfamilyInfo { DumpableObject dobj; + Oid opfmethod; char *rolname; } OpfamilyInfo; @@ -248,6 +252,7 @@ typedef struct _collInfo { DumpableObject dobj; char *rolname; + int collencoding; } CollInfo; typedef struct _convInfo @@ -675,6 +680,7 @@ extern TableInfo *findTableByOid(Oid oid); extern TypeInfo *findTypeByOid(Oid oid); extern FuncInfo *findFuncByOid(Oid oid); extern OprInfo *findOprByOid(Oid oid); +extern AccessMethodInfo *findAccessMethodByOid(Oid oid); extern CollInfo *findCollationByOid(Oid oid); extern NamespaceInfo *findNamespaceByOid(Oid oid); extern ExtensionInfo *findExtensionByOid(Oid oid); diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c index 8e6026df67f..998412783b0 100644 --- a/src/bin/pg_dump/pg_dump_sort.c +++ b/src/bin/pg_dump/pg_dump_sort.c @@ -155,6 +155,8 @@ static DumpId postDataBoundId; static int DOTypeNameCompare(const void *p1, const void *p2); +static int pgTypeNameCompare(Oid typid1, Oid typid2); +static int accessMethodNameCompare(Oid am1, Oid am2); static bool TopoSort(DumpableObject **objs, int numObjs, DumpableObject **ordering, @@ -222,12 +224,39 @@ DOTypeNameCompare(const void *p1, const void *p2) else if (obj2->namespace) return 1; - /* Sort by name */ + /* + * Sort by name. With a few exceptions, names here are single catalog + * columns. To get a fuller picture, grep pg_dump.c for "dobj.name = ". + * Names here don't match "Name:" in plain format output, which is a + * _tocEntry.tag. For example, DumpableObject.name of a constraint is + * pg_constraint.conname, but _tocEntry.tag of a constraint is relname and + * conname joined with a space. + */ cmpval = strcmp(obj1->name, obj2->name); if (cmpval != 0) return cmpval; - /* To have a stable sort order, break ties for some object types */ + /* + * Sort by type. This helps types that share a type priority without + * sharing a unique name constraint, e.g. opclass and opfamily. + */ + cmpval = obj1->objType - obj2->objType; + if (cmpval != 0) + return cmpval; + + /* + * To have a stable sort order, break ties for some object types. Most + * catalogs have a natural key, e.g. pg_proc_proname_args_nsp_index. Where + * the above "namespace" and "name" comparisons don't cover all natural + * key columns, compare the rest here. + * + * The natural key usually refers to other catalogs by surrogate keys. + * Hence, this translates each of those references to the natural key of + * the referenced catalog. That may descend through multiple levels of + * catalog references. For example, to sort by pg_proc.proargtypes, + * descend to each pg_type and then further to its pg_namespace, for an + * overall sort by (nspname, typname). + */ if (obj1->objType == DO_FUNC || obj1->objType == DO_AGG) { FuncInfo *fobj1 = *(FuncInfo *const *) p1; @@ -240,22 +269,10 @@ DOTypeNameCompare(const void *p1, const void *p2) return cmpval; for (i = 0; i < fobj1->nargs; i++) { - TypeInfo *argtype1 = findTypeByOid(fobj1->argtypes[i]); - TypeInfo *argtype2 = findTypeByOid(fobj2->argtypes[i]); - - if (argtype1 && argtype2) - { - if (argtype1->dobj.namespace && argtype2->dobj.namespace) - { - cmpval = strcmp(argtype1->dobj.namespace->dobj.name, - argtype2->dobj.namespace->dobj.name); - if (cmpval != 0) - return cmpval; - } - cmpval = strcmp(argtype1->dobj.name, argtype2->dobj.name); - if (cmpval != 0) - return cmpval; - } + cmpval = pgTypeNameCompare(fobj1->argtypes[i], + fobj2->argtypes[i]); + if (cmpval != 0) + return cmpval; } } else if (obj1->objType == DO_OPERATOR) @@ -267,6 +284,57 @@ DOTypeNameCompare(const void *p1, const void *p2) cmpval = (oobj2->oprkind - oobj1->oprkind); if (cmpval != 0) return cmpval; + /* Within an oprkind, sort by argument type names */ + cmpval = pgTypeNameCompare(oobj1->oprleft, oobj2->oprleft); + if (cmpval != 0) + return cmpval; + cmpval = pgTypeNameCompare(oobj1->oprright, oobj2->oprright); + if (cmpval != 0) + return cmpval; + } + else if (obj1->objType == DO_OPCLASS) + { + OpclassInfo *opcobj1 = *(OpclassInfo *const *) p1; + OpclassInfo *opcobj2 = *(OpclassInfo *const *) p2; + + /* Sort by access method name, per pg_opclass_am_name_nsp_index */ + cmpval = accessMethodNameCompare(opcobj1->opcmethod, + opcobj2->opcmethod); + if (cmpval != 0) + return cmpval; + } + else if (obj1->objType == DO_OPFAMILY) + { + OpfamilyInfo *opfobj1 = *(OpfamilyInfo *const *) p1; + OpfamilyInfo *opfobj2 = *(OpfamilyInfo *const *) p2; + + /* Sort by access method name, per pg_opfamily_am_name_nsp_index */ + cmpval = accessMethodNameCompare(opfobj1->opfmethod, + opfobj2->opfmethod); + if (cmpval != 0) + return cmpval; + } + else if (obj1->objType == DO_COLLATION) + { + CollInfo *cobj1 = *(CollInfo *const *) p1; + CollInfo *cobj2 = *(CollInfo *const *) p2; + + /* + * Sort by encoding, per pg_collation_name_enc_nsp_index. Technically, + * this is not necessary, because wherever this changes dump order, + * restoring the dump fails anyway. CREATE COLLATION can't create a + * tie for this to break, because it imposes restrictions to make + * (nspname, collname) uniquely identify a collation within a given + * DatabaseEncoding. While pg_import_system_collations() can create a + * tie, pg_dump+restore fails after + * pg_import_system_collations('my_schema') does so. However, there's + * little to gain by ignoring one natural key column on the basis of + * those limitations elsewhere, so respect the full natural key like + * we do for other object types. + */ + cmpval = cobj1->collencoding - cobj2->collencoding; + if (cmpval != 0) + return cmpval; } else if (obj1->objType == DO_ATTRDEF) { @@ -289,6 +357,17 @@ DOTypeNameCompare(const void *p1, const void *p2) if (cmpval != 0) return cmpval; } + else if (obj1->objType == DO_RULE) + { + RuleInfo *robj1 = *(RuleInfo *const *) p1; + RuleInfo *robj2 = *(RuleInfo *const *) p2; + + /* Sort by table name (table namespace was considered already) */ + cmpval = strcmp(robj1->ruletable->dobj.name, + robj2->ruletable->dobj.name); + if (cmpval != 0) + return cmpval; + } else if (obj1->objType == DO_TRIGGER) { TriggerInfo *tobj1 = *(TriggerInfo *const *) p1; @@ -300,11 +379,145 @@ DOTypeNameCompare(const void *p1, const void *p2) if (cmpval != 0) return cmpval; } + else if (obj1->objType == DO_CONSTRAINT || + obj1->objType == DO_FK_CONSTRAINT) + { + ConstraintInfo *robj1 = *(ConstraintInfo *const *) p1; + ConstraintInfo *robj2 = *(ConstraintInfo *const *) p2; - /* Usually shouldn't get here, but if we do, sort by OID */ + /* + * Sort domain constraints before table constraints, for consistency + * with our decision to sort CREATE DOMAIN before CREATE TABLE. + */ + if (robj1->condomain) + { + if (robj2->condomain) + { + /* Sort by domain name (domain namespace was considered) */ + cmpval = strcmp(robj1->condomain->dobj.name, + robj2->condomain->dobj.name); + if (cmpval != 0) + return cmpval; + } + else + return PRIO_TYPE - PRIO_TABLE; + } + else if (robj2->condomain) + return PRIO_TABLE - PRIO_TYPE; + else + { + /* Sort by table name (table namespace was considered already) */ + cmpval = strcmp(robj1->contable->dobj.name, + robj2->contable->dobj.name); + if (cmpval != 0) + return cmpval; + } + } + else if (obj1->objType == DO_DEFAULT_ACL) + { + DefaultACLInfo *daclobj1 = *(DefaultACLInfo *const *) p1; + DefaultACLInfo *daclobj2 = *(DefaultACLInfo *const *) p2; + + /* + * Sort by defaclrole, per pg_default_acl_role_nsp_obj_index. The + * (namespace, name) match (defaclnamespace, defaclobjtype). + */ + cmpval = strcmp(daclobj1->defaclrole, daclobj2->defaclrole); + if (cmpval != 0) + return cmpval; + } + else if (obj1->objType == DO_PUBLICATION_REL) + { + PublicationRelInfo *probj1 = *(PublicationRelInfo *const *) p1; + PublicationRelInfo *probj2 = *(PublicationRelInfo *const *) p2; + + /* Sort by publication name, since (namespace, name) match the rel */ + cmpval = strcmp(probj1->publication->dobj.name, + probj2->publication->dobj.name); + if (cmpval != 0) + return cmpval; + } + + /* + * Shouldn't get here except after catalog corruption, but if we do, sort + * by OID. This may make logically-identical databases differ in the + * order of objects in dump output. Users will get spurious schema diffs. + * Expect flaky failures of 002_pg_upgrade.pl test 'dump outputs from + * original and restored regression databases match' if the regression + * database contains objects allowing that test to reach here. That's a + * consequence of the test using "pg_restore -j", which doesn't fully + * constrain OID assignment order. + */ return oidcmp(obj1->catId.oid, obj2->catId.oid); } +/* Compare two OID-identified pg_type values by nspname, then by typname. */ +static int +pgTypeNameCompare(Oid typid1, Oid typid2) +{ + TypeInfo *typobj1; + TypeInfo *typobj2; + int cmpval; + + if (typid1 == typid2) + return 0; + + typobj1 = findTypeByOid(typid1); + typobj2 = findTypeByOid(typid2); + + if (!typobj1 || !typobj2) + { + /* + * getTypes() didn't find some OID. Assume catalog corruption, e.g. + * an oprright value without the corresponding OID in a pg_type row. + * Report as "equal", so the caller uses the next available basis for + * comparison, e.g. the next function argument. + * + * Unary operators have InvalidOid in oprleft (if oprkind='r') or in + * oprright (if oprkind='l'). Caller already sorted by oprkind, + * calling us only for like-kind operators. Hence, "typid1 == typid2" + * took care of InvalidOid. (v14 removed postfix operator support. + * Hence, when dumping from v14+, only oprleft can be InvalidOid.) + */ + Assert(false); + return 0; + } + + if (!typobj1->dobj.namespace || !typobj2->dobj.namespace) + Assert(false); /* catalog corruption */ + else + { + cmpval = strcmp(typobj1->dobj.namespace->dobj.name, + typobj2->dobj.namespace->dobj.name); + if (cmpval != 0) + return cmpval; + } + return strcmp(typobj1->dobj.name, typobj2->dobj.name); +} + +/* Compare two OID-identified pg_am values by amname. */ +static int +accessMethodNameCompare(Oid am1, Oid am2) +{ + AccessMethodInfo *amobj1; + AccessMethodInfo *amobj2; + + if (am1 == am2) + return 0; + + amobj1 = findAccessMethodByOid(am1); + amobj2 = findAccessMethodByOid(am2); + + if (!amobj1 || !amobj2) + { + /* catalog corruption: handle like pgTypeNameCompare() does */ + Assert(false); + return 0; + } + + return strcmp(amobj1->dobj.name, amobj2->dobj.name); +} + /* * Sort the given objects into a safe dump order using dependency diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index e87a6c660d6..b08db9741c2 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -97,6 +97,8 @@ static char *filename = NULL; static SimpleStringList database_exclude_patterns = {NULL, NULL}; static SimpleStringList database_exclude_names = {NULL, NULL}; +static char *restrict_key; + #define exit_nicely(code) exit(code) int @@ -152,6 +154,7 @@ main(int argc, char *argv[]) {"no-unlogged-table-data", no_argument, &no_unlogged_table_data, 1}, {"on-conflict-do-nothing", no_argument, &on_conflict_do_nothing, 1}, {"rows-per-insert", required_argument, NULL, 7}, + {"restrict-key", required_argument, NULL, 9}, {NULL, 0, NULL, 0} }; @@ -340,6 +343,12 @@ main(int argc, char *argv[]) appendShellString(pgdumpopts, optarg); break; + case 9: + restrict_key = pg_strdup(optarg); + appendPQExpBufferStr(pgdumpopts, " --restrict-key "); + appendShellString(pgdumpopts, optarg); + break; + default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit_nicely(1); @@ -440,6 +449,22 @@ main(int argc, char *argv[]) if (on_conflict_do_nothing) appendPQExpBufferStr(pgdumpopts, " --on-conflict-do-nothing"); + /* + * If you don't provide a restrict key, one will be appointed for you. + */ + if (!restrict_key) + restrict_key = generate_restrict_key(); + if (!restrict_key) + { + pg_log_error("could not generate restrict key"); + exit_nicely(1); + } + if (!valid_restrict_key(restrict_key)) + { + pg_log_error("invalid restrict key"); + exit_nicely(1); + } + /* * If there was a database specified on the command line, use that, * otherwise try to connect to database "postgres", and failing that @@ -544,6 +569,16 @@ main(int argc, char *argv[]) if (verbose) dumpTimestamp("Started on"); + /* + * 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. + */ + fprintf(OPF, "\\restrict %s\n\n", restrict_key); + /* * We used to emit \connect postgres here, but that served no purpose * other than to break things for installations without a postgres @@ -606,6 +641,12 @@ main(int argc, char *argv[]) dumpTablespaces(conn); } + /* + * Exit restricted mode just before dumping the databases. pg_dump will + * handle entering restricted mode again as appropriate. + */ + fprintf(OPF, "\\unrestrict %s\n\n", restrict_key); + if (!globals_only && !roles_only && !tablespaces_only) dumpDatabases(conn); @@ -672,6 +713,7 @@ help(void) 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(_(" --use-set-session-authorization\n" " use SET SESSION AUTHORIZATION commands instead of\n" @@ -1020,10 +1062,12 @@ dumpRoleMembership(PGconn *conn) PGresult *res; int i; - printfPQExpBuffer(buf, "SELECT ur.rolname AS roleid, " + printfPQExpBuffer(buf, "SELECT ur.rolname AS role, " "um.rolname AS member, " "a.admin_option, " - "ug.rolname AS grantor " + "ug.rolname AS grantor, " + "a.roleid AS roleid, " + "a.member AS memberid " "FROM pg_auth_members a " "LEFT JOIN %s ur on ur.oid = a.roleid " "LEFT JOIN %s um on um.oid = a.member " @@ -1037,13 +1081,33 @@ dumpRoleMembership(PGconn *conn) for (i = 0; i < PQntuples(res); i++) { - char *roleid = PQgetvalue(res, i, 0); + char *role = PQgetvalue(res, i, 0); char *member = PQgetvalue(res, i, 1); - char *option = PQgetvalue(res, i, 2); + char *admin_option = PQgetvalue(res, i, 2); + + /* + * Due to race conditions, the role and/or member could have been + * dropped. If we find such cases, print a warning and skip the + * entry. + */ + if (PQgetisnull(res, i, 0)) + { + /* translator: %s represents a numeric role OID */ + pg_log_warning("found orphaned pg_auth_members entry for role %s", + PQgetvalue(res, i, 4)); + continue; + } + if (PQgetisnull(res, i, 1)) + { + /* translator: %s represents a numeric role OID */ + pg_log_warning("found orphaned pg_auth_members entry for role %s", + PQgetvalue(res, i, 5)); + continue; + } - fprintf(OPF, "GRANT %s", fmtId(roleid)); + fprintf(OPF, "GRANT %s", fmtId(role)); fprintf(OPF, " TO %s", fmtId(member)); - if (*option == 't') + if (*admin_option == 't') fprintf(OPF, " WITH ADMIN OPTION"); /* @@ -1404,6 +1468,8 @@ dumpUserConfig(PGconn *conn, const char *username) if (PQntuples(res) == 1 && !PQgetisnull(res, 0, 0)) { + char *sanitized; + /* comment at section start, only if needed */ if (first) { @@ -1411,7 +1477,9 @@ dumpUserConfig(PGconn *conn, const char *username) first = false; } - fprintf(OPF, "--\n-- User Config \"%s\"\n--\n\n", username); + sanitized = sanitize_line(username, true); + fprintf(OPF, "--\n-- User Config \"%s\"\n--\n\n", sanitized); + free(sanitized); resetPQExpBuffer(buf); makeAlterConfigCommand(conn, PQgetvalue(res, 0, 0), "ROLE", username, NULL, NULL, @@ -1516,6 +1584,7 @@ dumpDatabases(PGconn *conn) for (i = 0; i < PQntuples(res); i++) { char *dbname = PQgetvalue(res, i, 0); + char *sanitized; const char *create_opts; int ret; @@ -1532,7 +1601,9 @@ dumpDatabases(PGconn *conn) pg_log_info("dumping database \"%s\"", dbname); - fprintf(OPF, "--\n-- Database \"%s\" dump\n--\n\n", dbname); + sanitized = sanitize_line(dbname, true); + fprintf(OPF, "--\n-- Database \"%s\" dump\n--\n\n", sanitized); + free(sanitized); /* * We assume that "template1", "ivorysql" and "postgres" already exist in the diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index 589b4aed539..b421c405147 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -120,6 +120,7 @@ main(int argc, char **argv) {"no-publications", no_argument, &no_publications, 1}, {"no-security-labels", no_argument, &no_security_labels, 1}, {"no-subscriptions", no_argument, &no_subscriptions, 1}, + {"restrict-key", required_argument, NULL, 6}, {NULL, 0, NULL, 0} }; @@ -280,6 +281,10 @@ main(int argc, char **argv) set_dump_section(optarg, &(opts->dumpSections)); break; + case 6: + opts->restrict_key = pg_strdup(optarg); + break; + default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit_nicely(1); @@ -319,8 +324,33 @@ main(int argc, char **argv) progname); exit_nicely(1); } + + if (opts->restrict_key) + { + pg_log_error("options -d/--dbname and --restrict-key cannot be used together"); + exit_nicely(1); + } + opts->useDB = 1; } + else + { + /* + * If you don't provide a restrict key, one will be appointed for you. + */ + if (!opts->restrict_key) + opts->restrict_key = generate_restrict_key(); + if (!opts->restrict_key) + { + pg_log_error("could not generate restrict key"); + exit_nicely(1); + } + if (!valid_restrict_key(opts->restrict_key)) + { + pg_log_error("invalid restrict key"); + exit_nicely(1); + } + } if (opts->dataOnly && opts->schemaOnly) { @@ -500,6 +530,7 @@ usage(const char *progname) printf(_(" --no-security-labels do not restore security labels\n")); printf(_(" --no-subscriptions do not restore subscriptions\n")); printf(_(" --no-tablespaces do not restore tablespace assignments\n")); + printf(_(" --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n")); printf(_(" --section=SECTION restore named section (pre-data, data, or post-data)\n")); printf(_(" --strict-names require table and/or schema include patterns to\n" " match at least one entity each\n")); diff --git a/src/bin/pg_dump/po/de.po b/src/bin/pg_dump/po/de.po index e50cbfa9caf..9dcb572000b 100644 --- a/src/bin/pg_dump/po/de.po +++ b/src/bin/pg_dump/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-05 06:51+0000\n" +"POT-Creation-Date: 2025-11-07 07:22+0000\n" "PO-Revision-Date: 2022-05-17 16:42+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -112,222 +112,222 @@ msgstr "Kindprozess wurde von Signal %d beendet: %s" msgid "child process exited with unrecognized status %d" msgstr "Kindprozess hat mit unbekanntem Status %d beendet" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "lese Erweiterungen" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "identifiziere Erweiterungselemente" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "lese Schemas" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "lese benutzerdefinierte Tabellen" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "lese benutzerdefinierte Funktionen" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "lese benutzerdefinierte Typen" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "lese prozedurale Sprachen" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "lese benutzerdefinierte Aggregatfunktionen" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "lese benutzerdefinierte Operatoren" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "lese benutzerdefinierte Zugriffsmethoden" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "lese benutzerdefinierte Operatorklassen" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "lese benutzerdefinierte Operatorfamilien" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "lese benutzerdefinierte Textsuche-Parser" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "lese benutzerdefinierte Textsuche-Templates" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "lese benutzerdefinierte Textsuchewörterbücher" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "lese benutzerdefinierte Textsuchekonfigurationen" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "lese benutzerdefinierte Fremddaten-Wrapper" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "lese benutzerdefinierte Fremdserver" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "lese Vorgabeprivilegien" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "lese benutzerdefinierte Sortierfolgen" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "lese benutzerdefinierte Konversionen" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "lese Typumwandlungen" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "lese Transformationen" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "lese Tabellenvererbungsinformationen" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "lese Ereignistrigger" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "finde Erweiterungstabellen" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "finde Vererbungsbeziehungen" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "lese Spalteninfo für interessante Tabellen" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "markiere vererbte Spalten in abgeleiteten Tabellen" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "lese Partitionierungsdaten" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "lese Indexe" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "markiere Indexe in partitionierten Tabellen" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "lese erweiterte Statistiken" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "lese Constraints" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "lese Trigger" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "lese Umschreiberegeln" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "lese Policies" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "lese Publikationen" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "lese Publikationsmitgliedschaft" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "lese Subskriptionen" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "ungültige Anzahl Eltern %d für Tabelle »%s«" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "Sanity-Check fehlgeschlagen, Eltern-OID %u von Tabelle »%s« (OID %u) nicht gefunden" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "konnte numerisches Array »%s« nicht parsen: zu viele Zahlen" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "konnte numerisches Array »%s« nicht parsen: ungültiges Zeichen in Zahl" @@ -458,7 +458,7 @@ msgstr "pgpipe: konnte Socket nicht verbinden: Fehlercode %d" msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: konnte Verbindung nicht annehmen: Fehlercode %d" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1629 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "konnte Ausgabedatei nicht schließen: %m" @@ -503,385 +503,385 @@ msgstr "direkte Datenbankverbindungen sind in Archiven vor Version 1.3 nicht unt msgid "implied data-only restore" msgstr "implizit werden nur Daten wiederhergestellt" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "entferne %s %s" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "konnte nicht bestimmen, wo IF EXISTS in die Anweisung »%s« eingefügt werden soll" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "Warnung aus der ursprünglichen Ausgabedatei: %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "erstelle %s »%s.%s«" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "erstelle %s »%s«" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "verbinde mit neuer Datenbank »%s«" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "verarbeite %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "verarbeite Daten für Tabelle »%s.%s«" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "führe %s %s aus" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "schalte Trigger für %s aus" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "schalte Trigger für %s ein" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "interner Fehler -- WriteData kann nicht außerhalb des Kontexts einer DataDumper-Routine aufgerufen werden" -#: pg_backup_archiver.c:1276 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "Large-Object-Ausgabe im gewählten Format nicht unterstützt" -#: pg_backup_archiver.c:1334 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "%d Large Object wiederhergestellt" msgstr[1] "%d Large Objects wiederhergestellt" -#: pg_backup_archiver.c:1355 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "Wiederherstellung von Large Object mit OID %u" -#: pg_backup_archiver.c:1367 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "konnte Large Object %u nicht erstellen: %s" -#: pg_backup_archiver.c:1372 pg_dump.c:3768 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "konnte Large Object %u nicht öffnen: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "konnte Inhaltsverzeichnisdatei »%s« nicht öffnen: %m" -#: pg_backup_archiver.c:1456 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "Zeile ignoriert: %s" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "konnte Eintrag für ID %d nicht finden" -#: pg_backup_archiver.c:1486 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "konnte Inhaltsverzeichnisdatei nicht schließen: %m" -#: pg_backup_archiver.c:1600 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "konnte Ausgabedatei »%s« nicht öffnen: %m" -#: pg_backup_archiver.c:1602 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "konnte Ausgabedatei nicht öffnen: %m" -#: pg_backup_archiver.c:1696 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "%zu Byte Large-Object-Daten geschrieben (Ergebnis = %d)" msgstr[1] "%zu Bytes Large-Object-Daten geschrieben (Ergebnis = %d)" -#: pg_backup_archiver.c:1702 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "konnte Large Object nicht schreiben: %s" -#: pg_backup_archiver.c:1792 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "in Phase INITIALIZING:" -#: pg_backup_archiver.c:1797 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "in Phase PROCESSING TOC:" -#: pg_backup_archiver.c:1802 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "in Phase FINALIZING:" -#: pg_backup_archiver.c:1807 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "in Inhaltsverzeichniseintrag %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1883 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "ungültige DumpId" -#: pg_backup_archiver.c:1904 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "ungültige Tabellen-DumpId für »TABLE DATA«-Eintrag" -#: pg_backup_archiver.c:1996 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "unerwartete Datenoffsetmarkierung %d" -#: pg_backup_archiver.c:2009 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "Dateioffset in Dumpdatei ist zu groß" -#: pg_backup_archiver.c:2147 pg_backup_archiver.c:2157 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "Verzeichnisname zu lang: »%s«" -#: pg_backup_archiver.c:2165 +#: pg_backup_archiver.c:2187 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "Verzeichnis »%s« scheint kein gültiges Archiv zu sein (»toc.dat« existiert nicht)" -#: pg_backup_archiver.c:2173 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "konnte Eingabedatei »%s« nicht öffnen: %m" -#: pg_backup_archiver.c:2180 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "konnte Eingabedatei nicht öffnen: %m" -#: pg_backup_archiver.c:2186 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "konnte Eingabedatei nicht lesen: %m" -#: pg_backup_archiver.c:2188 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "Eingabedatei ist zu kurz (gelesen: %lu, erwartet: 5)" -#: pg_backup_archiver.c:2220 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "Eingabedatei ist anscheinend ein Dump im Textformat. Bitte verwenden Sie psql." -#: pg_backup_archiver.c:2226 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "Eingabedatei scheint kein gültiges Archiv zu sein (zu kurz?)" -#: pg_backup_archiver.c:2232 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "Eingabedatei scheint kein gültiges Archiv zu sein" -#: pg_backup_archiver.c:2241 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "konnte Eingabedatei nicht schließen: %m" -#: pg_backup_archiver.c:2358 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "nicht erkanntes Dateiformat »%d«" -#: pg_backup_archiver.c:2440 pg_backup_archiver.c:4468 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4514 #, c-format msgid "finished item %d %s %s" msgstr "Element %d %s %s abgeschlossen" -#: pg_backup_archiver.c:2444 pg_backup_archiver.c:4481 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4527 #, c-format msgid "worker process failed: exit code %d" msgstr "Arbeitsprozess fehlgeschlagen: Code %d" -#: pg_backup_archiver.c:2564 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID %d des Eintrags außerhalb des gültigen Bereichs -- vielleicht ein verfälschtes Inhaltsverzeichnis" -#: pg_backup_archiver.c:2631 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "Wiederherstellung von Tabellen mit WITH OIDS wird nicht mehr unterstützt" -#: pg_backup_archiver.c:2713 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "nicht erkannte Kodierung »%s«" -#: pg_backup_archiver.c:2718 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "ungültiger ENCODING-Eintrag: %s" -#: pg_backup_archiver.c:2736 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "ungültiger STDSTRINGS-Eintrag: %s" -#: pg_backup_archiver.c:2761 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "Schema »%s« nicht gefunden" -#: pg_backup_archiver.c:2768 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "Tabelle »%s« nicht gefunden" -#: pg_backup_archiver.c:2775 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "Index »%s« nicht gefunden" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "Funktion »%s« nicht gefunden" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "Trigger »%s« nicht gefunden" -#: pg_backup_archiver.c:3185 +#: pg_backup_archiver.c:3257 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "konnte Sitzungsbenutzer nicht auf »%s« setzen: %s" -#: pg_backup_archiver.c:3317 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "konnte search_path nicht auf »%s« setzen: %s" -#: pg_backup_archiver.c:3379 +#: pg_backup_archiver.c:3461 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "konnte default_tablespace nicht auf »%s« setzen: %s" -#: pg_backup_archiver.c:3424 +#: pg_backup_archiver.c:3506 #, c-format msgid "could not set default_table_access_method: %s" msgstr "konnte default_table_access_method nicht setzen: %s" -#: pg_backup_archiver.c:3516 pg_backup_archiver.c:3674 +#: pg_backup_archiver.c:3598 pg_backup_archiver.c:3756 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "kann Eigentümer für Objekttyp »%s« nicht setzen" -#: pg_backup_archiver.c:3777 +#: pg_backup_archiver.c:3823 #, c-format msgid "did not find magic string in file header" msgstr "magische Zeichenkette im Dateikopf nicht gefunden" -#: pg_backup_archiver.c:3791 +#: pg_backup_archiver.c:3837 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "nicht unterstützte Version (%d.%d) im Dateikopf" -#: pg_backup_archiver.c:3796 +#: pg_backup_archiver.c:3842 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "Prüfung der Integer-Größe (%lu) fehlgeschlagen" -#: pg_backup_archiver.c:3800 +#: pg_backup_archiver.c:3846 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "Archiv wurde auf einer Maschine mit größeren Integers erstellt; einige Operationen könnten fehlschlagen" -#: pg_backup_archiver.c:3810 +#: pg_backup_archiver.c:3856 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "erwartetes Format (%d) ist nicht das gleiche wie das in der Datei gefundene (%d)" -#: pg_backup_archiver.c:3825 +#: pg_backup_archiver.c:3871 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "Archiv ist komprimiert, aber diese Installation unterstützt keine Komprimierung -- keine Daten verfügbar" -#: pg_backup_archiver.c:3859 +#: pg_backup_archiver.c:3905 #, c-format msgid "invalid creation date in header" msgstr "ungültiges Erstellungsdatum im Kopf" -#: pg_backup_archiver.c:3993 +#: pg_backup_archiver.c:4039 #, c-format msgid "processing item %d %s %s" msgstr "verarbeite Element %d %s %s" -#: pg_backup_archiver.c:4072 +#: pg_backup_archiver.c:4118 #, c-format msgid "entering main parallel loop" msgstr "Eintritt in Hauptparallelschleife" -#: pg_backup_archiver.c:4083 +#: pg_backup_archiver.c:4129 #, c-format msgid "skipping item %d %s %s" msgstr "Element %d %s %s wird übersprungen" -#: pg_backup_archiver.c:4092 +#: pg_backup_archiver.c:4138 #, c-format msgid "launching item %d %s %s" msgstr "starte Element %d %s %s" -#: pg_backup_archiver.c:4146 +#: pg_backup_archiver.c:4192 #, c-format msgid "finished main parallel loop" msgstr "Hauptparallelschleife beendet" -#: pg_backup_archiver.c:4182 +#: pg_backup_archiver.c:4228 #, c-format msgid "processing missed item %d %s %s" msgstr "verarbeite verpasstes Element %d %s %s" -#: pg_backup_archiver.c:4787 +#: pg_backup_archiver.c:4833 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "Tabelle »%s« konnte nicht erzeugt werden, ihre Daten werden nicht wiederhergestellt werden" @@ -973,12 +973,12 @@ msgstr "Kompressor ist aktiv" msgid "could not get server_version from libpq" msgstr "konnte server_version nicht von libpq ermitteln" -#: pg_backup_db.c:53 pg_dumpall.c:1837 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "Version des Servers: %s; Version von %s: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1839 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "Abbruch wegen unpassender Serverversion" @@ -988,7 +988,7 @@ msgstr "Abbruch wegen unpassender Serverversion" msgid "already connected to a database" msgstr "bereits mit einer Datenbank verbunden" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1666 pg_dumpall.c:1777 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "Passwort: " @@ -1002,17 +1002,17 @@ msgstr "konnte nicht mit der Datenbank verbinden" msgid "reconnection failed: %s" msgstr "Wiederverbindung fehlgeschlagen: %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1697 pg_dumpall.c:1787 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1900 pg_dumpall.c:1923 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "Anfrage fehlgeschlagen: %s" -#: pg_backup_db.c:278 pg_dumpall.c:1901 pg_dumpall.c:1924 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "Anfrage war: %s" @@ -1048,7 +1048,7 @@ msgstr "Fehler in PQputCopyEnd: %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY fehlgeschlagen für Tabelle »%s«: %s" -#: pg_backup_db.c:525 pg_dump.c:2131 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "unerwartete zusätzliche Ergebnisse während COPY von Tabelle »%s«" @@ -1234,10 +1234,10 @@ msgstr "beschädigter Tar-Kopf in %s gefunden (%d erwartet, %d berechnet), Datei msgid "unrecognized section name: \"%s\"" msgstr "unbekannter Abschnittsname: »%s«" -#: pg_backup_utils.c:55 pg_dump.c:626 pg_dump.c:643 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" @@ -1247,72 +1247,87 @@ msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" msgid "out of on_exit_nicely slots" msgstr "on_exit_nicely-Slots aufgebraucht" -#: pg_dump.c:552 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "Komprimierungsniveau muss im Bereich 0..9 sein" -#: pg_dump.c:590 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits muss im Bereich -15..3 sein" -#: pg_dump.c:613 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "Zeilen-pro-Insert muss im Bereich %d..%d sein" -#: pg_dump.c:641 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" -#: pg_dump.c:662 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "Optionen -s/--schema-only und -a/--data-only können nicht zusammen verwendet werden" -#: pg_dump.c:667 +#: pg_dump.c:673 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "Optionen -s/--schema-only und --include-foreign-data können nicht zusammen verwendet werden" -#: pg_dump.c:670 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "Option --include-foreign-data wird nicht mit paralleler Sicherung unterstützt" -#: pg_dump.c:674 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "Optionen -c/--clean und -a/--data-only können nicht zusammen verwendet werden" -#: pg_dump.c:679 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "Option --if-exists benötigt Option -c/--clean" -#: pg_dump.c:686 +#: pg_dump.c:692 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "Option --on-conflict-do-nothing benötigt Option --inserts, --rows-per-insert oder --column-inserts" -#: pg_dump.c:708 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "konnte Restrict-Schlüssel nicht erzeugen" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "ungültiger Restrict-Schlüssel" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "Option --restrict-key kann nur mit --format=plain verwendet werden" + +#: pg_dump.c:728 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "Komprimierung ist in dieser Installation nicht verfügbar -- Archiv wird nicht komprimiert" -#: pg_dump.c:729 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "ungültige Anzahl paralleler Jobs" -#: pg_dump.c:733 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "parallele Sicherung wird nur vom Ausgabeformat »Verzeichnis« unterstützt" -#: pg_dump.c:788 +#: pg_dump.c:808 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1323,32 +1338,32 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen." -#: pg_dump.c:794 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Exportierte Snapshots werden in dieser Serverversion nicht unterstützt." -#: pg_dump.c:806 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "letzte eingebaute OID ist %u" -#: pg_dump.c:815 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "keine passenden Schemas gefunden" -#: pg_dump.c:829 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "keine passenden Tabellen gefunden" -#: pg_dump.c:851 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "keine passenden Erweiterungen gefunden" -#: pg_dump.c:1021 +#: pg_dump.c:1042 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1357,17 +1372,17 @@ msgstr "" "%s gibt eine Datenbank als Textdatei oder in anderen Formaten aus.\n" "\n" -#: pg_dump.c:1022 pg_dumpall.c:622 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" -#: pg_dump.c:1023 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_dump.c:1025 pg_dumpall.c:625 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "" "\n" @@ -1376,12 +1391,12 @@ msgstr "" "\n" "Allgemeine Optionen:\n" -#: pg_dump.c:1026 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei oder des -verzeichnisses\n" -#: pg_dump.c:1027 +#: pg_dump.c:1048 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1390,44 +1405,44 @@ msgstr "" " -F, --format=c|d|t|p Ausgabeformat (custom, d=Verzeichnis, tar,\n" " plain text)\n" -#: pg_dump.c:1029 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM so viele parallele Jobs zur Sicherung verwenden\n" -#: pg_dump.c:1030 pg_dumpall.c:627 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_dump.c:1031 pg_dumpall.c:628 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_dump.c:1032 +#: pg_dump.c:1053 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 Komprimierungsniveau für komprimierte Formate\n" -#: pg_dump.c:1033 pg_dumpall.c:629 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=ZEIT Abbruch nach ZEIT Warten auf Tabellensperre\n" -#: pg_dump.c:1034 pg_dumpall.c:656 +#: pg_dump.c:1055 pg_dumpall.c:698 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr "" " --no-sync nicht warten, bis Änderungen sicher auf\n" " Festplatte geschrieben sind\n" -#: pg_dump.c:1035 pg_dumpall.c:630 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_dump.c:1037 pg_dumpall.c:631 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "" "\n" @@ -1436,54 +1451,54 @@ msgstr "" "\n" "Optionen die den Inhalt der Ausgabe kontrollieren:\n" -#: pg_dump.c:1038 pg_dumpall.c:632 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only nur Daten ausgeben, nicht das Schema\n" -#: pg_dump.c:1039 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs Large Objects mit ausgeben\n" -#: pg_dump.c:1040 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs Large Objects nicht mit ausgeben\n" -#: pg_dump.c:1041 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean Datenbankobjekte vor der Wiedererstellung löschen\n" -#: pg_dump.c:1042 +#: pg_dump.c:1063 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create Anweisungen zum Erstellen der Datenbank in\n" " Ausgabe einfügen\n" -#: pg_dump.c:1043 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=MUSTER nur die angegebene(n) Erweiterung(en) ausgeben\n" -#: pg_dump.c:1044 pg_dumpall.c:634 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KODIERUNG Daten in Kodierung KODIERUNG ausgeben\n" -#: pg_dump.c:1045 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MUSTER nur das/die angegebene(n) Schema(s) ausgeben\n" -#: pg_dump.c:1046 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MUSTER das/die angegebene(n) Schema(s) NICHT ausgeben\n" -#: pg_dump.c:1047 +#: pg_dump.c:1068 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1492,58 +1507,58 @@ msgstr "" " -O, --no-owner Wiederherstellung der Objekteigentümerschaft im\n" " »plain text«-Format auslassen\n" -#: pg_dump.c:1049 pg_dumpall.c:638 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only nur das Schema, nicht die Daten, ausgeben\n" -#: pg_dump.c:1050 +#: pg_dump.c:1071 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME Superusername für »plain text«-Format\n" -#: pg_dump.c:1051 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MUSTER nur die angegebene(n) Tabelle(n) ausgeben\n" -#: pg_dump.c:1052 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MUSTER die angegebene(n) Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:1053 pg_dumpall.c:641 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges Zugriffsprivilegien (grant/revoke) nicht ausgeben\n" -#: pg_dump.c:1054 pg_dumpall.c:642 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade wird nur von Upgrade-Programmen verwendet\n" -#: pg_dump.c:1055 pg_dumpall.c:643 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts Daten als INSERT-Anweisungen mit Spaltennamen\n" " ausgeben\n" -#: pg_dump.c:1056 pg_dumpall.c:644 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting Dollar-Quoting abschalten, normales SQL-Quoting\n" " verwenden\n" -#: pg_dump.c:1057 pg_dumpall.c:645 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers Trigger während der Datenwiederherstellung\n" " abschalten\n" -#: pg_dump.c:1058 +#: pg_dump.c:1079 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1552,22 +1567,22 @@ msgstr "" " --enable-row-security Sicherheit auf Zeilenebene einschalten (nur Daten\n" " ausgeben, auf die der Benutzer Zugriff hat)\n" -#: pg_dump.c:1060 +#: pg_dump.c:1081 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MUSTER Daten der angegebenen Tabelle(n) NICHT ausgeben\n" -#: pg_dump.c:1061 pg_dumpall.c:647 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=ZAHL Einstellung für extra_float_digits\n" -#: pg_dump.c:1062 pg_dumpall.c:648 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists IF EXISTS verwenden, wenn Objekte gelöscht werden\n" -#: pg_dump.c:1063 +#: pg_dump.c:1084 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1578,93 +1593,100 @@ msgstr "" " Daten von Fremdtabellen auf Fremdservern, die\n" " mit MUSTER übereinstimmen, mit sichern\n" -#: pg_dump.c:1066 pg_dumpall.c:649 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts Daten als INSERT-Anweisungen statt COPY ausgeben\n" -#: pg_dump.c:1067 pg_dumpall.c:650 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root Partitionen über die Wurzeltabelle laden\n" -#: pg_dump.c:1068 pg_dumpall.c:651 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments Kommentare nicht ausgeben\n" -#: pg_dump.c:1069 pg_dumpall.c:652 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications Publikationen nicht ausgeben\n" -#: pg_dump.c:1070 pg_dumpall.c:654 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels Security-Label-Zuweisungen nicht ausgeben\n" -#: pg_dump.c:1071 pg_dumpall.c:655 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions Subskriptionen nicht ausgeben\n" -#: pg_dump.c:1072 +#: pg_dump.c:1093 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots keine synchronisierten Snapshots in parallelen\n" " Jobs verwenden\n" -#: pg_dump.c:1073 pg_dumpall.c:657 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces Tablespace-Zuordnungen nicht ausgeben\n" -#: pg_dump.c:1074 pg_dumpall.c:658 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression TOAST-Komprimierungsmethoden nicht ausgeben\n" -#: pg_dump.c:1075 pg_dumpall.c:659 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data Daten in ungeloggten Tabellen nicht ausgeben\n" -#: pg_dump.c:1076 pg_dumpall.c:660 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing INSERT-Befehle mit ON CONFLICT DO NOTHING ausgeben\n" -#: pg_dump.c:1077 pg_dumpall.c:661 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers alle Bezeichner in Anführungszeichen, selbst wenn\n" " kein Schlüsselwort\n" -#: pg_dump.c:1078 pg_dumpall.c:662 +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid " --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr "" +" --restrict-key=RESTRICT_KEY angegebene Zeichenkette als Schlüssel für psql\n" +" \\restrict verwenden\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=ANZAHL Anzahl Zeilen pro INSERT; impliziert --inserts\n" -#: pg_dump.c:1079 +#: pg_dump.c:1101 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=ABSCHNITT angegebenen Abschnitt ausgeben (pre-data, data\n" " oder post-data)\n" -#: pg_dump.c:1080 +#: pg_dump.c:1102 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable warten bis der Dump ohne Anomalien laufen kann\n" -#: pg_dump.c:1081 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT angegebenen Snapshot für den Dump verwenden\n" -#: pg_dump.c:1082 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1673,7 +1695,7 @@ msgstr "" " --strict-names Tabellen- oder Schemamuster müssen auf mindestens\n" " je ein Objekt passen\n" -#: pg_dump.c:1084 pg_dumpall.c:663 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1685,7 +1707,7 @@ msgstr "" " OWNER Befehle verwenden, um Eigentümerschaft zu\n" " setzen\n" -#: pg_dump.c:1088 pg_dumpall.c:667 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "" "\n" @@ -1694,42 +1716,42 @@ msgstr "" "\n" "Verbindungsoptionen:\n" -#: pg_dump.c:1089 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME auszugebende Datenbank\n" -#: pg_dump.c:1090 pg_dumpall.c:669 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n" -#: pg_dump.c:1091 pg_dumpall.c:671 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT Portnummer des Datenbankservers\n" -#: pg_dump.c:1092 pg_dumpall.c:672 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME Datenbankbenutzername\n" -#: pg_dump.c:1093 pg_dumpall.c:673 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password niemals nach Passwort fragen\n" -#: pg_dump.c:1094 pg_dumpall.c:674 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password nach Passwort fragen (sollte automatisch geschehen)\n" -#: pg_dump.c:1095 pg_dumpall.c:675 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLLENNAME vor der Ausgabe SET ROLE ausführen\n" -#: pg_dump.c:1097 +#: pg_dump.c:1119 #, c-format msgid "" "\n" @@ -1742,22 +1764,22 @@ msgstr "" "PGDATABASE verwendet.\n" "\n" -#: pg_dump.c:1099 pg_dumpall.c:679 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Berichten Sie Fehler an <%s>.\n" -#: pg_dump.c:1100 pg_dumpall.c:680 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Homepage: <%s>\n" -#: pg_dump.c:1119 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "ungültige Clientkodierung »%s« angegeben" -#: pg_dump.c:1265 +#: pg_dump.c:1295 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1768,553 +1790,553 @@ msgstr "" "Verwenden Sie --no-synchronized-snapshots, wenn Sie keine synchronisierten\n" "Snapshots benötigen." -#: pg_dump.c:1334 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "ungültiges Ausgabeformat »%s« angegeben" -#: pg_dump.c:1375 pg_dump.c:1431 pg_dump.c:1484 pg_dumpall.c:1451 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "falscher qualifizierter Name (zu viele Namensteile): %s" -#: pg_dump.c:1383 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "keine passenden Schemas für Muster »%s« gefunden" -#: pg_dump.c:1436 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "keine passenden Erweiterungen für Muster »%s« gefunden" -#: pg_dump.c:1489 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "keine passenden Fremdserver für Muster »%s« gefunden" -#: pg_dump.c:1552 +#: pg_dump.c:1582 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "falscher Relationsname (zu viele Namensteile): %s" -#: pg_dump.c:1563 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "keine passenden Tabellen für Muster »%s« gefunden" -#: pg_dump.c:1590 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "Sie sind gegenwärtig nicht mit einer Datenbank verbunden." -#: pg_dump.c:1593 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "Verweise auf andere Datenbanken sind nicht implementiert: %s" -#: pg_dump.c:2005 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "gebe Inhalt der Tabelle »%s.%s« aus" -#: pg_dump.c:2112 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Ausgabe des Inhalts der Tabelle »%s« fehlgeschlagen: PQgetCopyData() fehlgeschlagen." -#: pg_dump.c:2113 pg_dump.c:2123 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "Fehlermeldung vom Server: %s" -#: pg_dump.c:2114 pg_dump.c:2124 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "Die Anweisung war: %s" -#: pg_dump.c:2122 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Ausgabe des Inhalts der Tabelle »%s« fehlgeschlagen: PQgetResult() fehlgeschlagen." -#: pg_dump.c:2204 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "falsche Anzahl Felder von Tabelle »%s« erhalten" -#: pg_dump.c:2955 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "sichere Datenbankdefinition" -#: pg_dump.c:3427 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "sichere Kodierung = %s" -#: pg_dump.c:3452 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sichere standard_conforming_strings = %s" -#: pg_dump.c:3491 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "konnte Ergebnis von current_schemas() nicht interpretieren" -#: pg_dump.c:3510 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "sichere search_path = %s" -#: pg_dump.c:3550 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "lese Large Objects" -#: pg_dump.c:3732 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "sichere Large Objects" -#: pg_dump.c:3778 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "Fehler beim Lesen von Large Object %u: %s" -#: pg_dump.c:3882 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "lese Policys für Sicherheit auf Zeilenebene" -#: pg_dump.c:4021 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "unerwarteter Policy-Befehlstyp: %c" -#: pg_dump.c:4175 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "Eigentümer der Publikation »%s« scheint ungültig zu sein" -#: pg_dump.c:4467 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "Subskriptionen werden nicht ausgegeben, weil der aktuelle Benutzer kein Superuser ist" -#: pg_dump.c:4538 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "Eigentümer der Subskription »%s« scheint ungültig zu sein" -#: pg_dump.c:4581 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "konnte subpublications-Array nicht interpretieren" -#: pg_dump.c:4939 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "konnte Erweiterung, zu der %s %s gehört, nicht finden" -#: pg_dump.c:5071 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "Eigentümer des Schemas »%s« scheint ungültig zu sein" -#: pg_dump.c:5094 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "Schema mit OID %u existiert nicht" -#: pg_dump.c:5424 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "Eigentümer des Datentypen »%s« scheint ungültig zu sein" -#: pg_dump.c:5508 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "Eigentümer des Operatoren »%s« scheint ungültig zu sein" -#: pg_dump.c:5807 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "Eigentümer der Operatorklasse »%s« scheint ungültig zu sein" -#: pg_dump.c:5890 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "Eigentümer der Operatorfamilie »%s« scheint ungültig zu sein" -#: pg_dump.c:6058 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "Eigentümer der Aggregatfunktion »%s« scheint ungültig zu sein" -#: pg_dump.c:6317 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "Eigentümer der Funktion »%s« scheint ungültig zu sein" -#: pg_dump.c:7113 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "Eigentümer der Tabelle »%s« scheint ungültig zu sein" -#: pg_dump.c:7155 pg_dump.c:17699 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle mit OID %u von Sequenz mit OID %u nicht gefunden" -#: pg_dump.c:7298 +#: pg_dump.c:7439 #, c-format msgid "failed sanity check, table OID %u appearing in pg_partitioned_table not found" msgstr "Sanity-Check fehlgeschlagen, Tabellen-OID %u, die in pg_partitioned_table erscheint, nicht gefunden" -#: pg_dump.c:7364 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "lese Indexe von Tabelle »%s.%s«" -#: pg_dump.c:7778 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "lese Fremdschlüssel-Constraints von Tabelle »%s.%s«" -#: pg_dump.c:8057 +#: pg_dump.c:8202 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "Sanity-Check fehlgeschlagen, Elterntabelle mit OID %u von pg_rewrite-Eintrag mit OID %u nicht gefunden" -#: pg_dump.c:8141 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "lese Trigger von Tabelle »%s.%s«" -#: pg_dump.c:8323 +#: pg_dump.c:8468 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "Anfrage ergab NULL als Name der Tabelle auf die sich Fremdschlüssel-Trigger »%s« von Tabelle »%s« bezieht (OID der Tabelle: %u)" -#: pg_dump.c:8873 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "finde Spalten und Typen von Tabelle »%s.%s«" -#: pg_dump.c:8997 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "ungültige Spaltennummerierung in Tabelle »%s«" -#: pg_dump.c:9036 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "finde DEFAULT-Ausdrücke von Tabelle »%s.%s«" -#: pg_dump.c:9058 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "ungültiger adnum-Wert %d für Tabelle »%s«" -#: pg_dump.c:9151 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "finde Check-Constraints für Tabelle »%s.%s«" -#: pg_dump.c:9200 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "%d Check-Constraint für Tabelle %s erwartet, aber %d gefunden" msgstr[1] "%d Check-Constraints für Tabelle %s erwartet, aber %d gefunden" -#: pg_dump.c:9204 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Die Systemkataloge sind wahrscheinlich verfälscht.)" -#: pg_dump.c:10806 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype des Datentypen »%s« scheint ungültig zu sein" -#: pg_dump.c:12154 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "unsinniger Wert in proargmodes-Array" -#: pg_dump.c:12456 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "konnte proallargtypes-Array nicht interpretieren" -#: pg_dump.c:12472 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "konnte proargmodes-Array nicht interpretieren" -#: pg_dump.c:12486 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "konnte proargnames-Array nicht interpretieren" -#: pg_dump.c:12496 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "konnte proconfig-Array nicht interpretieren" -#: pg_dump.c:12572 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "ungültiger provolatile-Wert für Funktion »%s«" -#: pg_dump.c:12622 pg_dump.c:14563 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "ungültiger proparallel-Wert für Funktion »%s«" -#: pg_dump.c:12761 pg_dump.c:12867 pg_dump.c:12874 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "konnte Funktionsdefinition für Funktion mit OID %u nicht finden" -#: pg_dump.c:12800 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "unsinniger Wert in Feld pg_cast.castfunc oder pg_cast.castmethod" -#: pg_dump.c:12803 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "unsinniger Wert in Feld pg_cast.castmethod" -#: pg_dump.c:12893 +#: pg_dump.c:13044 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "unsinnige Transformationsdefinition, mindestens eins von trffromsql und trftosql sollte nicht null sein" -#: pg_dump.c:12910 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "unsinniger Wert in Feld pg_transform.trffromsql" -#: pg_dump.c:12931 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "unsinniger Wert in Feld pg_transform.trftosql" -#: pg_dump.c:13082 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "Postfix-Operatoren werden nicht mehr unterstützt (Operator »%s«)" -#: pg_dump.c:13252 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "konnte Operator mit OID %s nicht finden" -#: pg_dump.c:13320 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "ungültiger Typ »%c« für Zugriffsmethode »%s«" -#: pg_dump.c:14074 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "unbekannter Sortierfolgen-Provider: %s" -#: pg_dump.c:14482 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "unbekannter aggfinalmodify-Wert für Aggregat »%s«" -#: pg_dump.c:14538 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "unbekannter aggmfinalmodify-Wert für Aggregat »%s«" -#: pg_dump.c:15260 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "unbekannter Objekttyp in den Vorgabeprivilegien: %d" -#: pg_dump.c:15278 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "konnte Vorgabe-ACL-Liste (%s) nicht interpretieren" -#: pg_dump.c:15363 +#: pg_dump.c:15514 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "konnte initiale GRANT-ACL-Liste (%s) oder initiale REVOKE-ACL-Liste (%s) für Objekt »%s« (%s) nicht interpretieren" -#: pg_dump.c:15371 +#: pg_dump.c:15522 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "konnte GRANT-ACL-Liste (%s) oder REVOKE-ACL-Liste (%s) für Objekt »%s« (%s) nicht interpretieren" -#: pg_dump.c:15886 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "Anfrage um die Definition der Sicht »%s« zu ermitteln lieferte keine Daten" -#: pg_dump.c:15889 +#: pg_dump.c:16040 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "Anfrage um die Definition der Sicht »%s« zu ermitteln lieferte mehr als eine Definition" -#: pg_dump.c:15896 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "Definition der Sicht »%s« scheint leer zu sein (Länge null)" -#: pg_dump.c:15980 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS wird nicht mehr unterstützt (Tabelle »%s«)" -#: pg_dump.c:16886 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "ungültige Spaltennummer %d in Tabelle »%s«" -#: pg_dump.c:16963 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "konnte Indexstatistikspalten nicht interpretieren" -#: pg_dump.c:16965 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "konnte Indexstatistikwerte nicht interpretieren" -#: pg_dump.c:16967 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "Anzahl Spalten und Werte für Indexstatistiken stimmt nicht überein" -#: pg_dump.c:17184 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "fehlender Index für Constraint »%s«" -#: pg_dump.c:17409 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "unbekannter Constraint-Typ: %c" -#: pg_dump.c:17541 pg_dump.c:17764 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "Anfrage nach Daten der Sequenz %s ergab %d Zeile (erwartete 1)" msgstr[1] "Anfrage nach Daten der Sequenz %s ergab %d Zeilen (erwartete 1)" -#: pg_dump.c:17575 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "unbekannter Sequenztyp: %s" -#: pg_dump.c:17862 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "unerwarteter tgtype-Wert: %d" -#: pg_dump.c:17936 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "fehlerhafte Argumentzeichenkette (%s) für Trigger »%s« von Tabelle »%s«" -#: pg_dump.c:18205 +#: pg_dump.c:18391 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "Anfrage nach Regel »%s« der Tabelle »%s« fehlgeschlagen: falsche Anzahl Zeilen zurückgegeben" -#: pg_dump.c:18367 +#: pg_dump.c:18553 #, c-format msgid "could not find referenced extension %u" msgstr "konnte referenzierte Erweiterung %u nicht finden" -#: pg_dump.c:18458 +#: pg_dump.c:18644 #, c-format msgid "could not parse extension configuration array" msgstr "konnte Erweiterungskonfigurations-Array nicht interpretieren" -#: pg_dump.c:18460 +#: pg_dump.c:18646 #, c-format msgid "could not parse extension condition array" msgstr "konnte Erweiterungsbedingungs-Array nicht interpretieren" -#: pg_dump.c:18462 +#: pg_dump.c:18648 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "Anzahl Konfigurationen und Bedingungen für Erweiterung stimmt nicht überein" -#: pg_dump.c:18594 +#: pg_dump.c:18780 #, c-format msgid "reading dependency data" msgstr "lese Abhängigkeitsdaten" -#: pg_dump.c:18687 +#: pg_dump.c:18873 #, c-format msgid "no referencing object %u %u" msgstr "kein referenzierendes Objekt %u %u" -#: pg_dump.c:18698 +#: pg_dump.c:18884 #, c-format msgid "no referenced object %u %u" msgstr "kein referenziertes Objekt %u %u" -#: pg_dump.c:19087 +#: pg_dump.c:19273 #, c-format msgid "could not parse reloptions array" msgstr "konnte reloptions-Array nicht interpretieren" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:633 #, c-format msgid "invalid dumpId %d" msgstr "ungültige dumpId %d" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:639 #, c-format msgid "invalid dependency %d" msgstr "ungültige Abhängigkeit %d" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:872 #, c-format msgid "could not identify dependency loop" msgstr "konnte Abhängigkeitsschleife nicht bestimmen" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1487 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "Es gibt zirkuläre Fremdschlüssel-Constraints für diese Tabelle:" msgstr[1] "Es gibt zirkuläre Fremdschlüssel-Constraints zwischen diesen Tabellen:" -#: pg_dump_sort.c:1234 pg_dump_sort.c:1254 +#: pg_dump_sort.c:1491 pg_dump_sort.c:1511 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1235 +#: pg_dump_sort.c:1492 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Möglicherweise kann der Dump nur wiederhergestellt werden, wenn --disable-triggers verwendet wird oder die Constraints vorübergehend entfernt werden." -#: pg_dump_sort.c:1236 +#: pg_dump_sort.c:1493 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Führen Sie einen vollen Dump statt eines Dumps mit --data-only durch, um dieses Problem zu vermeiden." -#: pg_dump_sort.c:1248 +#: pg_dump_sort.c:1505 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "konnte Abhängigkeitsschleife zwischen diesen Elementen nicht auflösen:" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2325,7 +2347,7 @@ msgstr "" "selben Verzeichnis wie »%s« gefunden.\n" "Prüfen Sie Ihre Installation." -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2336,32 +2358,32 @@ msgstr "" "aber es hatte nicht die gleiche Version wie %s.\n" "Prüfen Sie Ihre Installation." -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "Option --exclude-database kann nicht zusammen mit -g/--globals-only, -r/--roles-only oder -t/--tablesspaces-only verwendet werden" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "Optionen -g/--globals-only und -r/--roles-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "Optionen -g/--globals-only und -t/--tablespaces-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "Optionen -r/--roles-only und -t/--tablespaces-only können nicht zusammen verwendet werden" -#: pg_dumpall.c:453 pg_dumpall.c:1767 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "konnte nicht mit der Datenbank »%s« verbinden" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2370,7 +2392,7 @@ msgstr "" "konnte nicht mit Datenbank »postgres« oder »template1« verbinden\n" "Bitte geben Sie eine alternative Datenbank an." -#: pg_dumpall.c:621 +#: pg_dumpall.c:663 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2379,75 +2401,75 @@ msgstr "" "%s gibt einen PostgreSQL-Datenbankcluster in eine SQL-Skriptdatei aus.\n" "\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:626 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:675 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean Datenbanken vor der Wiedererstellung löschen\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only nur globale Objekte ausgeben, keine Datenbanken\n" -#: pg_dumpall.c:636 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr "" " -O, --no-owner Wiederherstellung der Objekteigentümerschaft\n" " auslassen\n" -#: pg_dumpall.c:637 +#: pg_dumpall.c:679 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only nur Rollen ausgeben, keine Datenbanken oder\n" " Tablespaces\n" -#: pg_dumpall.c:639 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAME Superusername für den Dump\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:682 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only nur Tablespaces ausgeben, keine Datenbanken oder\n" " Rollen\n" -#: pg_dumpall.c:646 +#: pg_dumpall.c:688 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr "" " --exclude-database=MUSTER Datenbanken deren Name mit MUSTER übereinstimmt\n" " überspringen\n" -#: pg_dumpall.c:653 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords Rollenpasswörter nicht mit ausgeben\n" -#: pg_dumpall.c:668 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=VERBDG mit angegebenen Verbindungsparametern verbinden\n" -#: pg_dumpall.c:670 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME alternative Standarddatenbank\n" -#: pg_dumpall.c:677 +#: pg_dumpall.c:720 #, c-format msgid "" "\n" @@ -2460,92 +2482,103 @@ msgstr "" "Standardausgabe geschrieben.\n" "\n" -#: pg_dumpall.c:883 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "mit »pg_« anfangender Rollenname übersprungen (%s)" -#: pg_dumpall.c:1284 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "verwaister pg_auth_members-Eintrag für Rolle %s gefunden" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "konnte ACL-Zeichenkette (%s) für Tablespace »%s« nicht interpretieren" -#: pg_dumpall.c:1512 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "Datenbank »%s« übersprungen" -#: pg_dumpall.c:1516 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "Ausgabe der Datenbank »%s«" -#: pg_dumpall.c:1548 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump für Datenbank »%s« fehlgeschlagen; beende" -#: pg_dumpall.c:1557 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "konnte die Ausgabedatei »%s« nicht neu öffnen: %m" -#: pg_dumpall.c:1601 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "führe »%s« aus" -#: pg_dumpall.c:1816 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "konnte Version des Servers nicht ermitteln" -#: pg_dumpall.c:1822 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "konnte Versionszeichenkette »%s« nicht entziffern" -#: pg_dumpall.c:1894 pg_dumpall.c:1917 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "führe %s aus" -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "entweder -d/--dbname oder -f/--file muss angegeben werden" -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "Optionen -d/--dbname und -f/--file können nicht zusammen verwendet werden" -#: pg_restore.c:343 +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "Optionen -d/--dbname und --restrict-key können nicht zusammen verwendet werden" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "Optionen -C/--create und -1/--single-transaction können nicht zusammen verwendet werden" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "maximale Anzahl paralleler Jobs ist %d" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "--single-transaction und mehrere Jobs können nicht zusammen verwendet werden" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "unbekanntes Archivformat »%s«; bitte »c«, »d« oder »t« angeben" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "bei Wiederherstellung ignorierte Fehler: %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2555,47 +2588,47 @@ msgstr "" "gesichert wurde.\n" "\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPTION]... [DATEI]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAME mit angegebener Datenbank verbinden\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=DATEINAME Name der Ausgabedatei (- für stdout)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t Format der Backup-Datei (sollte automatisch gehen)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list Inhaltsverzeichnis für dieses Archiv anzeigen\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose »Verbose«-Modus\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "" "\n" @@ -2604,34 +2637,34 @@ msgstr "" "\n" "Optionen die die Wiederherstellung kontrollieren:\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only nur Daten, nicht das Schema, wiederherstellen\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create Zieldatenbank erzeugen\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error bei Fehler beenden, Voreinstellung ist fortsetzen\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAME benannten Index wiederherstellen\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr "" " -j, --jobs=NUM so viele parallele Jobs zur Wiederherstellung\n" " verwenden\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2640,64 +2673,64 @@ msgstr "" " -L, --use-list=DATEINAME Inhaltsverzeichnis aus dieser Datei zur Auswahl oder\n" " Sortierung der Ausgabe verwenden\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAME nur Objekte in diesem Schema wiederherstellen\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, ---exclude-schema=NAME Objekte in diesem Schema nicht wiederherstellen\n" -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAME(args) benannte Funktion wiederherstellen\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only nur das Schema, nicht die Daten, wiederherstellen\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr " -S, --superuser=NAME Name des Superusers, um Trigger auszuschalten\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr "" " -t, --table=NAME benannte Relation (Tabelle, Sicht, usw.)\n" " wiederherstellen\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAME benannten Trigger wiederherstellen\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges Wiederherstellung der Zugriffsprivilegien auslassen\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction Wiederherstellung als eine einzige Transaktion\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security Sicherheit auf Zeilenebene einschalten\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments Kommentare nicht wiederherstellen\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2706,39 +2739,39 @@ msgstr "" " --no-data-for-failed-tables Daten für Tabellen, die nicht erzeugt werden\n" " konnten, nicht wiederherstellen\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications Publikationen nicht wiederherstellen\n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels Security-Labels nicht wiederherstellen\n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions Subskriptionen nicht wiederherstellen\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces Tablespace-Zuordnungen nicht wiederherstellen\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr "" " --section=ABSCHNITT angegebenen Abschnitt wiederherstellen (pre-data,\n" " data oder post-data)\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLLENNAME vor der Wiederherstellung SET ROLE ausführen\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "" "\n" @@ -2749,7 +2782,7 @@ msgstr "" "Die Optionen -I, -n, -N, -P, -t, -T und --section können kombiniert und mehrfach\n" "angegeben werden, um mehrere Objekte auszuwählen.\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/es.po b/src/bin/pg_dump/po/es.po index 727597c0d82..966a2e4566d 100644 --- a/src/bin/pg_dump/po/es.po +++ b/src/bin/pg_dump/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:38+0000\n" +"POT-Creation-Date: 2026-02-06 21:33+0000\n" "PO-Revision-Date: 2022-01-12 17:37-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -117,222 +117,222 @@ msgstr "el proceso hijo fue terminado por una señal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "el proceso hijo terminó con código no reconocido %d" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "leyendo las extensiones" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "identificando miembros de extensión" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "leyendo esquemas" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "leyendo las tablas definidas por el usuario" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "leyendo las funciones definidas por el usuario" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "leyendo los tipos definidos por el usuario" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "leyendo los lenguajes procedurales" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "leyendo las funciones de agregación definidas por el usuario" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "leyendo los operadores definidos por el usuario" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "leyendo los métodos de acceso definidos por el usuario" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "leyendo las clases de operadores definidos por el usuario" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "leyendo las familias de operadores definidas por el usuario" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "leyendo los procesadores (parsers) de búsqueda en texto definidos por el usuario" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "leyendo las plantillas de búsqueda en texto definidas por el usuario" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "leyendo los diccionarios de búsqueda en texto definidos por el usuario" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "leyendo las configuraciones de búsqueda en texto definidas por el usuario" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "leyendo los conectores de datos externos definidos por el usuario" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "leyendo los servidores foráneos definidas por el usuario" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "leyendo los privilegios por omisión" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "leyendo los ordenamientos definidos por el usuario" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "leyendo las conversiones definidas por el usuario" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "leyendo conversiones de tipo" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "leyendo las transformaciones" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "leyendo la información de herencia de las tablas" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "leyendo los disparadores por eventos" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "buscando tablas de extensión" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "buscando relaciones de herencia" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "leyendo la información de columnas para las tablas interesantes" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "marcando las columnas heredadas en las subtablas" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "leyendo datos de particionamiento" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "leyendo los índices" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "marcando índices en las tablas particionadas" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "leyendo estadísticas extendidas" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "leyendo las restricciones" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "leyendo los disparadores (triggers)" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "leyendo las reglas de reescritura" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "leyendo políticas" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "leyendo publicaciones" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "leyendo membresía en publicaciones" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "leyendo las suscripciones" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "número de padres %d para la tabla «%s» no es válido" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "falló la revisión de integridad, el OID %u del padre de la tabla «%s» (OID %u) no se encontró" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "no se pudo interpretar el arreglo numérico «%s»: demasiados números" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "no se pudo interpretar el arreglo numérico «%s»: carácter no válido en número" @@ -463,7 +463,7 @@ msgstr "pgpipe: no se pudo conectar el socket: código de error %d" msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: no se pudo aceptar la conexión: código de error %d" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1632 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "no se pudo cerrar el archivo de salida: %m" @@ -508,385 +508,385 @@ msgstr "las conexiones directas a la base de datos no están soportadas en archi msgid "implied data-only restore" msgstr "asumiendo reestablecimiento de sólo datos" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "eliminando %s %s" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "no se pudo encontrar dónde insertar IF EXISTS en la sentencia «%s»" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "precaución desde el archivo original: %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "creando %s «%s.%s»" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "creando %s «%s»" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "conectando a nueva base de datos «%s»" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "procesando %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "procesando datos de la tabla «%s.%s»" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "ejecutando %s %s" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "deshabilitando disparadores (triggers) para %s" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "habilitando disparadores (triggers) para %s" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "error interno -- WriteData no puede ser llamada fuera del contexto de una rutina DataDumper" -#: pg_backup_archiver.c:1279 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "la extracción de objetos grandes no está soportada en el formato seleccionado" -#: pg_backup_archiver.c:1337 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "se reestableció %d objeto grande" msgstr[1] "se reestablecieron %d objetos grandes" -#: pg_backup_archiver.c:1358 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "reestableciendo objeto grande con OID %u" -#: pg_backup_archiver.c:1370 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "no se pudo crear el objeto grande %u: %s" -#: pg_backup_archiver.c:1375 pg_dump.c:3816 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "no se pudo abrir el objeto grande %u: %s" -#: pg_backup_archiver.c:1431 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "no se pudo abrir el archivo TOC «%s»: %m" -#: pg_backup_archiver.c:1459 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "línea ignorada: %s" -#: pg_backup_archiver.c:1466 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "no se pudo encontrar una entrada para el ID %d" -#: pg_backup_archiver.c:1489 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "no se pudo cerrar el archivo TOC: %m" -#: pg_backup_archiver.c:1603 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "no se pudo abrir el archivo de salida «%s»: %m" -#: pg_backup_archiver.c:1605 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "no se pudo abrir el archivo de salida: %m" -#: pg_backup_archiver.c:1699 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "se escribió %zu byte de los datos del objeto grande (resultado = %d)" msgstr[1] "se escribieron %zu bytes de los datos del objeto grande (resultado = %d)" -#: pg_backup_archiver.c:1705 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "no se pudo escribir en objeto grande: %s" -#: pg_backup_archiver.c:1795 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "durante INICIALIZACIÓN:" -#: pg_backup_archiver.c:1800 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "durante PROCESAMIENTO DE TABLA DE CONTENIDOS:" -#: pg_backup_archiver.c:1805 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "durante FINALIZACIÓN:" -#: pg_backup_archiver.c:1810 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "en entrada de la tabla de contenidos %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1886 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "dumpId incorrecto" -#: pg_backup_archiver.c:1907 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "dumpId de tabla incorrecto para elemento TABLE DATA" -#: pg_backup_archiver.c:1999 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "bandera de posición inesperada %d" -#: pg_backup_archiver.c:2012 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "el posición en el archivo es demasiado grande" -#: pg_backup_archiver.c:2150 pg_backup_archiver.c:2160 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "nombre de directorio demasiado largo: «%s»" -#: pg_backup_archiver.c:2168 +#: pg_backup_archiver.c:2187 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "el directorio «%s» no parece ser un archivador válido (no existe «toc.dat»)" -#: pg_backup_archiver.c:2176 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "no se pudo abrir el archivo de entrada «%s»: %m" -#: pg_backup_archiver.c:2183 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "no se pudo abrir el archivo de entrada: %m" -#: pg_backup_archiver.c:2189 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "no se pudo leer el archivo de entrada: %m" -#: pg_backup_archiver.c:2191 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "el archivo de entrada es demasiado corto (leidos %lu, esperados 5)" -#: pg_backup_archiver.c:2223 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "el archivo de entrada parece ser un volcado de texto. Por favor use psql." -#: pg_backup_archiver.c:2229 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "el archivo de entrada no parece ser un archivador válido (¿demasiado corto?)" -#: pg_backup_archiver.c:2235 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "el archivo de entrada no parece ser un archivador válido" -#: pg_backup_archiver.c:2244 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "no se pudo cerrar el archivo de entrada: %m" -#: pg_backup_archiver.c:2361 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "formato de archivo no reconocido «%d»" -#: pg_backup_archiver.c:2443 pg_backup_archiver.c:4490 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4514 #, c-format msgid "finished item %d %s %s" msgstr "terminó el elemento %d %s %s" -#: pg_backup_archiver.c:2447 pg_backup_archiver.c:4503 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4527 #, c-format msgid "worker process failed: exit code %d" msgstr "el proceso hijo falló: código de salida %d" -#: pg_backup_archiver.c:2567 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "la entrada con ID %d está fuera de rango -- tal vez la tabla de contenido está corrupta" -#: pg_backup_archiver.c:2634 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "restaurar tablas WITH OIDS ya no está soportado" -#: pg_backup_archiver.c:2716 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "no se reconoce la codificación: «%s»" -#: pg_backup_archiver.c:2722 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "elemento ENCODING no válido: %s" -#: pg_backup_archiver.c:2740 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "elemento STDSTRINGS no válido: %s" -#: pg_backup_archiver.c:2765 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "esquema «%s» no encontrado" -#: pg_backup_archiver.c:2772 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "tabla «%s» no encontrada" -#: pg_backup_archiver.c:2779 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "índice «%s» no encontrado" -#: pg_backup_archiver.c:2786 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "función «%s» no encontrada" -#: pg_backup_archiver.c:2793 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "disparador «%s» no encontrado" -#: pg_backup_archiver.c:3207 +#: pg_backup_archiver.c:3257 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "no se pudo establecer el usuario de sesión a «%s»: %s" -#: pg_backup_archiver.c:3339 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "no se pudo definir search_path a «%s»: %s" -#: pg_backup_archiver.c:3401 +#: pg_backup_archiver.c:3461 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "no se pudo definir default_tablespace a %s: %s" -#: pg_backup_archiver.c:3446 +#: pg_backup_archiver.c:3506 #, c-format msgid "could not set default_table_access_method: %s" msgstr "no se pudo definir default_table_access_method: %s" -#: pg_backup_archiver.c:3538 pg_backup_archiver.c:3696 +#: pg_backup_archiver.c:3598 pg_backup_archiver.c:3756 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "no se sabe cómo establecer el dueño para el objeto de tipo «%s»" -#: pg_backup_archiver.c:3799 +#: pg_backup_archiver.c:3823 #, c-format msgid "did not find magic string in file header" msgstr "no se encontró la cadena mágica en el encabezado del archivo" -#: pg_backup_archiver.c:3813 +#: pg_backup_archiver.c:3837 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "versión no soportada (%d.%d) en el encabezado del archivo" -#: pg_backup_archiver.c:3818 +#: pg_backup_archiver.c:3842 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "revisión de integridad en el tamaño del entero (%lu) falló" -#: pg_backup_archiver.c:3822 +#: pg_backup_archiver.c:3846 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "el archivador fue hecho en una máquina con enteros más grandes, algunas operaciones podrían fallar" -#: pg_backup_archiver.c:3832 +#: pg_backup_archiver.c:3856 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "el formato esperado (%d) difiere del formato encontrado en el archivo (%d)" -#: pg_backup_archiver.c:3847 +#: pg_backup_archiver.c:3871 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "el archivador está comprimido, pero esta instalación no soporta compresión -- no habrá datos disponibles" -#: pg_backup_archiver.c:3881 +#: pg_backup_archiver.c:3905 #, c-format msgid "invalid creation date in header" msgstr "la fecha de creación en el encabezado no es válida" -#: pg_backup_archiver.c:4015 +#: pg_backup_archiver.c:4039 #, c-format msgid "processing item %d %s %s" msgstr "procesando el elemento %d %s %s" -#: pg_backup_archiver.c:4094 +#: pg_backup_archiver.c:4118 #, c-format msgid "entering main parallel loop" msgstr "ingresando al bucle paralelo principal" -#: pg_backup_archiver.c:4105 +#: pg_backup_archiver.c:4129 #, c-format msgid "skipping item %d %s %s" msgstr "saltando el elemento %d %s %s" -#: pg_backup_archiver.c:4114 +#: pg_backup_archiver.c:4138 #, c-format msgid "launching item %d %s %s" msgstr "lanzando el elemento %d %s %s" -#: pg_backup_archiver.c:4168 +#: pg_backup_archiver.c:4192 #, c-format msgid "finished main parallel loop" msgstr "terminó el bucle paralelo principal" -#: pg_backup_archiver.c:4204 +#: pg_backup_archiver.c:4228 #, c-format msgid "processing missed item %d %s %s" msgstr "procesando el elemento saltado %d %s %s" -#: pg_backup_archiver.c:4809 +#: pg_backup_archiver.c:4833 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "la tabla «%s» no pudo ser creada, no se recuperarán sus datos" @@ -978,12 +978,12 @@ msgstr "compresor activo" msgid "could not get server_version from libpq" msgstr "no se pudo obtener server_version desde libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1841 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "versión del servidor: %s; versión de %s: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1843 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "abortando debido a que no coincide la versión del servidor" @@ -993,7 +993,7 @@ msgstr "abortando debido a que no coincide la versión del servidor" msgid "already connected to a database" msgstr "ya está conectado a una base de datos" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1670 pg_dumpall.c:1781 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "Contraseña: " @@ -1007,17 +1007,17 @@ msgstr "no se pudo hacer la conexión a la base de datos" msgid "reconnection failed: %s" msgstr "falló la reconexión: %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1701 pg_dumpall.c:1791 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1904 pg_dumpall.c:1927 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "la consulta falló: %s" -#: pg_backup_db.c:278 pg_dumpall.c:1905 pg_dumpall.c:1928 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "la consulta era: %s" @@ -1053,7 +1053,7 @@ msgstr "PQputCopyEnd regresó un error: %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY falló para la tabla «%s»: %s" -#: pg_backup_db.c:525 pg_dump.c:2166 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "resultados extra inesperados durante el COPY de la tabla «%s»" @@ -1239,10 +1239,10 @@ msgstr "se encontró un encabezado corrupto en %s (esperado %d, calculado %d) en msgid "unrecognized section name: \"%s\"" msgstr "nombre de sección «%s» no reconocido" -#: pg_backup_utils.c:55 pg_dump.c:627 pg_dump.c:644 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Prueba «%s --help» para más información.\n" @@ -1252,72 +1252,87 @@ msgstr "Prueba «%s --help» para más información.\n" msgid "out of on_exit_nicely slots" msgstr "elementos on_exit_nicely agotados" -#: pg_dump.c:553 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "nivel de compresión debe estar en el rango 0..9" -#: pg_dump.c:591 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_floats_digits debe estar en el rango -15..3" -#: pg_dump.c:614 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert debe estar en el rango %d..%d" -#: pg_dump.c:642 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" -#: pg_dump.c:663 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "las opciones -s/--schema-only y -a/--data-only no pueden usarse juntas" -#: pg_dump.c:668 +#: pg_dump.c:673 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "las opciones -s/--schema-only y --include-foreign-data no pueden usarse juntas" -#: pg_dump.c:671 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "la opción --include-foreign-data no está soportado con respaldo en paralelo" -#: pg_dump.c:675 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "las opciones -c/--clean y -a/--data-only no pueden usarse juntas" -#: pg_dump.c:680 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "la opción --if-exists requiere la opción -c/--clean" -#: pg_dump.c:687 +#: pg_dump.c:692 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "la opción --on-conflict-do-nothing requiere la opción --inserts, --rows-per-insert o --column-inserts" -#: pg_dump.c:709 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "no se pudo generar la llave “restrict”" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "llave de “restrict” no válida" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "la opción --restrict-key sólo puede usarse con --format=plain" + +#: pg_dump.c:728 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "la compresión solicitada no está soportada en esta instalación -- el archivador será sin compresión" -#: pg_dump.c:730 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "número no válido de trabajos paralelos" -#: pg_dump.c:734 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "el volcado en paralelo sólo está soportado por el formato «directory»" -#: pg_dump.c:789 +#: pg_dump.c:808 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1327,32 +1342,32 @@ msgstr "" "Los snapshots sincronizados no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita." -#: pg_dump.c:795 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Los snapshot exportados no están soportados por esta versión de servidor." -#: pg_dump.c:807 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "el último OID interno es %u" -#: pg_dump.c:816 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "no se encontraron esquemas coincidentes" -#: pg_dump.c:830 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "no se encontraron tablas coincidentes" -#: pg_dump.c:852 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "no se encontraron extensiones coincidentes" -#: pg_dump.c:1022 +#: pg_dump.c:1042 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1361,17 +1376,17 @@ msgstr "" "%s extrae una base de datos en formato de texto o en otros formatos.\n" "\n" -#: pg_dump.c:1023 pg_dumpall.c:623 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" -#: pg_dump.c:1024 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPCIÓN]... [NOMBREDB]\n" -#: pg_dump.c:1026 pg_dumpall.c:626 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "" "\n" @@ -1380,12 +1395,12 @@ msgstr "" "\n" "Opciones generales:\n" -#: pg_dump.c:1027 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ARCHIVO nombre del archivo o directorio de salida\n" -#: pg_dump.c:1028 +#: pg_dump.c:1048 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1394,42 +1409,42 @@ msgstr "" " -F, --format=c|d|t|p Formato del archivo de salida (c=personalizado, \n" " d=directorio, t=tar, p=texto (por omisión))\n" -#: pg_dump.c:1030 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM máximo de procesos paralelos para volcar\n" -#: pg_dump.c:1031 pg_dumpall.c:628 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose modo verboso\n" -#: pg_dump.c:1032 pg_dumpall.c:629 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de version y salir\n" -#: pg_dump.c:1033 +#: pg_dump.c:1053 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 nivel de compresión para formatos comprimidos\n" -#: pg_dump.c:1034 pg_dumpall.c:630 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=SEGS espera a lo más SEGS segundos obtener un lock\n" -#: pg_dump.c:1035 pg_dumpall.c:657 +#: pg_dump.c:1055 pg_dumpall.c:698 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync no esperar que los cambios se sincronicen a disco\n" -#: pg_dump.c:1036 pg_dumpall.c:631 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_dump.c:1038 pg_dumpall.c:632 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "" "\n" @@ -1438,54 +1453,54 @@ msgstr "" "\n" "Opciones que controlan el contenido de la salida:\n" -#: pg_dump.c:1039 pg_dumpall.c:633 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only extrae sólo los datos, no el esquema\n" -#: pg_dump.c:1040 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs incluye objetos grandes en la extracción\n" -#: pg_dump.c:1041 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs excluye objetos grandes en la extracción\n" -#: pg_dump.c:1042 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean tira (drop) la base de datos antes de crearla\n" -#: pg_dump.c:1043 +#: pg_dump.c:1063 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create incluye órdenes para crear la base de datos\n" " en la extracción\n" -#: pg_dump.c:1044 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=PATRÓN extrae sólo la o las extensiones nombradas\n" -#: pg_dump.c:1045 pg_dumpall.c:635 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=CODIF extrae los datos con la codificación CODIF\n" -#: pg_dump.c:1046 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=PATRÓN extrae sólo el o los esquemas nombrados\n" -#: pg_dump.c:1047 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=PATRÓN NO extrae el o los esquemas nombrados\n" -#: pg_dump.c:1048 +#: pg_dump.c:1068 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1494,58 +1509,58 @@ msgstr "" " -O, --no-owner en formato de sólo texto, no reestablece\n" " los dueños de los objetos\n" -#: pg_dump.c:1050 pg_dumpall.c:639 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only extrae sólo el esquema, no los datos\n" -#: pg_dump.c:1051 +#: pg_dump.c:1071 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME superusuario a utilizar en el volcado de texto\n" -#: pg_dump.c:1052 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=PATRÓN extrae sólo la o las tablas nombradas\n" -#: pg_dump.c:1053 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=PATRÓN NO extrae la o las tablas nombradas\n" -#: pg_dump.c:1054 pg_dumpall.c:642 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges no extrae los privilegios (grant/revoke)\n" -#: pg_dump.c:1055 pg_dumpall.c:643 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade sólo para uso de utilidades de upgrade\n" -#: pg_dump.c:1056 pg_dumpall.c:644 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts extrae los datos usando INSERT con nombres\n" " de columnas\n" -#: pg_dump.c:1057 pg_dumpall.c:645 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting deshabilita el uso de «delimitadores de dólar»,\n" " usa delimitadores de cadena estándares\n" -#: pg_dump.c:1058 pg_dumpall.c:646 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers deshabilita los disparadores (triggers) durante el\n" " restablecimiento de la extracción de sólo-datos\n" -#: pg_dump.c:1059 +#: pg_dump.c:1079 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1554,22 +1569,22 @@ msgstr "" " --enable-row-security activa seguridad de filas (volcar sólo el\n" " contenido al que el usuario tiene acceso)\n" -#: pg_dump.c:1061 +#: pg_dump.c:1081 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=PATRÓN NO extrae los datos de la(s) tablas nombradas\n" -#: pg_dump.c:1062 pg_dumpall.c:648 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM usa este valor para extra_float_digits\n" -#: pg_dump.c:1063 pg_dumpall.c:649 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists usa IF EXISTS al eliminar objetos\n" -#: pg_dump.c:1064 +#: pg_dump.c:1084 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1580,95 +1595,100 @@ msgstr "" " incluye datos de tablas foráneas en servidores\n" " que coinciden con PATRÓN\n" -#: pg_dump.c:1067 pg_dumpall.c:650 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts extrae los datos usando INSERT, en vez de COPY\n" -#: pg_dump.c:1068 pg_dumpall.c:651 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root cargar particiones a través de tabla raíz\n" -#: pg_dump.c:1069 pg_dumpall.c:652 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments no volcar los comentarios\n" -#: pg_dump.c:1070 pg_dumpall.c:653 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications no volcar las publicaciones\n" -#: pg_dump.c:1071 pg_dumpall.c:655 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels no volcar asignaciones de etiquetas de seguridad\n" -#: pg_dump.c:1072 pg_dumpall.c:656 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions no volcar las suscripciones\n" -#: pg_dump.c:1073 +#: pg_dump.c:1093 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots no usar snapshots sincronizados en trabajos\n" " en paralelo\n" -#: pg_dump.c:1074 pg_dumpall.c:658 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces no volcar asignaciones de tablespace\n" -#: pg_dump.c:1075 pg_dumpall.c:659 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression no volcar métodos de compresión TOAST\n" -#: pg_dump.c:1076 pg_dumpall.c:660 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data no volcar datos de tablas unlogged\n" -#: pg_dump.c:1077 pg_dumpall.c:661 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing agregar ON CONFLICT DO NOTHING a órdenes INSERT\n" -#: pg_dump.c:1078 pg_dumpall.c:662 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers entrecomilla todos los identificadores, incluso\n" " si no son palabras clave\n" -#: pg_dump.c:1079 pg_dumpall.c:663 +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid " --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr " --restrict-key=LLAVE use la llave provista para \\restrict en psql\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NUMFILAS número de filas por INSERT; implica --inserts\n" -#: pg_dump.c:1080 +#: pg_dump.c:1101 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECCIÓN volcar la sección nombrada (pre-data, data,\n" " post-data)\n" -#: pg_dump.c:1081 +#: pg_dump.c:1102 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable espera hasta que el respaldo pueda completarse\n" " sin anomalías\n" -#: pg_dump.c:1082 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT use el snapshot dado para la extracción\n" -#: pg_dump.c:1083 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1677,7 +1697,7 @@ msgstr "" " --strict-names requerir al menos una coincidencia para cada patrón\n" " de nombre de tablas y esquemas\n" -#: pg_dump.c:1085 pg_dumpall.c:664 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1688,7 +1708,7 @@ msgstr "" " usa órdenes SESSION AUTHORIZATION en lugar de\n" " ALTER OWNER para cambiar los dueño de los objetos\n" -#: pg_dump.c:1089 pg_dumpall.c:668 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "" "\n" @@ -1697,46 +1717,46 @@ msgstr "" "\n" "Opciones de conexión:\n" -#: pg_dump.c:1090 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=NOMBRE nombre de la base de datos que volcar\n" -#: pg_dump.c:1091 pg_dumpall.c:670 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ANFITRIÓN anfitrión de la base de datos o\n" " directorio del enchufe (socket)\n" -#: pg_dump.c:1092 pg_dumpall.c:672 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PUERTO número del puerto de la base de datos\n" -#: pg_dump.c:1093 pg_dumpall.c:673 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=USUARIO nombre de usuario con el cual conectarse\n" -#: pg_dump.c:1094 pg_dumpall.c:674 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password nunca pedir una contraseña\n" -#: pg_dump.c:1095 pg_dumpall.c:675 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr "" " -W, --password fuerza un prompt para la contraseña\n" " (debería ser automático)\n" -#: pg_dump.c:1096 pg_dumpall.c:676 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROL ejecuta SET ROLE antes del volcado\n" -#: pg_dump.c:1098 +#: pg_dump.c:1119 #, c-format msgid "" "\n" @@ -1749,22 +1769,22 @@ msgstr "" "de la variable de ambiente PGDATABASE.\n" "\n" -#: pg_dump.c:1100 pg_dumpall.c:680 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Reporte errores a <%s>.\n" -#: pg_dump.c:1101 pg_dumpall.c:681 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" -#: pg_dump.c:1120 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "la codificación de cliente especificada «%s» no es válida" -#: pg_dump.c:1274 +#: pg_dump.c:1295 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1774,553 +1794,553 @@ msgstr "" "Los snapshots sincronizados en servidores standby no están soportados por esta versión del servidor.\n" "Ejecute con --no-synchronized-snapshots si no los necesita." -#: pg_dump.c:1343 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "el formato de salida especificado «%s» no es válido" -#: pg_dump.c:1384 pg_dump.c:1440 pg_dump.c:1493 pg_dumpall.c:1455 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "el nombre no es válido (demasiados puntos): %s" -#: pg_dump.c:1392 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "no se encontraron esquemas coincidentes para el patrón «%s»" -#: pg_dump.c:1445 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "no se encontraron extensiones coincidentes para el patrón «%s»" -#: pg_dump.c:1498 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "no se encontraron servidores foráneos coincidentes para el patrón «%s»" -#: pg_dump.c:1561 +#: pg_dump.c:1582 #, 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_dump.c:1572 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "no se encontraron tablas coincidentes para el patrón «%s»" -#: pg_dump.c:1599 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "No está conectado a una base de datos." -#: pg_dump.c:1602 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "no están implementadas las referencias entre bases de datos: %s" -#: pg_dump.c:2036 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "extrayendo el contenido de la tabla «%s.%s»" -#: pg_dump.c:2147 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetCopyData() falló." -#: pg_dump.c:2148 pg_dump.c:2158 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "Mensaje de error del servidor: %s" -#: pg_dump.c:2149 pg_dump.c:2159 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "La orden era: %s" -#: pg_dump.c:2157 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Falló la extracción del contenido de la tabla «%s»: PQgetResult() falló." -#: pg_dump.c:2248 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "se obtuvo un número incorrecto de campos de la tabla «%s»" -#: pg_dump.c:3003 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "salvando las definiciones de la base de datos" -#: pg_dump.c:3475 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "salvando codificaciones = %s" -#: pg_dump.c:3500 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "salvando standard_conforming_strings = %s" -#: pg_dump.c:3539 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "no se pudo interpretar la salida de current_schemas()" -#: pg_dump.c:3558 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "salvando search_path = %s" -#: pg_dump.c:3598 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "leyendo objetos grandes" -#: pg_dump.c:3780 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "salvando objetos grandes" -#: pg_dump.c:3826 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "error al leer el objeto grande %u: %s" -#: pg_dump.c:3930 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "leyendo políticas de seguridad a nivel de registros" -#: pg_dump.c:4069 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "tipo de orden inesperada en política: %c" -#: pg_dump.c:4223 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "el dueño de la publicación «%s» parece no ser válido" -#: pg_dump.c:4537 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "no se volcaron las suscripciones porque el usuario actual no es un superusuario" -#: pg_dump.c:4608 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "el dueño de la suscripción «%s» parece no ser válido" -#: pg_dump.c:4651 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "no se pudo interpretar el arreglo subpublications" -#: pg_dump.c:5009 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "no se pudo encontrar la extensión padre para %s %s" -#: pg_dump.c:5141 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "el dueño del esquema «%s» parece no ser válido" -#: pg_dump.c:5164 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "no existe el esquema con OID %u" -#: pg_dump.c:5494 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "el dueño del tipo «%s» parece no ser válido" -#: pg_dump.c:5578 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "el dueño del operador «%s» parece no ser válido" -#: pg_dump.c:5877 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "el dueño de la clase de operadores «%s» parece no ser válido" -#: pg_dump.c:5960 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "el dueño de la familia de operadores «%s» parece no ser válido" -#: pg_dump.c:6128 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "el dueño de la función de agregación «%s» parece no ser válido" -#: pg_dump.c:6389 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "el dueño de la función «%s» parece no ser válido" -#: pg_dump.c:7185 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "el dueño de la tabla «%s» parece no ser válido" -#: pg_dump.c:7227 pg_dump.c:17778 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "falló la revisión de integridad, no se encontró la tabla padre con OID %u de la secuencia con OID %u" -#: pg_dump.c:7372 +#: pg_dump.c:7439 #, c-format msgid "failed sanity check, table OID %u appearing in pg_partitioned_table not found" msgstr "falló la revisión de integridad, el OID %u que aparece en pg_partitioned_table no fue encontrado" -#: pg_dump.c:7438 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "extrayendo los índices para la tabla «%s.%s»" -#: pg_dump.c:7856 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "extrayendo restricciones de llave foránea para la tabla «%s.%s»" -#: pg_dump.c:8135 +#: pg_dump.c:8202 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "falló la revisión de integridad, no se encontró la tabla padre con OID %u del elemento con OID %u de pg_rewrite" -#: pg_dump.c:8219 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "extrayendo los disparadores (triggers) para la tabla «%s.%s»" -#: pg_dump.c:8401 +#: pg_dump.c:8468 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "la consulta produjo un nombre de tabla nulo para la llave foránea del disparador \"%s\" en la tabla «%s» (OID de la tabla: %u)" -#: pg_dump.c:8951 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "buscando las columnas y tipos de la tabla «%s.%s»" -#: pg_dump.c:9075 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "numeración de columnas no válida en la tabla «%s»" -#: pg_dump.c:9114 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "buscando expresiones por omisión de la tabla «%s.%s»" -#: pg_dump.c:9136 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "el valor de adnum %d para la tabla «%s» no es válido" -#: pg_dump.c:9229 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "buscando restricciones de revisión (check) para la tabla «%s.%s»" -#: pg_dump.c:9278 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d" msgstr[1] "se esperaban %d restricciones CHECK en la tabla «%s» pero se encontraron %d" -#: pg_dump.c:9282 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Los catálogos del sistema podrían estar corruptos)" -#: pg_dump.c:10884 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "el typtype del tipo «%s» parece no ser válido" -#: pg_dump.c:12232 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "valor no válido en el arreglo proargmodes" -#: pg_dump.c:12534 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "no se pudo interpretar el arreglo proallargtypes" -#: pg_dump.c:12550 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "no se pudo interpretar el arreglo proargmodes" -#: pg_dump.c:12564 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "no se pudo interpretar el arreglo proargnames" -#: pg_dump.c:12574 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "no se pudo interpretar el arreglo proconfig" -#: pg_dump.c:12650 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "el valor del atributo «provolatile» para la función «%s» es desconocido" -#: pg_dump.c:12700 pg_dump.c:14642 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "el valor del atributo «proparallel» para la función «%s» es desconocido" -#: pg_dump.c:12840 pg_dump.c:12946 pg_dump.c:12953 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "no se encontró la definición de la función con OID %u" -#: pg_dump.c:12879 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "valor no válido en los campos pg_cast.castfunc o pg_cast.castmethod" -#: pg_dump.c:12882 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "valor no válido en el campo pg_cast.castmethod" -#: pg_dump.c:12972 +#: pg_dump.c:13044 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "definición errónea de transformación; al menos uno de trffromsql and trftosql debe ser distinto de cero" -#: pg_dump.c:12989 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "valor erróneo en el campo pg_transform.trffromsql" -#: pg_dump.c:13010 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "valor erróneo en el campo pg_transform.trftosql" -#: pg_dump.c:13161 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "los operadores postfix ya no están soportados (operador «%s»)" -#: pg_dump.c:13331 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "no se pudo encontrar el operador con OID %s" -#: pg_dump.c:13399 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "el tipo «%c» para el método de acceso «%s» no es válido" -#: pg_dump.c:14153 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "proveedor de ordenamiento no reconocido: %s" -#: pg_dump.c:14561 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "valor de aggfinalmodify no reconocido para la agregación «%s»" -#: pg_dump.c:14617 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "valor de aggmfinalmodify no reconocido para la agregación «%s»" -#: pg_dump.c:15339 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "tipo de objeto desconocido en privilegios por omisión: %d" -#: pg_dump.c:15357 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "no se pudo interpretar la lista de ACL (%s)" -#: pg_dump.c:15442 +#: pg_dump.c:15514 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "no se pudo interpretar la lista inicial de GRANT ACL (%s) o la lista inicial de REVOKE ACL (%s) para el objeto «%s» (%s)" -#: pg_dump.c:15450 +#: pg_dump.c:15522 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "no se pudo interpretar la lista de GRANT ACL (%s) o la lista de REVOKE ACL (%s) para el objeto «%s» (%s)" -#: pg_dump.c:15965 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "la consulta para obtener la definición de la vista «%s» no regresó datos" -#: pg_dump.c:15968 +#: pg_dump.c:16040 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "la consulta para obtener la definición de la vista «%s» regresó más de una definición" -#: pg_dump.c:15975 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "la definición de la vista «%s» parece estar vacía (tamaño cero)" -#: pg_dump.c:16059 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS ya no está soportado (tabla «%s»)" -#: pg_dump.c:16965 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "el número de columna %d no es válido para la tabla «%s»" -#: pg_dump.c:17042 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "no se pudieron interpretar columnas de estadísticas de índices" -#: pg_dump.c:17044 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "no se pudieron interpretar valores de estadísticas de índices" -#: pg_dump.c:17046 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "no coincide el número de columnas con el de valores para estadísticas de índices" -#: pg_dump.c:17263 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "falta un índice para restricción «%s»" -#: pg_dump.c:17488 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "tipo de restricción inesperado: %c" -#: pg_dump.c:17620 pg_dump.c:17843 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "la consulta para obtener los datos de la secuencia «%s» regresó %d entrada, pero se esperaba 1" msgstr[1] "la consulta para obtener los datos de la secuencia «%s» regresó %d entradas, pero se esperaba 1" -#: pg_dump.c:17654 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "tipo no reconocido de secuencia: %s" -#: pg_dump.c:17941 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "tgtype no esperado: %d" -#: pg_dump.c:18015 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "argumento de cadena (%s) no válido para el disparador (trigger) «%s» en la tabla «%s»" -#: pg_dump.c:18284 +#: pg_dump.c:18391 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "la consulta para obtener la regla «%s» asociada con la tabla «%s» falló: retornó un número incorrecto de renglones" -#: pg_dump.c:18446 +#: pg_dump.c:18553 #, c-format msgid "could not find referenced extension %u" msgstr "no se pudo encontrar la extensión referenciada %u" -#: pg_dump.c:18537 +#: pg_dump.c:18644 #, c-format msgid "could not parse extension configuration array" msgstr "no se pudo interpretar el arreglo de configuración de extensión" -#: pg_dump.c:18539 +#: pg_dump.c:18646 #, c-format msgid "could not parse extension condition array" msgstr "no se pudo interpretar el arreglo de condición de extensión" -#: pg_dump.c:18541 +#: pg_dump.c:18648 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "no coincide el número de configuraciones con el de condiciones para extensión" -#: pg_dump.c:18673 +#: pg_dump.c:18780 #, c-format msgid "reading dependency data" msgstr "obteniendo datos de dependencias" -#: pg_dump.c:18766 +#: pg_dump.c:18873 #, c-format msgid "no referencing object %u %u" msgstr "no existe el objeto referenciante %u %u" -#: pg_dump.c:18777 +#: pg_dump.c:18884 #, c-format msgid "no referenced object %u %u" msgstr "no existe el objeto referenciado %u %u" -#: pg_dump.c:19166 +#: pg_dump.c:19273 #, c-format msgid "could not parse reloptions array" msgstr "no se pudo interpretar el arreglo reloptions" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:633 #, c-format msgid "invalid dumpId %d" msgstr "dumpId %d no válido" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:639 #, c-format msgid "invalid dependency %d" msgstr "dependencia %d no válida" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:872 #, c-format msgid "could not identify dependency loop" msgstr "no se pudo identificar bucle de dependencia" -#: pg_dump_sort.c:1274 +#: pg_dump_sort.c:1487 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "hay restricciones de llave foránea circulares en la siguiente tabla:" msgstr[1] "hay restricciones de llave foránea circulares entre las siguientes tablas:" -#: pg_dump_sort.c:1278 pg_dump_sort.c:1298 +#: pg_dump_sort.c:1491 pg_dump_sort.c:1511 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1279 +#: pg_dump_sort.c:1492 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Puede no ser capaz de restaurar el respaldo sin usar --disable-triggers o temporalmente eliminar las restricciones." -#: pg_dump_sort.c:1280 +#: pg_dump_sort.c:1493 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Considere usar un volcado completo en lugar de --data-only para evitar este problema." -#: pg_dump_sort.c:1292 +#: pg_dump_sort.c:1505 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "no se pudo resolver el bucle de dependencias entre los siguientes elementos:" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2331,7 +2351,7 @@ msgstr "" "mismo directorio que «%s».\n" "Verifique su instalación." -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2342,32 +2362,32 @@ msgstr "" "but no era de la misma versión que %s.\n" "Verifique su instalación." -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "la opción --exclude-database no puede ser usada junto con -g/--globals-only, -r/--roles-only o -t/--tablespaces-only" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "las opciones -g/--globals-only y -r/--roles-only no pueden usarse juntas" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "las opciones -g/--globals-only y -t/--tablespaces-only no pueden usarse juntas" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "las opciones -r/--roles-only y -t/--tablespaces-only no pueden usarse juntas" -#: pg_dumpall.c:453 pg_dumpall.c:1771 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "no se pudo establecer la conexión a la base de datos «%s»" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2376,7 +2396,7 @@ msgstr "" "no se pudo establecer la conexión a las bases de datos «postgres» o\n" "«template1». Por favor especifique una base de datos para conectarse." -#: pg_dumpall.c:622 +#: pg_dumpall.c:663 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2386,73 +2406,73 @@ msgstr "" "guión (script) SQL.\n" "\n" -#: pg_dumpall.c:624 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPCIÓN]...\n" -#: pg_dumpall.c:627 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ARCHIVO nombre del archivo de salida\n" -#: pg_dumpall.c:634 +#: pg_dumpall.c:675 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean tira (drop) la base de datos antes de crearla\n" -#: pg_dumpall.c:636 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only extrae sólo los objetos globales, no bases de datos\n" -#: pg_dumpall.c:637 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner no reestablece los dueños de los objetos\n" -#: pg_dumpall.c:638 +#: pg_dumpall.c:679 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only extrae sólo los roles, no bases de datos\n" " ni tablespaces\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=NAME especifica el nombre del superusuario a usar en\n" " el volcado\n" -#: pg_dumpall.c:641 +#: pg_dumpall.c:682 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only extrae sólo los tablespaces, no bases de datos\n" " ni roles\n" -#: pg_dumpall.c:647 +#: pg_dumpall.c:688 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=PATRÓN excluir bases de datos cuyos nombres coinciden con el patrón\n" -#: pg_dumpall.c:654 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords no extraer contraseñas para roles\n" -#: pg_dumpall.c:669 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CONNSTR conectar usando la cadena de conexión\n" -#: pg_dumpall.c:671 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=NOMBRE especifica la base de datos a la cual conectarse\n" -#: pg_dumpall.c:678 +#: pg_dumpall.c:720 #, c-format msgid "" "\n" @@ -2464,92 +2484,103 @@ msgstr "" "Si no se usa -f/--file, el volcado de SQL será escrito a la salida estándar.\n" "\n" -#: pg_dumpall.c:887 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "omitido nombre de rol que empieza con «pg_» (%s)" -#: pg_dumpall.c:1288 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "se encontró entrada huérfana de pg_auth_members para el rol %s" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "no se pudo interpretar la lista de control de acceso (%s) del tablespace «%s»" -#: pg_dumpall.c:1516 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "excluyendo base de datos «%s»" -#: pg_dumpall.c:1520 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "extrayendo base de datos «%s»" -#: pg_dumpall.c:1552 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump falló en la base de datos «%s», saliendo" -#: pg_dumpall.c:1561 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "no se pudo reabrir el archivo de salida «%s»: %m" -#: pg_dumpall.c:1605 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "ejecutando «%s»" -#: pg_dumpall.c:1820 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "no se pudo obtener la versión del servidor" -#: pg_dumpall.c:1826 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "no se pudo interpretar la versión del servidor «%s»" -#: pg_dumpall.c:1898 pg_dumpall.c:1921 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "ejecutando %s" -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "una de las opciones -d/--dbname y -f/--file debe especificarse" -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "las opciones -d/--dbname y -f/--file no pueden usarse juntas" -#: pg_restore.c:343 +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "las opciones -d/--dbname y --restrict-key no pueden usarse juntas" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "las opciones -c/--clean y -1/--single-transaction no pueden usarse juntas" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "el número máximo de trabajos en paralelo es %d" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "no se puede especificar --single-transaction junto con múltiples tareas" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "formato de archivo «%s» no reconocido; por favor especifique «c», «d» o «t»" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "errores ignorados durante la recuperación: %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2559,49 +2590,49 @@ msgstr "" "creado por pg_dump.\n" "\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPCIÓN]... [ARCHIVO]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NOMBRE nombre de la base de datos a la que conectarse\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=ARCHIVO nombre del archivo de salida (- para stdout)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t formato del volcado (debería ser automático)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr "" " -l, --list imprime una tabla resumida de contenidos\n" " del archivador\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose modo verboso\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "" "\n" @@ -2610,34 +2641,34 @@ msgstr "" "\n" "Opciones que controlan la recuperación:\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only reestablece sólo los datos, no el esquema\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create crea la base de datos de destino\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr "" " -e, --exit-on-error abandonar al encontrar un error\n" " por omisión, se continúa la restauración\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NOMBRE reestablece el índice nombrado\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM máximo de procesos paralelos para restaurar\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2646,64 +2677,64 @@ msgstr "" " -L, --use-list=ARCHIVO usa la tabla de contenido especificada para ordenar\n" " la salida de este archivo\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAME reestablece sólo los objetos en este esquema\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NAME no reestablecer los objetos en este esquema\n" -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NOMBRE(args) reestablece la función nombrada\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only reestablece el esquema únicamente, no los datos\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr "" " -S, --superuser=NOMBRE especifica el nombre del superusuario que se usa\n" " para deshabilitar los disparadores (triggers)\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr " -t, --table=NOMBRE reestablece la relación (tabla, vista, etc.) nombrada\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NOMBRE reestablece el disparador (trigger) nombrado\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges no reestablece los privilegios (grant/revoke)\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction reestablece en una única transacción\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security activa seguridad de filas\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments no restaurar comentarios\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2712,39 +2743,39 @@ msgstr "" " --no-data-for-failed-tables no reestablece datos de tablas que no pudieron\n" " ser creadas\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications no restaurar publicaciones\n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels no restaura etiquetas de seguridad\n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions no restaurar suscripciones\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces no vuelca asignaciones de tablespace\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECCIÓN reestablece la sección nombrada (pre-data, data\n" " post-data)\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME hace SET ROLE antes de restaurar\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "" "\n" @@ -2755,7 +2786,7 @@ msgstr "" "Las opciones -I, -n, -N, -P, -t, -T, y --section pueden ser combinadas y especificadas\n" "varias veces para seleccionar varios objetos.\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/fr.po b/src/bin/pg_dump/po/fr.po index 042e78d0a80..f1aa6e7be71 100644 --- a/src/bin/pg_dump/po/fr.po +++ b/src/bin/pg_dump/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-05-05 14:18+0000\n" -"PO-Revision-Date: 2024-09-16 16:36+0200\n" +"POT-Creation-Date: 2025-09-19 19:52+0000\n" +"PO-Revision-Date: 2025-09-20 10:55+0200\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.7\n" #: ../../../src/common/logging.c:259 #, c-format @@ -115,222 +115,222 @@ msgstr "le processus fils a été terminé par le signal %d : %s" msgid "child process exited with unrecognized status %d" msgstr "le processus fils a quitté avec un statut %d non reconnu" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "lecture des extensions" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "identification des membres d'extension" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "lecture des schémas" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "lecture des tables utilisateur" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "lecture des fonctions utilisateur" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "lecture des types utilisateur" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "lecture des langages procéduraux" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "lecture des fonctions d'agrégats utilisateur" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "lecture des opérateurs utilisateur" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "lecture des méthodes d'accès définis par les utilisateurs" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "lecture des classes d'opérateurs utilisateur" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "lecture des familles d'opérateurs utilisateur" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "lecture des analyseurs utilisateur pour la recherche plein texte" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "lecture des modèles utilisateur pour la recherche plein texte" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "lecture des dictionnaires utilisateur pour la recherche plein texte" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "lecture des configurations utilisateur pour la recherche plein texte" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "lecture des wrappers de données distantes utilisateur" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "lecture des serveurs distants utilisateur" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "lecture des droits par défaut" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "lecture des collationnements utilisateurs" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "lecture des conversions utilisateur" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "lecture des conversions de type" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "lecture des transformations" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "lecture des informations d'héritage des tables" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "lecture des triggers sur évènement" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "recherche des tables d'extension" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "recherche des relations d'héritage" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "lecture des informations de colonnes des tables intéressantes" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "marquage des colonnes héritées dans les sous-tables" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "lecture des données de partitionnement" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "lecture des index" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "décrit les index des tables partitionnées" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "lecture des statistiques étendues" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "lecture des contraintes" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "lecture des triggers" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "lecture des règles de réécriture" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "lecture des politiques" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "lecture des publications" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "lecture des appartenances aux publications" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "lecture des souscriptions" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "nombre de parents invalide (%d) pour la table « %s »" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "vérification échouée, OID %u parent de la table « %s » (OID %u) introuvable" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "n'a pas pu analyser le tableau numérique « %s » : trop de nombres" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "n'a pas pu analyser le tableau numérique « %s » : caractère invalide dans le nombre" @@ -461,7 +461,7 @@ msgstr "pgpipe: n'a pas pu se connecter au socket: code d'erreur %d" msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: n'a pas pu accepter de connexion: code d'erreur %d" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1629 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "n'a pas pu fermer le fichier en sortie : %m" @@ -506,385 +506,385 @@ msgstr "les connexions directes à la base de données ne sont pas supportées d msgid "implied data-only restore" msgstr "a impliqué une restauration des données uniquement" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "suppression de %s %s" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "n'a pas pu trouver où insérer IF EXISTS dans l'instruction « %s »" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "message d'avertissement du fichier de sauvegarde original : %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "création de %s « %s.%s »" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "création de %s « %s »" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "connexion à la nouvelle base de données « %s »" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "traitement de %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "traitement des données de la table « %s.%s »" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "exécution de %s %s" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "désactivation des triggers pour %s" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "activation des triggers pour %s" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "erreur interne -- WriteData ne peut pas être appelé en dehors du contexte de la routine DataDumper" -#: pg_backup_archiver.c:1276 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "la sauvegarde des « Large Objects » n'est pas supportée dans le format choisi" -#: pg_backup_archiver.c:1334 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "restauration de %d « Large Object »" msgstr[1] "restauration de %d « Large Objects »" -#: pg_backup_archiver.c:1355 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "restauration du « Large Object » d'OID %u" -#: pg_backup_archiver.c:1367 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "n'a pas pu créer le « Large Object » %u : %s" -#: pg_backup_archiver.c:1372 pg_dump.c:3768 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "n'a pas pu ouvrir le « Large Object » %u : %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier TOC « %s » : %m" -#: pg_backup_archiver.c:1456 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "ligne ignorée : %s" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "n'a pas pu trouver l'entrée pour l'ID %d" -#: pg_backup_archiver.c:1486 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "n'a pas pu fermer le fichier TOC : %m" -#: pg_backup_archiver.c:1600 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde « %s » : %m" -#: pg_backup_archiver.c:1602 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "n'a pas pu ouvrir le fichier de sauvegarde : %m" -#: pg_backup_archiver.c:1696 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "a écrit %zu octet de données d'un « Large Object » (résultat = %d)" msgstr[1] "a écrit %zu octets de données d'un « Large Object » (résultat = %d)" -#: pg_backup_archiver.c:1702 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "n'a pas pu écrire dans le « Large Object » : %s" -#: pg_backup_archiver.c:1792 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "pendant l'initialisation (« INITIALIZING ») :" -#: pg_backup_archiver.c:1797 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "pendant le traitement de la TOC (« PROCESSING TOC ») :" -#: pg_backup_archiver.c:1802 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "pendant la finalisation (« FINALIZING ») :" -#: pg_backup_archiver.c:1807 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "de l'entrée TOC %d ; %u %u %s %s %s" -#: pg_backup_archiver.c:1883 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "mauvais dumpId" -#: pg_backup_archiver.c:1904 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "mauvais dumpId de table pour l'élément TABLE DATA" -#: pg_backup_archiver.c:1996 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "drapeau de décalage de données inattendu %d" -#: pg_backup_archiver.c:2009 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "le décalage dans le fichier de sauvegarde est trop important" -#: pg_backup_archiver.c:2147 pg_backup_archiver.c:2157 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "nom du répertoire trop long : « %s »" -#: pg_backup_archiver.c:2165 +#: pg_backup_archiver.c:2187 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "le répertoire « %s » ne semble pas être une archive valide (« toc.dat » n'existe pas)" -#: pg_backup_archiver.c:2173 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier en entrée « %s » : %m" -#: pg_backup_archiver.c:2180 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "n'a pas pu ouvrir le fichier en entrée : %m" -#: pg_backup_archiver.c:2186 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "n'a pas pu lire le fichier en entrée : %m" -#: pg_backup_archiver.c:2188 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "le fichier en entrée est trop petit (%lu lus, 5 attendus)" -#: pg_backup_archiver.c:2220 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "Le fichier en entrée semble être une sauvegarde au format texte. Merci d'utiliser psql." -#: pg_backup_archiver.c:2226 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "le fichier en entrée ne semble pas être une archive valide (trop petit ?)" -#: pg_backup_archiver.c:2232 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "le fichier en entrée ne semble pas être une archive valide" -#: pg_backup_archiver.c:2241 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "n'a pas pu fermer le fichier en entrée : %m" -#: pg_backup_archiver.c:2358 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "format de fichier « %d » non reconnu" -#: pg_backup_archiver.c:2440 pg_backup_archiver.c:4468 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4514 #, c-format msgid "finished item %d %s %s" msgstr "élément terminé %d %s %s" -#: pg_backup_archiver.c:2444 pg_backup_archiver.c:4481 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4527 #, c-format msgid "worker process failed: exit code %d" msgstr "échec du processus worker : code de sortie %d" -#: pg_backup_archiver.c:2564 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID %d de l'entrée en dehors de la plage -- peut-être un TOC corrompu" -#: pg_backup_archiver.c:2631 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "la restauration des tables avec WITH OIDS n'est plus supportée" -#: pg_backup_archiver.c:2713 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "encodage « %s » non reconnu" -#: pg_backup_archiver.c:2718 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "élément ENCODING invalide : %s" -#: pg_backup_archiver.c:2736 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "élément STDSTRINGS invalide : %s" -#: pg_backup_archiver.c:2761 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "schéma « %s » non trouvé" -#: pg_backup_archiver.c:2768 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "table « %s » non trouvée" -#: pg_backup_archiver.c:2775 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "index « %s » non trouvé" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "fonction « %s » non trouvée" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "trigger « %s » non trouvé" -#: pg_backup_archiver.c:3185 +#: pg_backup_archiver.c:3257 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "n'a pas pu initialiser la session utilisateur à « %s »: %s" -#: pg_backup_archiver.c:3317 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "n'a pas pu configurer search_path à « %s » : %s" -#: pg_backup_archiver.c:3379 +#: pg_backup_archiver.c:3461 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "n'a pas pu configurer default_tablespace à %s : %s" -#: pg_backup_archiver.c:3424 +#: pg_backup_archiver.c:3506 #, c-format msgid "could not set default_table_access_method: %s" msgstr "n'a pas pu configurer la méthode default_table_access_method à %s" -#: pg_backup_archiver.c:3516 pg_backup_archiver.c:3674 +#: pg_backup_archiver.c:3598 pg_backup_archiver.c:3756 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "ne sait pas comment initialiser le propriétaire du type d'objet « %s »" -#: pg_backup_archiver.c:3777 +#: pg_backup_archiver.c:3823 #, c-format msgid "did not find magic string in file header" msgstr "n'a pas trouver la chaîne magique dans le fichier d'en-tête" -#: pg_backup_archiver.c:3791 +#: pg_backup_archiver.c:3837 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "version non supportée (%d.%d) dans le fichier d'en-tête" -#: pg_backup_archiver.c:3796 +#: pg_backup_archiver.c:3842 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "échec de la vérification sur la taille de l'entier (%lu)" -#: pg_backup_archiver.c:3800 +#: pg_backup_archiver.c:3846 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "l'archive a été créée sur une machine disposant d'entiers plus larges, certaines opérations peuvent échouer" -#: pg_backup_archiver.c:3810 +#: pg_backup_archiver.c:3856 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "le format attendu (%d) diffère du format du fichier (%d)" -#: pg_backup_archiver.c:3825 +#: pg_backup_archiver.c:3871 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "l'archive est compressée mais cette installation ne supporte pas la compression -- aucune donnée ne sera disponible" -#: pg_backup_archiver.c:3859 +#: pg_backup_archiver.c:3905 #, c-format msgid "invalid creation date in header" msgstr "date de création invalide dans l'en-tête" -#: pg_backup_archiver.c:3993 +#: pg_backup_archiver.c:4039 #, c-format msgid "processing item %d %s %s" msgstr "traitement de l'élément %d %s %s" -#: pg_backup_archiver.c:4072 +#: pg_backup_archiver.c:4118 #, c-format msgid "entering main parallel loop" msgstr "entrée dans la boucle parallèle principale" -#: pg_backup_archiver.c:4083 +#: pg_backup_archiver.c:4129 #, c-format msgid "skipping item %d %s %s" msgstr "omission de l'élément %d %s %s" -#: pg_backup_archiver.c:4092 +#: pg_backup_archiver.c:4138 #, c-format msgid "launching item %d %s %s" msgstr "lancement de l'élément %d %s %s" -#: pg_backup_archiver.c:4146 +#: pg_backup_archiver.c:4192 #, c-format msgid "finished main parallel loop" msgstr "fin de la boucle parallèle principale" -#: pg_backup_archiver.c:4182 +#: pg_backup_archiver.c:4228 #, c-format msgid "processing missed item %d %s %s" msgstr "traitement de l'élément manquant %d %s %s" -#: pg_backup_archiver.c:4787 +#: pg_backup_archiver.c:4833 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "la table « %s » n'a pas pu être créée, ses données ne seront pas restaurées" @@ -980,12 +980,12 @@ msgstr "compression activée" msgid "could not get server_version from libpq" msgstr "n'a pas pu obtenir server_version de libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1837 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "version du serveur : %s ; %s version : %s" -#: pg_backup_db.c:55 pg_dumpall.c:1839 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "annulation à cause de la différence des versions" @@ -995,7 +995,7 @@ msgstr "annulation à cause de la différence des versions" msgid "already connected to a database" msgstr "déjà connecté à une base de données" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1666 pg_dumpall.c:1777 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "Mot de passe : " @@ -1009,17 +1009,17 @@ msgstr "n'a pas pu se connecter à la base de données" msgid "reconnection failed: %s" msgstr "échec de la reconnexion : %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1697 pg_dumpall.c:1787 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1900 pg_dumpall.c:1923 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "échec de la requête : %s" -#: pg_backup_db.c:278 pg_dumpall.c:1901 pg_dumpall.c:1924 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "la requête était : %s" @@ -1055,7 +1055,7 @@ msgstr "erreur renvoyée par PQputCopyEnd : %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY échoué pour la table « %s » : %s" -#: pg_backup_db.c:525 pg_dump.c:2131 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "résultats supplémentaires non attendus durant l'exécution de COPY sur la table « %s »" @@ -1241,10 +1241,10 @@ msgstr "en-tête tar corrompu trouvé dans %s (%d attendu, %d calculé ) à la p msgid "unrecognized section name: \"%s\"" msgstr "nom de section non reconnu : « %s »" -#: pg_backup_utils.c:55 pg_dump.c:626 pg_dump.c:643 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Essayer « %s --help » pour plus d'informations.\n" @@ -1254,72 +1254,87 @@ msgstr "Essayer « %s --help » pour plus d'informations.\n" msgid "out of on_exit_nicely slots" msgstr "plus d'emplacements on_exit_nicely" -#: pg_dump.c:552 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "le niveau de compression doit être compris entre 0 et 9" -#: pg_dump.c:590 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits doit être dans l'intervalle -15 à 3" -#: pg_dump.c:613 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "le nombre de lignes par insertion doit être compris entre %d et %d" -#: pg_dump.c:641 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" -#: pg_dump.c:662 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "les options « -s/--schema-only » et « -a/--data-only » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:667 +#: pg_dump.c:673 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "les options « -s/--schema-only » et « --include-foreign-data » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:670 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "l'option --include-foreign-data n'est pas supportée avec une sauvegarde parallélisée" -#: pg_dump.c:674 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "les options « -c/--clean » et « -a/--data-only » ne peuvent pas être utilisées ensemble" -#: pg_dump.c:679 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "l'option --if-exists nécessite l'option -c/--clean" -#: pg_dump.c:686 +#: pg_dump.c:692 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "l'option --on-conflict-do-nothing requiert l'option --inserts, --rows-per-insert, ou --column-inserts" -#: pg_dump.c:708 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "n'a pas pu générer la clé de restriction" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "clé de restriction invalide" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "l'option --restrict-key peut seulement être utilisée avec --format=plain" + +#: pg_dump.c:728 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "la compression requise n'est pas disponible avec cette installation -- l'archive ne sera pas compressée" -#: pg_dump.c:729 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "nombre de jobs parallèles invalide" -#: pg_dump.c:733 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "la sauvegarde parallélisée n'est supportée qu'avec le format directory" -#: pg_dump.c:788 +#: pg_dump.c:808 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1330,32 +1345,32 @@ msgstr "" "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" "de snapshots synchronisés." -#: pg_dump.c:794 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Les images exportées de la base ne sont pas supportées par cette version du serveur." -#: pg_dump.c:806 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "le dernier OID interne est %u" -#: pg_dump.c:815 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "aucun schéma correspondant n'a été trouvé" -#: pg_dump.c:829 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "aucune table correspondante n'a été trouvée" -#: pg_dump.c:851 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "aucune extension correspondante n'a été trouvée" -#: pg_dump.c:1021 +#: pg_dump.c:1042 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1365,17 +1380,17 @@ msgstr "" "formats.\n" "\n" -#: pg_dump.c:1022 pg_dumpall.c:622 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "Usage :\n" -#: pg_dump.c:1023 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [BASE]\n" -#: pg_dump.c:1025 pg_dumpall.c:625 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "" "\n" @@ -1384,12 +1399,12 @@ msgstr "" "\n" "Options générales :\n" -#: pg_dump.c:1026 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=FICHIER nom du fichier ou du répertoire en sortie\n" -#: pg_dump.c:1027 +#: pg_dump.c:1048 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1398,50 +1413,50 @@ msgstr "" " -F, --format=c|d|t|p format du fichier de sortie (personnalisé,\n" " répertoire, tar, texte (par défaut))\n" -#: pg_dump.c:1029 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr "" " -j, --jobs=NOMBRE utilise ce nombre de jobs en parallèle pour la\n" " sauvegarde\n" -#: pg_dump.c:1030 pg_dumpall.c:627 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose mode verbeux\n" -#: pg_dump.c:1031 pg_dumpall.c:628 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_dump.c:1032 +#: pg_dump.c:1053 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr "" " -Z, --compress=0-9 niveau de compression pour les formats\n" " compressés\n" -#: pg_dump.c:1033 pg_dumpall.c:629 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr "" " --lock-wait-timeout=DÉLAI échec après l'attente du DÉLAI pour un verrou de\n" " table\n" -#: pg_dump.c:1034 pg_dumpall.c:656 +#: pg_dump.c:1055 pg_dumpall.c:698 #, 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_dump.c:1035 pg_dumpall.c:630 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_dump.c:1037 pg_dumpall.c:631 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "" "\n" @@ -1450,56 +1465,56 @@ msgstr "" "\n" "Options contrôlant le contenu en sortie :\n" -#: pg_dump.c:1038 pg_dumpall.c:632 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only sauvegarde uniquement les données, pas le schéma\n" -#: pg_dump.c:1039 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs inclut les « Large Objects » dans la sauvegarde\n" -#: pg_dump.c:1040 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs exclut les « Large Objects » de la sauvegarde\n" -#: pg_dump.c:1041 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr "" " -c, --clean nettoie/supprime les objets de la base de données\n" " avant de les créer\n" -#: pg_dump.c:1042 +#: pg_dump.c:1063 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr "" " -C, --create inclut les commandes de création de la base\n" " dans la sauvegarde\n" -#: pg_dump.c:1043 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=MOTIF sauvegarde uniquement les extensions indiquées\n" -#: pg_dump.c:1044 pg_dumpall.c:634 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=ENCODAGE sauvegarde les données dans l'encodage ENCODAGE\n" -#: pg_dump.c:1045 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MOTIF sauvegarde uniquement les schémas indiqués\n" -#: pg_dump.c:1046 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MOTIF ne sauvegarde pas les schémas indiqués\n" -#: pg_dump.c:1047 +#: pg_dump.c:1068 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1508,50 +1523,50 @@ msgstr "" " -O, --no-owner ne sauvegarde pas les propriétaires des objets\n" " lors de l'utilisation du format texte\n" -#: pg_dump.c:1049 pg_dumpall.c:638 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr "" " -s, --schema-only sauvegarde uniquement la structure, pas les\n" " données\n" -#: pg_dump.c:1050 +#: pg_dump.c:1071 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à utiliser\n" " avec le format texte\n" -#: pg_dump.c:1051 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MOTIF sauvegarde uniquement les tables indiquées\n" -#: pg_dump.c:1052 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MOTIF ne sauvegarde pas les tables indiquées\n" -#: pg_dump.c:1053 pg_dumpall.c:641 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges ne sauvegarde pas les droits sur les objets\n" -#: pg_dump.c:1054 pg_dumpall.c:642 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr "" " --binary-upgrade à n'utiliser que par les outils de mise à jour\n" " seulement\n" -#: pg_dump.c:1055 pg_dumpall.c:643 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr "" " --column-inserts sauvegarde les données avec des commandes INSERT\n" " en précisant les noms des colonnes\n" -#: pg_dump.c:1056 pg_dumpall.c:644 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" @@ -1559,14 +1574,14 @@ msgstr "" " dans le but de respecter le standard SQL en\n" " matière de guillemets\n" -#: pg_dump.c:1057 pg_dumpall.c:645 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr "" " --disable-triggers désactive les triggers en mode de restauration\n" " des données seules\n" -#: pg_dump.c:1058 +#: pg_dump.c:1079 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1576,26 +1591,26 @@ msgstr "" " sauvegarde uniquement le contenu visible par cet\n" " utilisateur)\n" -#: pg_dump.c:1060 +#: pg_dump.c:1081 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MOTIF ne sauvegarde pas les tables indiquées\n" -#: pg_dump.c:1061 pg_dumpall.c:647 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr "" " --extra-float-digits=NUM surcharge la configuration par défaut de\n" " extra_float_digits\n" -#: pg_dump.c:1062 pg_dumpall.c:648 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr "" " --if-exists utilise IF EXISTS lors de la suppression des\n" " objets\n" -#: pg_dump.c:1063 +#: pg_dump.c:1084 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1605,105 +1620,110 @@ msgstr "" " --include-foreign-data=MOTIF inclut les données des tables externes pour les\n" " serveurs distants correspondant au motif MOTIF\n" -#: pg_dump.c:1066 pg_dumpall.c:649 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr "" " --inserts sauvegarde les données avec des instructions\n" " INSERT plutôt que COPY\n" -#: pg_dump.c:1067 pg_dumpall.c:650 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root charger les partitions via la table racine\n" -#: pg_dump.c:1068 pg_dumpall.c:651 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments ne sauvegarde pas les commentaires\n" -#: pg_dump.c:1069 pg_dumpall.c:652 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications ne sauvegarde pas les publications\n" -#: pg_dump.c:1070 pg_dumpall.c:654 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr "" " --no-security-labels ne sauvegarde pas les affectations de labels de\n" " sécurité\n" -#: pg_dump.c:1071 pg_dumpall.c:655 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions ne sauvegarde pas les souscriptions\n" -#: pg_dump.c:1072 +#: pg_dump.c:1093 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr "" " --no-synchronized-snapshots n'utilise pas de snapshots synchronisés pour les\n" " jobs en parallèle\n" -#: pg_dump.c:1073 pg_dumpall.c:657 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces ne sauvegarde pas les affectations de tablespaces\n" -#: pg_dump.c:1074 pg_dumpall.c:658 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr "" " --no-toast-compression ne sauvegarde pas les méthodes de compression de\n" " TOAST\n" -#: pg_dump.c:1075 pg_dumpall.c:659 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr "" " --no-unlogged-table-data ne sauvegarde pas les données des tables non\n" " journalisées\n" -#: pg_dump.c:1076 pg_dumpall.c:660 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr "" " --on-conflict-do-nothing ajoute ON CONFLICT DO NOTHING aux commandes\n" " INSERT\n" -#: pg_dump.c:1077 pg_dumpall.c:661 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers met entre guillemets tous les identifiants même\n" " s'il ne s'agit pas de mots clés\n" -#: pg_dump.c:1078 pg_dumpall.c:662 +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid " --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr " --restrict-key=CLE utilise la chaîne fournie comme clé pour \\restrict de psql\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NROWS nombre de lignes par INSERT ; implique --inserts\n" -#: pg_dump.c:1079 +#: pg_dump.c:1101 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION sauvegarde la section indiquée (pre-data, data\n" " ou post-data)\n" -#: pg_dump.c:1080 +#: pg_dump.c:1102 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr "" " --serializable-deferrable attend jusqu'à ce que la sauvegarde puisse\n" " s'exécuter sans anomalies\n" -#: pg_dump.c:1081 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT utilise l'image donnée pour la sauvegarde\n" -#: pg_dump.c:1082 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1712,7 +1732,7 @@ msgstr "" " --strict-names requiert que les motifs des tables et/ou schémas\n" " correspondent à au moins une entité de chaque\n" -#: pg_dump.c:1084 pg_dumpall.c:663 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1724,7 +1744,7 @@ msgstr "" " au lieu des commandes ALTER OWNER pour modifier\n" " les propriétaires\n" -#: pg_dump.c:1088 pg_dumpall.c:667 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "" "\n" @@ -1733,46 +1753,46 @@ msgstr "" "\n" "Options de connexion :\n" -#: pg_dump.c:1089 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=BASE base de données à sauvegarder\n" -#: pg_dump.c:1090 pg_dumpall.c:669 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, 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_dump.c:1091 pg_dumpall.c:671 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, 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_dump.c:1092 pg_dumpall.c:672 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NOM se connecter avec cet utilisateur\n" -#: pg_dump.c:1093 pg_dumpall.c:673 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ne demande jamais un mot de passe\n" -#: pg_dump.c:1094 pg_dumpall.c:674 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, 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_dump.c:1095 pg_dumpall.c:675 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=NOMROLE exécute SET ROLE avant la sauvegarde\n" -#: pg_dump.c:1097 +#: pg_dump.c:1119 #, c-format msgid "" "\n" @@ -1785,22 +1805,22 @@ msgstr "" "d'environnement PGDATABASE est alors utilisée.\n" "\n" -#: pg_dump.c:1099 pg_dumpall.c:679 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapporter les bogues à <%s>.\n" -#: pg_dump.c:1100 pg_dumpall.c:680 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" -#: pg_dump.c:1119 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "encodage client indiqué (« %s ») invalide" -#: pg_dump.c:1265 +#: pg_dump.c:1295 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1811,553 +1831,553 @@ msgstr "" "Lancez avec --no-synchronized-snapshots à la place si vous n'avez pas besoin\n" "de snapshots synchronisés." -#: pg_dump.c:1334 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "format de sortie « %s » invalide" -#: pg_dump.c:1375 pg_dump.c:1431 pg_dump.c:1484 pg_dumpall.c:1451 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "mauvaise qualification du nom (trop de points entre les noms) : %s" -#: pg_dump.c:1383 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "aucun schéma correspondant n'a été trouvé avec le motif « %s »" -#: pg_dump.c:1436 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "aucune extension correspondante n'a été trouvée avec le motif « %s »" -#: pg_dump.c:1489 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "aucun serveur distant correspondant n'a été trouvé avec le motif « %s »" -#: pg_dump.c:1552 +#: pg_dump.c:1582 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "nom de relation incorrecte (trop de points entre les noms) : %s" -#: pg_dump.c:1563 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "aucune table correspondante n'a été trouvée avec le motif « %s »" -#: pg_dump.c:1590 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "Vous n'êtes pas connecté à une base de données." -#: pg_dump.c:1593 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "les références entre bases de données ne sont pas implémentées : %s" -#: pg_dump.c:2005 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "sauvegarde du contenu de la table « %s.%s »" -#: pg_dump.c:2112 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Sauvegarde du contenu de la table « %s » échouée : échec de PQgetCopyData()." -#: pg_dump.c:2113 pg_dump.c:2123 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "Message d'erreur du serveur : %s" -#: pg_dump.c:2114 pg_dump.c:2124 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "La commande était : %s" -#: pg_dump.c:2122 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Sauvegarde du contenu de la table « %s » échouée : échec de PQgetResult()." -#: pg_dump.c:2204 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "mauvais nombre de champs récupérés à partir de la table « %s »" -#: pg_dump.c:2955 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "sauvegarde de la définition de la base de données" -#: pg_dump.c:3427 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "encodage de la sauvegarde = %s" -#: pg_dump.c:3452 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sauvegarde de standard_conforming_strings = %s" -#: pg_dump.c:3491 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "n'a pas pu analyser le résultat de current_schema()" -#: pg_dump.c:3510 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "sauvegarde de search_path = %s" -#: pg_dump.c:3550 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "lecture des « Large Objects »" -#: pg_dump.c:3732 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "sauvegarde des « Large Objects »" -#: pg_dump.c:3778 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "erreur lors de la lecture du « Large Object » %u : %s" -#: pg_dump.c:3882 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "lecture des politiques de sécurité au niveau ligne" -#: pg_dump.c:4021 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "type de commande inattendu pour la politique : %c" -#: pg_dump.c:4175 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "le propriétaire de la publication « %s » semble être invalide" -#: pg_dump.c:4467 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "les souscriptions ne sont pas sauvegardées parce que l'utilisateur courant n'est pas un superutilisateur" -#: pg_dump.c:4538 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "le propriétaire de la souscription « %s » semble être invalide" -#: pg_dump.c:4581 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "n'a pas pu analyser le tableau de sous-publications" -#: pg_dump.c:4939 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "n'a pas pu trouver l'extension parent pour %s %s" -#: pg_dump.c:5071 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "le propriétaire du schéma « %s » semble être invalide" -#: pg_dump.c:5094 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "le schéma d'OID %u n'existe pas" -#: pg_dump.c:5424 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "le propriétaire du type de données « %s » semble être invalide" -#: pg_dump.c:5508 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "le propriétaire de l'opérateur « %s » semble être invalide" -#: pg_dump.c:5807 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "le propriétaire de la classe d'opérateur « %s » semble être invalide" -#: pg_dump.c:5890 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "le propriétaire de la famille d'opérateur « %s » semble être invalide" -#: pg_dump.c:6058 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "le propriétaire de la fonction d'agrégat « %s » semble être invalide" -#: pg_dump.c:6317 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "le propriétaire de la fonction « %s » semble être invalide" -#: pg_dump.c:7113 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "le propriétaire de la table « %s » semble être invalide" -#: pg_dump.c:7155 pg_dump.c:17699 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "vérification échouée, OID %u de la table parent de l'OID %u de la séquence introuvable" -#: pg_dump.c:7298 +#: pg_dump.c:7439 #, c-format msgid "failed sanity check, table OID %u appearing in pg_partitioned_table not found" msgstr "vérification échouée, OID de table %u apparaissant dans pg_partitioned_table introuvable" -#: pg_dump.c:7364 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "lecture des index de la table « %s.%s »" -#: pg_dump.c:7778 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "lecture des contraintes de clés étrangères pour la table « %s.%s »" -#: pg_dump.c:8057 +#: pg_dump.c:8202 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "vérification échouée, OID %u de la table parent de l'OID %u de l'entrée de pg_rewrite introuvable" -#: pg_dump.c:8141 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "lecture des triggers pour la table « %s.%s »" -#: pg_dump.c:8323 +#: pg_dump.c:8468 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "la requête a produit une réference de nom de table null pour le trigger de la clé étrangère « %s » sur la table « %s » (OID de la table : %u)" -#: pg_dump.c:8873 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "recherche des colonnes et types de la table « %s.%s »" -#: pg_dump.c:8997 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "numérotation des colonnes invalide pour la table « %s »" -#: pg_dump.c:9036 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "recherche des expressions par défaut de la table « %s.%s »" -#: pg_dump.c:9058 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "valeur adnum %d invalide pour la table « %s »" -#: pg_dump.c:9151 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "recherche des contraintes de vérification pour la table « %s.%s »" -#: pg_dump.c:9200 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "%d contrainte de vérification attendue pour la table « %s » mais %d trouvée" msgstr[1] "%d contraintes de vérification attendues pour la table « %s » mais %d trouvée" -#: pg_dump.c:9204 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Les catalogues système sont peut-être corrompus.)" -#: pg_dump.c:10806 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "la colonne typtype du type de données « %s » semble être invalide" -#: pg_dump.c:12154 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "valeur erronée dans le tableau proargmodes" -#: pg_dump.c:12456 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "n'a pas pu analyser le tableau proallargtypes" -#: pg_dump.c:12472 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "n'a pas pu analyser le tableau proargmodes" -#: pg_dump.c:12486 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "n'a pas pu analyser le tableau proargnames" -#: pg_dump.c:12496 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "n'a pas pu analyser le tableau proconfig" -#: pg_dump.c:12572 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "valeur provolatile non reconnue pour la fonction « %s »" -#: pg_dump.c:12622 pg_dump.c:14563 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "valeur proparallel non reconnue pour la fonction « %s »" -#: pg_dump.c:12761 pg_dump.c:12867 pg_dump.c:12874 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "n'a pas pu trouver la définition de la fonction d'OID %u" -#: pg_dump.c:12800 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "valeur erronée dans le champ pg_cast.castfunc ou pg_cast.castmethod" -#: pg_dump.c:12803 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "valeur erronée dans pg_cast.castmethod" -#: pg_dump.c:12893 +#: pg_dump.c:13044 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "définition de transformation invalide, au moins un de trffromsql et trftosql ne doit pas valoir 0" -#: pg_dump.c:12910 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "valeur erronée dans pg_transform.trffromsql" -#: pg_dump.c:12931 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "valeur erronée dans pg_transform.trftosql" -#: pg_dump.c:13082 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "les opérateurs postfixes ne sont plus supportés (opérateur « %s »)" -#: pg_dump.c:13252 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "n'a pas pu trouver l'opérateur d'OID %s" -#: pg_dump.c:13320 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "type « %c » invalide de la méthode d'accès « %s »" -#: pg_dump.c:14074 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "fournisseur de collationnement non reconnu : %s" -#: pg_dump.c:14482 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "valeur non reconnue de aggfinalmodify pour l'agrégat « %s »" -#: pg_dump.c:14538 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "valeur non reconnue de aggmfinalmodify pour l'agrégat « %s »" -#: pg_dump.c:15260 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "type d'objet inconnu dans les droits par défaut : %d" -#: pg_dump.c:15278 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "n'a pas pu analyser la liste ACL par défaut (%s)" -#: pg_dump.c:15363 +#: pg_dump.c:15514 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "n'a pas pu analyser la liste ACL GRANT initiale (%s) ou la liste ACL REVOKE initiale (%s) de l'objet « %s » (%s)" -#: pg_dump.c:15371 +#: pg_dump.c:15522 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "n'a pas pu analyser la liste ACL GRANT (%s) ou REVOKE (%s) de l'objet « %s » (%s)" -#: pg_dump.c:15886 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "la requête permettant d'obtenir la définition de la vue « %s » n'a renvoyé aucune donnée" -#: pg_dump.c:15889 +#: pg_dump.c:16040 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "la requête permettant d'obtenir la définition de la vue « %s » a renvoyé plusieurs définitions" -#: pg_dump.c:15896 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "la définition de la vue « %s » semble être vide (longueur nulle)" -#: pg_dump.c:15980 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS n'est plus supporté (table « %s »)" -#: pg_dump.c:16886 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "numéro de colonne %d invalide pour la table « %s »" -#: pg_dump.c:16963 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "n'a pas pu analyser les colonnes statistiques de l'index" -#: pg_dump.c:16965 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "n'a pas pu analyser les valeurs statistiques de l'index" -#: pg_dump.c:16967 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "nombre de colonnes et de valeurs différentes pour les statistiques des index" -#: pg_dump.c:17184 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "index manquant pour la contrainte « %s »" -#: pg_dump.c:17409 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "type de contrainte inconnu : %c" -#: pg_dump.c:17541 pg_dump.c:17764 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé %d ligne (une seule attendue)" msgstr[1] "la requête permettant d'obtenir les données de la séquence « %s » a renvoyé %d ligne (une seule attendue)" -#: pg_dump.c:17575 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "type de séquence non reconnu : « %s »" -#: pg_dump.c:17862 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "valeur tgtype inattendue : %d" -#: pg_dump.c:17936 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "chaîne argument invalide (%s) pour le trigger « %s » sur la table « %s »" -#: pg_dump.c:18205 +#: pg_dump.c:18391 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "la requête permettant d'obtenir la règle « %s » associée à la table « %s » a échoué : mauvais nombre de lignes renvoyées" -#: pg_dump.c:18367 +#: pg_dump.c:18553 #, c-format msgid "could not find referenced extension %u" msgstr "n'a pas pu trouver l'extension référencée %u" -#: pg_dump.c:18458 +#: pg_dump.c:18644 #, c-format msgid "could not parse extension configuration array" msgstr "n'a pas pu analyser le tableau de configuration des extensions" -#: pg_dump.c:18460 +#: pg_dump.c:18646 #, c-format msgid "could not parse extension condition array" msgstr "n'a pas pu analyser le tableau de condition de l'extension" -#: pg_dump.c:18462 +#: pg_dump.c:18648 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "nombre différent de configurations et de conditions pour l'extension" -#: pg_dump.c:18594 +#: pg_dump.c:18780 #, c-format msgid "reading dependency data" msgstr "lecture des données de dépendance" -#: pg_dump.c:18687 +#: pg_dump.c:18873 #, c-format msgid "no referencing object %u %u" msgstr "pas d'objet référant %u %u" -#: pg_dump.c:18698 +#: pg_dump.c:18884 #, c-format msgid "no referenced object %u %u" msgstr "pas d'objet référencé %u %u" -#: pg_dump.c:19087 +#: pg_dump.c:19273 #, c-format msgid "could not parse reloptions array" msgstr "n'a pas pu analyser le tableau reloptions" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:632 #, c-format msgid "invalid dumpId %d" msgstr "dumpId %d invalide" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:638 #, c-format msgid "invalid dependency %d" msgstr "dépendance invalide %d" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:871 #, c-format msgid "could not identify dependency loop" msgstr "n'a pas pu identifier la boucle de dépendance" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1486 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "NOTE : il existe des constraintes de clés étrangères circulaires sur cette table :" msgstr[1] "NOTE : il existe des constraintes de clés étrangères circulaires sur ces tables :" -#: pg_dump_sort.c:1234 pg_dump_sort.c:1254 +#: pg_dump_sort.c:1490 pg_dump_sort.c:1510 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1235 +#: pg_dump_sort.c:1491 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Il est possible de restaurer la sauvegarde sans utiliser --disable-triggers ou sans supprimer temporairement les constraintes." -#: pg_dump_sort.c:1236 +#: pg_dump_sort.c:1492 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Considérez l'utilisation d'une sauvegarde complète au lieu d'une sauvegarde des données seulement pour éviter ce problème." -#: pg_dump_sort.c:1248 +#: pg_dump_sort.c:1504 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "n'a pas pu résoudre la boucle de dépendances parmi ces éléments :" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2368,7 +2388,7 @@ msgstr "" "dans le même répertoire que « %s ».\n" "Vérifiez votre installation." -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2379,32 +2399,32 @@ msgstr "" "mais n'est pas de la même version que %s.\n" "Vérifiez votre installation." -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "l'option --exclude-database ne peut pas être utilisée avec -g/--globals-only, -r/--roles-only ou -t/--tablespaces-only" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "les options « -g/--globals-only » et « -r/--roles-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -g/--globals-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "les options « -r/--roles-only » et « -t/--tablespaces-only » ne peuvent pas être utilisées ensemble" -#: pg_dumpall.c:453 pg_dumpall.c:1767 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "n'a pas pu se connecter à la base de données « %s »" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2413,7 +2433,7 @@ msgstr "" "n'a pas pu se connecter aux bases « postgres » et « template1 ».\n" "Merci de préciser une autre base de données." -#: pg_dumpall.c:621 +#: pg_dumpall.c:663 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2423,79 +2443,79 @@ msgstr "" "commandes SQL.\n" "\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [OPTION]...\n" -#: pg_dumpall.c:626 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=FICHIER nom du fichier de sortie\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:675 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr "" " -c, --clean nettoie (supprime) les bases de données avant de\n" " les créer\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only sauvegarde uniquement les objets système, pas\n" " le contenu des bases de données\n" -#: pg_dumpall.c:636 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner omet la restauration des propriétaires des objets\n" -#: pg_dumpall.c:637 +#: pg_dumpall.c:679 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only sauvegarde uniquement les rôles, pas les bases\n" " de données ni les tablespaces\n" -#: pg_dumpall.c:639 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à utiliser\n" " avec le format texte\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:682 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only sauvegarde uniquement les tablespaces, pas les\n" " bases de données ni les rôles\n" -#: pg_dumpall.c:646 +#: pg_dumpall.c:688 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr "" " --exclude-database=MOTIF exclut les bases de données dont le nom\n" " correspond au motif\n" -#: pg_dumpall.c:653 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords ne sauvegarde pas les mots de passe des rôles\n" -#: pg_dumpall.c:668 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CHAINE_CONNEX connexion à l'aide de la chaîne de connexion\n" -#: pg_dumpall.c:670 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=BASE indique une autre base par défaut\n" -#: pg_dumpall.c:677 +#: pg_dumpall.c:720 #, c-format msgid "" "\n" @@ -2508,92 +2528,103 @@ msgstr "" "standard.\n" "\n" -#: pg_dumpall.c:883 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "nom de rôle commençant par « pg_ » ignoré (« %s »)" -#: pg_dumpall.c:1284 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "a trouvé une entrée orpheline dans pg_auth_members pour le rôle %s" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "n'a pas pu analyser la liste d'ACL (%s) pour le tablespace « %s »" -#: pg_dumpall.c:1512 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "exclusion de la base de données « %s »" -#: pg_dumpall.c:1516 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "sauvegarde de la base de données « %s »" -#: pg_dumpall.c:1548 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "échec de pg_dump sur la base de données « %s », quitte" -#: pg_dumpall.c:1557 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "n'a pas pu ré-ouvrir le fichier de sortie « %s » : %m" -#: pg_dumpall.c:1601 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "exécute « %s »" -#: pg_dumpall.c:1816 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "n'a pas pu obtenir la version du serveur" -#: pg_dumpall.c:1822 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "n'a pas pu analyser la version du serveur « %s »" -#: pg_dumpall.c:1894 pg_dumpall.c:1917 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "exécution %s" -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "une seule des options -d/--dbname and -f/--file peut être indiquée" -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "les options « -d/--dbname » et « -f/--file » ne peuvent pas être utilisées ensemble" -#: pg_restore.c:343 +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "les options « -d/--dbname » et « --restrict-key » ne peuvent pas être utilisées ensemble" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "les options « -C/--create » et « -1/--single-transaction » ne peuvent pas être utilisées ensemble" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "le nombre maximum de jobs en parallèle est %d" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "ne peut pas spécifier à la fois l'option --single-transaction et demander plusieurs jobs" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "format d'archive « %s » non reconnu ; merci d'indiquer « c », « d » ou « t »" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "erreurs ignorées lors de la restauration : %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2603,51 +2634,51 @@ msgstr "" "par pg_dump.\n" "\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPTION]... [FICHIER]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr "" " -d, --dbname=NOM nom de la base de données utilisée pour la\n" " connexion\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=FICHIER nom du fichier de sortie (- pour stdout)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr "" " -F, --format=c|d|t format du fichier de sauvegarde (devrait être\n" " automatique)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list affiche la table des matières de l'archive (TOC)\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose mode verbeux\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version affiche la version puis quitte\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help affiche cette aide puis quitte\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "" "\n" @@ -2656,34 +2687,34 @@ msgstr "" "\n" "Options contrôlant la restauration :\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only restaure uniquement les données, pas la structure\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create crée la base de données cible\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error quitte en cas d'erreur, continue par défaut\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NOM restaure l'index indiqué\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr "" " -j, --jobs=NOMBRE utilise ce nombre de jobs en parallèle pour la\n" " restauration\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2692,66 +2723,66 @@ msgstr "" " -L, --use-list=FICHIER utilise la table des matières à partir de ce\n" " fichier pour sélectionner/trier la sortie\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NOM restaure uniquement les objets de ce schéma\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NOM ne restaure pas les objets de ce schéma\n" -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NOM(args) restaure la fonction indiquée\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only restaure uniquement la structure, pas les données\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr "" " -S, --superuser=NOM indique le nom du super-utilisateur à utiliser\n" " pour désactiver les triggers\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr " -t, --table=NOM restaure la relation indiquée (table, vue, etc)\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NOM restaure le trigger indiqué\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr "" " -x, --no-privileges omet la restauration des droits sur les objets\n" " (grant/revoke)\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction restaure dans une seule transaction\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security active la sécurité niveau ligne\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments ne restaure pas les commentaires\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2760,39 +2791,39 @@ msgstr "" " --no-data-for-failed-tables ne restaure pas les données des tables qui n'ont\n" " pas pu être créées\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications ne restaure pas les publications\n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels ne restaure pas les labels de sécurité\n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions ne restaure pas les souscriptions\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces ne restaure pas les affectations de tablespaces\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION restaure la section indiquée (pre-data, data ou\n" " post-data)\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=RÔLE exécute SET ROLE avant la restauration\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "" "\n" @@ -2803,7 +2834,7 @@ msgstr "" "Les options -I, -n, -N, -P, -t, -T et --section peuvent être combinées et\n" "indiquées plusieurs fois pour sélectionner plusieurs objets.\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/ja.po b/src/bin/pg_dump/po/ja.po index 90b441ebe03..1a23cf11681 100644 --- a/src/bin/pg_dump/po/ja.po +++ b/src/bin/pg_dump/po/ja.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL 14)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-03-20 09:20+0900\n" -"PO-Revision-Date: 2023-03-20 17:25+0900\n" +"POT-Creation-Date: 2025-08-19 09:28+0900\n" +"PO-Revision-Date: 2025-08-19 10:47+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -117,222 +117,222 @@ msgstr "子プロセスはシグナル%dにより終了しました: %s" msgid "child process exited with unrecognized status %d" msgstr "子プロセスは認識できないステータス%dで終了しました" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "機能拡張を読み込んでいます" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "機能拡張の構成要素を特定しています" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "スキーマを読み込んでいます" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "ユーザー定義テーブルを読み込んでいます" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "ユーザー定義関数を読み込んでいます" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "ユーザー定義型を読み込んでいます" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "手続き言語を読み込んでいます" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "ユーザー定義集約関数を読み込んでいます" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "ユーザー定義演算子を読み込んでいます" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "ユーザー定義アクセスメソッドを読み込んでいます" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "ユーザー定義演算子クラスを読み込んでいます" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "ユーザー定義演算子族を読み込んでいます" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "ユーザー定義のテキスト検索パーサを読み込んでいます" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "ユーザー定義のテキスト検索テンプレートを読み込んでいます" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "ユーザー定義のテキスト検索辞書を読み込んでいます" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "ユーザー定義のテキスト検索設定を読み込んでいます" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "ユーザー定義の外部データラッパーを読み込んでいます" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "ユーザー定義の外部サーバーを読み込んでいます" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "デフォルト権限設定を読み込んでいます" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "ユーザー定義の照合順序を読み込んでいます" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "ユーザー定義の変換を読み込んでいます" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "型キャストを読み込んでいます" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "変換を読み込んでいます" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "テーブル継承情報を読み込んでいます" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "イベントトリガを読み込んでいます" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "機能拡張構成テーブルを探しています" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "継承関係を検索しています" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "対象テーブルの列情報を読み込んでいます" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "子テーブルの継承列にフラグを設定しています" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "パーティション情報を読み込んでいます" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "インデックスを読み込んでいます" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "パーティション親テーブルのインデックスにフラグを設定しています" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "拡張統計情報を読み込んでいます" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "制約を読み込んでいます" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "トリガを読み込んでいます" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "書き換えルールを読み込んでいます" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "ポリシを読み込んでいます" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "パブリケーションを読み込んでいます" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "パブリケーションの構成要素を読み込んでいます" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "サブスクリプションを読み込んでいます" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "テーブル\"%2$s\"用の親テーブルの数%1$dが不正です" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "健全性検査に失敗しました、テーブル\"%2$s\"(OID %3$u)の親のOID %1$uがありません" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "数値配列\"%s\"のパースに失敗しました: 要素が多すぎます" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "数値配列\"%s\"のパースに失敗しました: 数値に不正な文字が含まれています" @@ -463,7 +463,7 @@ msgstr "pgpipe: ソケットを接続できませんでした: エラーコー msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: 接続を受け付けられませんでした: エラーコード %d" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1629 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "出力ファイルをクローズできませんでした: %m" @@ -508,385 +508,385 @@ msgstr "1.3より古いアーカイブではデータベースへの直接接続 msgid "implied data-only restore" msgstr "暗黙的にデータのみのリストアを行います" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "%s %sを削除しています" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "文\"%s\"中に IF EXISTS を挿入すべき場所が見つかりませでした" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "オリジナルのダンプファイルからの警告: %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "%s \"%s.%s\"を作成しています" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "%s \"%s\"を作成しています" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "新しいデータベース\"%s\"に接続しています" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "%sを処理しています" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のデータを処理しています" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "%s %sを実行しています" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "%sのトリガを無効にしています" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "%sのトリガを有効にしています" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "内部エラー -- WriteDataはDataDumperルーチンのコンテクスト外では呼び出せません" -#: pg_backup_archiver.c:1276 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "選択した形式ではラージオブジェクト出力をサポートしていません" -#: pg_backup_archiver.c:1334 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "%d個のラージオブジェクトをリストアしました" msgstr[1] "%d個のラージオブジェクトをリストアしました" -#: pg_backup_archiver.c:1355 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "OID %uのラージオブジェクトをリストアしています" -#: pg_backup_archiver.c:1367 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "ラージオブジェクト %u を作成できませんでした: %s" -#: pg_backup_archiver.c:1372 pg_dump.c:3768 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "ラージオブジェクト %u をオープンできませんでした: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "TOCファイル\"%s\"をオープンできませんでした: %m" -#: pg_backup_archiver.c:1456 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "行を無視しました: %s" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "ID %dのエントリがありませんでした" -#: pg_backup_archiver.c:1486 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "TOCファイルをクローズできませんでした: %m" -#: pg_backup_archiver.c:1600 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "出力ファイル\"%s\"をオープンできませんでした: %m" -#: pg_backup_archiver.c:1602 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "出力ファイルをオープンできませんでした: %m" -#: pg_backup_archiver.c:1696 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "ラージオブジェクトデータを%zuバイト書き出しました(結果は%d)" msgstr[1] "ラージオブジェクトデータを%zuバイト書き出しました(結果は%d)" -#: pg_backup_archiver.c:1702 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "ラージオブジェクトに書き込めませんでした: %s" -#: pg_backup_archiver.c:1792 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "初期化中:" -#: pg_backup_archiver.c:1797 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "TOC処理中:" -#: pg_backup_archiver.c:1802 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "終了処理中:" -#: pg_backup_archiver.c:1807 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "TOCエントリ%d; %u %u %s %s %s から" -#: pg_backup_archiver.c:1883 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "不正なdumpId" -#: pg_backup_archiver.c:1904 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "TABLE DATA項目に対する不正なテーブルdumpId" -#: pg_backup_archiver.c:1996 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "想定外のデータオフセットフラグ %d" -#: pg_backup_archiver.c:2009 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "ダンプファイルのファイルオフセットが大きすぎます" -#: pg_backup_archiver.c:2147 pg_backup_archiver.c:2157 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "ディレクトリ名が長すぎます: \"%s\"" -#: pg_backup_archiver.c:2165 +#: pg_backup_archiver.c:2187 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "ディレクトリ\"%s\"は有効なアーカイブではないようです(\"toc.dat\"がありません)" -#: pg_backup_archiver.c:2173 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "入力ファイル\"%s\"をオープンできませんでした: %m" -#: pg_backup_archiver.c:2180 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "入力ファイルをオープンできませんでした: %m" -#: pg_backup_archiver.c:2186 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "入力ファイルを読み込めませんでした: %m" -#: pg_backup_archiver.c:2188 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "入力ファイルが小さすぎます(読み取り%lu、想定は 5)" -#: pg_backup_archiver.c:2220 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "入力ファイルがテキスト形式のダンプのようです。psqlを使用してください。" -#: pg_backup_archiver.c:2226 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "入力ファイルが有効なアーカイブではないようです(小さすぎる?)" -#: pg_backup_archiver.c:2232 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "入力ファイルが有効なアーカイブではないようです" -#: pg_backup_archiver.c:2241 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "入力ファイルをクローズできませんでした: %m" -#: pg_backup_archiver.c:2358 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "認識不能のファイル形式\"%d\"" -#: pg_backup_archiver.c:2440 pg_backup_archiver.c:4468 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4483 #, c-format msgid "finished item %d %s %s" msgstr "項目 %d %s %s の処理が完了" -#: pg_backup_archiver.c:2444 pg_backup_archiver.c:4481 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4496 #, c-format msgid "worker process failed: exit code %d" msgstr "ワーカープロセスの処理失敗: 終了コード %d" -#: pg_backup_archiver.c:2564 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "エントリID%dは範囲外です -- おそらくTOCの破損です" -#: pg_backup_archiver.c:2631 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "WITH OIDSと定義されたテーブルのリストアは今後サポートされません" -#: pg_backup_archiver.c:2713 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "認識不能のエンコーディング\"%s\"" -#: pg_backup_archiver.c:2718 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "不正なENCODING項目: %s" -#: pg_backup_archiver.c:2736 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "不正なSTDSTRINGS項目: %s" -#: pg_backup_archiver.c:2761 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "スキーマ \"%s\"が見つかりません" -#: pg_backup_archiver.c:2768 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "テーブル\"%s\"が見つかりません" -#: pg_backup_archiver.c:2775 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "インデックス\"%s\"が見つかりません" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "関数\"%s\"が見つかりません" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "トリガ\"%s\"が見つかりません" -#: pg_backup_archiver.c:3185 +#: pg_backup_archiver.c:3226 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "セッションユーザーを\"%s\"に設定できませんでした: %s" -#: pg_backup_archiver.c:3317 +#: pg_backup_archiver.c:3368 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "search_pathを\"%s\"に設定できませんでした: %s" -#: pg_backup_archiver.c:3379 +#: pg_backup_archiver.c:3430 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "default_tablespaceを\"%s\"に設定できませんでした: %s" -#: pg_backup_archiver.c:3424 +#: pg_backup_archiver.c:3475 #, c-format msgid "could not set default_table_access_method: %s" msgstr "default_table_access_methodを設定できませんでした: %s" -#: pg_backup_archiver.c:3516 pg_backup_archiver.c:3674 +#: pg_backup_archiver.c:3567 pg_backup_archiver.c:3725 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "オブジェクトタイプ%sに対する所有者の設定方法がわかりません" -#: pg_backup_archiver.c:3777 +#: pg_backup_archiver.c:3792 #, c-format msgid "did not find magic string in file header" msgstr "ファイルヘッダにマジック文字列がありませんでした" -#: pg_backup_archiver.c:3791 +#: pg_backup_archiver.c:3806 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "ファイルヘッダ内のバージョン(%d.%d)はサポートされていません" -#: pg_backup_archiver.c:3796 +#: pg_backup_archiver.c:3811 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "整数のサイズ(%lu)に関する健全性検査が失敗しました" -#: pg_backup_archiver.c:3800 +#: pg_backup_archiver.c:3815 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "アーカイブはより大きなサイズの整数を持つマシンで作成されました、一部の操作が失敗する可能性があります" -#: pg_backup_archiver.c:3810 +#: pg_backup_archiver.c:3825 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "想定した形式(%d)はファイル内にある形式(%d)と異なります" -#: pg_backup_archiver.c:3825 +#: pg_backup_archiver.c:3840 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "アーカイブは圧縮されていますが、このインストールでは圧縮をサポートしていません -- 利用できるデータはありません" -#: pg_backup_archiver.c:3859 +#: pg_backup_archiver.c:3874 #, c-format msgid "invalid creation date in header" msgstr "ヘッダ内の作成日付が不正です" -#: pg_backup_archiver.c:3993 +#: pg_backup_archiver.c:4008 #, c-format msgid "processing item %d %s %s" msgstr "項目 %d %s %s を処理しています" -#: pg_backup_archiver.c:4072 +#: pg_backup_archiver.c:4087 #, c-format msgid "entering main parallel loop" msgstr "メインの並列ループに入ります" -#: pg_backup_archiver.c:4083 +#: pg_backup_archiver.c:4098 #, c-format msgid "skipping item %d %s %s" msgstr "項目 %d %s %s をスキップしています" -#: pg_backup_archiver.c:4092 +#: pg_backup_archiver.c:4107 #, c-format msgid "launching item %d %s %s" msgstr "項目 %d %s %s に着手します" -#: pg_backup_archiver.c:4146 +#: pg_backup_archiver.c:4161 #, c-format msgid "finished main parallel loop" msgstr "メインの並列ループが終了しました" -#: pg_backup_archiver.c:4182 +#: pg_backup_archiver.c:4197 #, c-format msgid "processing missed item %d %s %s" msgstr "やり残し項目 %d %s %s を処理しています" -#: pg_backup_archiver.c:4787 +#: pg_backup_archiver.c:4802 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "テーブル\"%s\"を作成できませんでした、このテーブルのデータは復元されません" @@ -978,12 +978,12 @@ msgstr "圧縮処理が有効です" msgid "could not get server_version from libpq" msgstr "libpqからserver_versionを取得できませんでした" -#: pg_backup_db.c:53 pg_dumpall.c:1837 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "サーバーバージョン: %s、%s バージョン: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1839 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "サーバーバージョンの不一致のため処理を中断します" @@ -993,7 +993,7 @@ msgstr "サーバーバージョンの不一致のため処理を中断します msgid "already connected to a database" msgstr "データベースはすでに接続済みです" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1666 pg_dumpall.c:1777 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "パスワード: " @@ -1007,17 +1007,17 @@ msgstr "データベースへの接続ができませんでした" msgid "reconnection failed: %s" msgstr "再接続に失敗しました: %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1697 pg_dumpall.c:1787 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1900 pg_dumpall.c:1923 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "問い合わせが失敗しました: %s" -#: pg_backup_db.c:278 pg_dumpall.c:1901 pg_dumpall.c:1924 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "問い合わせ: %s" @@ -1053,7 +1053,7 @@ msgstr "PQputCopyEnd からエラーが返されました: %s" msgid "COPY failed for table \"%s\": %s" msgstr "テーブル\"%s\"へのコピーに失敗しました: %s" -#: pg_backup_db.c:525 pg_dump.c:2131 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "ファイル\"%s\"をCOPY中に想定していない余分な結果がありました" @@ -1239,10 +1239,10 @@ msgstr "破損したtarヘッダが%sにありました(想定 %d、算出結果 msgid "unrecognized section name: \"%s\"" msgstr "認識不可のセクション名: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:626 pg_dump.c:643 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "詳細は\"%s --help\"で確認してください。\n" @@ -1252,72 +1252,87 @@ msgstr "詳細は\"%s --help\"で確認してください。\n" msgid "out of on_exit_nicely slots" msgstr "on_exit_nicelyスロットが足りません" -#: pg_dump.c:552 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "圧縮レベルは 0..9 の範囲でなければなりません" -#: pg_dump.c:590 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digitsは -15..3 の範囲でなければなりません" -#: pg_dump.c:613 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insertは%d..%dの範囲でなければなりません" -#: pg_dump.c:641 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "コマンドライン引数が多すぎます (先頭は\"%s\")" -#: pg_dump.c:662 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "-s/--schema-only と -a/--data-only オプションは同時には使用できません" -#: pg_dump.c:667 +#: pg_dump.c:673 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "-s/--schema-only と --include-foreign-data オプションは同時には使用できません" -#: pg_dump.c:670 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "オプション --include-foreign-data はパラレルバックアップではサポートされません" -#: pg_dump.c:674 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "-c/--clean と -a/--data-only オプションは同時には使用できません" -#: pg_dump.c:679 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "--if-existsは -c/--clean の指定が必要です" -#: pg_dump.c:686 +#: pg_dump.c:692 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "--on-conflict-do-nothingオプションは--inserts、--rows-per-insert または --column-insertsを必要とします" -#: pg_dump.c:708 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "制限キーを生成できませんでした" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "不正な制限キー" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "オプション --restrict-key は --format=plain を指定したときのみ指定可能です" + +#: pg_dump.c:728 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "圧縮が要求されましたがこのインストールでは利用できません -- アーカイブは圧縮されません" -#: pg_dump.c:729 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "不正な並列ジョブ数" -#: pg_dump.c:733 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "並列バックアップはディレクトリ形式でのみサポートされます" -#: pg_dump.c:788 +#: pg_dump.c:808 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1328,32 +1343,32 @@ msgstr "" "同期スナップショットが不要ならば--no-synchronized-snapshotsを付けて\n" "実行してください。" -#: pg_dump.c:794 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "スナップショットのエクスポートはこのサーバーバージョンではサポートされません" -#: pg_dump.c:806 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "最後の組み込みOIDは%u" -#: pg_dump.c:815 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "合致するスキーマが見つかりません" -#: pg_dump.c:829 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "合致するテーブルが見つかりません" -#: pg_dump.c:851 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "合致する機能拡張が見つかりません" -#: pg_dump.c:1021 +#: pg_dump.c:1042 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1362,17 +1377,17 @@ msgstr "" "%sはデータベースをテキストファイルまたはその他の形式でダンプします。\n" "\n" -#: pg_dump.c:1022 pg_dumpall.c:622 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" -#: pg_dump.c:1023 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [オプション]... [データベース名]\n" -#: pg_dump.c:1025 pg_dumpall.c:625 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "" "\n" @@ -1381,12 +1396,12 @@ msgstr "" "\n" "一般的なオプション:\n" -#: pg_dump.c:1026 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ファイル名 出力ファイルまたはディレクトリの名前\n" -#: pg_dump.c:1027 +#: pg_dump.c:1048 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1395,42 +1410,42 @@ msgstr "" " -F, --format=c|d|t|p 出力ファイルの形式(custom, directory, tar, \n" " plain text(デフォルト))\n" -#: pg_dump.c:1029 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM ダンプ時に指定した数の並列ジョブを使用\n" -#: pg_dump.c:1030 pg_dumpall.c:627 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose 冗長モード\n" -#: pg_dump.c:1031 pg_dumpall.c:628 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_dump.c:1032 +#: pg_dump.c:1053 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 圧縮形式における圧縮レベル\n" -#: pg_dump.c:1033 pg_dumpall.c:629 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TIMEOUT テーブルロックをTIMEOUT待ってから失敗\n" -#: pg_dump.c:1034 pg_dumpall.c:656 +#: pg_dump.c:1055 pg_dumpall.c:698 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync 変更のディスクへの安全な書き出しを待機しない\n" -#: pg_dump.c:1035 pg_dumpall.c:630 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_dump.c:1037 pg_dumpall.c:631 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "" "\n" @@ -1439,52 +1454,52 @@ msgstr "" "\n" "出力内容を制御するためのオプション:\n" -#: pg_dump.c:1038 pg_dumpall.c:632 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only データのみをダンプし、スキーマをダンプしない\n" -#: pg_dump.c:1039 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs ダンプにラージオブジェクトを含める\n" -#: pg_dump.c:1040 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs ダンプにラージオブジェクトを含めない\n" -#: pg_dump.c:1041 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean 再作成前にデータベースオブジェクトを整理(削除)\n" -#: pg_dump.c:1042 +#: pg_dump.c:1063 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create ダンプにデータベース生成用コマンドを含める\n" -#: pg_dump.c:1043 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=PATTERN 指定した機能拡張のみをダンプ\n" -#: pg_dump.c:1044 pg_dumpall.c:634 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=ENCODING ENCODING符号化方式でデータをダンプ\n" -#: pg_dump.c:1045 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=PATTERN 指定したスキーマのみをダンプ\n" -#: pg_dump.c:1046 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=PATTERN 指定したスキーマをダンプしない\n" -#: pg_dump.c:1047 +#: pg_dump.c:1068 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1493,56 +1508,56 @@ msgstr "" " -O, --no-owner プレインテキスト形式で、オブジェクト所有権の復元を\n" " 行わない\n" -#: pg_dump.c:1049 pg_dumpall.c:638 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only スキーマのみをダンプし、データはダンプしない\n" -#: pg_dump.c:1050 +#: pg_dump.c:1071 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr "" " -S, --superuser=NAME プレインテキスト形式で使用するスーパーユーザーの\n" " 名前\n" -#: pg_dump.c:1051 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=PATTERN 指定したテーブルのみをダンプ\n" -#: pg_dump.c:1052 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=PATTERN 指定したテーブルをダンプしない\n" -#: pg_dump.c:1053 pg_dumpall.c:641 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges 権限(grant/revoke)をダンプしない\n" -#: pg_dump.c:1054 pg_dumpall.c:642 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade アップグレードユーティリティ専用\n" -#: pg_dump.c:1055 pg_dumpall.c:643 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts 列名指定のINSERTコマンドでデータをダンプ\n" -#: pg_dump.c:1056 pg_dumpall.c:644 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr "" " --disable-dollar-quoting ドル記号による引用符付けを禁止、SQL標準の引用符\n" " 付けを使用\n" -#: pg_dump.c:1057 pg_dumpall.c:645 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers データのみのリストアの際にトリガを無効化\n" -#: pg_dump.c:1058 +#: pg_dump.c:1079 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1551,22 +1566,22 @@ msgstr "" " --enable-row-security 行セキュリティを有効化(ユーザーがアクセス可能な\n" " 内容のみをダンプ)\n" -#: pg_dump.c:1060 +#: pg_dump.c:1081 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=PATTERN 指定したテーブルのデータをダンプしない\n" -#: pg_dump.c:1061 pg_dumpall.c:647 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM extra_float_digitsの設定を上書きする\n" -#: pg_dump.c:1062 pg_dumpall.c:648 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists オブジェクト削除の際に IF EXISTS を使用\n" -#: pg_dump.c:1063 +#: pg_dump.c:1084 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1577,91 +1592,96 @@ msgstr "" " PATTERNに合致する外部サーバー上の外部テーブルの\n" " データを含める\n" -#: pg_dump.c:1066 pg_dumpall.c:649 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts COPYではなくINSERTコマンドでデータをダンプ\n" -#: pg_dump.c:1067 pg_dumpall.c:650 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root 子テーブルをルートテーブル経由でロード\n" -#: pg_dump.c:1068 pg_dumpall.c:651 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments コメントをダンプしない\n" -#: pg_dump.c:1069 pg_dumpall.c:652 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications パブリケーションをダンプしない\n" -#: pg_dump.c:1070 pg_dumpall.c:654 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels セキュリティラベルの割り当てをダンプしない\n" -#: pg_dump.c:1071 pg_dumpall.c:655 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions サブスクリプションをダンプしない\n" -#: pg_dump.c:1072 +#: pg_dump.c:1093 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots 並列ジョブにおいて同期スナップショットを使用しない\n" -#: pg_dump.c:1073 pg_dumpall.c:657 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces テーブルスペースの割り当てをダンプしない\n" -#: pg_dump.c:1074 pg_dumpall.c:658 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression TOAST圧縮方式をダンプしない\n" -#: pg_dump.c:1075 pg_dumpall.c:659 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data 非ログテーブルのデータをダンプしない\n" -#: pg_dump.c:1076 pg_dumpall.c:660 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing INSERTコマンドにON CONFLICT DO NOTHINGを付加\n" -#: pg_dump.c:1077 pg_dumpall.c:661 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr "" " --quote-all-identifiers すべての識別子をキーワードでなかったとしても\n" " 引用符で囲む\n" -#: pg_dump.c:1078 pg_dumpall.c:662 +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid " --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr " --restrict-key=RESTRICT_KEY \\restrict メタコマンドのキーに指定文字列を使う\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NROWS INSERT毎の行数; --insertsを暗黙的に設定\n" -#: pg_dump.c:1079 +#: pg_dump.c:1101 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION 指定したセクション(データ前、データ、データ後)を\n" " ダンプする\n" -#: pg_dump.c:1080 +#: pg_dump.c:1102 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable ダンプを異常なく実行できるようになるまで待機\n" -#: pg_dump.c:1081 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT ダンプに指定のスナップショットを使用する\n" -#: pg_dump.c:1082 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1670,7 +1690,7 @@ msgstr "" " --strict-names テーブル/スキーマの対象パターンが最低でも\n" " 一つの実体に合致することを必須とする\n" -#: pg_dump.c:1084 pg_dumpall.c:663 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1681,7 +1701,7 @@ msgstr "" " 所有者をセットする際、ALTER OWNER コマンドの代わり\n" " に SET SESSION AUTHORIZATION コマンドを使用\n" -#: pg_dump.c:1088 pg_dumpall.c:667 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "" "\n" @@ -1690,42 +1710,42 @@ msgstr "" "\n" "接続オプション:\n" -#: pg_dump.c:1089 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME ダンプするデータベース\n" -#: pg_dump.c:1090 pg_dumpall.c:669 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME データベースサーバーのホストまたはソケットディレクトリ\n" -#: pg_dump.c:1091 pg_dumpall.c:671 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT データベースサーバーのポート番号\n" -#: pg_dump.c:1092 pg_dumpall.c:672 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME 指定したデータベースユーザーで接続\n" -#: pg_dump.c:1093 pg_dumpall.c:673 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password パスワード入力を要求しない\n" -#: pg_dump.c:1094 pg_dumpall.c:674 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password パスワードプロンプトの強制表示 (本来は自動的に表示)\n" -#: pg_dump.c:1095 pg_dumpall.c:675 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLENAME ダンプの前に SET ROLE を行う\n" -#: pg_dump.c:1097 +#: pg_dump.c:1119 #, c-format msgid "" "\n" @@ -1737,22 +1757,22 @@ msgstr "" "データベース名が指定されなかった場合、環境変数PGDATABASEが使用されます\n" "\n" -#: pg_dump.c:1099 pg_dumpall.c:679 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "バグは<%s>に報告してください。\n" -#: pg_dump.c:1100 pg_dumpall.c:680 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ホームページ: <%s>\n" -#: pg_dump.c:1119 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "不正なクライアントエンコーディング\"%s\"が指定されました" -#: pg_dump.c:1265 +#: pg_dump.c:1295 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1763,553 +1783,553 @@ msgstr "" "同期スナップショットが不要ならば--no-synchronized-snapshotsを付けて\n" "実行してください。" -#: pg_dump.c:1334 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "不正な出力形式\"%s\"が指定されました" -#: pg_dump.c:1375 pg_dump.c:1431 pg_dump.c:1484 pg_dumpall.c:1451 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "修飾名が不適切です(ドット区切りの名前が多すぎます): %s" -#: pg_dump.c:1383 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "パターン\"%s\"に合致するスキーマが見つかりません" -#: pg_dump.c:1436 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "パターン \"%s\"に合致する機能拡張が見つかりません" -#: pg_dump.c:1489 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "パターン\"%s\"に合致する外部サーバーが見つかりません" -#: pg_dump.c:1552 +#: pg_dump.c:1582 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "リレーション名が不適切です(ドット区切りの名前が多すぎます): %s" -#: pg_dump.c:1563 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "パターン \"%s\"に合致するテーブルが見つかりません" -#: pg_dump.c:1590 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "現在データベースに接続していません。" -#: pg_dump.c:1593 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "データベース間の参照は実装されていません: %s" -#: pg_dump.c:2005 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "テーブル \"%s.%s\"の内容をダンプしています" -#: pg_dump.c:2112 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "テーブル\"%s\"の内容のダンプに失敗: PQgetCopyData()が失敗しました。" -#: pg_dump.c:2113 pg_dump.c:2123 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "サーバーのエラーメッセージ: %s" -#: pg_dump.c:2114 pg_dump.c:2124 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "コマンド: %s" -#: pg_dump.c:2122 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "テーブル\"%s\"の内容のダンプに失敗: PQgetResult()が失敗しました。" -#: pg_dump.c:2204 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "テーブル\"%s\"から間違った数のフィールドを取得しました" -#: pg_dump.c:2955 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "データベース定義を保存しています" -#: pg_dump.c:3427 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "encoding = %s を保存しています" -#: pg_dump.c:3452 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "standard_conforming_strings = %s を保存しています" -#: pg_dump.c:3491 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "current_schemas()の結果をパースできませんでした" -#: pg_dump.c:3510 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "search_path = %s を保存しています" -#: pg_dump.c:3550 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "ラージオブジェクトを読み込んでいます" -#: pg_dump.c:3732 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "ラージオブジェクトを保存しています" -#: pg_dump.c:3778 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "ラージオブジェクト %u を読み取り中にエラーがありました: %s" -#: pg_dump.c:3882 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "行レベルセキュリティポリシーを読み取ります" -#: pg_dump.c:4021 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "想定外のポリシコマンドタイプ: \"%c\"" -#: pg_dump.c:4175 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "パブリケーション\"%s\"の所有者が不正なようです" -#: pg_dump.c:4467 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "現在のユーザーがスーパーユーザーではないため、サブスクリプションはダンプされません" -#: pg_dump.c:4538 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "サブスクリプション\"%s\"の所有者が無効なようです" -#: pg_dump.c:4581 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "subpublications配列をパースできませんでした" -#: pg_dump.c:4939 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "%s %sの親となる機能拡張がありませんでした" -#: pg_dump.c:5071 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "スキーマ\"%s\"の所有者が無効なようです" -#: pg_dump.c:5094 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "OID %uのスキーマは存在しません" -#: pg_dump.c:5424 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "データ型\"%s\"の所有者が無効なようです" -#: pg_dump.c:5508 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "演算子\"%s\"の所有者が無効なようです" -#: pg_dump.c:5807 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "演算子クラス\"%s\"の所有者が無効なようです" -#: pg_dump.c:5890 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "演算子族\"%s\"の所有者が無効なようです" -#: pg_dump.c:6058 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "集約関数\"%s\"の所有者が無効なようです" -#: pg_dump.c:6317 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "関数\"%s\"の所有者が無効なようです" -#: pg_dump.c:7113 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "テーブル\"%s\"の所有者が無効なようです" -#: pg_dump.c:7155 pg_dump.c:17699 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "健全性検査に失敗しました、OID %2$u であるシーケンスの OID %1$u である親テーブルがありません" -#: pg_dump.c:7298 +#: pg_dump.c:7439 #, c-format msgid "failed sanity check, table OID %u appearing in pg_partitioned_table not found" msgstr "健全性検査に失敗しました、pg_partitioned_tableにあるテーブルOID %u が見つかりません" -#: pg_dump.c:7364 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のインデックスを読み込んでいます" -#: pg_dump.c:7778 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"の外部キー制約を読み込んでいます" -#: pg_dump.c:8057 +#: pg_dump.c:8202 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "健全性検査に失敗しました、OID %2$u であるpg_rewriteエントリのOID %1$u である親テーブルが見つかりません" -#: pg_dump.c:8141 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のトリガを読み込んでいます" -#: pg_dump.c:8323 +#: pg_dump.c:8468 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "問い合わせがテーブル\"%2$s\"上の外部キートリガ\"%1$s\"の参照テーブル名としてNULLを返しました(テーブルのOID: %3$u)" -#: pg_dump.c:8873 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "テーブル\"%s.%s\"の列と型を探しています" -#: pg_dump.c:8997 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "テーブル\"%s\"の列番号が不正です" -#: pg_dump.c:9036 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "テーブル\"%s.%s\"のデフォルト式を探しています" -#: pg_dump.c:9058 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "テーブル\"%2$s\"用のadnumの値%1$dが不正です" -#: pg_dump.c:9151 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "テーブル\"%s.%s\"の検査制約を探しています" -#: pg_dump.c:9200 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "テーブル\"%2$s\"で想定する検査制約は%1$d個でしたが、%3$dありました" msgstr[1] "テーブル\"%2$s\"で想定する検査制約は%1$d個でしたが、%3$dありました" -#: pg_dump.c:9204 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(システムカタログが破損している可能性があります)" -#: pg_dump.c:10806 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "データ型\"%s\"のtyptypeが不正なようです" -#: pg_dump.c:12154 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "proargmodes配列内におかしな値があります" -#: pg_dump.c:12456 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "proallargtypes配列のパースができませんでした" -#: pg_dump.c:12472 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "proargmodes配列のパースができませんでした" -#: pg_dump.c:12486 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "proargnames配列のパースができませんでした" -#: pg_dump.c:12496 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "proconfig配列のパースができませんでした" -#: pg_dump.c:12572 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "関数\"%s\"のprovolatileの値が認識できません" -#: pg_dump.c:12622 pg_dump.c:14563 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "関数\"%s\"のproparallel値が認識できません" -#: pg_dump.c:12761 pg_dump.c:12867 pg_dump.c:12874 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "OID %uの関数の関数定義が見つかりませんでした" -#: pg_dump.c:12800 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "pg_cast.castfuncまたはpg_cast.castmethodフィールドの値がおかしいです" -#: pg_dump.c:12803 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "pg_cast.castmethod フィールドの値がおかしいです" -#: pg_dump.c:12893 +#: pg_dump.c:13044 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "おかしな変換定義、trffromsql か trftosql の少なくとも一方は非ゼロであるはずです" -#: pg_dump.c:12910 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "pg_cast.castmethod フィールドの値がおかしいです" -#: pg_dump.c:12931 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "pg_cast.castmethod フィールドの値がおかしいです" -#: pg_dump.c:13082 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "後置演算子はサポートされていません (演算子 \"%s\")" -#: pg_dump.c:13252 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "OID %sの演算子がありませんでした" -#: pg_dump.c:13320 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "アクセスメソッド\"%2$s\"の不正なタイプ\"%1$c\"" -#: pg_dump.c:14074 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "認識できないの照合順序プロバイダ: %s" -#: pg_dump.c:14482 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "集約\"%s\"のaggfinalmodifyの値が識別できません" -#: pg_dump.c:14538 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "集約\"%s\"のaggmfinalmodifyの値が識別できません" -#: pg_dump.c:15260 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "デフォルト権限設定中の認識できないオブジェクト型: %d" -#: pg_dump.c:15278 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "デフォルトの ACL リスト(%s)をパースできませんでした" -#: pg_dump.c:15363 +#: pg_dump.c:15514 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "オブジェクト\"%3$s\"(%4$s)の初期GRANT ACLリスト(%1$s)または初期REVOKE ACLリスト(%2$s)をパースできませんでした" -#: pg_dump.c:15371 +#: pg_dump.c:15522 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "オブジェクト\"%3$s\"(%4$s)のGRANT ACLリスト(%1$s)またはREVOKE ACLリスト(%2$s)をパースできませんでした" -#: pg_dump.c:15886 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "ビュー\"%s\"の定義を取り出すための問い合わせがデータを返却しませんでした" -#: pg_dump.c:15889 +#: pg_dump.c:16040 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "ビュー\"%s\"の定義を取り出すための問い合わせが2つ以上の定義を返却しました" -#: pg_dump.c:15896 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "ビュー\"%s\"の定義が空のようです(長さが0)" -#: pg_dump.c:15980 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDSは今後サポートされません(テーブル\"%s\")" -#: pg_dump.c:16886 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "テーブル\"%2$s\"の列番号%1$dは不正です" -#: pg_dump.c:16963 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "インデックス統計カラムをパースできませんでした" -#: pg_dump.c:16965 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "インデックス統計値をパースできませんでした" -#: pg_dump.c:16967 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "インデックス統計情報における列数と値の数の不一致" -#: pg_dump.c:17184 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "制約\"%s\"のインデックスが見つかりません" -#: pg_dump.c:17409 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "制約のタイプが識別できません: %c" -#: pg_dump.c:17541 pg_dump.c:17764 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "シーケンス\"%s\"のデータを得るための問い合わせが%d行返却しました(想定は1)" msgstr[1] "シーケンス\"%s\"のデータを得るための問い合わせが%d行返却しました(想定は1)" -#: pg_dump.c:17575 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "認識されないシーケンスの型\"%s\"" -#: pg_dump.c:17862 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "想定外のtgtype値: %d" -#: pg_dump.c:17936 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "テーブル\"%3$s\"上のトリガ\"%2$s\"の引数文字列(%1$s)が不正です" -#: pg_dump.c:18205 +#: pg_dump.c:18386 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "テーブル\"%2$s\"のルール\"%1$s\"を得るための問い合わせが失敗しました: 間違った行数が返却されました" -#: pg_dump.c:18367 +#: pg_dump.c:18548 #, c-format msgid "could not find referenced extension %u" msgstr "親の機能拡張%uが見つかりません" -#: pg_dump.c:18458 +#: pg_dump.c:18639 #, c-format msgid "could not parse extension configuration array" msgstr "機能拡張設定配列をパースできませんでした" -#: pg_dump.c:18460 +#: pg_dump.c:18641 #, c-format msgid "could not parse extension condition array" msgstr "機能拡張条件配列をパースできませんでした" -#: pg_dump.c:18462 +#: pg_dump.c:18643 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "機能拡張における設定項目数と条件の数の不一致" -#: pg_dump.c:18594 +#: pg_dump.c:18775 #, c-format msgid "reading dependency data" msgstr "データの依存データを読み込んでいます" -#: pg_dump.c:18687 +#: pg_dump.c:18868 #, c-format msgid "no referencing object %u %u" msgstr "参照元オブジェクト%u %uがありません" -#: pg_dump.c:18698 +#: pg_dump.c:18879 #, c-format msgid "no referenced object %u %u" msgstr "参照先オブジェクト%u %uがありません" -#: pg_dump.c:19087 +#: pg_dump.c:19268 #, c-format msgid "could not parse reloptions array" msgstr "reloptions配列をパースできませんでした" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:619 #, c-format msgid "invalid dumpId %d" msgstr "不正なdumpId %d" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:625 #, c-format msgid "invalid dependency %d" msgstr "不正な依存関係 %d" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:858 #, c-format msgid "could not identify dependency loop" msgstr "依存関係のループが見つかりませんでした" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1473 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "次のテーブルの中で外部キー制約の循環があります: " msgstr[1] "次のテーブルの中で外部キー制約の循環があります: " -#: pg_dump_sort.c:1234 pg_dump_sort.c:1254 +#: pg_dump_sort.c:1477 pg_dump_sort.c:1497 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1235 +#: pg_dump_sort.c:1478 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "--disable-triggersの使用または一時的な制約の削除を行わずにこのダンプをリストアすることはできないかもしれません。" -#: pg_dump_sort.c:1236 +#: pg_dump_sort.c:1479 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "この問題を回避するために--data-onlyダンプの代わりに完全なダンプを使用することを検討してください。" -#: pg_dump_sort.c:1248 +#: pg_dump_sort.c:1491 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "以下の項目の間の依存関係のループを解決できませんでした:" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2320,7 +2340,7 @@ msgstr "" "にはありませんでした。\n" "インストールの状態を確認してください。" -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2331,32 +2351,32 @@ msgstr "" "バージョンではありませんでした。\n" "インストールの状態を確認してください。" -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "--exclude-database オプションは -g/--globals-only、-r/--roles-only もしくは -t/--tablespaces-only と一緒には使用できません" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "-g/--globals-onlyと-r/--roles-onlyオプションは同時に使用できません" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "-g/--globals-onlyと-t/--tablespaces-onlyオプションは同時に使用できません" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "-r/--roles-onlyと-t/--tablespaces-onlyオプションは同時に使用できません" -#: pg_dumpall.c:453 pg_dumpall.c:1767 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "データベース\"%s\"へ接続できませんでした" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2365,7 +2385,7 @@ msgstr "" "\"postgres\"または\"template1\"データベースに接続できませんでした\n" "代わりのデータベースを指定してください。" -#: pg_dumpall.c:621 +#: pg_dumpall.c:663 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2374,73 +2394,73 @@ msgstr "" "%sはPostgreSQLデータベースクラスタをSQLスクリプトファイルに展開します。\n" "\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [オプション]...\n" -#: pg_dumpall.c:626 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ファイル名 出力ファイル名\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:675 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean 再作成前にデータベースを整理(削除)\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only グローバルオブジェクトのみをダンプし、\n" " データベースをダンプしない\n" -#: pg_dumpall.c:636 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner オブジェクトの所有権の復元を省略\n" -#: pg_dumpall.c:637 +#: pg_dumpall.c:679 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr "" " -r, --roles-only ロールのみをダンプ。\n" " データベースとテーブル空間をダンプしない\n" -#: pg_dumpall.c:639 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAME ダンプで使用するスーパーユーザーのユーザー名を指定\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:682 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr "" " -t, --tablespaces-only テーブル空間のみをダンプ。データベースとロールを\n" " ダンプしない\n" -#: pg_dumpall.c:646 +#: pg_dumpall.c:688 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=PATTERN PATTERNに合致する名前のデータベースを除外\n" -#: pg_dumpall.c:653 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords ロールのパスワードをダンプしない\n" -#: pg_dumpall.c:668 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CONSTR 接続文字列を用いた接続\n" -#: pg_dumpall.c:670 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME 代替のデフォルトデータベースを指定\n" -#: pg_dumpall.c:677 +#: pg_dumpall.c:720 #, c-format msgid "" "\n" @@ -2452,92 +2472,103 @@ msgstr "" "-f/--file が指定されない場合、SQLスクリプトは標準出力に書き出されます。\n" "\n" -#: pg_dumpall.c:883 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "\"pg_\"で始まるロール名はスキップされました(%s)" -#: pg_dumpall.c:1284 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "ロール %s に対する pg_auth_members エントリがありましたが、このロールは存在しません" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "テーブル空間\"%2$s\"のACLリスト(%1$s)をパースできませんでした" -#: pg_dumpall.c:1512 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "データベース\"%s\"を除外します" -#: pg_dumpall.c:1516 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "データベース\"%s\"をダンプしています" -#: pg_dumpall.c:1548 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "データベース\"%s\"のダンプが失敗しました、終了します" -#: pg_dumpall.c:1557 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "出力ファイル\"%s\"を再オープンできませんでした: %m" -#: pg_dumpall.c:1601 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "\"%s\"を実行しています" -#: pg_dumpall.c:1816 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "サーバーバージョンを取得できませんでした" -#: pg_dumpall.c:1822 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "サーバーバージョン\"%s\"をパースできませんでした" -#: pg_dumpall.c:1894 pg_dumpall.c:1917 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "%s を実行しています" -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "-d/--dbnameと-f/--fileのどちらか一方が指定されていなければなりません" -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "オプション-d/--dbnameと-f/--fileは同時に使用できません" -#: pg_restore.c:343 +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "オプション -d/--dbname と --restrict-key は同時に使用できません" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "オプション-C/--createと-1/--single-transactionとは同時には使用できません" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "並列ジョブ数の最大値は%dです" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "--single-transaction と複数ジョブは同時には指定できません" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "アーカイブ形式\"%s\"が認識できません; \"c\"、\"d\"または\"t\"を指定してください" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "リストア中に無視されたエラー数: %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2546,47 +2577,47 @@ msgstr "" "%sはpg_dumpで作成したアーカイブからPostgreSQLデータベースをリストアします。\n" "\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [オプション]... [ファイル]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAME 接続するデータベース名\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=FILENAME 出力ファイル名(- で標準出力)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t バックアップファイル形式 (自動的に決定されるはず)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list アーカイブのTOCの要約を表示\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose 冗長モード\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version バージョン情報を表示して終了\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help このヘルプを表示して終了\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "" "\n" @@ -2595,32 +2626,32 @@ msgstr "" "\n" "リストア制御用のオプション:\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only データのみをリストア、スキーマをリストアしない\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create 対象のデータベースを作成\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error エラー時に終了、デフォルトは継続\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAME 指名したインデックスをリストア\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM リストア時に指定した数の並列ジョブを使用\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2629,103 +2660,103 @@ msgstr "" " -L, --use-list=FILENAME このファイルの内容に従って SELECT や\n" " 出力のソートを行う\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAME 指定したスキーマのオブジェクトのみをリストア\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NAME 指定したスキーマのオブジェクトはリストアしない\n" -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAME(args) 指名された関数をリストア\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only スキーマのみをリストア。データをリストアしない\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr " -S, --superuser=NAME トリガを無効にするためのスーパーユーザーの名前\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr "" " -t, --table=NAME 指名したリレーション(テーブル、ビューなど)を\n" " リストア\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAME 指名したトリガをリストア\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges アクセス権限(grant/revoke)の復元を省略\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction 単一のトランザクションとしてリストア\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security 行セキュリティを有効にします\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments コメントをリストアしない\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" " created\n" msgstr " --no-data-for-failed-tables 作成できなかったテーッブルのデータはリストアしない\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications パブリケーションをリストアしない\n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels セキュリティラベルをリストアしない\n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions サブスクリプションをリストアしない\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces テーブル空間の割り当てをリストアしない\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr "" " --section=SECTION 指定されたセクション (pre-data, data, または\n" " post-data) をリストア\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME リストアの前に SET ROLE を行う\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "" "\n" @@ -2736,7 +2767,7 @@ msgstr "" " -I, -n, -N, -P, -t, -T および --section オプションは組み合わせて複数回\n" "指定することで複数のオブジェクトを指定できます。\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/ru.po b/src/bin/pg_dump/po/ru.po index f51bdeb42fb..7ec149c6d4b 100644 --- a/src/bin/pg_dump/po/ru.po +++ b/src/bin/pg_dump/po/ru.po @@ -5,13 +5,13 @@ # Oleg Bartunov , 2004. # Sergey Burladyan , 2012. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_dump (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-08 07:45+0200\n" -"PO-Revision-Date: 2024-09-07 07:35+0300\n" +"POT-Creation-Date: 2025-11-09 06:29+0200\n" +"PO-Revision-Date: 2025-09-04 22:18+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -116,224 +116,224 @@ msgstr "дочерний процесс завершён по сигналу %d: msgid "child process exited with unrecognized status %d" msgstr "дочерний процесс завершился с нераспознанным кодом состояния %d" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "чтение расширений" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "выявление членов расширений" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "чтение схем" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "чтение пользовательских таблиц" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "чтение пользовательских функций" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "чтение пользовательских типов" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "чтение процедурных языков" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "чтение пользовательских агрегатных функций" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "чтение пользовательских операторов" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "чтение пользовательских методов доступа" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "чтение пользовательских классов операторов" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "чтение пользовательских семейств операторов" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "чтение пользовательских анализаторов текстового поиска" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "чтение пользовательских шаблонов текстового поиска" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "чтение пользовательских словарей текстового поиска" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "чтение пользовательских конфигураций текстового поиска" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "чтение пользовательских оболочек сторонних данных" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "чтение пользовательских сторонних серверов" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "чтение прав по умолчанию" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "чтение пользовательских правил сортировки" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "чтение пользовательских преобразований" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "чтение приведений типов" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "чтение преобразований" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "чтение информации о наследовании таблиц" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "чтение событийных триггеров" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "поиск таблиц расширений" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "поиск связей наследования" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "чтение информации о столбцах интересующих таблиц" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "пометка наследованных столбцов в подтаблицах" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "чтение информации о секционировании" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "чтение индексов" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "пометка индексов в секционированных таблицах" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "чтение расширенной статистики" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "чтение ограничений" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "чтение триггеров" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "чтение правил перезаписи" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "чтение политик" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "чтение публикаций" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "чтение участников публикаций" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "чтение подписок" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "неверное число родителей (%d) для таблицы \"%s\"" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "" "нарушение целостности: родительская таблица с OID %u для таблицы \"%s\" (OID " "%u) не найдена" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "не удалось разобрать числовой массив \"%s\": слишком много чисел" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "не удалось разобрать числовой массив \"%s\": неверный символ в числе" @@ -468,7 +468,7 @@ msgstr "pgpipe: не удалось подключить сокет (код ош msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: не удалось принять соединение (код ошибки: %d)" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1632 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "не удалось закрыть выходной файл: %m" @@ -522,62 +522,62 @@ msgstr "" msgid "implied data-only restore" msgstr "подразумевается восстановление только данных" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "удаляется %s %s" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "не удалось определить, куда добавить IF EXISTS в оператор \"%s\"" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "предупреждение из исходного файла: %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "создаётся %s \"%s.%s\"" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "создаётся %s \"%s\"" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "подключение к новой базе данных \"%s\"" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "обрабатывается %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "обрабатываются данные таблицы \"%s.%s\"" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "выполняется %s %s" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "отключаются триггеры таблицы %s" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "включаются триггеры таблицы %s" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "" "internal error -- WriteData cannot be called outside the context of a " @@ -586,12 +586,12 @@ msgstr "" "внутренняя ошибка -- WriteData нельзя вызывать вне контекста процедуры " "DataDumper" -#: pg_backup_archiver.c:1279 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "выбранный формат не поддерживает выгрузку больших объектов" -#: pg_backup_archiver.c:1337 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" @@ -599,55 +599,55 @@ msgstr[0] "восстановлен %d большой объект" msgstr[1] "восстановлено %d больших объекта" msgstr[2] "восстановлено %d больших объектов" -#: pg_backup_archiver.c:1358 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "восстановление большого объекта с OID %u" -#: pg_backup_archiver.c:1370 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "не удалось создать большой объект %u: %s" -#: pg_backup_archiver.c:1375 pg_dump.c:3815 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "не удалось открыть большой объект %u: %s" -#: pg_backup_archiver.c:1431 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "не удалось открыть файл оглавления \"%s\": %m" -#: pg_backup_archiver.c:1459 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "строка проигнорирована: %s" -#: pg_backup_archiver.c:1466 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "не найдена запись для ID %d" -#: pg_backup_archiver.c:1489 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "не удалось закрыть файл оглавления: %m" -#: pg_backup_archiver.c:1603 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "не удалось открыть выходной файл \"%s\": %m" -#: pg_backup_archiver.c:1605 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "не удалось открыть выходной файл: %m" -#: pg_backup_archiver.c:1699 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" @@ -655,211 +655,211 @@ msgstr[0] "записан %zu байт данных большого объек msgstr[1] "записано %zu байта данных большого объекта (результат = %d)" msgstr[2] "записано %zu байт данных большого объекта (результат = %d)" -#: pg_backup_archiver.c:1705 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "не удалось записать данные в большой объект: %s" -#: pg_backup_archiver.c:1795 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "при инициализации:" -#: pg_backup_archiver.c:1800 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "при обработке оглавления:" -#: pg_backup_archiver.c:1805 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "при завершении:" -#: pg_backup_archiver.c:1810 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "из записи оглавления %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1886 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "неверный dumpId" -#: pg_backup_archiver.c:1907 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "неверный dumpId таблицы в элементе TABLE DATA" -#: pg_backup_archiver.c:1999 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "неожиданный флаг смещения данных: %d" -#: pg_backup_archiver.c:2012 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "слишком большое смещение в файле выгрузки" -#: pg_backup_archiver.c:2150 pg_backup_archiver.c:2160 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "слишком длинное имя каталога: \"%s\"" -#: pg_backup_archiver.c:2168 +#: pg_backup_archiver.c:2187 #, c-format msgid "" "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not " "exist)" msgstr "каталог \"%s\" не похож на архивный (в нём отсутствует \"toc.dat\")" -#: pg_backup_archiver.c:2176 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "не удалось открыть входной файл \"%s\": %m" -#: pg_backup_archiver.c:2183 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "не удалось открыть входной файл: %m" -#: pg_backup_archiver.c:2189 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "не удалось прочитать входной файл: %m" -#: pg_backup_archiver.c:2191 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "входной файл слишком короткий (прочитано байт: %lu, ожидалось: 5)" -#: pg_backup_archiver.c:2223 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "" "входной файл, видимо, имеет текстовый формат. Загрузите его с помощью psql." -#: pg_backup_archiver.c:2229 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "входной файл не похож на архив (возможно, слишком мал?)" -#: pg_backup_archiver.c:2235 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "входной файл не похож на архив" -#: pg_backup_archiver.c:2244 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "не удалось закрыть входной файл: %m" -#: pg_backup_archiver.c:2361 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "неопознанный формат файла: \"%d\"" -#: pg_backup_archiver.c:2443 pg_backup_archiver.c:4489 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4514 #, c-format msgid "finished item %d %s %s" msgstr "закончен объект %d %s %s" -#: pg_backup_archiver.c:2447 pg_backup_archiver.c:4502 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4527 #, c-format msgid "worker process failed: exit code %d" msgstr "рабочий процесс завершился с кодом возврата %d" -#: pg_backup_archiver.c:2567 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "ID записи %d вне диапазона - возможно повреждено оглавление" -#: pg_backup_archiver.c:2634 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "восстановление таблиц со свойством WITH OIDS больше не поддерживается" -#: pg_backup_archiver.c:2716 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "нераспознанная кодировка \"%s\"" -#: pg_backup_archiver.c:2721 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "неверный элемент ENCODING: %s" -#: pg_backup_archiver.c:2739 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "неверный элемент STDSTRINGS: %s" -#: pg_backup_archiver.c:2764 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "схема \"%s\" не найдена" -#: pg_backup_archiver.c:2771 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "таблица \"%s\" не найдена" -#: pg_backup_archiver.c:2778 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "индекс \"%s\" не найден" -#: pg_backup_archiver.c:2785 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "функция \"%s\" не найдена" -#: pg_backup_archiver.c:2792 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "триггер \"%s\" не найден" -#: pg_backup_archiver.c:3206 +#: pg_backup_archiver.c:3257 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "не удалось переключить пользователя сеанса на \"%s\": %s" -#: pg_backup_archiver.c:3338 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "не удалось присвоить search_path значение \"%s\": %s" -#: pg_backup_archiver.c:3400 +#: pg_backup_archiver.c:3461 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "не удалось задать для default_tablespace значение %s: %s" -#: pg_backup_archiver.c:3445 +#: pg_backup_archiver.c:3506 #, c-format msgid "could not set default_table_access_method: %s" msgstr "не удалось задать default_table_access_method: %s" -#: pg_backup_archiver.c:3537 pg_backup_archiver.c:3695 +#: pg_backup_archiver.c:3598 pg_backup_archiver.c:3756 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "неизвестно, как назначить владельца для объекта типа \"%s\"" -#: pg_backup_archiver.c:3798 +#: pg_backup_archiver.c:3823 #, c-format msgid "did not find magic string in file header" msgstr "в заголовке файла не найдена нужная сигнатура" -#: pg_backup_archiver.c:3812 +#: pg_backup_archiver.c:3837 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "неподдерживаемая версия (%d.%d) в заголовке файла" -#: pg_backup_archiver.c:3817 +#: pg_backup_archiver.c:3842 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "несоответствие размера integer (%lu)" -#: pg_backup_archiver.c:3821 +#: pg_backup_archiver.c:3846 #, c-format msgid "" "archive was made on a machine with larger integers, some operations might " @@ -868,12 +868,12 @@ msgstr "" "архив был сделан на компьютере большей разрядности -- возможен сбой " "некоторых операций" -#: pg_backup_archiver.c:3831 +#: pg_backup_archiver.c:3856 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "ожидаемый формат (%d) отличается от формата, указанного в файле (%d)" -#: pg_backup_archiver.c:3846 +#: pg_backup_archiver.c:3871 #, c-format msgid "" "archive is compressed, but this installation does not support compression -- " @@ -882,42 +882,42 @@ msgstr "" "архив сжат, но установленная версия не поддерживает сжатие -- данные " "недоступны" -#: pg_backup_archiver.c:3880 +#: pg_backup_archiver.c:3905 #, c-format msgid "invalid creation date in header" msgstr "неверная дата создания в заголовке" -#: pg_backup_archiver.c:4014 +#: pg_backup_archiver.c:4039 #, c-format msgid "processing item %d %s %s" msgstr "обработка объекта %d %s %s" -#: pg_backup_archiver.c:4093 +#: pg_backup_archiver.c:4118 #, c-format msgid "entering main parallel loop" msgstr "вход в основной параллельный цикл" -#: pg_backup_archiver.c:4104 +#: pg_backup_archiver.c:4129 #, c-format msgid "skipping item %d %s %s" msgstr "объект %d %s %s пропускается" -#: pg_backup_archiver.c:4113 +#: pg_backup_archiver.c:4138 #, c-format msgid "launching item %d %s %s" msgstr "объект %d %s %s запускается" -#: pg_backup_archiver.c:4167 +#: pg_backup_archiver.c:4192 #, c-format msgid "finished main parallel loop" msgstr "основной параллельный цикл закончен" -#: pg_backup_archiver.c:4203 +#: pg_backup_archiver.c:4228 #, c-format msgid "processing missed item %d %s %s" msgstr "обработка пропущенного объекта %d %s %s" -#: pg_backup_archiver.c:4808 +#: pg_backup_archiver.c:4833 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "создать таблицу \"%s\" не удалось, её данные не будут восстановлены" @@ -1015,12 +1015,12 @@ msgstr "сжатие активно" msgid "could not get server_version from libpq" msgstr "не удалось получить версию сервера из libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1840 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "версия сервера: %s; версия %s: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1842 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "продолжение работы с другой версией сервера невозможно" @@ -1030,7 +1030,7 @@ msgstr "продолжение работы с другой версией се msgid "already connected to a database" msgstr "подключение к базе данных уже установлено" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1669 pg_dumpall.c:1780 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "Пароль: " @@ -1044,17 +1044,17 @@ msgstr "не удалось переподключиться к базе" msgid "reconnection failed: %s" msgstr "переподключиться не удалось: %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1700 pg_dumpall.c:1790 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1903 pg_dumpall.c:1926 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "ошибка при выполнении запроса: %s" -#: pg_backup_db.c:278 pg_dumpall.c:1904 pg_dumpall.c:1927 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "запрос: %s" @@ -1092,7 +1092,7 @@ msgstr "ошибка в PQputCopyEnd: %s" msgid "COPY failed for table \"%s\": %s" msgstr "сбой команды COPY для таблицы \"%s\": %s" -#: pg_backup_db.c:525 pg_dump.c:2165 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "неожиданные лишние результаты получены при COPY для таблицы \"%s\"" @@ -1288,10 +1288,10 @@ msgstr "" msgid "unrecognized section name: \"%s\"" msgstr "нераспознанное имя раздела: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:627 pg_dump.c:644 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" @@ -1301,56 +1301,56 @@ msgstr "Для дополнительной информации попробу msgid "out of on_exit_nicely slots" msgstr "превышен предел обработчиков штатного выхода" -#: pg_dump.c:553 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "уровень сжатия должен быть в диапазоне 0..9" -#: pg_dump.c:591 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "значение extra_float_digits должно быть в диапазоне -15..3" -#: pg_dump.c:614 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "значение rows-per-insert должно быть в диапазоне %d..%d" -#: pg_dump.c:642 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "слишком много аргументов командной строки (первый: \"%s\")" -#: pg_dump.c:663 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "параметры -s/--schema-only и -a/--data-only исключают друг друга" -#: pg_dump.c:668 +#: pg_dump.c:673 #, c-format msgid "" "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "" "параметры -s/--schema-only и --include-foreign-data исключают друг друга" -#: pg_dump.c:671 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "" "параметр --include-foreign-data не поддерживается при копировании в " "параллельном режиме" -#: pg_dump.c:675 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "параметры -c/--clean и -a/--data-only исключают друг друга" -#: pg_dump.c:680 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "параметр --if-exists требует указания -c/--clean" -#: pg_dump.c:687 +#: pg_dump.c:692 #, c-format msgid "" "option --on-conflict-do-nothing requires option --inserts, --rows-per-" @@ -1359,7 +1359,22 @@ msgstr "" "параметр --on-conflict-do-nothing требует указания --inserts, --rows-per-" "insert или --column-inserts" -#: pg_dump.c:709 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "не удалось сгенерировать ограничительный ключ" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "неверный ограничительный ключ" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "параметр --restrict-key можно использовать только с --format=plain" + +#: pg_dump.c:728 #, c-format msgid "" "requested compression not available in this installation -- archive will be " @@ -1368,19 +1383,19 @@ msgstr "" "установленная версия программы не поддерживает сжатие -- архив не будет " "сжиматься" -#: pg_dump.c:730 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "неверное число параллельных заданий" -#: pg_dump.c:734 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "" "параллельное резервное копирование поддерживается только с форматом " "\"каталог\"" -#: pg_dump.c:789 +#: pg_dump.c:808 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1391,32 +1406,32 @@ msgstr "" "Если они вам не нужны, укажите при запуске ключ\n" "--no-synchronized-snapshots." -#: pg_dump.c:795 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Экспортированные снимки не поддерживаются этой версией сервера." -#: pg_dump.c:807 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "последний системный OID: %u" -#: pg_dump.c:816 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "соответствующие схемы не найдены" -#: pg_dump.c:830 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "соответствующие таблицы не найдены" -#: pg_dump.c:852 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "соответствующие расширения не найдены" -#: pg_dump.c:1022 +#: pg_dump.c:1042 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1425,17 +1440,17 @@ msgstr "" "%s сохраняет резервную копию БД в текстовом файле или другом виде.\n" "\n" -#: pg_dump.c:1023 pg_dumpall.c:622 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: pg_dump.c:1024 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" -#: pg_dump.c:1026 pg_dumpall.c:625 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "" "\n" @@ -1444,12 +1459,12 @@ msgstr "" "\n" "Общие параметры:\n" -#: pg_dump.c:1027 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=ИМЯ имя выходного файла или каталога\n" -#: pg_dump.c:1028 +#: pg_dump.c:1048 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1459,7 +1474,7 @@ msgstr "" " (пользовательский | каталог | tar |\n" " текстовый (по умолчанию))\n" -#: pg_dump.c:1030 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr "" @@ -1467,23 +1482,23 @@ msgstr "" "число\n" " заданий\n" -#: pg_dump.c:1031 pg_dumpall.c:627 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose режим подробных сообщений\n" -#: pg_dump.c:1032 pg_dumpall.c:628 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_dump.c:1033 +#: pg_dump.c:1053 #, c-format msgid "" " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 уровень сжатия при архивации\n" -#: pg_dump.c:1034 pg_dumpall.c:629 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid "" " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" @@ -1491,7 +1506,7 @@ msgstr "" " --lock-wait-timeout=ТАЙМ-АУТ прервать операцию при тайм-ауте блокировки " "таблицы\n" -#: pg_dump.c:1035 pg_dumpall.c:656 +#: pg_dump.c:1055 pg_dumpall.c:698 #, c-format msgid "" " --no-sync do not wait for changes to be written safely " @@ -1500,12 +1515,12 @@ msgstr "" " --no-sync не ждать надёжного сохранения изменений на " "диске\n" -#: pg_dump.c:1036 pg_dumpall.c:630 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_dump.c:1038 pg_dumpall.c:631 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "" "\n" @@ -1514,22 +1529,22 @@ msgstr "" "\n" "Параметры, управляющие выводом:\n" -#: pg_dump.c:1039 pg_dumpall.c:632 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only выгрузить только данные, без схемы\n" -#: pg_dump.c:1040 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs выгрузить также большие объекты\n" -#: pg_dump.c:1041 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs исключить из выгрузки большие объекты\n" -#: pg_dump.c:1042 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid "" " -c, --clean clean (drop) database objects before " @@ -1538,7 +1553,7 @@ msgstr "" " -c, --clean очистить (удалить) объекты БД при " "восстановлении\n" -#: pg_dump.c:1043 +#: pg_dump.c:1063 #, c-format msgid "" " -C, --create include commands to create database in dump\n" @@ -1546,28 +1561,28 @@ msgstr "" " -C, --create добавить в копию команды создания базы " "данных\n" -#: pg_dump.c:1044 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr "" " -e, --extension=ШАБЛОН выгрузить только указанное расширение(я)\n" -#: pg_dump.c:1045 pg_dumpall.c:634 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=КОДИРОВКА выгружать данные в заданной кодировке\n" -#: pg_dump.c:1046 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=ШАБЛОН выгрузить только указанную схему(ы)\n" -#: pg_dump.c:1047 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=ШАБЛОН НЕ выгружать указанную схему(ы)\n" -#: pg_dump.c:1048 +#: pg_dump.c:1068 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1576,12 +1591,12 @@ msgstr "" " -O, --no-owner не восстанавливать владение объектами\n" " при использовании текстового формата\n" -#: pg_dump.c:1050 pg_dumpall.c:638 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only выгрузить только схему, без данных\n" -#: pg_dump.c:1051 +#: pg_dump.c:1071 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use in plain-text " @@ -1590,27 +1605,27 @@ msgstr "" " -S, --superuser=ИМЯ имя пользователя, который будет задействован\n" " при восстановлении из текстового формата\n" -#: pg_dump.c:1052 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=ШАБЛОН выгрузить только указанную таблицу(ы)\n" -#: pg_dump.c:1053 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=ШАБЛОН НЕ выгружать указанную таблицу(ы)\n" -#: pg_dump.c:1054 pg_dumpall.c:641 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges не выгружать права (назначение/отзыв)\n" -#: pg_dump.c:1055 pg_dumpall.c:642 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade только для утилит обновления БД\n" -#: pg_dump.c:1056 pg_dumpall.c:643 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid "" " --column-inserts dump data as INSERT commands with column " @@ -1619,7 +1634,7 @@ msgstr "" " --column-inserts выгружать данные в виде INSERT с именами " "столбцов\n" -#: pg_dump.c:1057 pg_dumpall.c:644 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid "" " --disable-dollar-quoting disable dollar quoting, use SQL standard " @@ -1628,7 +1643,7 @@ msgstr "" " --disable-dollar-quoting отключить спецстроки с $, выводить строки\n" " по стандарту SQL\n" -#: pg_dump.c:1058 pg_dumpall.c:645 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid "" " --disable-triggers disable triggers during data-only restore\n" @@ -1636,7 +1651,7 @@ msgstr "" " --disable-triggers отключить триггеры при восстановлении\n" " только данных, без схемы\n" -#: pg_dump.c:1059 +#: pg_dump.c:1079 #, c-format msgid "" " --enable-row-security enable row security (dump only content user " @@ -1647,7 +1662,7 @@ msgstr "" "только\n" " те данные, которые доступны пользователю)\n" -#: pg_dump.c:1061 +#: pg_dump.c:1081 #, c-format msgid "" " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" @@ -1655,7 +1670,7 @@ msgstr "" " --exclude-table-data=ШАБЛОН НЕ выгружать данные указанной таблицы " "(таблиц)\n" -#: pg_dump.c:1062 pg_dumpall.c:647 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid "" " --extra-float-digits=NUM override default setting for " @@ -1663,13 +1678,13 @@ msgid "" msgstr "" " --extra-float-digits=ЧИСЛО переопределить значение extra_float_digits\n" -#: pg_dump.c:1063 pg_dumpall.c:648 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr "" " --if-exists применять IF EXISTS при удалении объектов\n" -#: pg_dump.c:1064 +#: pg_dump.c:1084 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1680,7 +1695,7 @@ msgstr "" " включать в копию данные сторонних таблиц с\n" " серверов с именами, подпадающими под ШАБЛОН\n" -#: pg_dump.c:1067 pg_dumpall.c:649 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid "" " --inserts dump data as INSERT commands, rather than " @@ -1689,34 +1704,34 @@ msgstr "" " --inserts выгрузить данные в виде команд INSERT, не " "COPY\n" -#: pg_dump.c:1068 pg_dumpall.c:650 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr "" " --load-via-partition-root загружать секции через главную таблицу\n" -#: pg_dump.c:1069 pg_dumpall.c:651 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments не выгружать комментарии\n" -#: pg_dump.c:1070 pg_dumpall.c:652 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications не выгружать публикации\n" -#: pg_dump.c:1071 pg_dumpall.c:654 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr "" " --no-security-labels не выгружать назначения меток безопасности\n" -#: pg_dump.c:1072 pg_dumpall.c:655 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions не выгружать подписки\n" -#: pg_dump.c:1073 +#: pg_dump.c:1093 #, c-format msgid "" " --no-synchronized-snapshots do not use synchronized snapshots in parallel " @@ -1725,25 +1740,25 @@ msgstr "" " --no-synchronized-snapshots не использовать синхронизированные снимки\n" " в параллельных заданиях\n" -#: pg_dump.c:1074 pg_dumpall.c:657 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr "" " --no-tablespaces не выгружать назначения табличных " "пространств\n" -#: pg_dump.c:1075 pg_dumpall.c:658 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression не выгружать методы сжатия TOAST\n" -#: pg_dump.c:1076 pg_dumpall.c:659 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr "" " --no-unlogged-table-data не выгружать данные нежурналируемых таблиц\n" -#: pg_dump.c:1077 pg_dumpall.c:660 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid "" " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT " @@ -1752,7 +1767,7 @@ msgstr "" " --on-conflict-do-nothing добавлять ON CONFLICT DO NOTHING в команды " "INSERT\n" -#: pg_dump.c:1078 pg_dumpall.c:661 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid "" " --quote-all-identifiers quote all identifiers, even if not key words\n" @@ -1760,7 +1775,17 @@ msgstr "" " --quote-all-identifiers заключать в кавычки все идентификаторы,\n" " а не только ключевые слова\n" -#: pg_dump.c:1079 pg_dumpall.c:662 +# well-spelled: ОГР +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid "" +" --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr "" +" --restrict-key=ОГР_КЛЮЧ использовать заданную строку как ключ " +"\\restrict\n" +" в psql\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid "" " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" @@ -1768,7 +1793,7 @@ msgstr "" " --rows-per-insert=ЧИСЛО число строк в одном INSERT; подразумевает --" "inserts\n" -#: pg_dump.c:1080 +#: pg_dump.c:1101 #, c-format msgid "" " --section=SECTION dump named section (pre-data, data, or post-" @@ -1777,7 +1802,7 @@ msgstr "" " --section=РАЗДЕЛ выгрузить заданный раздел\n" " (pre-data, data или post-data)\n" -#: pg_dump.c:1081 +#: pg_dump.c:1102 #, c-format msgid "" " --serializable-deferrable wait until the dump can run without " @@ -1786,13 +1811,13 @@ msgstr "" " --serializable-deferrable дождаться момента для выгрузки данных без " "аномалий\n" -#: pg_dump.c:1082 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr "" " --snapshot=СНИМОК использовать при выгрузке заданный снимок\n" -#: pg_dump.c:1083 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid "" " --strict-names require table and/or schema include patterns " @@ -1805,7 +1830,7 @@ msgstr "" "минимум\n" " один объект\n" -#: pg_dump.c:1085 pg_dumpall.c:663 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1817,7 +1842,7 @@ msgstr "" " устанавливать владельца, используя команды\n" " SET SESSION AUTHORIZATION вместо ALTER OWNER\n" -#: pg_dump.c:1089 pg_dumpall.c:667 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "" "\n" @@ -1826,34 +1851,34 @@ msgstr "" "\n" "Параметры подключения:\n" -#: pg_dump.c:1090 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=БД имя базы данных для выгрузки\n" -#: pg_dump.c:1091 pg_dumpall.c:669 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ компьютер с сервером баз данных или каталог " "сокетов\n" -#: pg_dump.c:1092 pg_dumpall.c:671 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=ПОРТ номер порта сервера БД\n" -#: pg_dump.c:1093 pg_dumpall.c:672 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=ИМЯ имя пользователя баз данных\n" -#: pg_dump.c:1094 pg_dumpall.c:673 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: pg_dump.c:1095 pg_dumpall.c:674 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, c-format msgid "" " -W, --password force password prompt (should happen " @@ -1861,12 +1886,12 @@ msgid "" msgstr "" " -W, --password запрашивать пароль всегда (обычно не требуется)\n" -#: pg_dump.c:1096 pg_dumpall.c:675 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ИМЯ_РОЛИ выполнить SET ROLE перед выгрузкой\n" -#: pg_dump.c:1098 +#: pg_dump.c:1119 #, c-format msgid "" "\n" @@ -1879,22 +1904,22 @@ msgstr "" "PGDATABASE.\n" "\n" -#: pg_dump.c:1100 pg_dumpall.c:679 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_dump.c:1101 pg_dumpall.c:680 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" -#: pg_dump.c:1120 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "указана неверная клиентская кодировка \"%s\"" -#: pg_dump.c:1273 +#: pg_dump.c:1295 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server " @@ -1907,204 +1932,204 @@ msgstr "" "Если они вам не нужны, укажите при запуске ключ\n" "--no-synchronized-snapshots." -#: pg_dump.c:1342 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "указан неверный формат вывода: \"%s\"" -#: pg_dump.c:1383 pg_dump.c:1439 pg_dump.c:1492 pg_dumpall.c:1454 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неверное полное имя (слишком много компонентов): %s" -#: pg_dump.c:1391 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "схемы, соответствующие шаблону \"%s\", не найдены" -#: pg_dump.c:1444 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "расширения, соответствующие шаблону \"%s\", не найдены" -#: pg_dump.c:1497 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "сторонние серверы, соответствующие шаблону \"%s\", не найдены" -#: pg_dump.c:1560 +#: pg_dump.c:1582 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неверное имя отношения (слишком много компонентов): %s" -#: pg_dump.c:1571 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "таблицы, соответствующие шаблону \"%s\", не найдены" -#: pg_dump.c:1598 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "В данный момент вы не подключены к базе данных." -#: pg_dump.c:1601 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "ссылки между базами не реализованы: %s" -#: pg_dump.c:2035 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "выгрузка содержимого таблицы \"%s.%s\"" -#: pg_dump.c:2146 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Ошибка выгрузки таблицы \"%s\": сбой в PQgetCopyData()." -#: pg_dump.c:2147 pg_dump.c:2157 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "Сообщение об ошибке с сервера: %s" -#: pg_dump.c:2148 pg_dump.c:2158 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "Выполнялась команда: %s" -#: pg_dump.c:2156 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Ошибка выгрузки таблицы \"%s\": сбой в PQgetResult()." -#: pg_dump.c:2247 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "из таблицы \"%s\" получено неверное количество полей" -#: pg_dump.c:3002 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "сохранение определения базы данных" -#: pg_dump.c:3474 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "сохранение кодировки (%s)" -#: pg_dump.c:3499 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "сохранение standard_conforming_strings (%s)" -#: pg_dump.c:3538 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "не удалось разобрать результат current_schemas()" -#: pg_dump.c:3557 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "сохранение search_path = %s" -#: pg_dump.c:3597 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "чтение больших объектов" -#: pg_dump.c:3779 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "сохранение больших объектов" -#: pg_dump.c:3825 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "ошибка чтения большого объекта %u: %s" -#: pg_dump.c:3929 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "чтение политик защиты на уровне строк" -#: pg_dump.c:4068 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "нераспознанный тип команды в политике: %c" -#: pg_dump.c:4222 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "у публикации \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:4536 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "" "подписки не выгружены, так как текущий пользователь не суперпользователь" -#: pg_dump.c:4607 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "у подписки \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:4650 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "не удалось разобрать массив subpublications" -#: pg_dump.c:5008 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "не удалось найти родительское расширение для %s %s" # TO REVIEW -#: pg_dump.c:5140 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "у схемы \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5163 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "схема с OID %u не существует" -#: pg_dump.c:5493 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "у типа данных \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5577 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "у оператора \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5876 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "у класса операторов \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:5959 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "у семейства операторов \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:6127 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "у агрегатной функции \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:6388 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "у функции \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:7184 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "у таблицы \"%s\" по-видимому неправильный владелец" -#: pg_dump.c:7226 pg_dump.c:17777 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "" "failed sanity check, parent table with OID %u of sequence with OID %u not " @@ -2113,7 +2138,7 @@ msgstr "" "нарушение целостности: по OID %u не удалось найти родительскую таблицу " "последовательности с OID %u" -#: pg_dump.c:7371 +#: pg_dump.c:7439 #, c-format msgid "" "failed sanity check, table OID %u appearing in pg_partitioned_table not found" @@ -2121,17 +2146,17 @@ msgstr "" "нарушение целостности: таблица с OID %u, фигурирующим в " "pg_partitioned_table, не найдена" -#: pg_dump.c:7437 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "чтение индексов таблицы \"%s.%s\"" -#: pg_dump.c:7855 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "чтение ограничений внешних ключей таблицы \"%s.%s\"" -#: pg_dump.c:8134 +#: pg_dump.c:8202 #, c-format msgid "" "failed sanity check, parent table with OID %u of pg_rewrite entry with OID " @@ -2140,12 +2165,12 @@ msgstr "" "нарушение целостности: по OID %u не удалось найти родительскую таблицу для " "записи pg_rewrite с OID %u" -#: pg_dump.c:8218 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "чтение триггеров таблицы \"%s.%s\"" -#: pg_dump.c:8400 +#: pg_dump.c:8468 #, c-format msgid "" "query produced null referenced table name for foreign key trigger \"%s\" on " @@ -2154,32 +2179,32 @@ msgstr "" "запрос выдал NULL вместо имени целевой таблицы для триггера внешнего ключа " "\"%s\" в таблице \"%s\" (OID целевой таблицы: %u)" -#: pg_dump.c:8950 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "поиск столбцов и типов таблицы \"%s.%s\"" -#: pg_dump.c:9074 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "неверная нумерация столбцов в таблице \"%s\"" -#: pg_dump.c:9113 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "поиск выражений по умолчанию для таблицы \"%s.%s\"" -#: pg_dump.c:9135 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "неверное значение adnum (%d) в таблице \"%s\"" -#: pg_dump.c:9228 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "поиск ограничений-проверок для таблицы \"%s.%s\"" -#: pg_dump.c:9277 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" @@ -2190,69 +2215,69 @@ msgstr[1] "" msgstr[2] "" "ожидалось %d ограничений-проверок для таблицы \"%s\", но найдено: %d" -#: pg_dump.c:9281 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Возможно, повреждены системные каталоги.)" -#: pg_dump.c:10883 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "у типа данных \"%s\" по-видимому неправильный тип типа" -#: pg_dump.c:12231 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "неприемлемое значение в массиве proargmodes" -#: pg_dump.c:12533 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "не удалось разобрать массив proallargtypes" -#: pg_dump.c:12549 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "не удалось разобрать массив proargmodes" -#: pg_dump.c:12563 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "не удалось разобрать массив proargnames" -#: pg_dump.c:12573 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "не удалось разобрать массив proconfig" # TO REVEIW -#: pg_dump.c:12649 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "недопустимое значение provolatile для функции \"%s\"" # TO REVEIW -#: pg_dump.c:12699 pg_dump.c:14641 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "недопустимое значение proparallel для функции \"%s\"" -#: pg_dump.c:12839 pg_dump.c:12945 pg_dump.c:12952 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "не удалось найти определение функции для функции с OID %u" -#: pg_dump.c:12878 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "неприемлемое значение в поле pg_cast.castfunc или pg_cast.castmethod" -#: pg_dump.c:12881 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "неприемлемое значение в поле pg_cast.castmethod" -#: pg_dump.c:12971 +#: pg_dump.c:13044 #, c-format msgid "" "bogus transform definition, at least one of trffromsql and trftosql should " @@ -2261,57 +2286,57 @@ msgstr "" "неприемлемое определение преобразования (trffromsql или trftosql должно быть " "ненулевым)" -#: pg_dump.c:12988 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "неприемлемое значение в поле pg_transform.trffromsql" -#: pg_dump.c:13009 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "неприемлемое значение в поле pg_transform.trftosql" -#: pg_dump.c:13160 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "постфиксные операторы больше не поддерживаются (оператор \"%s\")" -#: pg_dump.c:13330 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "оператор с OID %s не найден" -#: pg_dump.c:13398 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "неверный тип \"%c\" метода доступа \"%s\"" -#: pg_dump.c:14152 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "нераспознанный провайдер правил сортировки: %s" -#: pg_dump.c:14560 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "нераспознанное значение aggfinalmodify для агрегата \"%s\"" -#: pg_dump.c:14616 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "нераспознанное значение aggmfinalmodify для агрегата \"%s\"" -#: pg_dump.c:15338 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "нераспознанный тип объекта в определении прав по умолчанию: %d" -#: pg_dump.c:15356 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "не удалось разобрать список прав по умолчанию (%s)" -#: pg_dump.c:15441 +#: pg_dump.c:15514 #, c-format msgid "" "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) " @@ -2320,7 +2345,7 @@ msgstr "" "не удалось разобрать изначальный список GRANT ACL (%s) или изначальный " "список REVOKE ACL (%s) для объекта \"%s\" (%s)" -#: pg_dump.c:15449 +#: pg_dump.c:15522 #, c-format msgid "" "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object " @@ -2329,13 +2354,13 @@ msgstr "" "не удалось разобрать список GRANT ACL (%s) или список REVOKE ACL (%s) для " "объекта \"%s\" (%s)" -#: pg_dump.c:15964 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "" "запрос на получение определения представления \"%s\" не возвратил данные" -#: pg_dump.c:15967 +#: pg_dump.c:16040 #, c-format msgid "" "query to obtain definition of view \"%s\" returned more than one definition" @@ -2343,49 +2368,49 @@ msgstr "" "запрос на получение определения представления \"%s\" возвратил несколько " "определений" -#: pg_dump.c:15974 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "определение представления \"%s\" пустое (длина равна нулю)" -#: pg_dump.c:16058 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "свойство WITH OIDS больше не поддерживается (таблица \"%s\")" -#: pg_dump.c:16964 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "неверный номер столбца %d для таблицы \"%s\"" -#: pg_dump.c:17041 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "не удалось разобрать столбцы статистики в индексе" -#: pg_dump.c:17043 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "не удалось разобрать значения статистики в индексе" -#: pg_dump.c:17045 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "" "столбцы, задающие статистику индекса, не соответствуют значениям по " "количеству" -#: pg_dump.c:17262 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "отсутствует индекс для ограничения \"%s\"" -#: pg_dump.c:17487 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "нераспознанный тип ограничения: %c" -#: pg_dump.c:17619 pg_dump.c:17842 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "" @@ -2400,22 +2425,22 @@ msgstr[2] "" "запрос на получение данных последовательности \"%s\" вернул %d строк " "(ожидалась 1)" -#: pg_dump.c:17653 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "нераспознанный тип последовательности: %s" -#: pg_dump.c:17940 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "неожиданное значение tgtype: %d" -#: pg_dump.c:18014 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "неверная строка аргументов (%s) для триггера \"%s\" таблицы \"%s\"" -#: pg_dump.c:18283 +#: pg_dump.c:18391 #, c-format msgid "" "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows " @@ -2424,62 +2449,62 @@ msgstr "" "запрос на получение правила \"%s\" для таблицы \"%s\" возвратил неверное " "число строк" -#: pg_dump.c:18445 +#: pg_dump.c:18553 #, c-format msgid "could not find referenced extension %u" msgstr "не удалось найти упомянутое расширение %u" -#: pg_dump.c:18536 +#: pg_dump.c:18644 #, c-format msgid "could not parse extension configuration array" msgstr "не удалось разобрать массив конфигураций расширения" -#: pg_dump.c:18538 +#: pg_dump.c:18646 #, c-format msgid "could not parse extension condition array" msgstr "не удалось разобрать массив условий расширения" -#: pg_dump.c:18540 +#: pg_dump.c:18648 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "конфигурации расширения не соответствуют условиям по количеству" -#: pg_dump.c:18672 +#: pg_dump.c:18780 #, c-format msgid "reading dependency data" msgstr "чтение информации о зависимостях" -#: pg_dump.c:18765 +#: pg_dump.c:18873 #, c-format msgid "no referencing object %u %u" msgstr "нет подчинённого объекта %u %u" -#: pg_dump.c:18776 +#: pg_dump.c:18884 #, c-format msgid "no referenced object %u %u" msgstr "нет вышестоящего объекта %u %u" -#: pg_dump.c:19165 +#: pg_dump.c:19273 #, c-format msgid "could not parse reloptions array" msgstr "не удалось разобрать массив reloptions" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:633 #, c-format msgid "invalid dumpId %d" msgstr "неверный dumpId %d" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:639 #, c-format msgid "invalid dependency %d" msgstr "неверная зависимость %d" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:872 #, c-format msgid "could not identify dependency loop" msgstr "не удалось определить цикл зависимостей" -#: pg_dump_sort.c:1274 +#: pg_dump_sort.c:1487 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" @@ -2487,12 +2512,12 @@ msgstr[0] "в следующей таблице зациклены ограни msgstr[1] "в следующих таблицах зациклены ограничения внешних ключей:" msgstr[2] "в следующих таблицах зациклены ограничения внешних ключей:" -#: pg_dump_sort.c:1278 pg_dump_sort.c:1298 +#: pg_dump_sort.c:1491 pg_dump_sort.c:1511 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1279 +#: pg_dump_sort.c:1492 #, c-format msgid "" "You might not be able to restore the dump without using --disable-triggers " @@ -2501,7 +2526,7 @@ msgstr "" "Возможно, для восстановления базы потребуется использовать --disable-" "triggers или временно удалить ограничения." -#: pg_dump_sort.c:1280 +#: pg_dump_sort.c:1493 #, c-format msgid "" "Consider using a full dump instead of a --data-only dump to avoid this " @@ -2510,12 +2535,12 @@ msgstr "" "Во избежание этой проблемы, вероятно, стоит выгружать всю базу данных, а не " "только данные (--data-only)." -#: pg_dump_sort.c:1292 +#: pg_dump_sort.c:1505 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "не удалось разрешить цикл зависимостей для следующих объектов:" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2526,7 +2551,7 @@ msgstr "" "в каталоге \"%s\".\n" "Проверьте правильность установки СУБД." -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2537,7 +2562,7 @@ msgstr "" "но её версия отличается от версии %s.\n" "Проверьте правильность установки СУБД." -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "" "option --exclude-database cannot be used together with -g/--globals-only, -" @@ -2546,30 +2571,30 @@ msgstr "" "параметр --exclude-database несовместим с -g/--globals-only, -r/--roles-only " "и -t/--tablespaces-only" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "параметры -g/--globals-only и -r/--roles-only исключают друг друга" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "" "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "" "параметры -g/--globals-only и -t/--tablespaces-only исключают друг друга" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "" "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "параметры -r/--roles-only и -t/--tablespaces-only исключают друг друга" -#: pg_dumpall.c:453 pg_dumpall.c:1770 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "не удалось подключиться к базе данных: \"%s\"" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2578,7 +2603,7 @@ msgstr "" "не удалось подключиться к базе данных \"postgres\" или \"template1\"\n" "Укажите другую базу данных." -#: pg_dumpall.c:621 +#: pg_dumpall.c:663 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2587,17 +2612,17 @@ msgstr "" "%s экспортирует всё содержимое кластера баз данных PostgreSQL в SQL-скрипт.\n" "\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [ПАРАМЕТР]...\n" -#: pg_dumpall.c:626 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=ИМЯ_ФАЙЛА имя выходного файла\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:675 #, c-format msgid "" " -c, --clean clean (drop) databases before recreating\n" @@ -2605,18 +2630,18 @@ msgstr "" " -c, --clean очистить (удалить) базы данных перед\n" " восстановлением\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr "" " -g, --globals-only выгрузить только глобальные объекты, без баз\n" -#: pg_dumpall.c:636 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner не восстанавливать владение объектами\n" -#: pg_dumpall.c:637 +#: pg_dumpall.c:679 #, c-format msgid "" " -r, --roles-only dump only roles, no databases or tablespaces\n" @@ -2624,13 +2649,13 @@ msgstr "" " -r, --roles-only выгрузить только роли, без баз данных\n" " и табличных пространств\n" -#: pg_dumpall.c:639 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr "" " -S, --superuser=ИМЯ имя пользователя для выполнения выгрузки\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:682 #, c-format msgid "" " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" @@ -2638,7 +2663,7 @@ msgstr "" " -t, --tablespaces-only выгружать только табличные пространства,\n" " без баз данных и ролей\n" -#: pg_dumpall.c:646 +#: pg_dumpall.c:688 #, c-format msgid "" " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" @@ -2646,22 +2671,22 @@ msgstr "" " --exclude-database=ШАБЛОН исключить базы с именами, подпадающими под " "шаблон\n" -#: pg_dumpall.c:653 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords не выгружать пароли ролей\n" -#: pg_dumpall.c:668 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=СТРОКА подключиться с данной строкой подключения\n" -#: pg_dumpall.c:670 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=ИМЯ_БД выбор другой базы данных по умолчанию\n" -#: pg_dumpall.c:677 +#: pg_dumpall.c:720 #, c-format msgid "" "\n" @@ -2675,97 +2700,109 @@ msgstr "" "вывод.\n" "\n" -#: pg_dumpall.c:886 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "имя роли, начинающееся с \"pg_\", пропущено (%s)" -#: pg_dumpall.c:1287 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "обнаружена потерянная запись pg_auth_members для роли %s" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "" "не удалось разобрать список управления доступом (%s) для табл. пространства " "\"%s\"" -#: pg_dumpall.c:1515 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "база данных \"%s\" исключается" -#: pg_dumpall.c:1519 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "выгрузка базы данных \"%s\"" -#: pg_dumpall.c:1551 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "ошибка при обработке базы \"%s\", pg_dump завершается" -#: pg_dumpall.c:1560 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "не удалось повторно открыть выходной файл \"%s\": %m" -#: pg_dumpall.c:1604 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "выполняется \"%s\"" -#: pg_dumpall.c:1819 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "не удалось узнать версию сервера" -#: pg_dumpall.c:1825 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "не удалось разобрать строку версии сервера \"%s\"" -#: pg_dumpall.c:1897 pg_dumpall.c:1920 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "выполняется %s" # TO REVEIW -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "необходимо указать -d/--dbname или -f/--file" # TO REVEIW -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "параметры -d/--dbname и -f/--file исключают друг друга" -#: pg_restore.c:343 +# TO REVEIW +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "параметры -d/--dbname и --restrict-key исключают друг друга" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "параметры -C/--create и -1/--single-transaction исключают друг друга" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "максимальное число параллельных заданий равно %d" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "параметр --single-transaction допускается только с одним заданием" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "" "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "нераспознанный формат архива \"%s\"; укажите \"c\", \"d\" или \"t\"" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "при восстановлении проигнорировано ошибок: %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2775,49 +2812,49 @@ msgstr "" "pg_dump.\n" "\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [ПАРАМЕТР]... [ФАЙЛ]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=БД подключиться к указанной базе данных\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr "" " -f, --file=ИМЯ_ФАЙЛА имя выходного файла (или - для вывода в stdout)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr "" " -F, --format=c|d|t формат файла (должен определяться автоматически)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list вывести краткое оглавление архива\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose выводить подробные сообщения\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "" "\n" @@ -2826,35 +2863,35 @@ msgstr "" "\n" "Параметры, управляющие восстановлением:\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only восстановить только данные, без схемы\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create создать целевую базу данных\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr "" " -e, --exit-on-error выйти при ошибке (по умолчанию - продолжать)\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=ИМЯ восстановить указанный индекс\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr "" " -j, --jobs=ЧИСЛО распараллелить восстановление на указанное " "число заданий\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2863,13 +2900,13 @@ msgstr "" " -L, --use-list=ИМЯ_ФАЙЛА использовать оглавление из этого файла для\n" " чтения/упорядочивания данных\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr "" " -n, --schema=ИМЯ восстановить объекты только в этой схеме\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr "" @@ -2877,17 +2914,17 @@ msgstr "" # skip-rule: no-space-before-parentheses # well-spelled: арг -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=ИМЯ(арг-ты) восстановить заданную функцию\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only восстановить только схему, без данных\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid "" " -S, --superuser=NAME superuser user name to use for disabling " @@ -2896,7 +2933,7 @@ msgstr "" " -S, --superuser=ИМЯ имя суперпользователя для отключения " "триггеров\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid "" " -t, --table=NAME restore named relation (table, view, etc.)\n" @@ -2904,12 +2941,12 @@ msgstr "" " -t, --table=ИМЯ восстановить заданное отношение (таблицу, " "представление и т. п.)\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=ИМЯ восстановить заданный триггер\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid "" " -x, --no-privileges skip restoration of access privileges (grant/" @@ -2918,23 +2955,23 @@ msgstr "" " -x, --no-privileges не восстанавливать права доступа\n" " (назначение/отзыв)\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr "" " -1, --single-transaction выполнить восстановление в одной транзакции\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security включить защиту на уровне строк\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments не восстанавливать комментарии\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not " @@ -2944,29 +2981,29 @@ msgstr "" " --no-data-for-failed-tables не восстанавливать данные таблиц, которые\n" " не удалось создать\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications не восстанавливать публикации\n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels не восстанавливать метки безопасности\n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions не восстанавливать подписки\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr "" " --no-tablespaces не восстанавливать назначения табл. " "пространств\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid "" " --section=SECTION restore named section (pre-data, data, or " @@ -2975,12 +3012,12 @@ msgstr "" " --section=РАЗДЕЛ восстановить заданный раздел\n" " (pre-data, data или post-data)\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ИМЯ_РОЛИ выполнить SET ROLE перед восстановлением\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "" "\n" @@ -2993,7 +3030,7 @@ msgstr "" "указывать\n" "несколько раз для выбора нескольких объектов.\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "" "\n" @@ -3377,9 +3414,6 @@ msgstr "" #~ msgid "missing pg_database entry for this database\n" #~ msgstr "для этой базы данных отсутствует запись в pg_database\n" -#~ msgid "found more than one pg_database entry for this database\n" -#~ msgstr "для этой базы данных найдено несколько записей в pg_database\n" - #~ msgid "could not find entry for pg_indexes in pg_class\n" #~ msgstr "для pg_indexes не найдена запись в pg_class\n" diff --git a/src/bin/pg_dump/po/sv.po b/src/bin/pg_dump/po/sv.po index d46815cf865..da8f4d19ba6 100644 --- a/src/bin/pg_dump/po/sv.po +++ b/src/bin/pg_dump/po/sv.po @@ -1,13 +1,13 @@ # Swedish message translation file for pg_dump # Peter Eisentraut , 2001, 2009, 2010. -# 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. # msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-08-07 20:48+0000\n" -"PO-Revision-Date: 2023-08-02 07:41+0200\n" +"POT-Creation-Date: 2025-08-17 12:24+0000\n" +"PO-Revision-Date: 2025-08-17 09:31+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -111,222 +111,222 @@ msgstr "barnprocess terminerades av signal %d: %s" msgid "child process exited with unrecognized status %d" msgstr "barnprocess avslutade med okänd statuskod %d" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "läser utökningar" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "identifierar utökningsmedlemmar" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "läser scheman" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "läser användardefinierade tabeller" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "läser användardefinierade funktioner" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "läser användardefinierade typer" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "läser procedurspråk" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "läser användardefinierade aggregatfunktioner" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "läser användardefinierade operatorer" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "läser användardefinierade accessmetoder" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "läser användardefinierade operatorklasser" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "läser användardefinierade operator-familjer" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "läser användardefinierade textsöktolkare" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "läser användardefinierade textsökmallar" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "läser användardefinierade textsökordlistor" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "läser användardefinierade textsökkonfigurationer" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "läser användardefinierade främmande data-omvandlare" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "läser användardefinierade främmande servrar" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "läser standardrättigheter" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "läser användardefinierade jämförelser" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "läser användardefinierade konverteringar" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "läser typomvandlingar" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "läser transformer" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "läser information om arv av tabeller" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "läser händelsetriggrar" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "hittar utökningstabeller" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "hittar arvrelationer" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "läser kolumninfo flr intressanta tabeller" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "markerar ärvda kolumner i undertabeller" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "läser partitioneringsdata" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "läser index" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "flaggar index i partitionerade tabeller" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "läser utökad statistik" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "läser integritetsvillkor" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "läser triggrar" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "läser omskrivningsregler" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "läser policys" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "läser publiceringar" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "läser publiceringsmedlemskap" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "läser prenumerationer" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "ogiltigt antal (%d) föräldrar för tabell \"%s\"" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "misslyckades med riktighetskontroll, hittade inte förälder-OID %u för tabell \"%s\" (OID %u)" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "kunde inte tolka numerisk array \"%s\": för många nummer" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "kunde inte tolka numerisk array \"%s\": ogiltigt tecken i nummer" @@ -458,7 +458,7 @@ msgstr "pgpipe: kunde itne ansluta till uttag (socket): felkod %d" msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: kunde inte acceptera anslutning: felkod %d" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1629 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "kunde inte stänga utdatafilen: %m" @@ -503,385 +503,385 @@ msgstr "direkta databasuppkopplingar stöds inte i arkiv från före version 1.3 msgid "implied data-only restore" msgstr "implicerad återställning av enbart data" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "tar bort %s %s" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "kunde inte hitta var IF EXISTS skulle stoppas in i sats \"%s\"" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "varning från orginaldumpfilen: %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "skapar %s \"%s.%s\"" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "skapar %s \"%s\"" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "kopplar upp mot ny databas \"%s\"" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "processar %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "processar data för tabell \"%s.%s\"" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "kör %s %s" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "stänger av trigger för %s" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "slår på trigger för %s" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "internt fel -- WriteData kan inte anropas utanför kontexten av en DataDumper-rutin" -#: pg_backup_archiver.c:1276 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "utmatning av stora objekt stöds inte i det valda formatet" -#: pg_backup_archiver.c:1334 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" msgstr[0] "återställde %d stor objekt" msgstr[1] "återställde %d stora objekt" -#: pg_backup_archiver.c:1355 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "återställer stort objekt med OID %u" -#: pg_backup_archiver.c:1367 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "kunde inte skapa stort objekt %u: %s" -#: pg_backup_archiver.c:1372 pg_dump.c:3768 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "kunde inte öppna stort objekt %u: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "kunde inte öppna TOC-filen \"%s\": %m" -#: pg_backup_archiver.c:1456 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "rad ignorerad: %s" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "kunde inte hitta en post för ID %d" -#: pg_backup_archiver.c:1486 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "kunde inte stänga TOC-filen: %m" -#: pg_backup_archiver.c:1600 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "kunde inte öppna utdatafilen \"%s\": %m" -#: pg_backup_archiver.c:1602 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "kunde inte öppna utdatafilen: %m" -#: pg_backup_archiver.c:1696 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" msgstr[0] "skrev %zu byte data av stort objekt (resultat = %d)" msgstr[1] "skrev %zu bytes data av stort objekt (resultat = %d)" -#: pg_backup_archiver.c:1702 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "kunde inte skriva till stort objekt: %s" -#: pg_backup_archiver.c:1792 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "vid INITIERING:" -#: pg_backup_archiver.c:1797 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "vid HANTERING AV TOC:" -#: pg_backup_archiver.c:1802 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "vid SLUTFÖRANDE:" -#: pg_backup_archiver.c:1807 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "från TOC-post %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1883 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "felaktigt dumpId" -#: pg_backup_archiver.c:1904 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "felaktig tabell-dumpId för TABLE DATA-objekt" -#: pg_backup_archiver.c:1996 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "oväntad data-offset-flagga %d" -#: pg_backup_archiver.c:2009 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "fil-offset i dumpfilen är för stort" -#: pg_backup_archiver.c:2147 pg_backup_archiver.c:2157 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "katalognamn för långt: \"%s\"" -#: pg_backup_archiver.c:2165 +#: pg_backup_archiver.c:2187 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "katalogen \"%s\" verkar inte vara ett giltigt arkiv (\"toc.dat\" finns inte)" -#: pg_backup_archiver.c:2173 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "kunde inte öppna indatafilen \"%s\": %m" -#: pg_backup_archiver.c:2180 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "kan inte öppna infil: %m" -#: pg_backup_archiver.c:2186 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "kan inte läsa infilen: %m" -#: pg_backup_archiver.c:2188 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "indatafilen är för kort (läste %lu, förväntade 5)" -#: pg_backup_archiver.c:2220 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "indatafilen verkar vara en dump i textformat. Använd psql." -#: pg_backup_archiver.c:2226 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "indatafilen verkar inte vara ett korrekt arkiv (för kort?)" -#: pg_backup_archiver.c:2232 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "indatafilen verkar inte vara ett korrekt arkiv" -#: pg_backup_archiver.c:2241 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "kunde inte stänga indatafilen: %m" -#: pg_backup_archiver.c:2358 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "känner inte igen filformat \"%d\"" -#: pg_backup_archiver.c:2440 pg_backup_archiver.c:4468 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4483 #, c-format msgid "finished item %d %s %s" msgstr "klar med objekt %d %s %s" -#: pg_backup_archiver.c:2444 pg_backup_archiver.c:4481 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4496 #, c-format msgid "worker process failed: exit code %d" msgstr "arbetsprocess misslyckades: felkod %d" -#: pg_backup_archiver.c:2564 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "post-ID %d utanför sitt intervall -- kanske en trasig TOC" -#: pg_backup_archiver.c:2631 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "återeställa tabeller med WITH OIDS stöds inte längre" -#: pg_backup_archiver.c:2713 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "okänd teckenkodning \"%s\"" -#: pg_backup_archiver.c:2718 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "ogiltigt ENCODING-val: %s" -#: pg_backup_archiver.c:2736 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "ogiltigt STDSTRINGS-val: %s" -#: pg_backup_archiver.c:2761 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "schema \"%s\" hittades inte" -#: pg_backup_archiver.c:2768 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "tabell \"%s\" hittades inte" -#: pg_backup_archiver.c:2775 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "index \"%s\" hittades inte" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "funktion \"%s\" hittades inte" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "trigger \"%s\" hittades inte" -#: pg_backup_archiver.c:3185 +#: pg_backup_archiver.c:3226 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "kunde inte sätta sessionsanvändare till \"%s\": %s" -#: pg_backup_archiver.c:3317 +#: pg_backup_archiver.c:3368 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "kunde inte sätta search_path till \"%s\": %s" -#: pg_backup_archiver.c:3379 +#: pg_backup_archiver.c:3430 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "kunde inte sätta default_tablespace till %s: %s" -#: pg_backup_archiver.c:3424 +#: pg_backup_archiver.c:3475 #, c-format msgid "could not set default_table_access_method: %s" msgstr "kunde inte sätta default_table_access_method: %s" -#: pg_backup_archiver.c:3516 pg_backup_archiver.c:3674 +#: pg_backup_archiver.c:3567 pg_backup_archiver.c:3725 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "vet inte hur man sätter ägare för objekttyp \"%s\"" -#: pg_backup_archiver.c:3777 +#: pg_backup_archiver.c:3792 #, c-format msgid "did not find magic string in file header" msgstr "kunde inte hitta den magiska strängen i filhuvudet" -#: pg_backup_archiver.c:3791 +#: pg_backup_archiver.c:3806 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "ej supportad version (%d.%d) i filhuvudet" -#: pg_backup_archiver.c:3796 +#: pg_backup_archiver.c:3811 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "riktighetskontroll på heltalsstorlek (%lu) misslyckades" -#: pg_backup_archiver.c:3800 +#: pg_backup_archiver.c:3815 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "arkivet skapades på en maskin med större heltal, en del operationer kan misslyckas" -#: pg_backup_archiver.c:3810 +#: pg_backup_archiver.c:3825 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "förväntat format (%d) skiljer sig från formatet som fanns i filen (%d)" -#: pg_backup_archiver.c:3825 +#: pg_backup_archiver.c:3840 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "arkivet är komprimerat, men denna installation stödjer inte komprimering -- ingen data kommer kunna läsas" -#: pg_backup_archiver.c:3859 +#: pg_backup_archiver.c:3874 #, c-format msgid "invalid creation date in header" msgstr "ogiltig skapandedatum i huvud" -#: pg_backup_archiver.c:3993 +#: pg_backup_archiver.c:4008 #, c-format msgid "processing item %d %s %s" msgstr "processar objekt %d %s %s" -#: pg_backup_archiver.c:4072 +#: pg_backup_archiver.c:4087 #, c-format msgid "entering main parallel loop" msgstr "går in i parallella huvudloopen" -#: pg_backup_archiver.c:4083 +#: pg_backup_archiver.c:4098 #, c-format msgid "skipping item %d %s %s" msgstr "hoppar över objekt %d %s %s" -#: pg_backup_archiver.c:4092 +#: pg_backup_archiver.c:4107 #, c-format msgid "launching item %d %s %s" msgstr "startar objekt %d %s %s" -#: pg_backup_archiver.c:4146 +#: pg_backup_archiver.c:4161 #, c-format msgid "finished main parallel loop" msgstr "klar med parallella huvudloopen" -#: pg_backup_archiver.c:4182 +#: pg_backup_archiver.c:4197 #, c-format msgid "processing missed item %d %s %s" msgstr "processar saknat objekt %d %s %s" -#: pg_backup_archiver.c:4787 +#: pg_backup_archiver.c:4802 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "tabell \"%s\" kunde inte skapas, dess data kommer ej återställas" @@ -973,12 +973,12 @@ msgstr "komprimerare aktiv" msgid "could not get server_version from libpq" msgstr "kunde inte hämta serverversionen från libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1837 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "server version: %s; %s version: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1839 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "avbryter då serverversionerna i matchar" @@ -988,7 +988,7 @@ msgstr "avbryter då serverversionerna i matchar" msgid "already connected to a database" msgstr "är redan uppkopplad mot en databas" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1666 pg_dumpall.c:1777 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "Lösenord: " @@ -1002,17 +1002,17 @@ msgstr "kunde inte ansluta till databasen" msgid "reconnection failed: %s" msgstr "återanslutning misslyckades: %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1697 pg_dumpall.c:1787 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1900 pg_dumpall.c:1923 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "fråga misslyckades: %s" -#: pg_backup_db.c:278 pg_dumpall.c:1901 pg_dumpall.c:1924 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "frågan var: %s" @@ -1048,7 +1048,7 @@ msgstr "fel returnerat av PQputCopyEnd: %s" msgid "COPY failed for table \"%s\": %s" msgstr "COPY misslyckades för tabell \"%s\": %s" -#: pg_backup_db.c:525 pg_dump.c:2131 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "oväntade extraresultat under kopiering (COPY) av tabell \"%s\"" @@ -1234,10 +1234,10 @@ msgstr "trasigt tar-huvud hittat i %s (förväntade %d, beräknad %d) filpositio msgid "unrecognized section name: \"%s\"" msgstr "okänt sektionsnamn: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:626 pg_dump.c:643 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Försök med \"%s --help\" för mer information.\n" @@ -1247,72 +1247,87 @@ msgstr "Försök med \"%s --help\" för mer information.\n" msgid "out of on_exit_nicely slots" msgstr "slut på on_exit_nicely-slottar" -#: pg_dump.c:552 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "komprimeringsnivå måste vara i intervallet 0..9" -#: pg_dump.c:590 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits måste vara i intervallet -15..3" -#: pg_dump.c:613 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "rows-per-insert måste vara i intervallet %d..%d" -#: pg_dump.c:641 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "för många kommandoradsargument (första är \"%s\")" -#: pg_dump.c:662 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "flaggorna \"bara schema\" (-s) och \"bara data\" (-a) kan inte användas tillsammans" -#: pg_dump.c:667 +#: pg_dump.c:673 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "flaggorna -s/--schema-only och --include-foreign-data kan inte användas tillsammans" -#: pg_dump.c:670 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "flaggan --include-foreign-data stöds inte med parallell backup" -#: pg_dump.c:674 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "flaggorna \"nollställ\" (-c) och \"bara data\" (-a) kan inte användas tillsammans" -#: pg_dump.c:679 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "flaggan --if-exists kräver flaggan -c/--clean" -#: pg_dump.c:686 +#: pg_dump.c:692 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "flagga --on-conflict-do-nothing kräver --inserts, --rows-per-insert eller --column-inserts" -#: pg_dump.c:708 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "kunde inte generera begränsningsnyckel" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "ogiltig begränsningsnyckel" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "flaggan --restrict-key kan bara användas tillsammans med --format=plain" + +#: pg_dump.c:728 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "efterfrågad komprimering finns inte i denna installation -- arkivet kommer sparas okomprimerat" -#: pg_dump.c:729 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "felaktigt antal parallella job" -#: pg_dump.c:733 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "parallell backup stöds bara med katalogformat" -#: pg_dump.c:788 +#: pg_dump.c:808 #, c-format msgid "" "Synchronized snapshots are not supported by this server version.\n" @@ -1323,32 +1338,32 @@ msgstr "" "Kör med --no-synchronized-snapshots istället om du inte kräver\n" "synkroniserade snapshots." -#: pg_dump.c:794 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Exporterade snapshots stöds inte i denna serverversion." -#: pg_dump.c:806 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "sista inbyggda OID är %u" -#: pg_dump.c:815 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "hittade inga matchande scheman" -#: pg_dump.c:829 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "hittade inga matchande tabeller" -#: pg_dump.c:851 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "hittade inga matchande utökningar" -#: pg_dump.c:1021 +#: pg_dump.c:1042 #, c-format msgid "" "%s dumps a database as a text file or to other formats.\n" @@ -1357,17 +1372,17 @@ msgstr "" "%s dumpar en databas som en textfil eller i andra format.\n" "\n" -#: pg_dump.c:1022 pg_dumpall.c:622 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "Användning:\n" -#: pg_dump.c:1023 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [FLAGGA]... [DBNAMN]\n" -#: pg_dump.c:1025 pg_dumpall.c:625 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "" "\n" @@ -1376,12 +1391,12 @@ msgstr "" "\n" "Allmänna flaggor:\n" -#: pg_dump.c:1026 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=FILENAME fil eller katalognamn för utdata\n" -#: pg_dump.c:1027 +#: pg_dump.c:1048 #, c-format msgid "" " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" @@ -1390,42 +1405,42 @@ msgstr "" " -F, --format=c|d|t|p utdatans filformat (egen (c), katalog (d), tar (t),\n" " ren text (p) (standard))\n" -#: pg_dump.c:1029 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM använd så här många parellella job för att dumpa\n" -#: pg_dump.c:1030 pg_dumpall.c:627 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose visa mer information\n" -#: pg_dump.c:1031 pg_dumpall.c:628 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_dump.c:1032 +#: pg_dump.c:1053 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 komprimeringsnivå för komprimerade format\n" -#: pg_dump.c:1033 pg_dumpall.c:629 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TIMEOUT misslyckas efter att ha väntat i TIMEOUT på tabellås\n" -#: pg_dump.c:1034 pg_dumpall.c:656 +#: pg_dump.c:1055 pg_dumpall.c:698 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync vänta inte på att ändingar säkert skrivits till disk\n" -#: pg_dump.c:1035 pg_dumpall.c:630 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_dump.c:1037 pg_dumpall.c:631 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "" "\n" @@ -1434,52 +1449,52 @@ msgstr "" "\n" "Flaggor som styr utmatning:\n" -#: pg_dump.c:1038 pg_dumpall.c:632 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only dumpa bara data, inte schema\n" -#: pg_dump.c:1039 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs inkludera stora objekt i dumpen\n" -#: pg_dump.c:1040 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs exkludera stora objekt i dumpen\n" -#: pg_dump.c:1041 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean nollställ (drop) databasobjekt innan återskapande\n" -#: pg_dump.c:1042 +#: pg_dump.c:1063 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create inkludera kommandon för att skapa databasen i dumpen\n" -#: pg_dump.c:1043 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=MALL dumpa bara de angivna utökningarna\n" -#: pg_dump.c:1044 pg_dumpall.c:634 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=KODNING dumpa data i teckenkodning KODNING\n" -#: pg_dump.c:1045 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=MALL dumpa bara de angivna scheman\n" -#: pg_dump.c:1046 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=MALL dumpa INTE de angivna scheman\n" -#: pg_dump.c:1047 +#: pg_dump.c:1068 #, c-format msgid "" " -O, --no-owner skip restoration of object ownership in\n" @@ -1488,52 +1503,52 @@ msgstr "" " -O, --no-owner hoppa över återställande av objektägare i\n" " textformatdumpar\n" -#: pg_dump.c:1049 pg_dumpall.c:638 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only dumpa bara scheman, inte data\n" -#: pg_dump.c:1050 +#: pg_dump.c:1071 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME namn på superuser för textformatdumpar\n" -#: pg_dump.c:1051 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=MALL dumpa bara de angivna tabellerna\n" -#: pg_dump.c:1052 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=MALL dumpa INTE de angivna tabellerna\n" -#: pg_dump.c:1053 pg_dumpall.c:641 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges dumpa inte rättigheter (grant/revoke)\n" -#: pg_dump.c:1054 pg_dumpall.c:642 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade används bara av uppgraderingsverktyg\n" -#: pg_dump.c:1055 pg_dumpall.c:643 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts dumpa data som INSERT med kolumnnamn\n" -#: pg_dump.c:1056 pg_dumpall.c:644 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr " --disable-dollar-quoting slå av dollar-citering, använd standard SQL-citering\n" -#: pg_dump.c:1057 pg_dumpall.c:645 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers slå av triggrar vid återställning av enbart data\n" -#: pg_dump.c:1058 +#: pg_dump.c:1079 #, c-format msgid "" " --enable-row-security enable row security (dump only content user has\n" @@ -1542,22 +1557,22 @@ msgstr "" " --enable-row-security slå på radsäkerhet (dumpa bara data användaren\n" " har rätt till)\n" -#: pg_dump.c:1060 +#: pg_dump.c:1081 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=MALL dumpa INTE data för de angivna tabellerna\n" -#: pg_dump.c:1061 pg_dumpall.c:647 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM övertrumfa standardinställningen för extra_float_digits\n" -#: pg_dump.c:1062 pg_dumpall.c:648 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists använd IF EXISTS när objekt droppas\n" -#: pg_dump.c:1063 +#: pg_dump.c:1084 #, c-format msgid "" " --include-foreign-data=PATTERN\n" @@ -1568,87 +1583,94 @@ msgstr "" " inkludera data i främmande tabeller från\n" " främmande servrar som matchar MALL\n" -#: pg_dump.c:1066 pg_dumpall.c:649 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts dumpa data som INSERT, istället för COPY\n" -#: pg_dump.c:1067 pg_dumpall.c:650 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root ladda partitioner via root-tabellen\n" -#: pg_dump.c:1068 pg_dumpall.c:651 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments dumpa inte kommentarer\n" -#: pg_dump.c:1069 pg_dumpall.c:652 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications dumpa inte publiceringar\n" -#: pg_dump.c:1070 pg_dumpall.c:654 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels dumpa inte tilldelning av säkerhetsetiketter\n" -#: pg_dump.c:1071 pg_dumpall.c:655 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions dumpa inte prenumereringar\n" -#: pg_dump.c:1072 +#: pg_dump.c:1093 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots använd inte synkroniserade snapshots i parallella job\n" -#: pg_dump.c:1073 pg_dumpall.c:657 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces dumpa inte användning av tabellutymmen\n" -#: pg_dump.c:1074 pg_dumpall.c:658 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression dumpa inte komprimeringsmetoder för TOAST\n" -#: pg_dump.c:1075 pg_dumpall.c:659 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data dumpa inte ologgad tabelldata\n" -#: pg_dump.c:1076 pg_dumpall.c:660 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing addera ON CONFLICT DO NOTHING till INSERT-kommandon\n" -#: pg_dump.c:1077 pg_dumpall.c:661 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr " --quote-all-identifiers citera alla identifierar, även om de inte är nyckelord\n" -#: pg_dump.c:1078 pg_dumpall.c:662 +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid " --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr "" +" --restrict-key=BEGRÄNSNINGS_NYCKEL\n" +" använd denns sträng som nyckel för psql \\restrict\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NRADER antal rader per INSERT; implicerar --inserts\n" -#: pg_dump.c:1079 +#: pg_dump.c:1101 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr " --section=SEKTION dumpa namngiven sektion (pre-data, data eller post-data)\n" -#: pg_dump.c:1080 +#: pg_dump.c:1102 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable wait until the dump can run without anomalies\n" -#: pg_dump.c:1081 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT använda namngivet snapshot för att dumpa\n" -#: pg_dump.c:1082 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid "" " --strict-names require table and/or schema include patterns to\n" @@ -1657,7 +1679,7 @@ msgstr "" " --strict-names kräv att mallar för tabeller och/eller scheman matchar\n" " minst en sak var\n" -#: pg_dump.c:1084 pg_dumpall.c:663 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid "" " --use-set-session-authorization\n" @@ -1668,7 +1690,7 @@ msgstr "" " använd kommandot SET SESSION AUTHORIZATION istället för\n" " kommandot ALTER OWNER för att sätta ägare\n" -#: pg_dump.c:1088 pg_dumpall.c:667 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "" "\n" @@ -1677,42 +1699,42 @@ msgstr "" "\n" "Flaggor för anslutning:\n" -#: pg_dump.c:1089 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAMN databasens som skall dumpas\n" -#: pg_dump.c:1090 pg_dumpall.c:669 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=VÄRDNAMN databasens värdnamn eller socketkatalog\n" -#: pg_dump.c:1091 pg_dumpall.c:671 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT databasens värdport\n" -#: pg_dump.c:1092 pg_dumpall.c:672 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAMN anslut med datta användarnamn mot databasen\n" -#: pg_dump.c:1093 pg_dumpall.c:673 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password fråga aldrig efter lösenord\n" -#: pg_dump.c:1094 pg_dumpall.c:674 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password fråga om lösenord (borde ske automatiskt)\n" -#: pg_dump.c:1095 pg_dumpall.c:675 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLLNAMN gör SET ROLE innan dumpen\n" -#: pg_dump.c:1097 +#: pg_dump.c:1119 #, c-format msgid "" "\n" @@ -1725,22 +1747,22 @@ msgstr "" "PGDATABASE att användas.\n" "\n" -#: pg_dump.c:1099 pg_dumpall.c:679 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapportera fel till <%s>.\n" -#: pg_dump.c:1100 pg_dumpall.c:680 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "hemsida för %s: <%s>\n" -#: pg_dump.c:1119 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "ogiltig klientteckenkodning \"%s\" angiven" -#: pg_dump.c:1265 +#: pg_dump.c:1295 #, c-format msgid "" "Synchronized snapshots on standby servers are not supported by this server version.\n" @@ -1751,553 +1773,553 @@ msgstr "" "Kör med --no-synchronized-snapshots istället om du inte behöver\n" "synkroniserade snapshots." -#: pg_dump.c:1334 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "ogiltigt utdataformat \"%s\" angivet" -#: pg_dump.c:1375 pg_dump.c:1431 pg_dump.c:1484 pg_dumpall.c:1451 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, 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_dump.c:1383 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "hittade inga matchande scheman för mallen \"%s\"" -#: pg_dump.c:1436 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "hittade inga matchande utökningar för mallen \"%s\"" -#: pg_dump.c:1489 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "hittade inga matchande främmande servrar för mallen \"%s\"" -#: pg_dump.c:1552 +#: pg_dump.c:1582 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "ej korrekt relationsnamn (för många namn med punkt): %s" -#: pg_dump.c:1563 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "hittade inga matchande tabeller för mallen \"%s\"" -#: pg_dump.c:1590 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "Du är för närvarande inte uppkopplad mot en databas." -#: pg_dump.c:1593 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "referenser till andra databaser är inte implementerat: %s" -#: pg_dump.c:2005 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "dumpar innehållet i tabell \"%s.%s\"" -#: pg_dump.c:2112 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Dumpning av innehållet i tabellen \"%s\" misslyckades: PQendcopy() misslyckades." -#: pg_dump.c:2113 pg_dump.c:2123 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "Felmeddelandet från servern: %s" -#: pg_dump.c:2114 pg_dump.c:2124 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "Kommandot var: %s" -#: pg_dump.c:2122 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Dumpning av innehållet i tabellen \"%s\" misslyckades: PQgetResult() misslyckades." -#: pg_dump.c:2204 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "fel antal fält hämtades för tabell \"%s\"" -#: pg_dump.c:2955 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "sparar databasdefinition" -#: pg_dump.c:3427 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "sparar kodning = %s" -#: pg_dump.c:3452 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "sparar standard_conforming_strings = %s" -#: pg_dump.c:3491 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "kunde inte parsa resultat från current_schemas()" -#: pg_dump.c:3510 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "sparar search_path = %s" -#: pg_dump.c:3550 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "läser stora objekt" -#: pg_dump.c:3732 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "sparar stora objekt" -#: pg_dump.c:3778 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "fel vid läsning av stort objekt %u: %s" -#: pg_dump.c:3882 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "läser säkerhetspolicy på radnivå" -#: pg_dump.c:4021 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "oväntad kommandotyp för policy: %c" -#: pg_dump.c:4175 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "ägare av publicering \"%s\" verkar vara ogiltig" -#: pg_dump.c:4467 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "prenumerationer har inte dumpats få aktuell användare inte är en superuser" -#: pg_dump.c:4538 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "ägare av prenumeration \"%s\" verkar vara ogiltig" -#: pg_dump.c:4581 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "kunde inte parsa arrayen för subpubliceringar" -#: pg_dump.c:4939 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "kunde inte hitta föräldrautökning för %s %s" -#: pg_dump.c:5071 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "ägare av schema \"%s\" verkar vara ogiltig" -#: pg_dump.c:5094 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "schema med OID %u existerar inte" -#: pg_dump.c:5424 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "ägare av datatyp \"%s\" verkar vara ogiltig" -#: pg_dump.c:5508 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "ägare av operator \"%s\" verkar vara ogiltig" -#: pg_dump.c:5807 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "ägare av operatorklass \"%s\" verkar vara ogiltig" -#: pg_dump.c:5890 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "ägare av operator-familj \"%s\" verkar vara ogiltig" -#: pg_dump.c:6058 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "ägare av aggregatfunktion \"%s\" verkar vara ogiltig" -#: pg_dump.c:6319 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "ägare av funktion \"%s\" verkar vara ogiltig" -#: pg_dump.c:7115 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "ägare av tabell \"%s\" verkar vara ogiltig" -#: pg_dump.c:7157 pg_dump.c:17702 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "misslyckades med riktighetskontroll, föräldratabell med OID %u för sekvens med OID %u hittas inte" -#: pg_dump.c:7300 +#: pg_dump.c:7439 #, c-format msgid "failed sanity check, table OID %u appearing in pg_partitioned_table not found" msgstr "misslyckades med riktighetskontroll, hittade inte tabell med OID %u i pg_partitioned_table" -#: pg_dump.c:7366 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "läser index för tabell \"%s.%s\"" -#: pg_dump.c:7780 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "läser främmande nyckel-villkor för tabell \"%s.%s\"" -#: pg_dump.c:8059 +#: pg_dump.c:8202 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "misslyckades med riktighetskontroll, föräldratabell med OID %u för pg_rewrite-rad med OID %u hittades inte" -#: pg_dump.c:8143 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "läser utlösare för tabell \"%s.%s\"" -#: pg_dump.c:8325 +#: pg_dump.c:8468 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "fråga producerade null som refererad tabell för främmande nyckel-trigger \"%s\" i tabell \"%s\" (OID för tabell : %u)" -#: pg_dump.c:8875 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "hittar kolumner och typer för tabell \"%s.%s\"" -#: pg_dump.c:8999 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "ogiltigt kolumnnumrering i tabell \"%s\"" -#: pg_dump.c:9038 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "hittar default-uttryck för tabell \"%s.%s\"" -#: pg_dump.c:9060 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "felaktigt adnum-värde %d för tabell \"%s\"" -#: pg_dump.c:9153 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "hittar check-villkor för tabell \"%s.%s\"" -#: pg_dump.c:9202 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" msgstr[0] "förväntade %d check-villkor för tabell \"%s\" men hittade %d" msgstr[1] "förväntade %d check-villkor för tabell \"%s\" men hittade %d" -#: pg_dump.c:9206 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(systemkatalogerna kan vara trasiga.)" -#: pg_dump.c:10808 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype för datatyp \"%s\" verkar vara ogiltig" -#: pg_dump.c:12156 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "felaktigt värde i arrayen proargmodes" -#: pg_dump.c:12458 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "kunde inte tolka arrayen proallargtypes" -#: pg_dump.c:12474 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "kunde inte tolka arrayen proargmodes" -#: pg_dump.c:12488 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "kunde inte tolka arrayen proargnames" -#: pg_dump.c:12498 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "kunde inte tolka arrayen proconfig" -#: pg_dump.c:12574 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "okänt provolatile-värde för funktion \"%s\"" -#: pg_dump.c:12624 pg_dump.c:14566 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "okänt proparallel-värde för funktion \"%s\"" -#: pg_dump.c:12764 pg_dump.c:12870 pg_dump.c:12877 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "kunde inte hitta funktionsdefinitionen för funktion med OID %u" -#: pg_dump.c:12803 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "felaktigt värde i fältet pg_cast.castfunc eller pg_cast.castmethod" -#: pg_dump.c:12806 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "felaktigt värde i fältet pg_cast.castmethod" -#: pg_dump.c:12896 +#: pg_dump.c:13044 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "felaktig transform-definition, minst en av trffromsql och trftosql måste vara ickenoll" -#: pg_dump.c:12913 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "felaktigt värde i fältet pg_transform.trffromsql" -#: pg_dump.c:12934 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "felaktigt värde i fältet pg_transform.trftosql" -#: pg_dump.c:13085 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "postfix-operatorer stöds inte längre (operator \"%s\")" -#: pg_dump.c:13255 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "kunde inte hitta en operator med OID %s." -#: pg_dump.c:13323 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "ogiltig typ \"%c\" för accessmetod \"%s\"" -#: pg_dump.c:14077 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "okänd jämförelseleverantör: %s" -#: pg_dump.c:14485 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "okänt aggfinalmodify-värde för aggregat \"%s\"" -#: pg_dump.c:14541 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "okänt aggmfinalmodify-värde för aggregat \"%s\"" -#: pg_dump.c:15263 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "okänd objekttyp i standardrättigheter: %d" -#: pg_dump.c:15281 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "kunde inte parsa standard-ACL-lista (%s)" -#: pg_dump.c:15366 +#: pg_dump.c:15514 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "kunde inte parsa initial GRANT ACL-lista (%s) eller initial REVOKE ACL-lista (%s) för objekt \"%s\" (%s)" -#: pg_dump.c:15374 +#: pg_dump.c:15522 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "kunde inte parsa GRANT ACL-lista (%s) eller REVOKE ACL-lista (%s) för objekt \"%s\" (%s)" -#: pg_dump.c:15889 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "fråga för att hämta definition av vy \"%s\" returnerade ingen data" -#: pg_dump.c:15892 +#: pg_dump.c:16040 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "fråga för att hämta definition av vy \"%s\" returnerade mer än en definition" -#: pg_dump.c:15899 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "definition av vy \"%s\" verkar vara tom (längd noll)" -#: pg_dump.c:15983 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS stöds inte längre (tabell \"%s\")" -#: pg_dump.c:16889 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "ogiltigt kolumnnummer %d för tabell \"%s\"" -#: pg_dump.c:16966 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "kunde inte parsa kolumn i indexstatistik" -#: pg_dump.c:16968 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "kunde inte parsa värden i indexstatistik" -#: pg_dump.c:16970 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "antal kolumner och värden stämmer inte i indexstatistik" -#: pg_dump.c:17187 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "saknar index för integritetsvillkor \"%s\"" -#: pg_dump.c:17412 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "oväntad integritetsvillkorstyp: %c" -#: pg_dump.c:17544 pg_dump.c:17767 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" msgstr[0] "fråga för att hämta data för sekvens \"%s\" returnerade %d rad (förväntade 1)" msgstr[1] "fråga för att hämta data för sekvens \"%s\" returnerade %d rader (förväntade 1)" -#: pg_dump.c:17578 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "okänd sekvenstyp: %s" -#: pg_dump.c:17865 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "oväntat tgtype-värde: %d" -#: pg_dump.c:17939 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "felaktig argumentsträng (%s) för trigger \"%s\" i tabell \"%s\"" -#: pg_dump.c:18208 +#: pg_dump.c:18386 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "fråga för att hämta regel \"%s\" för tabell \"%s\" misslyckades: fel antal rader returnerades" -#: pg_dump.c:18370 +#: pg_dump.c:18548 #, c-format msgid "could not find referenced extension %u" msgstr "kunde inte hitta refererad utökning %u" -#: pg_dump.c:18461 +#: pg_dump.c:18639 #, c-format msgid "could not parse extension configuration array" msgstr "kunde inte parsa konfigurations-array för utökning" -#: pg_dump.c:18463 +#: pg_dump.c:18641 #, c-format msgid "could not parse extension condition array" msgstr "kunde inte parsa villkors-array för utökning" -#: pg_dump.c:18465 +#: pg_dump.c:18643 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "antal konfigurationer och villkor stämmer inte för utökning" -#: pg_dump.c:18597 +#: pg_dump.c:18775 #, c-format msgid "reading dependency data" msgstr "läser beroendedata" -#: pg_dump.c:18690 +#: pg_dump.c:18868 #, c-format msgid "no referencing object %u %u" msgstr "inget refererande objekt %u %u" -#: pg_dump.c:18701 +#: pg_dump.c:18879 #, c-format msgid "no referenced object %u %u" msgstr "inget refererat objekt %u %u" -#: pg_dump.c:19090 +#: pg_dump.c:19268 #, c-format msgid "could not parse reloptions array" msgstr "kunde inte parsa arrayen reloptions" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:619 #, c-format msgid "invalid dumpId %d" msgstr "ogiltigt dumpId %d" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:625 #, c-format msgid "invalid dependency %d" msgstr "ogiltigt beroende %d" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:858 #, c-format msgid "could not identify dependency loop" msgstr "kunde inte fastställa beroendeloop" -#: pg_dump_sort.c:1274 +#: pg_dump_sort.c:1473 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" msgstr[0] "det finns cirkulära främmande nyckelberoenden för denna tabell:" msgstr[1] "det finns cirkulära främmande nyckelberoenden för dessa tabeller:" -#: pg_dump_sort.c:1278 pg_dump_sort.c:1298 +#: pg_dump_sort.c:1477 pg_dump_sort.c:1497 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1279 +#: pg_dump_sort.c:1478 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Du kan eventiellt inte återställa dumpen utan att använda --disable-triggers eller temporärt droppa vilkoren." -#: pg_dump_sort.c:1280 +#: pg_dump_sort.c:1479 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Överväg att göra en full dump istället för --data-only för att undvika detta problem." -#: pg_dump_sort.c:1292 +#: pg_dump_sort.c:1491 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "kunde inte räta ut beroendeloopen för dessa saker:" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -2308,7 +2330,7 @@ msgstr "" "katalog som \"%s\".\n" "Kontrollera din installation." -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -2319,32 +2341,32 @@ msgstr "" "men är inte av samma version som %s.\n" "Kontrollera din installation." -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "flaggan --exclude-database kan inte användas tillsammans med -g/--globals-only, -r/--roles-only eller -t/--tablespaces-only" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "flaggorna \"bara gobala\" (-g) och \"bara roller\" (-r) kan inte användas tillsammans" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "flaggorna \"bara globala\" (-g) och \"bara tabellutrymmen\" (-t) kan inte användas tillsammans" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "flaggorna \"bara roller\" (-r) och \"bara tabellutrymmen\" (-t) kan inte användas tillsammans" -#: pg_dumpall.c:453 pg_dumpall.c:1767 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "kunde inte ansluta till databasen \"%s\"" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "" "could not connect to databases \"postgres\" or \"template1\"\n" @@ -2353,7 +2375,7 @@ msgstr "" "kunde inte ansluta till databasen \"postgres\" eller \"template1\"\n" "Ange en annan databas." -#: pg_dumpall.c:621 +#: pg_dumpall.c:663 #, c-format msgid "" "%s extracts a PostgreSQL database cluster into an SQL script file.\n" @@ -2362,67 +2384,67 @@ msgstr "" "%s extraherar ett PostgreSQL databaskluster till en SQL-scriptfil.\n" "\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s [FLAGGA]...\n" -#: pg_dumpall.c:626 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=FILENAME utdatafilnamn\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:675 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean nollställ (drop) databaser innan återskapning\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only dumpa bara globala objekt, inte databaser\n" -#: pg_dumpall.c:636 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner återställ inte objektägare\n" -#: pg_dumpall.c:637 +#: pg_dumpall.c:679 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr " -r, --roles-only dumpa endast roller, inte databaser eller tabellutrymmen\n" -#: pg_dumpall.c:639 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAMN namn på superuser för användning i dumpen\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:682 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr " -t, --tablespaces-only dumpa endasdt tabellutrymmen, inte databaser eller roller\n" -#: pg_dumpall.c:646 +#: pg_dumpall.c:688 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=MALL uteslut databaser vars namn matchar MALL\n" -#: pg_dumpall.c:653 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords dumpa inte lösenord för roller\n" -#: pg_dumpall.c:668 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=ANSLSTR anslut med anslutningssträng\n" -#: pg_dumpall.c:670 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAMN alternativ standarddatabas\n" -#: pg_dumpall.c:677 +#: pg_dumpall.c:720 #, c-format msgid "" "\n" @@ -2434,92 +2456,103 @@ msgstr "" "Om -f/--file inte används så kommer SQL-skriptet skriva till standard ut.\n" "\n" -#: pg_dumpall.c:883 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "rollnamn som startar med \"pg_\" hoppas över (%s)" -#: pg_dumpall.c:1284 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "hittade föräldralös pg_auth_members-post för roll %s" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "kunde inte tolka ACL-listan (%s) för tabellutrymme \"%s\"" -#: pg_dumpall.c:1512 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "utesluter databas \"%s\"" -#: pg_dumpall.c:1516 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "dumpar databas \"%s\"" -#: pg_dumpall.c:1548 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "pg_dump misslyckades med databas \"%s\", avslutar" -#: pg_dumpall.c:1557 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "kunde inte öppna om utdatafilen \"%s\": %m" -#: pg_dumpall.c:1601 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "kör \"%s\"" -#: pg_dumpall.c:1816 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "kunde inte hämta serverversionen" -#: pg_dumpall.c:1822 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "kunde inte tolka versionsträngen \"%s\"" -#: pg_dumpall.c:1894 pg_dumpall.c:1917 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "kör: %s" -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "en av flaggorna -d/--dbname och -f/--file måste anges" -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "flaggorna -d/--dbname och -f/--file kan inte användas ihop" -#: pg_restore.c:343 +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "flaggorna -d/--dbname och --restrict-key kan inte användas ihop" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "flaggorna -C/--create och -1/--single-transaction kan inte användas tillsammans" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "maximalt antal parallella job är %d" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "kan inte ange både --single-transaction och multipla job" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "okänt arkivformat \"%s\"; vänligen ange \"c\", \"d\" eller \"t\"" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "fel ignorerade vid återställande: %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "" "%s restores a PostgreSQL database from an archive created by pg_dump.\n" @@ -2528,47 +2561,47 @@ msgstr "" "%s återställer en PostgreSQL-databas från ett arkiv skapat av pg_dump.\n" "\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [FLAGGA]... [FIL]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAMN koppla upp med databasnamn\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=FILNAMN utdatafilnamn (- för stdout)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t backupens filformat (bör ske automatiskt)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list skriv ut summerad TOC för arkivet\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose visa mer information\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version visa versionsinformation, avsluta sedan\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help visa denna hjälp, avsluta sedan\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "" "\n" @@ -2577,32 +2610,32 @@ msgstr "" "\n" "Flaggor som styr återställning:\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only återställ bara data, inte scheman\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create skapa måldatabasen\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error avsluta vid fel, standard är att fortsätta\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAMN återställ namngivet index\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM använda så här många parallella job för återställning\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid "" " -L, --use-list=FILENAME use table of contents from this file for\n" @@ -2611,62 +2644,62 @@ msgstr "" " -L, --use-list=FILNAMN använd innehållsförteckning från denna fil för\n" " att välja/sortera utdata\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAMN återställ enbart objekt i detta schema\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NAMN återställ inte objekt i detta schema\n" -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAMN(arg) återställ namngiven funktion\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only återställ bara scheman, inte data\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr " -S, --superuser=NAMN namn på superuser för att slå av triggrar\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr " -t, --table=NAMN återställ namngiven relation (tabell, vy, osv.)\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAMN återställ namngiven trigger\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges återställ inte åtkomsträttigheter (grant/revoke)\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction återställ i en enda transaktion\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security aktivera radsäkerhet\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments återställ inte kommentarer\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid "" " --no-data-for-failed-tables do not restore data of tables that could not be\n" @@ -2675,37 +2708,37 @@ msgstr "" " --no-data-for-failed-tables återställ inte data för tabeller som\n" " inte kunde skapas\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications återställ inte publiceringar\n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels återställ inte säkerhetsetiketter\n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions återställ inte prenumerationer\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces återställ inte användning av tabellutymmen\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr " --section=SEKTION återställ namngiven sektion (pre-data, data eller post-data)\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME gör SET ROLE innan återställning\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "" "\n" @@ -2716,7 +2749,7 @@ msgstr "" "Flaggorna -I, -n, -N, -P, -t, -T och --section kan kombineras och anges\n" "många gånger för att välja flera objekt.\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "" "\n" diff --git a/src/bin/pg_dump/po/uk.po b/src/bin/pg_dump/po/uk.po index 08058003cb8..92f6852e719 100644 --- a/src/bin/pg_dump/po/uk.po +++ b/src/bin/pg_dump/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-18 19:33+0000\n" -"PO-Revision-Date: 2023-04-19 15:37\n" +"POT-Creation-Date: 2025-12-31 03:26+0000\n" +"PO-Revision-Date: 2025-12-31 15:41\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -112,222 +112,222 @@ msgstr "дочірній процес перервано через сигнал msgid "child process exited with unrecognized status %d" msgstr "дочірній процес завершився з невизнаним статусом %d" -#: common.c:124 +#: common.c:127 #, c-format msgid "reading extensions" msgstr "читання розширень" -#: common.c:128 +#: common.c:131 #, c-format msgid "identifying extension members" msgstr "ідентифікація членів розширення" -#: common.c:131 +#: common.c:134 #, c-format msgid "reading schemas" msgstr "читання схемів" -#: common.c:141 +#: common.c:144 #, c-format msgid "reading user-defined tables" msgstr "читання користувацьких таблиць" -#: common.c:148 +#: common.c:151 #, c-format msgid "reading user-defined functions" msgstr "читання користувацьких функцій" -#: common.c:153 +#: common.c:156 #, c-format msgid "reading user-defined types" msgstr "читання користувацьких типів" -#: common.c:158 +#: common.c:161 #, c-format msgid "reading procedural languages" msgstr "читання процедурних мов" -#: common.c:161 +#: common.c:164 #, c-format msgid "reading user-defined aggregate functions" msgstr "читання користувацьких агрегатних функцій" -#: common.c:164 +#: common.c:167 #, c-format msgid "reading user-defined operators" msgstr "читання користувацьких операторів" -#: common.c:168 +#: common.c:171 #, c-format msgid "reading user-defined access methods" msgstr "читання користувацьких методів доступу" -#: common.c:171 +#: common.c:175 #, c-format msgid "reading user-defined operator classes" msgstr "читання користувацьких класів операторів" -#: common.c:174 +#: common.c:178 #, c-format msgid "reading user-defined operator families" msgstr "читання користувацьких сімейств операторів" -#: common.c:177 +#: common.c:181 #, c-format msgid "reading user-defined text search parsers" msgstr "читання користувацьких парсерів текстового пошуку" -#: common.c:180 +#: common.c:184 #, c-format msgid "reading user-defined text search templates" msgstr "читання користувацьких шаблонів текстового пошуку" -#: common.c:183 +#: common.c:187 #, c-format msgid "reading user-defined text search dictionaries" msgstr "читання користувацьких словників текстового пошуку" -#: common.c:186 +#: common.c:190 #, c-format msgid "reading user-defined text search configurations" msgstr "читання користувацьких конфігурацій текстового пошуку" -#: common.c:189 +#: common.c:193 #, c-format msgid "reading user-defined foreign-data wrappers" msgstr "читання користувацьких джерел сторонніх даних" -#: common.c:192 +#: common.c:196 #, c-format msgid "reading user-defined foreign servers" msgstr "читання користувацьких сторонніх серверів" -#: common.c:195 +#: common.c:199 #, c-format msgid "reading default privileges" msgstr "читання прав за замовчуванням" -#: common.c:198 +#: common.c:202 #, c-format msgid "reading user-defined collations" msgstr "читання користувацьких сортувань" -#: common.c:202 +#: common.c:206 #, c-format msgid "reading user-defined conversions" msgstr "читання користувацьких перетворень" -#: common.c:205 +#: common.c:209 #, c-format msgid "reading type casts" msgstr "читання типу приведення" -#: common.c:208 +#: common.c:212 #, c-format msgid "reading transforms" msgstr "читання перетворень" -#: common.c:211 +#: common.c:215 #, c-format msgid "reading table inheritance information" msgstr "читання інформації про успадкування таблиці" -#: common.c:214 +#: common.c:218 #, c-format msgid "reading event triggers" msgstr "читання тригерів подій" -#: common.c:218 +#: common.c:222 #, c-format msgid "finding extension tables" msgstr "пошук таблиць розширень" -#: common.c:222 +#: common.c:226 #, c-format msgid "finding inheritance relationships" msgstr "пошук відносин успадкування" -#: common.c:225 +#: common.c:229 #, c-format msgid "reading column info for interesting tables" msgstr "читання інформації про стовпці цікавлячої таблиці" -#: common.c:228 +#: common.c:232 #, c-format msgid "flagging inherited columns in subtables" msgstr "помітка успадкованих стовпців в підтаблицях" -#: common.c:231 +#: common.c:235 #, c-format msgid "reading partitioning data" msgstr "читання даних секції" -#: common.c:234 +#: common.c:238 #, c-format msgid "reading indexes" msgstr "читання індексів" -#: common.c:237 +#: common.c:241 #, c-format msgid "flagging indexes in partitioned tables" msgstr "помітка індексів в секційних таблицях" -#: common.c:240 +#: common.c:244 #, c-format msgid "reading extended statistics" msgstr "читання розширеної статистики" -#: common.c:243 +#: common.c:247 #, c-format msgid "reading constraints" msgstr "читання обмежень" -#: common.c:246 +#: common.c:250 #, c-format msgid "reading triggers" msgstr "читання тригерів" -#: common.c:249 +#: common.c:253 #, c-format msgid "reading rewrite rules" msgstr "читання правил перезаписування" -#: common.c:252 +#: common.c:256 #, c-format msgid "reading policies" msgstr "читання політик" -#: common.c:255 +#: common.c:259 #, c-format msgid "reading publications" msgstr "читання публікацій" -#: common.c:260 +#: common.c:264 #, c-format msgid "reading publication membership" msgstr "читання публікацій учасників" -#: common.c:263 +#: common.c:267 #, c-format msgid "reading subscriptions" msgstr "читання підписок" -#: common.c:340 +#: common.c:344 #, c-format msgid "invalid number of parents %d for table \"%s\"" msgstr "неприпустиме число батьківських елементів %d для таблиці \"%s\"" -#: common.c:1102 +#: common.c:1117 #, c-format msgid "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found" msgstr "помилка перевірки, батьківський елемент ідентифікатора OID %u для таблиці \"%s\" (ідентифікатор OID %u) не знайдено" -#: common.c:1144 +#: common.c:1159 #, c-format msgid "could not parse numeric array \"%s\": too many numbers" msgstr "не вдалося проаналізувати числовий масив \"%s\": забагато чисел" -#: common.c:1159 +#: common.c:1174 #, c-format msgid "could not parse numeric array \"%s\": invalid character in number" msgstr "не вдалося проаналізувати числовий масив \"%s\": неприпустимий характер числа" @@ -456,7 +456,7 @@ msgstr "pgpipe: не вдалося зв'язатися з сокетом: ко msgid "pgpipe: could not accept connection: error code %d" msgstr "pgpipe: не вдалося прийняти зв'язок: код помилки %d" -#: pg_backup_archiver.c:279 pg_backup_archiver.c:1629 +#: pg_backup_archiver.c:279 pg_backup_archiver.c:1651 #, c-format msgid "could not close output file: %m" msgstr "не вдалося закрити вихідний файл: %m" @@ -501,72 +501,72 @@ msgstr "прямі з'днання з базою даних не підтрим msgid "implied data-only restore" msgstr "мається на увазі відновлення лише даних" -#: pg_backup_archiver.c:520 +#: pg_backup_archiver.c:531 #, c-format msgid "dropping %s %s" msgstr "видалення %s %s" -#: pg_backup_archiver.c:615 +#: pg_backup_archiver.c:626 #, c-format msgid "could not find where to insert IF EXISTS in statement \"%s\"" msgstr "не вдалося знайти, куди вставити IF EXISTS в інструкції \"%s\"" -#: pg_backup_archiver.c:771 pg_backup_archiver.c:773 +#: pg_backup_archiver.c:790 pg_backup_archiver.c:792 #, c-format msgid "warning from original dump file: %s" msgstr "попередження з оригінального файлу дамп: %s" -#: pg_backup_archiver.c:788 +#: pg_backup_archiver.c:807 #, c-format msgid "creating %s \"%s.%s\"" msgstr "створення %s \"%s.%s\"" -#: pg_backup_archiver.c:791 +#: pg_backup_archiver.c:810 #, c-format msgid "creating %s \"%s\"" msgstr "створення %s \" \"%s\"" -#: pg_backup_archiver.c:841 +#: pg_backup_archiver.c:860 #, c-format msgid "connecting to new database \"%s\"" msgstr "підключення до нової бази даних \"%s\"" -#: pg_backup_archiver.c:868 +#: pg_backup_archiver.c:887 #, c-format msgid "processing %s" msgstr "обробка %s" -#: pg_backup_archiver.c:890 +#: pg_backup_archiver.c:909 #, c-format msgid "processing data for table \"%s.%s\"" msgstr "обробка даних для таблиці \"%s.%s\"" -#: pg_backup_archiver.c:963 +#: pg_backup_archiver.c:982 #, c-format msgid "executing %s %s" msgstr "виконання %s %s" -#: pg_backup_archiver.c:1002 +#: pg_backup_archiver.c:1021 #, c-format msgid "disabling triggers for %s" msgstr "вимкнення тригерів для %s" -#: pg_backup_archiver.c:1028 +#: pg_backup_archiver.c:1047 #, c-format msgid "enabling triggers for %s" msgstr "увімкнення тригерів для %s" -#: pg_backup_archiver.c:1093 +#: pg_backup_archiver.c:1112 #, c-format msgid "internal error -- WriteData cannot be called outside the context of a DataDumper routine" msgstr "внутрішня помилка - WriteData не може бути викликана поза контекстом підпрограми DataDumper " -#: pg_backup_archiver.c:1276 +#: pg_backup_archiver.c:1298 #, c-format msgid "large-object output not supported in chosen format" msgstr "вивід великих об'єктів не підтримується у вибраному форматі" -#: pg_backup_archiver.c:1334 +#: pg_backup_archiver.c:1356 #, c-format msgid "restored %d large object" msgid_plural "restored %d large objects" @@ -575,55 +575,55 @@ msgstr[1] "відновлено %d великих об'єкти" msgstr[2] "відновлено %d великих об'єктів" msgstr[3] "відновлено %d великих об'єктів" -#: pg_backup_archiver.c:1355 pg_backup_tar.c:733 +#: pg_backup_archiver.c:1377 pg_backup_tar.c:733 #, c-format msgid "restoring large object with OID %u" msgstr "відновлення великого об'єкту з OID %u" -#: pg_backup_archiver.c:1367 +#: pg_backup_archiver.c:1389 #, c-format msgid "could not create large object %u: %s" msgstr "не вдалося створити великий об'єкт %u: %s" -#: pg_backup_archiver.c:1372 pg_dump.c:3768 +#: pg_backup_archiver.c:1394 pg_dump.c:3847 #, c-format msgid "could not open large object %u: %s" msgstr "не вдалося відкрити великий об'єкт %u: %s" -#: pg_backup_archiver.c:1428 +#: pg_backup_archiver.c:1450 #, c-format msgid "could not open TOC file \"%s\": %m" msgstr "не вдалося відкрити файл TOC \"%s\": %m" -#: pg_backup_archiver.c:1456 +#: pg_backup_archiver.c:1478 #, c-format msgid "line ignored: %s" msgstr "рядок проігноровано: %s" -#: pg_backup_archiver.c:1463 +#: pg_backup_archiver.c:1485 #, c-format msgid "could not find entry for ID %d" msgstr "не вдалося знайти введення для ID %d" -#: pg_backup_archiver.c:1486 pg_backup_directory.c:222 +#: pg_backup_archiver.c:1508 pg_backup_directory.c:222 #: pg_backup_directory.c:599 #, c-format msgid "could not close TOC file: %m" msgstr "не вдалося закрити файл TOC: %m" -#: pg_backup_archiver.c:1600 pg_backup_custom.c:156 pg_backup_directory.c:332 +#: pg_backup_archiver.c:1622 pg_backup_custom.c:156 pg_backup_directory.c:332 #: pg_backup_directory.c:586 pg_backup_directory.c:649 -#: pg_backup_directory.c:668 pg_dumpall.c:489 +#: pg_backup_directory.c:668 pg_dumpall.c:514 #, c-format msgid "could not open output file \"%s\": %m" msgstr "не вдалося відкрити вихідний файл \"%s\": %m" -#: pg_backup_archiver.c:1602 pg_backup_custom.c:162 +#: pg_backup_archiver.c:1624 pg_backup_custom.c:162 #, c-format msgid "could not open output file: %m" msgstr "не вдалося відкрити вихідний файл: %m" -#: pg_backup_archiver.c:1696 +#: pg_backup_archiver.c:1718 #, c-format msgid "wrote %zu byte of large object data (result = %d)" msgid_plural "wrote %zu bytes of large object data (result = %d)" @@ -632,258 +632,258 @@ msgstr[1] "записано %zu байти даних великого об'єк msgstr[2] "записано %zu байтів даних великого об'єкта (результат = %d)" msgstr[3] "записано %zu байтів даних великого об'єкта (результат = %d)" -#: pg_backup_archiver.c:1702 +#: pg_backup_archiver.c:1724 #, c-format msgid "could not write to large object: %s" msgstr "не вдалося записати до великого об'єкту: %s" -#: pg_backup_archiver.c:1792 +#: pg_backup_archiver.c:1814 #, c-format msgid "while INITIALIZING:" msgstr "при ІНІЦІАЛІЗАЦІЇ:" -#: pg_backup_archiver.c:1797 +#: pg_backup_archiver.c:1819 #, c-format msgid "while PROCESSING TOC:" msgstr "при ОБРОБЦІ TOC:" -#: pg_backup_archiver.c:1802 +#: pg_backup_archiver.c:1824 #, c-format msgid "while FINALIZING:" msgstr "при ЗАВЕРШЕННІ:" -#: pg_backup_archiver.c:1807 +#: pg_backup_archiver.c:1829 #, c-format msgid "from TOC entry %d; %u %u %s %s %s" msgstr "зі входження до TOC %d; %u %u %s %s %s" -#: pg_backup_archiver.c:1883 +#: pg_backup_archiver.c:1905 #, c-format msgid "bad dumpId" msgstr "невірний dumpId" -#: pg_backup_archiver.c:1904 +#: pg_backup_archiver.c:1926 #, c-format msgid "bad table dumpId for TABLE DATA item" msgstr "невірна таблиця dumpId для елементу даних таблиці" -#: pg_backup_archiver.c:1996 +#: pg_backup_archiver.c:2018 #, c-format msgid "unexpected data offset flag %d" msgstr "неочікувана позначка зсуву даних %d" -#: pg_backup_archiver.c:2009 +#: pg_backup_archiver.c:2031 #, c-format msgid "file offset in dump file is too large" msgstr "зсув файлу у файлі дампу завеликий" -#: pg_backup_archiver.c:2147 pg_backup_archiver.c:2157 +#: pg_backup_archiver.c:2169 pg_backup_archiver.c:2179 #, c-format msgid "directory name too long: \"%s\"" msgstr "ім'я каталогу задовге: \"%s\"" -#: pg_backup_archiver.c:2165 +#: pg_backup_archiver.c:2187 #, c-format msgid "directory \"%s\" does not appear to be a valid archive (\"toc.dat\" does not exist)" msgstr "каталог \"%s\" не схожий на архівний (\"toc.dat\" не існує)" -#: pg_backup_archiver.c:2173 pg_backup_custom.c:173 pg_backup_custom.c:807 +#: pg_backup_archiver.c:2195 pg_backup_custom.c:173 pg_backup_custom.c:807 #: pg_backup_directory.c:207 pg_backup_directory.c:395 #, c-format msgid "could not open input file \"%s\": %m" msgstr "не вдалося відкрити вхідний файл \"%s\": %m" -#: pg_backup_archiver.c:2180 pg_backup_custom.c:179 +#: pg_backup_archiver.c:2202 pg_backup_custom.c:179 #, c-format msgid "could not open input file: %m" msgstr "не вдалося відкрити вхідний файл: %m" -#: pg_backup_archiver.c:2186 +#: pg_backup_archiver.c:2208 #, c-format msgid "could not read input file: %m" msgstr "не вдалося прочитати вхідний файл: %m" -#: pg_backup_archiver.c:2188 +#: pg_backup_archiver.c:2210 #, c-format msgid "input file is too short (read %lu, expected 5)" msgstr "вхідний файл закороткий (прочитано %lu, очікувалось 5)" -#: pg_backup_archiver.c:2220 +#: pg_backup_archiver.c:2242 #, c-format msgid "input file appears to be a text format dump. Please use psql." msgstr "вхідний файл схожий на дамп текстового формату. Будь ласка, використайте psql." -#: pg_backup_archiver.c:2226 +#: pg_backup_archiver.c:2248 #, c-format msgid "input file does not appear to be a valid archive (too short?)" msgstr "вхідний файл не схожий на архівний (закороткий?)" -#: pg_backup_archiver.c:2232 +#: pg_backup_archiver.c:2254 #, c-format msgid "input file does not appear to be a valid archive" msgstr "вхідний файл не схожий на архівний" -#: pg_backup_archiver.c:2241 +#: pg_backup_archiver.c:2263 #, c-format msgid "could not close input file: %m" msgstr "не вдалося закрити вхідний файл: %m" -#: pg_backup_archiver.c:2358 +#: pg_backup_archiver.c:2380 #, c-format msgid "unrecognized file format \"%d\"" msgstr "нерозпізнаний формат файлу \"%d\"" -#: pg_backup_archiver.c:2440 pg_backup_archiver.c:4468 +#: pg_backup_archiver.c:2462 pg_backup_archiver.c:4514 #, c-format msgid "finished item %d %s %s" msgstr "завершений об'єкт %d %s %s" -#: pg_backup_archiver.c:2444 pg_backup_archiver.c:4481 +#: pg_backup_archiver.c:2466 pg_backup_archiver.c:4527 #, c-format msgid "worker process failed: exit code %d" msgstr "помилка при робочому процесі: код виходу %d" -#: pg_backup_archiver.c:2564 +#: pg_backup_archiver.c:2586 #, c-format msgid "entry ID %d out of range -- perhaps a corrupt TOC" msgstr "введення ідентифікатора %d поза діапазоном -- можливо, зміст пошкоджений" -#: pg_backup_archiver.c:2631 +#: pg_backup_archiver.c:2653 #, c-format msgid "restoring tables WITH OIDS is not supported anymore" msgstr "відновлення таблиць WITH OIDS більше не підтримується" -#: pg_backup_archiver.c:2713 +#: pg_backup_archiver.c:2735 #, c-format msgid "unrecognized encoding \"%s\"" msgstr "нерозпізнане кодування \"%s\"" -#: pg_backup_archiver.c:2718 +#: pg_backup_archiver.c:2741 #, c-format msgid "invalid ENCODING item: %s" msgstr "невірний об'єкт КОДУВАННЯ: %s" -#: pg_backup_archiver.c:2736 +#: pg_backup_archiver.c:2759 #, c-format msgid "invalid STDSTRINGS item: %s" msgstr "невірний об'єкт STDSTRINGS: %s" -#: pg_backup_archiver.c:2761 +#: pg_backup_archiver.c:2784 #, c-format msgid "schema \"%s\" not found" msgstr "схему \"%s\" не знайдено" -#: pg_backup_archiver.c:2768 +#: pg_backup_archiver.c:2791 #, c-format msgid "table \"%s\" not found" msgstr "таблицю \"%s\" не знайдено" -#: pg_backup_archiver.c:2775 +#: pg_backup_archiver.c:2798 #, c-format msgid "index \"%s\" not found" msgstr "індекс \"%s\" не знайдено" -#: pg_backup_archiver.c:2782 +#: pg_backup_archiver.c:2805 #, c-format msgid "function \"%s\" not found" msgstr "функцію \"%s\" не знайдено" -#: pg_backup_archiver.c:2789 +#: pg_backup_archiver.c:2812 #, c-format msgid "trigger \"%s\" not found" msgstr "тригер \"%s\" не знайдено" -#: pg_backup_archiver.c:3185 +#: pg_backup_archiver.c:3257 #, c-format msgid "could not set session user to \"%s\": %s" msgstr "не вдалося встановити користувача сеансу для \"%s\": %s" -#: pg_backup_archiver.c:3317 +#: pg_backup_archiver.c:3399 #, c-format msgid "could not set search_path to \"%s\": %s" msgstr "не вдалося встановити search_path для \"%s\": %s" -#: pg_backup_archiver.c:3379 +#: pg_backup_archiver.c:3461 #, c-format msgid "could not set default_tablespace to %s: %s" msgstr "не вдалося встановити default_tablespace для %s: %s" -#: pg_backup_archiver.c:3424 +#: pg_backup_archiver.c:3506 #, c-format msgid "could not set default_table_access_method: %s" msgstr "не вдалося встановити default_table_access_method для : %s" -#: pg_backup_archiver.c:3516 pg_backup_archiver.c:3674 +#: pg_backup_archiver.c:3598 pg_backup_archiver.c:3756 #, c-format msgid "don't know how to set owner for object type \"%s\"" msgstr "невідомо, як встановити власника об'єкту типу \"%s\"" -#: pg_backup_archiver.c:3777 +#: pg_backup_archiver.c:3823 #, c-format msgid "did not find magic string in file header" msgstr "в заголовку файлу не знайдено магічного рядка" -#: pg_backup_archiver.c:3791 +#: pg_backup_archiver.c:3837 #, c-format msgid "unsupported version (%d.%d) in file header" msgstr "в заголовку непідтримувана версія (%d.%d)" -#: pg_backup_archiver.c:3796 +#: pg_backup_archiver.c:3842 #, c-format msgid "sanity check on integer size (%lu) failed" msgstr "перевірка на розмір цілого числа (%lu) не вдалася" -#: pg_backup_archiver.c:3800 +#: pg_backup_archiver.c:3846 #, c-format msgid "archive was made on a machine with larger integers, some operations might fail" msgstr "архів зроблено на архітектурі з більшими цілими числами, деякі операції можуть не виконуватися" -#: pg_backup_archiver.c:3810 +#: pg_backup_archiver.c:3856 #, c-format msgid "expected format (%d) differs from format found in file (%d)" msgstr "очікуваний формат (%d) відрізняється від знайденого формату у файлі (%d)" -#: pg_backup_archiver.c:3825 +#: pg_backup_archiver.c:3871 #, c-format msgid "archive is compressed, but this installation does not support compression -- no data will be available" msgstr "архів стиснено, але ця інсталяція не підтримує стискання -- дані не будуть доступними " -#: pg_backup_archiver.c:3859 +#: pg_backup_archiver.c:3905 #, c-format msgid "invalid creation date in header" msgstr "неприпустима дата створення у заголовку" -#: pg_backup_archiver.c:3993 +#: pg_backup_archiver.c:4039 #, c-format msgid "processing item %d %s %s" msgstr "обробка елементу %d %s %s" -#: pg_backup_archiver.c:4072 +#: pg_backup_archiver.c:4118 #, c-format msgid "entering main parallel loop" msgstr "введення головного паралельного циклу" -#: pg_backup_archiver.c:4083 +#: pg_backup_archiver.c:4129 #, c-format msgid "skipping item %d %s %s" msgstr "пропускається елемент %d %s %s " -#: pg_backup_archiver.c:4092 +#: pg_backup_archiver.c:4138 #, c-format msgid "launching item %d %s %s" msgstr "запуск елементу %d %s %s " -#: pg_backup_archiver.c:4146 +#: pg_backup_archiver.c:4192 #, c-format msgid "finished main parallel loop" msgstr "головний паралельний цикл завершився" -#: pg_backup_archiver.c:4182 +#: pg_backup_archiver.c:4228 #, c-format msgid "processing missed item %d %s %s" msgstr "обробка втраченого елементу %d %s %s" -#: pg_backup_archiver.c:4787 +#: pg_backup_archiver.c:4833 #, c-format msgid "table \"%s\" could not be created, will not restore its data" msgstr "не вдалося створити таблицю \"%s\", дані не будуть відновлені" @@ -975,12 +975,12 @@ msgstr "ущільнювач активний" msgid "could not get server_version from libpq" msgstr "не вдалося отримати версію серверу з libpq" -#: pg_backup_db.c:53 pg_dumpall.c:1837 +#: pg_backup_db.c:53 pg_dumpall.c:1912 #, c-format msgid "server version: %s; %s version: %s" msgstr "версія серверу: %s; версія %s: %s" -#: pg_backup_db.c:55 pg_dumpall.c:1839 +#: pg_backup_db.c:55 pg_dumpall.c:1914 #, c-format msgid "aborting because of server version mismatch" msgstr "переривання через невідповідність версії серверу" @@ -990,7 +990,7 @@ msgstr "переривання через невідповідність вер msgid "already connected to a database" msgstr "вже під'єднано до бази даних" -#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1666 pg_dumpall.c:1777 +#: pg_backup_db.c:132 pg_backup_db.c:182 pg_dumpall.c:1741 pg_dumpall.c:1852 msgid "Password: " msgstr "Пароль: " @@ -1004,17 +1004,17 @@ msgstr "не вдалося зв'язатися з базою даних" msgid "reconnection failed: %s" msgstr "помилка повторного підключення: %s" -#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1697 pg_dumpall.c:1787 +#: pg_backup_db.c:194 pg_backup_db.c:269 pg_dumpall.c:1772 pg_dumpall.c:1862 #, c-format msgid "%s" msgstr "%s" -#: pg_backup_db.c:276 pg_dumpall.c:1900 pg_dumpall.c:1923 +#: pg_backup_db.c:276 pg_dumpall.c:1975 pg_dumpall.c:1998 #, c-format msgid "query failed: %s" msgstr "запит не вдався: %s" -#: pg_backup_db.c:278 pg_dumpall.c:1901 pg_dumpall.c:1924 +#: pg_backup_db.c:278 pg_dumpall.c:1976 pg_dumpall.c:1999 #, c-format msgid "query was: %s" msgstr "запит був: %s" @@ -1052,7 +1052,7 @@ msgstr "помилка повернулася від PQputCopyEnd: %s" msgid "COPY failed for table \"%s\": %s" msgstr "КОПІЮВАННЯ для таблиці \"%s\" не вдалося: %s" -#: pg_backup_db.c:525 pg_dump.c:2131 +#: pg_backup_db.c:525 pg_dump.c:2194 #, c-format msgid "unexpected extra results during COPY of table \"%s\"" msgstr "неочікувані зайві результати під час копіювання таблиці \"%s\"" @@ -1240,10 +1240,10 @@ msgstr "знайдено пошкоджений tar-верхній колонт msgid "unrecognized section name: \"%s\"" msgstr "нерозпізнане ім’я розділу: \"%s\"" -#: pg_backup_utils.c:55 pg_dump.c:626 pg_dump.c:643 pg_dumpall.c:341 -#: pg_dumpall.c:351 pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:377 -#: pg_dumpall.c:391 pg_dumpall.c:469 pg_restore.c:284 pg_restore.c:300 -#: pg_restore.c:318 +#: pg_backup_utils.c:55 pg_dump.c:632 pg_dump.c:649 pg_dumpall.c:350 +#: pg_dumpall.c:360 pg_dumpall.c:369 pg_dumpall.c:378 pg_dumpall.c:386 +#: pg_dumpall.c:400 pg_dumpall.c:494 pg_restore.c:289 pg_restore.c:305 +#: pg_restore.c:323 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" @@ -1253,72 +1253,87 @@ msgstr "Спробуйте \"%s --help\" для додаткової інфор msgid "out of on_exit_nicely slots" msgstr "перевищено межу on_exit_nicely слотів" -#: pg_dump.c:552 +#: pg_dump.c:554 #, c-format msgid "compression level must be in range 0..9" msgstr "рівень стискання має бути у діапазоні 0..9" -#: pg_dump.c:590 +#: pg_dump.c:592 #, c-format msgid "extra_float_digits must be in range -15..3" msgstr "extra_float_digits повинні бути у діапазоні -15..3" -#: pg_dump.c:613 +#: pg_dump.c:615 #, c-format msgid "rows-per-insert must be in range %d..%d" msgstr "рядків-на-вставку має бути у діапазоні %d..%d" -#: pg_dump.c:641 pg_dumpall.c:349 pg_restore.c:298 +#: pg_dump.c:647 pg_dumpall.c:358 pg_restore.c:303 #, c-format msgid "too many command-line arguments (first is \"%s\")" msgstr "забагато аргументів у командному рядку (перший \"%s\")" -#: pg_dump.c:662 pg_restore.c:327 +#: pg_dump.c:668 pg_restore.c:357 #, c-format msgid "options -s/--schema-only and -a/--data-only cannot be used together" msgstr "параметри -s/--schema-only і -a/--data-only не можуть використовуватись разом" -#: pg_dump.c:667 +#: pg_dump.c:673 #, c-format msgid "options -s/--schema-only and --include-foreign-data cannot be used together" msgstr "параметри -s/--schema-only і --include-foreign-data не можуть використовуватись разом" -#: pg_dump.c:670 +#: pg_dump.c:676 #, c-format msgid "option --include-foreign-data is not supported with parallel backup" msgstr "параметр --include-foreign-data не підтримується з паралельним резервним копіюванням" -#: pg_dump.c:674 pg_restore.c:333 +#: pg_dump.c:680 pg_restore.c:363 #, c-format msgid "options -c/--clean and -a/--data-only cannot be used together" msgstr "параметри -c/--clean і -a/--data-only не можна використовувати разом" -#: pg_dump.c:679 pg_dumpall.c:384 pg_restore.c:382 +#: pg_dump.c:685 pg_dumpall.c:393 pg_restore.c:412 #, c-format msgid "option --if-exists requires option -c/--clean" msgstr "параметр --if-exists потребує параметр -c/--clean" -#: pg_dump.c:686 +#: pg_dump.c:692 #, c-format msgid "option --on-conflict-do-nothing requires option --inserts, --rows-per-insert, or --column-inserts" msgstr "параметр --on-conflict-do-nothing вимагає опції --inserts, --rows-per-insert або --column-inserts" -#: pg_dump.c:708 +#: pg_dump.c:708 pg_dumpall.c:456 pg_restore.c:345 +#, c-format +msgid "could not generate restrict key" +msgstr "не вдалося згенерувати ключ обмеження" + +#: pg_dump.c:710 pg_dumpall.c:461 pg_restore.c:350 +#, c-format +msgid "invalid restrict key" +msgstr "неприпустимий ключ обмеження" + +#: pg_dump.c:713 +#, c-format +msgid "option --restrict-key can only be used with --format=plain" +msgstr "параметр --restrict-key можна використовувати тільки для --format=plain" + +#: pg_dump.c:728 #, c-format msgid "requested compression not available in this installation -- archive will be uncompressed" msgstr "затребуване стискання недоступне на цій системі -- архів не буде стискатися" -#: pg_dump.c:729 pg_restore.c:349 +#: pg_dump.c:749 pg_restore.c:379 #, c-format msgid "invalid number of parallel jobs" msgstr "неприпустима кількість паралельних завдань" -#: pg_dump.c:733 +#: pg_dump.c:753 #, c-format msgid "parallel backup only supported by the directory format" msgstr "паралельне резервне копіювання підтримується лише з форматом \"каталог\"" -#: pg_dump.c:788 +#: pg_dump.c:808 #, c-format msgid "Synchronized snapshots are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" @@ -1327,227 +1342,227 @@ msgstr "У цій версії серверу синхронізовані зн "Якщо вам не потрібні синхронізовані знімки, виконайте \n" " --no-synchronized-snapshots." -#: pg_dump.c:794 +#: pg_dump.c:814 #, c-format msgid "Exported snapshots are not supported by this server version." msgstr "Експортовані знімки не підтримуються цією версією серверу." -#: pg_dump.c:806 +#: pg_dump.c:826 #, c-format msgid "last built-in OID is %u" msgstr "останній вбудований OID %u" -#: pg_dump.c:815 +#: pg_dump.c:835 #, c-format msgid "no matching schemas were found" msgstr "відповідних схем не знайдено" -#: pg_dump.c:829 +#: pg_dump.c:849 #, c-format msgid "no matching tables were found" msgstr "відповідних таблиць не знайдено" -#: pg_dump.c:851 +#: pg_dump.c:871 #, c-format msgid "no matching extensions were found" msgstr "не знайдено відповідних розширень" -#: pg_dump.c:1021 +#: pg_dump.c:1042 #, c-format msgid "%s dumps a database as a text file or to other formats.\n\n" msgstr "%s зберігає резервну копію бази даних в текстовому файлі або в інших форматах.\n\n" -#: pg_dump.c:1022 pg_dumpall.c:622 pg_restore.c:462 +#: pg_dump.c:1043 pg_dumpall.c:664 pg_restore.c:492 #, c-format msgid "Usage:\n" msgstr "Використання:\n" -#: pg_dump.c:1023 +#: pg_dump.c:1044 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [OPTION]... [DBNAME]\n" -#: pg_dump.c:1025 pg_dumpall.c:625 pg_restore.c:465 +#: pg_dump.c:1046 pg_dumpall.c:667 pg_restore.c:495 #, c-format msgid "\n" "General options:\n" msgstr "\n" "Основні налаштування:\n" -#: pg_dump.c:1026 +#: pg_dump.c:1047 #, c-format msgid " -f, --file=FILENAME output file or directory name\n" msgstr " -f, --file=FILENAME ім'я файлу виводу або каталогу\n" -#: pg_dump.c:1027 +#: pg_dump.c:1048 #, c-format msgid " -F, --format=c|d|t|p output file format (custom, directory, tar,\n" " plain text (default))\n" msgstr " -F, --format=c|d|t|p формат файлу виводу (спеціальний, каталог, tar,\n" " звичайний текст (за замовчуванням))\n" -#: pg_dump.c:1029 +#: pg_dump.c:1050 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to dump\n" msgstr " -j, --jobs=NUM використовувати ці паралельні завдання для вивантаження\n" -#: pg_dump.c:1030 pg_dumpall.c:627 +#: pg_dump.c:1051 pg_dumpall.c:669 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose детальний режим\n" -#: pg_dump.c:1031 pg_dumpall.c:628 +#: pg_dump.c:1052 pg_dumpall.c:670 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію, потім вийти\n" -#: pg_dump.c:1032 +#: pg_dump.c:1053 #, c-format msgid " -Z, --compress=0-9 compression level for compressed formats\n" msgstr " -Z, --compress=0-9 рівень стискання для стиснутих форматів\n" -#: pg_dump.c:1033 pg_dumpall.c:629 +#: pg_dump.c:1054 pg_dumpall.c:671 #, c-format msgid " --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock\n" msgstr " --lock-wait-timeout=TIMEOUT помилка після очікування TIMEOUT для блокування таблиці\n" -#: pg_dump.c:1034 pg_dumpall.c:656 +#: pg_dump.c:1055 pg_dumpall.c:698 #, c-format msgid " --no-sync do not wait for changes to be written safely to disk\n" msgstr " --no-sync не чекати безпечного збереження змін на диск\n" -#: pg_dump.c:1035 pg_dumpall.c:630 +#: pg_dump.c:1056 pg_dumpall.c:672 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку, потім вийти\n" -#: pg_dump.c:1037 pg_dumpall.c:631 +#: pg_dump.c:1058 pg_dumpall.c:673 #, c-format msgid "\n" "Options controlling the output content:\n" msgstr "\n" "Параметри, що керують вихідним вмістом:\n" -#: pg_dump.c:1038 pg_dumpall.c:632 +#: pg_dump.c:1059 pg_dumpall.c:674 #, c-format msgid " -a, --data-only dump only the data, not the schema\n" msgstr " -a, --data-only вивантажити лише дані, без схеми\n" -#: pg_dump.c:1039 +#: pg_dump.c:1060 #, c-format msgid " -b, --blobs include large objects in dump\n" msgstr " -b, --blobs включити у вивантаження великі об'єкти\n" -#: pg_dump.c:1040 +#: pg_dump.c:1061 #, c-format msgid " -B, --no-blobs exclude large objects in dump\n" msgstr " -B, --no-blobs виключити з вивантаження великі об'єкти\n" -#: pg_dump.c:1041 pg_restore.c:476 +#: pg_dump.c:1062 pg_restore.c:506 #, c-format msgid " -c, --clean clean (drop) database objects before recreating\n" msgstr " -c, --clean видалити об'єкти бази даних перед перед повторним створенням\n" -#: pg_dump.c:1042 +#: pg_dump.c:1063 #, c-format msgid " -C, --create include commands to create database in dump\n" msgstr " -C, --create включити у вивантаження команди для створення бази даних\n" -#: pg_dump.c:1043 +#: pg_dump.c:1064 #, c-format msgid " -e, --extension=PATTERN dump the specified extension(s) only\n" msgstr " -e, --extension=PATTERN вивантажити лише вказане(і) розширення\n" -#: pg_dump.c:1044 pg_dumpall.c:634 +#: pg_dump.c:1065 pg_dumpall.c:676 #, c-format msgid " -E, --encoding=ENCODING dump the data in encoding ENCODING\n" msgstr " -E, --encoding=ENCODING вивантажити дані в кодуванні ENCODING\n" -#: pg_dump.c:1045 +#: pg_dump.c:1066 #, c-format msgid " -n, --schema=PATTERN dump the specified schema(s) only\n" msgstr " -n, --schema=PATTERN вивантажити лише вказану схему(и)\n" -#: pg_dump.c:1046 +#: pg_dump.c:1067 #, c-format msgid " -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)\n" msgstr " -N, --exclude-schema=PATTERN НЕ вивантажувати вказану схему(и)\n" -#: pg_dump.c:1047 +#: pg_dump.c:1068 #, c-format msgid " -O, --no-owner skip restoration of object ownership in\n" " plain-text format\n" msgstr " -O, --no-owner пропускати відновлення володіння об'єктами\n" " при використанні текстового формату\n" -#: pg_dump.c:1049 pg_dumpall.c:638 +#: pg_dump.c:1070 pg_dumpall.c:680 #, c-format msgid " -s, --schema-only dump only the schema, no data\n" msgstr " -s, --schema-only вивантажити лише схему, без даних\n" -#: pg_dump.c:1050 +#: pg_dump.c:1071 #, c-format msgid " -S, --superuser=NAME superuser user name to use in plain-text format\n" msgstr " -S, --superuser=NAME ім'я користувача, яке буде використовуватись у звичайних текстових форматах\n" -#: pg_dump.c:1051 +#: pg_dump.c:1072 #, c-format msgid " -t, --table=PATTERN dump the specified table(s) only\n" msgstr " -t, --table=PATTERN вивантажити лише вказані таблиці\n" -#: pg_dump.c:1052 +#: pg_dump.c:1073 #, c-format msgid " -T, --exclude-table=PATTERN do NOT dump the specified table(s)\n" msgstr " -T, --exclude-table=PATTERN НЕ вивантажувати вказані таблиці\n" -#: pg_dump.c:1053 pg_dumpall.c:641 +#: pg_dump.c:1074 pg_dumpall.c:683 #, c-format msgid " -x, --no-privileges do not dump privileges (grant/revoke)\n" msgstr " -x, --no-privileges не вивантажувати права (надання/відкликання)\n" -#: pg_dump.c:1054 pg_dumpall.c:642 +#: pg_dump.c:1075 pg_dumpall.c:684 #, c-format msgid " --binary-upgrade for use by upgrade utilities only\n" msgstr " --binary-upgrade для використання лише утилітами оновлення\n" -#: pg_dump.c:1055 pg_dumpall.c:643 +#: pg_dump.c:1076 pg_dumpall.c:685 #, c-format msgid " --column-inserts dump data as INSERT commands with column names\n" msgstr " --column-inserts вивантажити дані у вигляді команд INSERT з іменами стовпців\n" -#: pg_dump.c:1056 pg_dumpall.c:644 +#: pg_dump.c:1077 pg_dumpall.c:686 #, c-format msgid " --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n" msgstr " --disable-dollar-quoting вимкнути цінову пропозицію $, використовувати SQL стандартну цінову пропозицію\n" -#: pg_dump.c:1057 pg_dumpall.c:645 pg_restore.c:493 +#: pg_dump.c:1078 pg_dumpall.c:687 pg_restore.c:523 #, c-format msgid " --disable-triggers disable triggers during data-only restore\n" msgstr " --disable-triggers вимкнути тригери лише під час відновлення даних\n" -#: pg_dump.c:1058 +#: pg_dump.c:1079 #, c-format msgid " --enable-row-security enable row security (dump only content user has\n" " access to)\n" msgstr " --enable-row-security активувати захист на рівні рядків (вивантажити лише той вміст, до якого\n" " користувач має доступ)\n" -#: pg_dump.c:1060 +#: pg_dump.c:1081 #, c-format msgid " --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n" msgstr " --exclude-table-data=PATTERN НЕ вивантажувати дані вказаних таблиць\n" -#: pg_dump.c:1061 pg_dumpall.c:647 +#: pg_dump.c:1082 pg_dumpall.c:689 #, c-format msgid " --extra-float-digits=NUM override default setting for extra_float_digits\n" msgstr " --extra-float-digits=NUM змінити параметр за замовчуванням для extra_float_digits\n" -#: pg_dump.c:1062 pg_dumpall.c:648 pg_restore.c:495 +#: pg_dump.c:1083 pg_dumpall.c:690 pg_restore.c:525 #, c-format msgid " --if-exists use IF EXISTS when dropping objects\n" msgstr " --if-exists використовувати IF EXISTS під час видалення об'єктів\n" -#: pg_dump.c:1063 +#: pg_dump.c:1084 #, c-format msgid " --include-foreign-data=PATTERN\n" " include data of foreign tables on foreign\n" @@ -1556,94 +1571,99 @@ msgstr " --include-foreign-data=ШАБЛОН\n" " включають дані підлеглих таблиць на підлеглих\n" " сервери, що відповідають ШАБЛОНУ\n" -#: pg_dump.c:1066 pg_dumpall.c:649 +#: pg_dump.c:1087 pg_dumpall.c:691 #, c-format msgid " --inserts dump data as INSERT commands, rather than COPY\n" msgstr " --inserts вивантажити дані у вигляді команд INSERT, не COPY\n" -#: pg_dump.c:1067 pg_dumpall.c:650 +#: pg_dump.c:1088 pg_dumpall.c:692 #, c-format msgid " --load-via-partition-root load partitions via the root table\n" msgstr " --load-via-partition-root завантажувати секції через головну таблицю\n" -#: pg_dump.c:1068 pg_dumpall.c:651 +#: pg_dump.c:1089 pg_dumpall.c:693 #, c-format msgid " --no-comments do not dump comments\n" msgstr " --no-comments не вивантажувати коментарі\n" -#: pg_dump.c:1069 pg_dumpall.c:652 +#: pg_dump.c:1090 pg_dumpall.c:694 #, c-format msgid " --no-publications do not dump publications\n" msgstr " --no-publications не вивантажувати публікації\n" -#: pg_dump.c:1070 pg_dumpall.c:654 +#: pg_dump.c:1091 pg_dumpall.c:696 #, c-format msgid " --no-security-labels do not dump security label assignments\n" msgstr " --no-security-labels не вивантажувати завдання міток безпеки\n" -#: pg_dump.c:1071 pg_dumpall.c:655 +#: pg_dump.c:1092 pg_dumpall.c:697 #, c-format msgid " --no-subscriptions do not dump subscriptions\n" msgstr " --no-subscriptions не вивантажувати підписки\n" -#: pg_dump.c:1072 +#: pg_dump.c:1093 #, c-format msgid " --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs\n" msgstr " --no-synchronized-snapshots не використовувати синхронізовані знімки в паралельних завданнях\n" -#: pg_dump.c:1073 pg_dumpall.c:657 +#: pg_dump.c:1094 pg_dumpall.c:699 #, c-format msgid " --no-tablespaces do not dump tablespace assignments\n" msgstr " --no-tablespaces не вивантажувати призначення табличних просторів\n" -#: pg_dump.c:1074 pg_dumpall.c:658 +#: pg_dump.c:1095 pg_dumpall.c:700 #, c-format msgid " --no-toast-compression do not dump TOAST compression methods\n" msgstr " --no-toast-compression не вивантажувати методи стиснення TOAST\n" -#: pg_dump.c:1075 pg_dumpall.c:659 +#: pg_dump.c:1096 pg_dumpall.c:701 #, c-format msgid " --no-unlogged-table-data do not dump unlogged table data\n" msgstr " --no-unlogged-table-data не вивантажувати дані таблиць, які не журналюються\n" -#: pg_dump.c:1076 pg_dumpall.c:660 +#: pg_dump.c:1097 pg_dumpall.c:702 #, c-format msgid " --on-conflict-do-nothing add ON CONFLICT DO NOTHING to INSERT commands\n" msgstr " --on-conflict-do-nothing додавати ON CONFLICT DO NOTHING до команди INSERT\n" -#: pg_dump.c:1077 pg_dumpall.c:661 +#: pg_dump.c:1098 pg_dumpall.c:703 #, c-format msgid " --quote-all-identifiers quote all identifiers, even if not key words\n" msgstr " --quote-all-identifiers укладати в лапки всі ідентифікатори, а не тільки ключові слова\n" -#: pg_dump.c:1078 pg_dumpall.c:662 +#: pg_dump.c:1099 pg_dumpall.c:704 pg_restore.c:533 +#, c-format +msgid " --restrict-key=RESTRICT_KEY use provided string as psql \\restrict key\n" +msgstr " --restrict-key=RESTRICT_KEY використовувати вказаний рядок як ключ psql \\restrict\n" + +#: pg_dump.c:1100 pg_dumpall.c:705 #, c-format msgid " --rows-per-insert=NROWS number of rows per INSERT; implies --inserts\n" msgstr " --rows-per-insert=NROWS кількість рядків для INSERT; вимагає параметру --inserts\n" -#: pg_dump.c:1079 +#: pg_dump.c:1101 #, c-format msgid " --section=SECTION dump named section (pre-data, data, or post-data)\n" msgstr " --section=SECTION вивантажити вказану секцію (pre-data, data або post-data)\n" -#: pg_dump.c:1080 +#: pg_dump.c:1102 #, c-format msgid " --serializable-deferrable wait until the dump can run without anomalies\n" msgstr " --serializable-deferrable чекати коли вивантаження можна буде виконати без аномалій\n" -#: pg_dump.c:1081 +#: pg_dump.c:1103 #, c-format msgid " --snapshot=SNAPSHOT use given snapshot for the dump\n" msgstr " --snapshot=SNAPSHOT використовувати під час вивантаження вказаний знімок\n" -#: pg_dump.c:1082 pg_restore.c:504 +#: pg_dump.c:1104 pg_restore.c:535 #, c-format msgid " --strict-names require table and/or schema include patterns to\n" " match at least one entity each\n" msgstr " --strict-names потребувати, щоб при вказівці шаблону включення\n" " таблиці і/або схеми йому відповідав мінімум один об'єкт\n" -#: pg_dump.c:1084 pg_dumpall.c:663 pg_restore.c:506 +#: pg_dump.c:1106 pg_dumpall.c:706 pg_restore.c:537 #, c-format msgid " --use-set-session-authorization\n" " use SET SESSION AUTHORIZATION commands instead of\n" @@ -1652,49 +1672,49 @@ msgstr " --use-set-session-authorization\n" " щоб встановити власника, використати команди SET SESSION AUTHORIZATION,\n" " замість команд ALTER OWNER\n" -#: pg_dump.c:1088 pg_dumpall.c:667 pg_restore.c:510 +#: pg_dump.c:1110 pg_dumpall.c:710 pg_restore.c:541 #, c-format msgid "\n" "Connection options:\n" msgstr "\n" "Налаштування з'єднання:\n" -#: pg_dump.c:1089 +#: pg_dump.c:1111 #, c-format msgid " -d, --dbname=DBNAME database to dump\n" msgstr " -d, --dbname=DBNAME ім'я бази даних для вивантаження\n" -#: pg_dump.c:1090 pg_dumpall.c:669 pg_restore.c:511 +#: pg_dump.c:1112 pg_dumpall.c:712 pg_restore.c:542 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr " -h, --host=HOSTNAME хост серверу баз даних або каталог сокетів\n" -#: pg_dump.c:1091 pg_dumpall.c:671 pg_restore.c:512 +#: pg_dump.c:1113 pg_dumpall.c:714 pg_restore.c:543 #, c-format msgid " -p, --port=PORT database server port number\n" msgstr " -p, --port=PORT номер порту сервера бази даних\n" -#: pg_dump.c:1092 pg_dumpall.c:672 pg_restore.c:513 +#: pg_dump.c:1114 pg_dumpall.c:715 pg_restore.c:544 #, c-format msgid " -U, --username=NAME connect as specified database user\n" msgstr " -U, --username=NAME підключатись як вказаний користувач бази даних\n" -#: pg_dump.c:1093 pg_dumpall.c:673 pg_restore.c:514 +#: pg_dump.c:1115 pg_dumpall.c:716 pg_restore.c:545 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password ніколи не запитувати пароль\n" -#: pg_dump.c:1094 pg_dumpall.c:674 pg_restore.c:515 +#: pg_dump.c:1116 pg_dumpall.c:717 pg_restore.c:546 #, c-format msgid " -W, --password force password prompt (should happen automatically)\n" msgstr " -W, --password запитувати пароль завжди (повинно траплятись автоматично)\n" -#: pg_dump.c:1095 pg_dumpall.c:675 +#: pg_dump.c:1117 pg_dumpall.c:718 #, c-format msgid " --role=ROLENAME do SET ROLE before dump\n" msgstr " --role=ROLENAME виконати SET ROLE до вивантаження\n" -#: pg_dump.c:1097 +#: pg_dump.c:1119 #, c-format msgid "\n" "If no database name is supplied, then the PGDATABASE environment\n" @@ -1702,284 +1722,284 @@ msgid "\n" msgstr "\n" "Якщо ім'я бази даних не вказано, тоді використовується значення змінної середовища PGDATABASE.\n\n" -#: pg_dump.c:1099 pg_dumpall.c:679 pg_restore.c:522 +#: pg_dump.c:1121 pg_dumpall.c:722 pg_restore.c:553 #, c-format msgid "Report bugs to <%s>.\n" msgstr "Повідомляти про помилки на <%s>.\n" -#: pg_dump.c:1100 pg_dumpall.c:680 pg_restore.c:523 +#: pg_dump.c:1122 pg_dumpall.c:723 pg_restore.c:554 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашня сторінка %s: <%s>\n" -#: pg_dump.c:1119 pg_dumpall.c:504 +#: pg_dump.c:1141 pg_dumpall.c:529 #, c-format msgid "invalid client encoding \"%s\" specified" msgstr "вказано неприпустиме клієнтське кодування \"%s\"" -#: pg_dump.c:1265 +#: pg_dump.c:1295 #, c-format msgid "Synchronized snapshots on standby servers are not supported by this server version.\n" "Run with --no-synchronized-snapshots instead if you do not need\n" "synchronized snapshots." msgstr "Синхронізовані знімки на резервному сервері не підтримуються цією версією сервера. Запустіть із параметром --no-synchronized-snapshots, якщо вам не потрібні синхронізовані знімки." -#: pg_dump.c:1334 +#: pg_dump.c:1364 #, c-format msgid "invalid output format \"%s\" specified" msgstr "вказано неприпустимий формат виводу \"%s\"" -#: pg_dump.c:1375 pg_dump.c:1431 pg_dump.c:1484 pg_dumpall.c:1451 +#: pg_dump.c:1405 pg_dump.c:1461 pg_dump.c:1514 pg_dumpall.c:1523 #, c-format msgid "improper qualified name (too many dotted names): %s" msgstr "неправильне повне ім'я (забагато компонентів): %s" -#: pg_dump.c:1383 +#: pg_dump.c:1413 #, c-format msgid "no matching schemas were found for pattern \"%s\"" msgstr "не знайдено відповідних схем для візерунку \"%s\"" -#: pg_dump.c:1436 +#: pg_dump.c:1466 #, c-format msgid "no matching extensions were found for pattern \"%s\"" msgstr "не знайдено відповідних розширень для шаблону \"%s\"" -#: pg_dump.c:1489 +#: pg_dump.c:1519 #, c-format msgid "no matching foreign servers were found for pattern \"%s\"" msgstr "не знайдено відповідних підлеглих серверів для шаблону \"%s\"" -#: pg_dump.c:1552 +#: pg_dump.c:1582 #, c-format msgid "improper relation name (too many dotted names): %s" msgstr "неправильне ім'я зв'язку (забагато компонентів): %s" -#: pg_dump.c:1563 +#: pg_dump.c:1593 #, c-format msgid "no matching tables were found for pattern \"%s\"" msgstr "не знайдено відповідних таблиць для візерунку\"%s\"" -#: pg_dump.c:1590 +#: pg_dump.c:1620 #, c-format msgid "You are currently not connected to a database." msgstr "На даний момент ви від'єднанні від бази даних." -#: pg_dump.c:1593 +#: pg_dump.c:1623 #, c-format msgid "cross-database references are not implemented: %s" msgstr "міжбазові посилання не реалізовані: %s" -#: pg_dump.c:2005 +#: pg_dump.c:2064 #, c-format msgid "dumping contents of table \"%s.%s\"" msgstr "вивантажування змісту таблиці \"%s.%s\"" -#: pg_dump.c:2112 +#: pg_dump.c:2175 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetCopyData() failed." msgstr "Помилка вивантажування змісту таблиці \"%s\": помилка в PQgetCopyData()." -#: pg_dump.c:2113 pg_dump.c:2123 +#: pg_dump.c:2176 pg_dump.c:2186 #, c-format msgid "Error message from server: %s" msgstr "Повідомлення про помилку від сервера: %s" -#: pg_dump.c:2114 pg_dump.c:2124 +#: pg_dump.c:2177 pg_dump.c:2187 #, c-format msgid "The command was: %s" msgstr "Команда була: %s" -#: pg_dump.c:2122 +#: pg_dump.c:2185 #, c-format msgid "Dumping the contents of table \"%s\" failed: PQgetResult() failed." msgstr "Помилка вивантажування змісту таблиці \"%s\": помилка в PQgetResult(). " -#: pg_dump.c:2204 +#: pg_dump.c:2276 #, c-format msgid "wrong number of fields retrieved from table \"%s\"" msgstr "неправильна кількість полів отриманих з таблиці \"%s\"" -#: pg_dump.c:2955 +#: pg_dump.c:3034 #, c-format msgid "saving database definition" msgstr "збереження визначення бази даних" -#: pg_dump.c:3427 +#: pg_dump.c:3506 #, c-format msgid "saving encoding = %s" msgstr "збереження кодування = %s" -#: pg_dump.c:3452 +#: pg_dump.c:3531 #, c-format msgid "saving standard_conforming_strings = %s" msgstr "збереження standard_conforming_strings = %s" -#: pg_dump.c:3491 +#: pg_dump.c:3570 #, c-format msgid "could not parse result of current_schemas()" msgstr "не вдалося проаналізувати результат current_schemas()" -#: pg_dump.c:3510 +#: pg_dump.c:3589 #, c-format msgid "saving search_path = %s" msgstr "збереження search_path = %s" -#: pg_dump.c:3550 +#: pg_dump.c:3629 #, c-format msgid "reading large objects" msgstr "читання великих об’єктів" -#: pg_dump.c:3732 +#: pg_dump.c:3811 #, c-format msgid "saving large objects" msgstr "збереження великих об’єктів" -#: pg_dump.c:3778 +#: pg_dump.c:3857 #, c-format msgid "error reading large object %u: %s" msgstr "помилка читання великих об’єктів %u: %s" -#: pg_dump.c:3882 +#: pg_dump.c:3961 #, c-format msgid "reading row-level security policies" msgstr "читання політик безпеки на рівні рядків" -#: pg_dump.c:4021 +#: pg_dump.c:4100 #, c-format msgid "unexpected policy command type: %c" msgstr "неочікуваний тип команди в політиці: %c" -#: pg_dump.c:4175 +#: pg_dump.c:4254 #, c-format msgid "owner of publication \"%s\" appears to be invalid" msgstr "власник публікації \"%s\" здається недійсним" -#: pg_dump.c:4467 +#: pg_dump.c:4568 #, c-format msgid "subscriptions not dumped because current user is not a superuser" msgstr "підписки не вивантажені через те, що чинний користувач не є суперкористувачем" -#: pg_dump.c:4538 +#: pg_dump.c:4639 #, c-format msgid "owner of subscription \"%s\" appears to be invalid" msgstr "власник підписки \"%s\" є недійсним" -#: pg_dump.c:4581 +#: pg_dump.c:4682 #, c-format msgid "could not parse subpublications array" msgstr "не вдалося аналізувати масив підпублікацій" -#: pg_dump.c:4939 +#: pg_dump.c:5040 #, c-format msgid "could not find parent extension for %s %s" msgstr "не вдалося знайти батьківський елемент для %s %s" -#: pg_dump.c:5071 +#: pg_dump.c:5172 #, c-format msgid "owner of schema \"%s\" appears to be invalid" msgstr "власник схеми \"%s\" виглядає недійсним" -#: pg_dump.c:5094 +#: pg_dump.c:5195 #, c-format msgid "schema with OID %u does not exist" msgstr "схема з OID %u не існує" -#: pg_dump.c:5424 +#: pg_dump.c:5525 #, c-format msgid "owner of data type \"%s\" appears to be invalid" msgstr "власник типу даних \"%s\" здається недійсним" -#: pg_dump.c:5508 +#: pg_dump.c:5617 #, c-format msgid "owner of operator \"%s\" appears to be invalid" msgstr "власник оператора \"%s\" здається недійсним" -#: pg_dump.c:5807 +#: pg_dump.c:5941 #, c-format msgid "owner of operator class \"%s\" appears to be invalid" msgstr "власник класу операторів \"%s\" здається недійсним" -#: pg_dump.c:5890 +#: pg_dump.c:6027 #, c-format msgid "owner of operator family \"%s\" appears to be invalid" msgstr "власник сімейства операторів \"%s\" здається недійсним" -#: pg_dump.c:6058 +#: pg_dump.c:6195 #, c-format msgid "owner of aggregate function \"%s\" appears to be invalid" msgstr "власник агрегатної функції \"%s\" є недійсним" -#: pg_dump.c:6317 +#: pg_dump.c:6456 #, c-format msgid "owner of function \"%s\" appears to be invalid" msgstr "власник функції \"%s\" здається недійсним" -#: pg_dump.c:7113 +#: pg_dump.c:7252 #, c-format msgid "owner of table \"%s\" appears to be invalid" msgstr "власник таблиці \"%s\" здається недійсним" -#: pg_dump.c:7155 pg_dump.c:17699 +#: pg_dump.c:7294 pg_dump.c:17880 #, c-format msgid "failed sanity check, parent table with OID %u of sequence with OID %u not found" msgstr "помилка цілісності, за OID %u не вдалося знайти батьківську таблицю послідовності з OID %u" -#: pg_dump.c:7298 +#: pg_dump.c:7439 #, c-format msgid "failed sanity check, table OID %u appearing in pg_partitioned_table not found" msgstr "помилка цілісності, OID %u не знайдено в таблиці pg_partitioned_table" -#: pg_dump.c:7364 +#: pg_dump.c:7505 #, c-format msgid "reading indexes for table \"%s.%s\"" msgstr "читання індексів таблиці \"%s.%s\"" -#: pg_dump.c:7778 +#: pg_dump.c:7923 #, c-format msgid "reading foreign key constraints for table \"%s.%s\"" msgstr "читання обмежень зовнішніх ключів таблиці \"%s.%s\"" -#: pg_dump.c:8057 +#: pg_dump.c:8202 #, c-format msgid "failed sanity check, parent table with OID %u of pg_rewrite entry with OID %u not found" msgstr "помилка цілісності, за OID %u не вдалося знайти батьківську таблицю для запису pg_rewrite з OID %u" -#: pg_dump.c:8141 +#: pg_dump.c:8286 #, c-format msgid "reading triggers for table \"%s.%s\"" msgstr "читання тригерів таблиці \"%s.%s\"" -#: pg_dump.c:8323 +#: pg_dump.c:8468 #, c-format msgid "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)" msgstr "запит не повернув ім'я цільової таблиці для тригера зовнішнього ключа \"%s\" в таблиці \"%s\" (OID цільової таблиці: %u)" -#: pg_dump.c:8873 +#: pg_dump.c:9018 #, c-format msgid "finding the columns and types of table \"%s.%s\"" msgstr "пошук стовпців і типів таблиці \"%s.%s\"" -#: pg_dump.c:8997 +#: pg_dump.c:9142 #, c-format msgid "invalid column numbering in table \"%s\"" msgstr "неприпустима нумерація стовпців у таблиці \"%s\"" -#: pg_dump.c:9036 +#: pg_dump.c:9181 #, c-format msgid "finding default expressions of table \"%s.%s\"" msgstr "пошук виразів за замовчуванням для таблиці \"%s.%s\"" -#: pg_dump.c:9058 +#: pg_dump.c:9203 #, c-format msgid "invalid adnum value %d for table \"%s\"" msgstr "неприпустиме значення adnum %d для таблиці \"%s\"" -#: pg_dump.c:9151 +#: pg_dump.c:9296 #, c-format msgid "finding check constraints for table \"%s.%s\"" msgstr "пошук обмежень-перевірок для таблиці \"%s.%s\"" -#: pg_dump.c:9200 +#: pg_dump.c:9345 #, c-format msgid "expected %d check constraint on table \"%s\" but found %d" msgid_plural "expected %d check constraints on table \"%s\" but found %d" @@ -1988,182 +2008,182 @@ msgstr[1] "очікувалось %d обмеження-перевірки дл msgstr[2] "очікувалось %d обмежень-перевірок для таблиці \"%s\", але знайдено %d" msgstr[3] "очікувалось %d обмежень-перевірок для таблиці \"%s\", але знайдено %d" -#: pg_dump.c:9204 +#: pg_dump.c:9349 #, c-format msgid "(The system catalogs might be corrupted.)" msgstr "(Можливо, системні каталоги пошкоджені.)" -#: pg_dump.c:10806 +#: pg_dump.c:10951 #, c-format msgid "typtype of data type \"%s\" appears to be invalid" msgstr "typtype типу даних \"%s\" має неприпустимий вигляд" -#: pg_dump.c:12154 +#: pg_dump.c:12304 #, c-format msgid "bogus value in proargmodes array" msgstr "неприпустиме значення в масиві proargmodes" -#: pg_dump.c:12456 +#: pg_dump.c:12606 #, c-format msgid "could not parse proallargtypes array" msgstr "не вдалося аналізувати масив proallargtypes" -#: pg_dump.c:12472 +#: pg_dump.c:12622 #, c-format msgid "could not parse proargmodes array" msgstr "не вдалося аналізувати масив proargmodes" -#: pg_dump.c:12486 +#: pg_dump.c:12636 #, c-format msgid "could not parse proargnames array" msgstr "не вдалося аналізувати масив proargnames" -#: pg_dump.c:12496 +#: pg_dump.c:12646 #, c-format msgid "could not parse proconfig array" msgstr "не вдалося аналізувати масив proconfig" -#: pg_dump.c:12572 +#: pg_dump.c:12722 #, c-format msgid "unrecognized provolatile value for function \"%s\"" msgstr "нерозпізнане значення provolatile для функції \"%s\"" -#: pg_dump.c:12622 pg_dump.c:14563 +#: pg_dump.c:12772 pg_dump.c:14714 #, c-format msgid "unrecognized proparallel value for function \"%s\"" msgstr "нерозпізнане значення proparallel для функції \"%s\"" -#: pg_dump.c:12761 pg_dump.c:12867 pg_dump.c:12874 +#: pg_dump.c:12912 pg_dump.c:13018 pg_dump.c:13025 #, c-format msgid "could not find function definition for function with OID %u" msgstr "не вдалося знайти визначення функції для функції з OID %u" -#: pg_dump.c:12800 +#: pg_dump.c:12951 #, c-format msgid "bogus value in pg_cast.castfunc or pg_cast.castmethod field" msgstr "неприпустиме значення в полі pg_cast.castfunc або pg_cast.castmethod" -#: pg_dump.c:12803 +#: pg_dump.c:12954 #, c-format msgid "bogus value in pg_cast.castmethod field" msgstr "неприпустиме значення в полі pg_cast.castmethod" -#: pg_dump.c:12893 +#: pg_dump.c:13044 #, c-format msgid "bogus transform definition, at least one of trffromsql and trftosql should be nonzero" msgstr "неприпустиме визначення перетворення, як мінімум одне з trffromsql і trftosql повинно бути ненульовим" -#: pg_dump.c:12910 +#: pg_dump.c:13061 #, c-format msgid "bogus value in pg_transform.trffromsql field" msgstr "неприпустиме значення в полі pg_transform.trffromsql" -#: pg_dump.c:12931 +#: pg_dump.c:13082 #, c-format msgid "bogus value in pg_transform.trftosql field" msgstr "неприпустиме значення в полі pg_transform.trftosql" -#: pg_dump.c:13082 +#: pg_dump.c:13233 #, c-format msgid "postfix operators are not supported anymore (operator \"%s\")" msgstr "постфіксні оператори більше не підтримуються (оператор \"%s\")" -#: pg_dump.c:13252 +#: pg_dump.c:13403 #, c-format msgid "could not find operator with OID %s" msgstr "не вдалося знайти оператора з OID %s" -#: pg_dump.c:13320 +#: pg_dump.c:13471 #, c-format msgid "invalid type \"%c\" of access method \"%s\"" msgstr "неприпустимий тип \"%c\" методу доступу \"%s\"" -#: pg_dump.c:14074 +#: pg_dump.c:14225 #, c-format msgid "unrecognized collation provider: %s" msgstr "нерозпізнаний постачальник правил сортування: %s" -#: pg_dump.c:14482 +#: pg_dump.c:14633 #, c-format msgid "unrecognized aggfinalmodify value for aggregate \"%s\"" msgstr "нерозпізнане значення aggfinalmodify для агрегату \"%s\"" -#: pg_dump.c:14538 +#: pg_dump.c:14689 #, c-format msgid "unrecognized aggmfinalmodify value for aggregate \"%s\"" msgstr "нерозпізнане значення aggmfinalmodify для агрегату \"%s\"" -#: pg_dump.c:15260 +#: pg_dump.c:15411 #, c-format msgid "unrecognized object type in default privileges: %d" msgstr "нерозпізнаний тип об’єкта у стандартному праві: %d" -#: pg_dump.c:15278 +#: pg_dump.c:15429 #, c-format msgid "could not parse default ACL list (%s)" msgstr "не вдалося проаналізувати стандартний ACL список (%s)" -#: pg_dump.c:15363 +#: pg_dump.c:15514 #, c-format msgid "could not parse initial GRANT ACL list (%s) or initial REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "не вдалося аналізувати початковий список GRANT ACL (%s) або початковий список REVOKE ACL (%s) для об'єкта \"%s\" (%s)" -#: pg_dump.c:15371 +#: pg_dump.c:15522 #, c-format msgid "could not parse GRANT ACL list (%s) or REVOKE ACL list (%s) for object \"%s\" (%s)" msgstr "не вдалося аналізувати список GRANT ACL (%s) або список REVOKE ACL (%s) для об'єкта \"%s\" (%s)" -#: pg_dump.c:15886 +#: pg_dump.c:16037 #, c-format msgid "query to obtain definition of view \"%s\" returned no data" msgstr "запит на отримання визначення перегляду \"%s\" не повернув дані" -#: pg_dump.c:15889 +#: pg_dump.c:16040 #, c-format msgid "query to obtain definition of view \"%s\" returned more than one definition" msgstr "запит на отримання визначення перегляду \"%s\" повернув більше, ніж одне визначення" -#: pg_dump.c:15896 +#: pg_dump.c:16047 #, c-format msgid "definition of view \"%s\" appears to be empty (length zero)" msgstr "визначення перегляду \"%s\" пусте (довжина нуль)" -#: pg_dump.c:15980 +#: pg_dump.c:16131 #, c-format msgid "WITH OIDS is not supported anymore (table \"%s\")" msgstr "WITH OIDS більше не підтримується (таблиця\"%s\")" -#: pg_dump.c:16886 +#: pg_dump.c:17037 #, c-format msgid "invalid column number %d for table \"%s\"" msgstr "неприпустиме число стовпців %d для таблиці \"%s\"" -#: pg_dump.c:16963 +#: pg_dump.c:17114 #, c-format msgid "could not parse index statistic columns" msgstr "не вдалося проаналізувати стовпці статистики індексів" -#: pg_dump.c:16965 +#: pg_dump.c:17116 #, c-format msgid "could not parse index statistic values" msgstr "не вдалося проаналізувати значення статистики індексів" -#: pg_dump.c:16967 +#: pg_dump.c:17118 #, c-format msgid "mismatched number of columns and values for index statistics" msgstr "невідповідна кількість стовпців і значень для статистики індексів" -#: pg_dump.c:17184 +#: pg_dump.c:17349 #, c-format msgid "missing index for constraint \"%s\"" msgstr "пропущено індекс для обмеження \"%s\"" -#: pg_dump.c:17409 +#: pg_dump.c:17590 #, c-format msgid "unrecognized constraint type: %c" msgstr "нерозпізнаний тип обмеження: %c" -#: pg_dump.c:17541 pg_dump.c:17764 +#: pg_dump.c:17722 pg_dump.c:17945 #, c-format msgid "query to get data of sequence \"%s\" returned %d row (expected 1)" msgid_plural "query to get data of sequence \"%s\" returned %d rows (expected 1)" @@ -2172,82 +2192,82 @@ msgstr[1] "запит на отримання даних послідовнос msgstr[2] "запит на отримання даних послідовності \"%s\" повернув %d рядків (очікувалося 1)" msgstr[3] "запит на отримання даних послідовності \"%s\" повернув %d рядків (очікувалося 1)" -#: pg_dump.c:17575 +#: pg_dump.c:17756 #, c-format msgid "unrecognized sequence type: %s" msgstr "нерозпізнаний тип послідовності: %s" -#: pg_dump.c:17862 +#: pg_dump.c:18043 #, c-format msgid "unexpected tgtype value: %d" msgstr "неочікуване значення tgtype: %d" -#: pg_dump.c:17936 +#: pg_dump.c:18117 #, c-format msgid "invalid argument string (%s) for trigger \"%s\" on table \"%s\"" msgstr "неприпустимий рядок аргументу (%s) для тригера \"%s\" у таблиці \"%s\"" -#: pg_dump.c:18205 +#: pg_dump.c:18391 #, c-format msgid "query to get rule \"%s\" for table \"%s\" failed: wrong number of rows returned" msgstr "помилка запиту на отримання правила \"%s\" для таблиці \"%s\": повернено неправильне число рядків " -#: pg_dump.c:18367 +#: pg_dump.c:18553 #, c-format msgid "could not find referenced extension %u" msgstr "не вдалося знайти згадане розширення %u" -#: pg_dump.c:18458 +#: pg_dump.c:18644 #, c-format msgid "could not parse extension configuration array" msgstr "не вдалося проаналізувати масив конфігурації розширення" -#: pg_dump.c:18460 +#: pg_dump.c:18646 #, c-format msgid "could not parse extension condition array" msgstr "не вдалося проаналізувати масив умов розширення" -#: pg_dump.c:18462 +#: pg_dump.c:18648 #, c-format msgid "mismatched number of configurations and conditions for extension" msgstr "невідповідна кількість конфігурацій і умов для розширення" -#: pg_dump.c:18594 +#: pg_dump.c:18780 #, c-format msgid "reading dependency data" msgstr "читання даних залежності" -#: pg_dump.c:18687 +#: pg_dump.c:18873 #, c-format msgid "no referencing object %u %u" msgstr "немає об’єкту посилання %u %u" -#: pg_dump.c:18698 +#: pg_dump.c:18884 #, c-format msgid "no referenced object %u %u" msgstr "немає посилання на об'єкт %u %u" -#: pg_dump.c:19087 +#: pg_dump.c:19273 #, c-format msgid "could not parse reloptions array" msgstr "неможливо розібрати масив reloptions" -#: pg_dump_sort.c:420 +#: pg_dump_sort.c:633 #, c-format msgid "invalid dumpId %d" msgstr "неприпустимий dumpId %d" -#: pg_dump_sort.c:426 +#: pg_dump_sort.c:639 #, c-format msgid "invalid dependency %d" msgstr "неприпустима залежність %d" -#: pg_dump_sort.c:659 +#: pg_dump_sort.c:872 #, c-format msgid "could not identify dependency loop" msgstr "не вдалося ідентифікувати цикл залежності" -#: pg_dump_sort.c:1230 +#: pg_dump_sort.c:1487 #, c-format msgid "there are circular foreign-key constraints on this table:" msgid_plural "there are circular foreign-key constraints among these tables:" @@ -2256,27 +2276,27 @@ msgstr[1] "у наступних таблицях зациклені зовні msgstr[2] "у наступних таблицях зациклені зовнішні ключі:" msgstr[3] "у наступних таблицях зациклені зовнішні ключі:" -#: pg_dump_sort.c:1234 pg_dump_sort.c:1254 +#: pg_dump_sort.c:1491 pg_dump_sort.c:1511 #, c-format msgid " %s" msgstr " %s" -#: pg_dump_sort.c:1235 +#: pg_dump_sort.c:1492 #, c-format msgid "You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints." msgstr "Ви не зможете відновити дамп без використання --disable-triggers або тимчасово розірвати обмеження." -#: pg_dump_sort.c:1236 +#: pg_dump_sort.c:1493 #, c-format msgid "Consider using a full dump instead of a --data-only dump to avoid this problem." msgstr "Можливо, використання повного вивантажування замість --data-only вивантажування допоможе уникнути цієї проблеми." -#: pg_dump_sort.c:1248 +#: pg_dump_sort.c:1505 #, c-format msgid "could not resolve dependency loop among these items:" msgstr "не вдалося вирішити цикл залежності серед цих елементів:" -#: pg_dumpall.c:202 +#: pg_dumpall.c:205 #, c-format msgid "The program \"%s\" is needed by %s but was not found in the\n" "same directory as \"%s\".\n" @@ -2284,7 +2304,7 @@ msgid "The program \"%s\" is needed by %s but was not found in the\n" msgstr "Програма \"%s\" потрібна для %s, але не знайдена в тому ж каталозі, що й \"%s\".\n" "Перевірте вашу установку." -#: pg_dumpall.c:207 +#: pg_dumpall.c:210 #, c-format msgid "The program \"%s\" was found by \"%s\"\n" "but was not the same version as %s.\n" @@ -2292,104 +2312,104 @@ msgid "The program \"%s\" was found by \"%s\"\n" msgstr "Програма \"%s\" була знайдена \"%s\", але не була тієї ж версії, що %s.\n" "Перевірте вашу установку." -#: pg_dumpall.c:359 +#: pg_dumpall.c:368 #, c-format msgid "option --exclude-database cannot be used together with -g/--globals-only, -r/--roles-only, or -t/--tablespaces-only" msgstr "параметр --exclude-database не можна використовувати разом з -g/--globals-only, -r/--roles-only або -t/--tablespaces-only" -#: pg_dumpall.c:368 +#: pg_dumpall.c:377 #, c-format msgid "options -g/--globals-only and -r/--roles-only cannot be used together" msgstr "параметри -g/--globals-only і -r/--roles-only не можна використовувати разом" -#: pg_dumpall.c:376 +#: pg_dumpall.c:385 #, c-format msgid "options -g/--globals-only and -t/--tablespaces-only cannot be used together" msgstr "параметри -g/--globals-only і -t/--tablespaces-only не можна використовувати разом" -#: pg_dumpall.c:390 +#: pg_dumpall.c:399 #, c-format msgid "options -r/--roles-only and -t/--tablespaces-only cannot be used together" msgstr "параметри -r/--roles-only і -t/--tablespaces-only не можна використовувати разом" -#: pg_dumpall.c:453 pg_dumpall.c:1767 +#: pg_dumpall.c:478 pg_dumpall.c:1842 #, c-format msgid "could not connect to database \"%s\"" msgstr "не вдалося зв'язатися з базою даних \"%s\"" -#: pg_dumpall.c:467 +#: pg_dumpall.c:492 #, c-format msgid "could not connect to databases \"postgres\" or \"template1\"\n" "Please specify an alternative database." msgstr "не вдалося зв'язатися з базами даних \"postgres\" або \"template1\"\n" "Будь ласка, вкажіть альтернативну базу даних." -#: pg_dumpall.c:621 +#: pg_dumpall.c:663 #, c-format msgid "%s extracts a PostgreSQL database cluster into an SQL script file.\n\n" msgstr "%s експортує кластер баз даних PostgreSQL до SQL-скрипту.\n\n" -#: pg_dumpall.c:623 +#: pg_dumpall.c:665 #, c-format msgid " %s [OPTION]...\n" msgstr " %s: [OPTION]...\n" -#: pg_dumpall.c:626 +#: pg_dumpall.c:668 #, c-format msgid " -f, --file=FILENAME output file name\n" msgstr " -f, --file=FILENAME ім'я вихідного файлу\n" -#: pg_dumpall.c:633 +#: pg_dumpall.c:675 #, c-format msgid " -c, --clean clean (drop) databases before recreating\n" msgstr " -c, --clean очистити (видалити) бази даних перед відтворенням\n" -#: pg_dumpall.c:635 +#: pg_dumpall.c:677 #, c-format msgid " -g, --globals-only dump only global objects, no databases\n" msgstr " -g, --globals-only вивантажувати лише глобальні об’єкти, не бази даних\n" -#: pg_dumpall.c:636 pg_restore.c:485 +#: pg_dumpall.c:678 pg_restore.c:515 #, c-format msgid " -O, --no-owner skip restoration of object ownership\n" msgstr " -O, --no-owner пропускається відновлення форми власності об’єктом\n" -#: pg_dumpall.c:637 +#: pg_dumpall.c:679 #, c-format msgid " -r, --roles-only dump only roles, no databases or tablespaces\n" msgstr " -r, --roles-only вивантажувати лише ролі, не бази даних або табличні простори\n" -#: pg_dumpall.c:639 +#: pg_dumpall.c:681 #, c-format msgid " -S, --superuser=NAME superuser user name to use in the dump\n" msgstr " -S, --superuser=NAME ім'я суперкористувача для використання при вивантажуванні\n" -#: pg_dumpall.c:640 +#: pg_dumpall.c:682 #, c-format msgid " -t, --tablespaces-only dump only tablespaces, no databases or roles\n" msgstr " -t, --tablespaces-only вивантажувати лише табличні простори, не бази даних або ролі\n" -#: pg_dumpall.c:646 +#: pg_dumpall.c:688 #, c-format msgid " --exclude-database=PATTERN exclude databases whose name matches PATTERN\n" msgstr " --exclude-database=PATTERN виключити бази даних, ім'я яких відповідає PATTERN\n" -#: pg_dumpall.c:653 +#: pg_dumpall.c:695 #, c-format msgid " --no-role-passwords do not dump passwords for roles\n" msgstr " --no-role-passwords не вивантажувати паролі для ролей\n" -#: pg_dumpall.c:668 +#: pg_dumpall.c:711 #, c-format msgid " -d, --dbname=CONNSTR connect using connection string\n" msgstr " -d, --dbname=CONNSTR підключення з використанням рядку підключення \n" -#: pg_dumpall.c:670 +#: pg_dumpall.c:713 #, c-format msgid " -l, --database=DBNAME alternative default database\n" msgstr " -l, --database=DBNAME альтернативна база даних за замовчуванням\n" -#: pg_dumpall.c:677 +#: pg_dumpall.c:720 #, c-format msgid "\n" "If -f/--file is not used, then the SQL script will be written to the standard\n" @@ -2397,267 +2417,278 @@ msgid "\n" msgstr "\n" "Якщо -f/--file не використовується, тоді SQL- сценарій буде записаний до стандартного виводу.\n\n" -#: pg_dumpall.c:883 +#: pg_dumpall.c:929 #, c-format msgid "role name starting with \"pg_\" skipped (%s)" msgstr "пропущено ім’я ролі, що починається з \"pg_\" (%s)" -#: pg_dumpall.c:1284 +#. translator: %s represents a numeric role OID +#: pg_dumpall.c:1084 pg_dumpall.c:1091 +#, c-format +msgid "found orphaned pg_auth_members entry for role %s" +msgstr "знайдено забутий запис в pg_auth_members для ролі %s" + +#: pg_dumpall.c:1352 #, c-format msgid "could not parse ACL list (%s) for tablespace \"%s\"" msgstr "не вдалося аналізувати список ACL (%s) для табличного простору \"%s\"" -#: pg_dumpall.c:1512 +#: pg_dumpall.c:1585 #, c-format msgid "excluding database \"%s\"" msgstr "виключаємо базу даних \"%s\"" -#: pg_dumpall.c:1516 +#: pg_dumpall.c:1589 #, c-format msgid "dumping database \"%s\"" msgstr "вивантажуємо базу даних \"%s\"" -#: pg_dumpall.c:1548 +#: pg_dumpall.c:1623 #, c-format msgid "pg_dump failed on database \"%s\", exiting" msgstr "помилка pg_dump для бази даних \"%s\", завершення роботи" -#: pg_dumpall.c:1557 +#: pg_dumpall.c:1632 #, c-format msgid "could not re-open the output file \"%s\": %m" msgstr "не вдалося повторно відкрити файл виводу \"%s\": %m" -#: pg_dumpall.c:1601 +#: pg_dumpall.c:1676 #, c-format msgid "running \"%s\"" msgstr "виконується \"%s\"" -#: pg_dumpall.c:1816 +#: pg_dumpall.c:1891 #, c-format msgid "could not get server version" msgstr "не вдалося отримати версію серверу" -#: pg_dumpall.c:1822 +#: pg_dumpall.c:1897 #, c-format msgid "could not parse server version \"%s\"" msgstr "не вдалося аналізувати версію серверу \"%s\"" -#: pg_dumpall.c:1894 pg_dumpall.c:1917 +#: pg_dumpall.c:1969 pg_dumpall.c:1992 #, c-format msgid "executing %s" msgstr "виконується %s" -#: pg_restore.c:308 +#: pg_restore.c:313 #, c-format msgid "one of -d/--dbname and -f/--file must be specified" msgstr "необхідно вказати один з -d/--dbname або -f/--file" -#: pg_restore.c:317 +#: pg_restore.c:322 #, c-format msgid "options -d/--dbname and -f/--file cannot be used together" msgstr "параметри -d/--dbname і -f/--file не можуть використовуватись разом" -#: pg_restore.c:343 +#: pg_restore.c:330 +#, c-format +msgid "options -d/--dbname and --restrict-key cannot be used together" +msgstr "параметри -d/--dbname і --restrict-key не можуть використовуватись разом" + +#: pg_restore.c:373 #, c-format msgid "options -C/--create and -1/--single-transaction cannot be used together" msgstr "параметри -C/--create і -1/--single-transaction не можуть використовуватись разом" -#: pg_restore.c:357 +#: pg_restore.c:387 #, c-format msgid "maximum number of parallel jobs is %d" msgstr "максимальна кількість паралельних завдань: %d" -#: pg_restore.c:366 +#: pg_restore.c:396 #, c-format msgid "cannot specify both --single-transaction and multiple jobs" msgstr "параметр --single-transaction допускається лише з одним завданням" -#: pg_restore.c:408 +#: pg_restore.c:438 #, c-format msgid "unrecognized archive format \"%s\"; please specify \"c\", \"d\", or \"t\"" msgstr "нерозпізнаний формат архіву \"%s\"; будь ласка, вкажіть \"c\", \"d\" або \"t\"" -#: pg_restore.c:448 +#: pg_restore.c:478 #, c-format msgid "errors ignored on restore: %d" msgstr "при відновленні проігноровано помилок: %d" -#: pg_restore.c:461 +#: pg_restore.c:491 #, c-format msgid "%s restores a PostgreSQL database from an archive created by pg_dump.\n\n" msgstr "%s відновлює базу даних PostgreSQL з архіву, створеного командою pg_dump.\n\n" -#: pg_restore.c:463 +#: pg_restore.c:493 #, c-format msgid " %s [OPTION]... [FILE]\n" msgstr " %s [OPTION]... [FILE]\n" -#: pg_restore.c:466 +#: pg_restore.c:496 #, c-format msgid " -d, --dbname=NAME connect to database name\n" msgstr " -d, --dbname=NAME підключитись до вказаної бази даних\n" -#: pg_restore.c:467 +#: pg_restore.c:497 #, c-format msgid " -f, --file=FILENAME output file name (- for stdout)\n" msgstr " -f, --file=FILENAME ім'я файлу виводу (- для stdout)\n" -#: pg_restore.c:468 +#: pg_restore.c:498 #, c-format msgid " -F, --format=c|d|t backup file format (should be automatic)\n" msgstr " -F, --format=c|d|t формат файлу резервної копії (розпізнається автоматично)\n" -#: pg_restore.c:469 +#: pg_restore.c:499 #, c-format msgid " -l, --list print summarized TOC of the archive\n" msgstr " -l, --list вивести короткий зміст архіву\n" -#: pg_restore.c:470 +#: pg_restore.c:500 #, c-format msgid " -v, --verbose verbose mode\n" msgstr " -v, --verbose детальний режим\n" -#: pg_restore.c:471 +#: pg_restore.c:501 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version вивести інформацію про версію, потім вийти\n" -#: pg_restore.c:472 +#: pg_restore.c:502 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показати цю довідку, потім вийти\n" -#: pg_restore.c:474 +#: pg_restore.c:504 #, c-format msgid "\n" "Options controlling the restore:\n" msgstr "\n" "Параметри, що керують відновленням:\n" -#: pg_restore.c:475 +#: pg_restore.c:505 #, c-format msgid " -a, --data-only restore only the data, no schema\n" msgstr " -a, --data-only відновити лише дані, без схеми\n" -#: pg_restore.c:477 +#: pg_restore.c:507 #, c-format msgid " -C, --create create the target database\n" msgstr " -C, --create створити цільову базу даних\n" -#: pg_restore.c:478 +#: pg_restore.c:508 #, c-format msgid " -e, --exit-on-error exit on error, default is to continue\n" msgstr " -e, --exit-on-error вийти при помилці, продовжувати за замовчуванням\n" -#: pg_restore.c:479 +#: pg_restore.c:509 #, c-format msgid " -I, --index=NAME restore named index\n" msgstr " -I, --index=NAME відновити вказаний індекс\n" -#: pg_restore.c:480 +#: pg_restore.c:510 #, c-format msgid " -j, --jobs=NUM use this many parallel jobs to restore\n" msgstr " -j, --jobs=NUM щоб виконати відновлення, використайте ці паралельні завдання\n" -#: pg_restore.c:481 +#: pg_restore.c:511 #, c-format msgid " -L, --use-list=FILENAME use table of contents from this file for\n" " selecting/ordering output\n" msgstr " -L, --use-list=FILENAME використовувати зміст з цього файлу для \n" " вибору/упорядкування даних\n" -#: pg_restore.c:483 +#: pg_restore.c:513 #, c-format msgid " -n, --schema=NAME restore only objects in this schema\n" msgstr " -n, --schema=NAME відновити об'єкти лише в цій схемі\n" -#: pg_restore.c:484 +#: pg_restore.c:514 #, c-format msgid " -N, --exclude-schema=NAME do not restore objects in this schema\n" msgstr " -N, --exclude-schema=NAME не відновлювати об'єкти в цій схемі\n" -#: pg_restore.c:486 +#: pg_restore.c:516 #, c-format msgid " -P, --function=NAME(args) restore named function\n" msgstr " -P, --function=NAME(args) відновити вказану функцію\n" -#: pg_restore.c:487 +#: pg_restore.c:517 #, c-format msgid " -s, --schema-only restore only the schema, no data\n" msgstr " -s, --schema-only відновити лише схему, без даних\n" -#: pg_restore.c:488 +#: pg_restore.c:518 #, c-format msgid " -S, --superuser=NAME superuser user name to use for disabling triggers\n" msgstr " -S, --superuser=NAME ім'я суперкористувача для вимкнення тригерів\n" -#: pg_restore.c:489 +#: pg_restore.c:519 #, c-format msgid " -t, --table=NAME restore named relation (table, view, etc.)\n" msgstr " -t, --table=NAME відновити вказане відношення (таблицю, подання і т. д.)\n" -#: pg_restore.c:490 +#: pg_restore.c:520 #, c-format msgid " -T, --trigger=NAME restore named trigger\n" msgstr " -T, --trigger=NAME відновити вказаний тригер\n" -#: pg_restore.c:491 +#: pg_restore.c:521 #, c-format msgid " -x, --no-privileges skip restoration of access privileges (grant/revoke)\n" msgstr " -x, --no-privileges пропустити відновлення прав доступу (grant/revoke)\n" -#: pg_restore.c:492 +#: pg_restore.c:522 #, c-format msgid " -1, --single-transaction restore as a single transaction\n" msgstr " -1, --single-transaction відновити в одній транзакції\n" -#: pg_restore.c:494 +#: pg_restore.c:524 #, c-format msgid " --enable-row-security enable row security\n" msgstr " --enable-row-security активувати захист на рівні рядків\n" -#: pg_restore.c:496 +#: pg_restore.c:526 #, c-format msgid " --no-comments do not restore comments\n" msgstr " --no-comments не відновлювати коментарі\n" -#: pg_restore.c:497 +#: pg_restore.c:527 #, c-format msgid " --no-data-for-failed-tables do not restore data of tables that could not be\n" " created\n" msgstr " --no-data-for-failed-tables не відновлювати дані таблиць, які не вдалося створити\n" -#: pg_restore.c:499 +#: pg_restore.c:529 #, c-format msgid " --no-publications do not restore publications\n" msgstr " --no-publications не відновлювати публікації \n" -#: pg_restore.c:500 +#: pg_restore.c:530 #, c-format msgid " --no-security-labels do not restore security labels\n" msgstr " --no-security-labels не відновлювати мітки безпеки \n" -#: pg_restore.c:501 +#: pg_restore.c:531 #, c-format msgid " --no-subscriptions do not restore subscriptions\n" msgstr " --no-subscriptions не відновлювати підписки\n" -#: pg_restore.c:502 +#: pg_restore.c:532 #, c-format msgid " --no-tablespaces do not restore tablespace assignments\n" msgstr " --no-tablespaces не відновлювати завдання табличного простору\n" -#: pg_restore.c:503 +#: pg_restore.c:534 #, c-format msgid " --section=SECTION restore named section (pre-data, data, or post-data)\n" msgstr " --section=SECTION відновлювати названий розділ (pre-data, data або post-data)\n" -#: pg_restore.c:516 +#: pg_restore.c:547 #, c-format msgid " --role=ROLENAME do SET ROLE before restore\n" msgstr " --role=ROLENAME виконати SET ROLE перед відновленням\n" -#: pg_restore.c:518 +#: pg_restore.c:549 #, c-format msgid "\n" "The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified\n" @@ -2666,7 +2697,7 @@ msgstr "\n" "Параметри -I, -n, -N, -P, -t, -T, і --section можна групувати і вказувати\n" "декілька разів для вибору декількох об'єктів.\n" -#: pg_restore.c:521 +#: pg_restore.c:552 #, c-format msgid "\n" "If no input file name is supplied, then standard input is used.\n\n" diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index da7578709e5..09f6c230c47 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -268,6 +268,29 @@ 'postgres', ], }, + no_subscriptions => { + dump_cmd => [ + 'pg_dump', '--no-sync', + '--file' => "$tempdir/no_subscriptions.sql", + '--no-subscriptions', + 'postgres', + ], + }, + no_subscriptions_restore => { + dump_cmd => [ + 'pg_dump', '--no-sync', + '--format' => 'custom', + '--file' => "$tempdir/no_subscriptions_restore.dump", + 'postgres', + ], + restore_cmd => [ + 'pg_restore', + '--format' => 'custom', + '--file' => "$tempdir/no_subscriptions_restore.sql", + '--no-subscriptions', + "$tempdir/no_subscriptions_restore.dump", + ], + }, only_dump_test_schema => { dump_cmd => [ 'pg_dump', '--no-sync', @@ -420,12 +443,24 @@ no_blobs => 1, no_owner => 1, no_privs => 1, + no_subscriptions => 1, + no_subscriptions_restore => 1, pg_dumpall_dbprivs => 1, pg_dumpall_exclude => 1, schema_only => 1,); # This is where the actual tests are defined. my %tests = ( + 'restrict' => { + all_runs => 1, + regexp => qr/^\\restrict [a-zA-Z0-9]+$/m, + }, + + 'unrestrict' => { + all_runs => 1, + regexp => qr/^\\unrestrict [a-zA-Z0-9]+$/m, + }, + 'ALTER DEFAULT PRIVILEGES FOR ROLE regress_dump_test_role GRANT' => { create_order => 14, create_sql => 'ALTER DEFAULT PRIVILEGES @@ -1121,6 +1156,10 @@ regexp => qr/^COMMENT ON SUBSCRIPTION sub1 IS 'comment on subscription';/m, like => { %full_runs, section_post_data => 1, }, + unlike => { + no_subscriptions => 1, + no_subscriptions_restore => 1, + }, }, 'COMMENT ON TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1' => { @@ -1449,6 +1488,27 @@ }, }, + 'newline of role or table name in comment' => { + create_sql => qq{CREATE ROLE regress_newline; + ALTER ROLE regress_newline SET enable_seqscan = off; + ALTER ROLE regress_newline + RENAME TO "regress_newline\nattack"; + + -- meet getPartitioningInfo() "unsafe" condition + CREATE TYPE pp_colors AS + ENUM ('green', 'blue', 'black'); + CREATE TABLE pp_enumpart (a pp_colors) + PARTITION BY HASH (a); + CREATE TABLE pp_enumpart1 PARTITION OF pp_enumpart + FOR VALUES WITH (MODULUS 2, REMAINDER 0); + CREATE TABLE pp_enumpart2 PARTITION OF pp_enumpart + FOR VALUES WITH (MODULUS 2, REMAINDER 1); + ALTER TABLE pp_enumpart + RENAME TO "pp_enumpart\nattack";}, + regexp => qr/\n--[^\n]*\nattack/s, + like => {}, + }, + 'CREATE DATABASE regression_invalid...' => { create_order => 1, create_sql => q( @@ -2370,6 +2430,10 @@ \QCREATE SUBSCRIPTION sub1 CONNECTION 'dbname=doesnotexist' PUBLICATION pub1 WITH (connect = false, slot_name = 'sub1');\E /xm, like => { %full_runs, section_post_data => 1, }, + unlike => { + no_subscriptions => 1, + no_subscriptions_restore => 1, + }, }, 'ALTER PUBLICATION pub1 ADD TABLE test_table' => { @@ -2938,6 +3002,8 @@ no_blobs => 1, no_privs => 1, no_owner => 1, + no_subscriptions => 1, + no_subscriptions_restore => 1, only_dump_test_schema => 1, pg_dumpall_dbprivs => 1, pg_dumpall_exclude => 1, @@ -2956,7 +3022,6 @@ }, 'ALTER TABLE measurement PRIMARY KEY' => { - all_runs => 1, catch_all => 'CREATE ... commands', create_order => 93, create_sql => @@ -2993,7 +3058,6 @@ }, 'ALTER INDEX ... ATTACH PARTITION (primary key)' => { - all_runs => 1, catch_all => 'CREATE ... commands', regexp => qr/^ \QALTER INDEX dump_test.measurement_pkey ATTACH PARTITION dump_test_second_schema.measurement_y2006m2_pkey\E @@ -3011,6 +3075,8 @@ no_blobs => 1, no_privs => 1, no_owner => 1, + no_subscriptions => 1, + no_subscriptions_restore => 1, pg_dumpall_dbprivs => 1, pg_dumpall_exclude => 1, role => 1, @@ -3973,9 +4039,10 @@ next; } - # Run the test listed as a like, unless it is specifically noted - # as an unlike (generally due to an explicit exclusion or similar). - if ($tests{$test}->{like}->{$test_key} + # Run the test if all_runs is set or if listed as a like, unless it is + # specifically noted as an unlike (generally due to an explicit + # exclusion or similar). + if (($tests{$test}->{like}->{$test_key} || $tests{$test}->{all_runs}) && !defined($tests{$test}->{unlike}->{$test_key})) { if (!ok($output_file =~ $tests{$test}->{regexp}, diff --git a/src/bin/pg_dump/t/003_pg_dump_with_server.pl b/src/bin/pg_dump/t/003_pg_dump_with_server.pl index f9fea9ddcfe..18177232fa9 100644 --- a/src/bin/pg_dump/t/003_pg_dump_with_server.pl +++ b/src/bin/pg_dump/t/003_pg_dump_with_server.pl @@ -6,7 +6,7 @@ use PostgresNode; use TestLib; -use Test::More tests => 3; +use Test::More tests => 6; my $tempdir = TestLib::tempdir; my $tempdir_short = TestLib::tempdir_short; @@ -17,6 +17,22 @@ $node->init; $node->start; +######################################### +# pg_dumpall: newline in database name + +$node->safe_psql('postgres', qq{CREATE DATABASE "regress_\nattack"}); + +my (@cmd, $stdout, $stderr); +@cmd = ("pg_dumpall", '--port' => $port, '--exclude-database=postgres'); +print("# Running: " . join(" ", @cmd) . "\n"); +my $result = IPC::Run::run \@cmd, '>' => \$stdout, '2>' => \$stderr; +ok(!$result, "newline in dbname: exit code not 0"); +like( + $stderr, + qr/shell command argument contains a newline/, + "newline in dbname: stderr matches"); +unlike($stdout, qr/^attack/m, "newline in dbname: no comment escape"); + ######################################### # Verify that dumping foreign data includes only foreign tables of # matching servers @@ -27,7 +43,6 @@ $node->safe_psql('postgres', "CREATE SERVER s2 FOREIGN DATA WRAPPER dummy"); $node->safe_psql('postgres', "CREATE FOREIGN TABLE t0 (a int) SERVER s0"); $node->safe_psql('postgres', "CREATE FOREIGN TABLE t1 (a int) SERVER s1"); -my ($cmd, $stdout, $stderr, $result); command_fails_like( [ "pg_dump", '-p', $port, '--include-foreign-data=s0', 'postgres' ], diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c index dd016ce6989..6c261bf3a39 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -900,6 +900,10 @@ PrintNewControlValues(void) { printf(_("NextXID: %u\n"), XidFromFullTransactionId(ControlFile.checkPointCopy.nextXid)); + } + + if (set_oldest_xid != 0) + { printf(_("OldestXID: %u\n"), ControlFile.checkPointCopy.oldestXid); printf(_("OldestXID's DB: %u\n"), diff --git a/src/bin/pg_resetwal/po/es.po b/src/bin/pg_resetwal/po/es.po index c47764f0d63..11d761f15d5 100644 --- a/src/bin/pg_resetwal/po/es.po +++ b/src/bin/pg_resetwal/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_resetwal (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:37+0000\n" +"POT-Creation-Date: 2026-02-06 21:32+0000\n" "PO-Revision-Date: 2021-10-14 10:01-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -388,7 +388,7 @@ msgstr "Bloques por segmento de relación grande: %u\n" msgid "WAL block size: %u\n" msgstr "Tamaño del bloque de WAL: %u\n" -#: pg_resetwal.c:799 pg_resetwal.c:885 +#: pg_resetwal.c:799 pg_resetwal.c:889 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Bytes por segmento WAL: %u\n" @@ -488,67 +488,67 @@ msgstr "NextOID: %u\n" msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetwal.c:860 +#: pg_resetwal.c:864 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetwal.c:862 +#: pg_resetwal.c:866 #, c-format msgid "OldestXID's DB: %u\n" msgstr "Base de datos del OldestXID: %u\n" -#: pg_resetwal.c:868 +#: pg_resetwal.c:872 #, c-format msgid "NextXID epoch: %u\n" msgstr "Epoch del NextXID: %u\n" -#: pg_resetwal.c:874 +#: pg_resetwal.c:878 #, c-format msgid "oldestCommitTsXid: %u\n" msgstr "oldestCommitTsXid: %u\n" -#: pg_resetwal.c:879 +#: pg_resetwal.c:883 #, c-format msgid "newestCommitTsXid: %u\n" msgstr "newestCommitTsXid: %u\n" -#: pg_resetwal.c:965 pg_resetwal.c:1033 pg_resetwal.c:1080 +#: pg_resetwal.c:969 pg_resetwal.c:1037 pg_resetwal.c:1084 #, c-format msgid "could not open directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: pg_resetwal.c:1000 pg_resetwal.c:1053 pg_resetwal.c:1103 +#: pg_resetwal.c:1004 pg_resetwal.c:1057 pg_resetwal.c:1107 #, c-format msgid "could not read directory \"%s\": %m" msgstr "no se pudo leer el directorio «%s»: %m" -#: pg_resetwal.c:1006 pg_resetwal.c:1059 pg_resetwal.c:1109 +#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113 #, c-format msgid "could not close directory \"%s\": %m" msgstr "no se pudo abrir el directorio «%s»: %m" -#: pg_resetwal.c:1045 pg_resetwal.c:1095 +#: pg_resetwal.c:1049 pg_resetwal.c:1099 #, c-format msgid "could not delete file \"%s\": %m" msgstr "no se pudo borrar el archivo «%s»: %m" -#: pg_resetwal.c:1176 +#: pg_resetwal.c:1180 #, c-format msgid "could not open file \"%s\": %m" msgstr "no se pudo abrir el archivo «%s»: %m" -#: pg_resetwal.c:1186 pg_resetwal.c:1199 +#: pg_resetwal.c:1190 pg_resetwal.c:1203 #, c-format msgid "could not write file \"%s\": %m" msgstr "no se pudo escribir el archivo «%s»: %m" -#: pg_resetwal.c:1206 +#: pg_resetwal.c:1210 #, c-format msgid "fsync error: %m" msgstr "error de fsync: %m" -#: pg_resetwal.c:1217 +#: pg_resetwal.c:1221 #, c-format msgid "" "%s resets the PostgreSQL write-ahead log.\n" @@ -557,7 +557,7 @@ msgstr "" "%s restablece el WAL («write-ahead log») de PostgreSQL.\n" "\n" -#: pg_resetwal.c:1218 +#: pg_resetwal.c:1222 #, c-format msgid "" "Usage:\n" @@ -568,12 +568,12 @@ msgstr "" " %s [OPCIÓN]... DATADIR\n" "\n" -#: pg_resetwal.c:1219 +#: pg_resetwal.c:1223 #, c-format msgid "Options:\n" msgstr "Opciones:\n" -#: pg_resetwal.c:1220 +#: pg_resetwal.c:1224 #, c-format msgid "" " -c, --commit-timestamp-ids=XID,XID\n" @@ -585,29 +585,29 @@ msgstr "" " que llevan timestamp de commit (cero significa no\n" " cambiar)\n" -#: pg_resetwal.c:1223 +#: pg_resetwal.c:1227 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]DATADIR directorio de datos\n" -#: pg_resetwal.c:1224 +#: pg_resetwal.c:1228 #, c-format msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" msgstr " -e, --epoch=XIDEPOCH asigna el siguiente «epoch» de ID de transacción\n" -#: pg_resetwal.c:1225 +#: pg_resetwal.c:1229 #, c-format msgid " -f, --force force update to be done\n" msgstr " -f, --force fuerza que la actualización sea hecha\n" -#: pg_resetwal.c:1226 +#: pg_resetwal.c:1230 #, c-format msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n" msgstr "" " -l, --next-wal-file=ARCHIVOWAL\n" " fuerza una ubicación inicial mínima para nuevo WAL\n" -#: pg_resetwal.c:1227 +#: pg_resetwal.c:1231 #, c-format msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" msgstr "" @@ -615,53 +615,53 @@ msgstr "" " asigna el siguiente ID de multitransacción y\n" " el más antiguo\n" -#: pg_resetwal.c:1228 +#: pg_resetwal.c:1232 #, c-format msgid " -n, --dry-run no update, just show what would be done\n" msgstr " -n, --dry-run no actualiza, sólo muestra lo que se haría\n" -#: pg_resetwal.c:1229 +#: pg_resetwal.c:1233 #, c-format msgid " -o, --next-oid=OID set next OID\n" msgstr " -o, --next-oid=OID asigna el siguiente OID\n" -#: pg_resetwal.c:1230 +#: pg_resetwal.c:1234 #, c-format msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" msgstr "" " -O, --multixact-offset=OFFSET\n" " asigna la siguiente posición de multitransacción\n" -#: pg_resetwal.c:1231 +#: pg_resetwal.c:1235 #, c-format msgid " -u, --oldest-transaction-id=XID set oldest transaction ID\n" msgstr "" " -u, --oldest-transaction-id=XID\n" " asigna el ID de transacción más antiguo\n" -#: pg_resetwal.c:1232 +#: pg_resetwal.c:1236 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version mostrar información de versión y salir\n" -#: pg_resetwal.c:1233 +#: pg_resetwal.c:1237 #, c-format msgid " -x, --next-transaction-id=XID set next transaction ID\n" msgstr "" " -x, --next-transaction-id=XID\n" " asigna el siguiente ID de transacción\n" -#: pg_resetwal.c:1234 +#: pg_resetwal.c:1238 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr " --wal-segsize=TAMAÑO tamaño de segmentos de WAL, en megabytes\n" -#: pg_resetwal.c:1235 +#: pg_resetwal.c:1239 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help mostrar esta ayuda y salir\n" -#: pg_resetwal.c:1236 +#: pg_resetwal.c:1240 #, c-format msgid "" "\n" @@ -670,7 +670,7 @@ msgstr "" "\n" "Reporte errores a <%s>.\n" -#: pg_resetwal.c:1237 +#: pg_resetwal.c:1241 #, c-format msgid "%s home page: <%s>\n" msgstr "Sitio web de %s: <%s>\n" diff --git a/src/bin/pg_resetwal/po/ru.po b/src/bin/pg_resetwal/po/ru.po index 0fa4c6e7bb7..16020f93eb6 100644 --- a/src/bin/pg_resetwal/po/ru.po +++ b/src/bin/pg_resetwal/po/ru.po @@ -5,12 +5,12 @@ # Oleg Bartunov , 2004. # Sergey Burladyan , 2009. # Dmitriy Olshevskiy , 2014. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_resetxlog (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2021-08-14 06:29+0300\n" +"POT-Creation-Date: 2026-02-07 08:59+0200\n" "PO-Revision-Date: 2024-09-05 12:19+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -419,7 +419,7 @@ msgstr "Блоков в макс. сегменте отношений: %u\n" msgid "WAL block size: %u\n" msgstr "Размер блока WAL: %u\n" -#: pg_resetwal.c:799 pg_resetwal.c:885 +#: pg_resetwal.c:799 pg_resetwal.c:889 #, c-format msgid "Bytes per WAL segment: %u\n" msgstr "Байт в сегменте WAL: %u\n" @@ -519,67 +519,67 @@ msgstr "NextOID: %u\n" msgid "NextXID: %u\n" msgstr "NextXID: %u\n" -#: pg_resetwal.c:860 +#: pg_resetwal.c:864 #, c-format msgid "OldestXID: %u\n" msgstr "OldestXID: %u\n" -#: pg_resetwal.c:862 +#: pg_resetwal.c:866 #, c-format msgid "OldestXID's DB: %u\n" msgstr "БД с oldestXID: %u\n" -#: pg_resetwal.c:868 +#: pg_resetwal.c:872 #, c-format msgid "NextXID epoch: %u\n" msgstr "Эпоха NextXID: %u\n" -#: pg_resetwal.c:874 +#: pg_resetwal.c:878 #, c-format msgid "oldestCommitTsXid: %u\n" msgstr "oldestCommitTsXid: %u\n" -#: pg_resetwal.c:879 +#: pg_resetwal.c:883 #, c-format msgid "newestCommitTsXid: %u\n" msgstr "newestCommitTsXid: %u\n" -#: pg_resetwal.c:965 pg_resetwal.c:1033 pg_resetwal.c:1080 +#: pg_resetwal.c:969 pg_resetwal.c:1037 pg_resetwal.c:1084 #, c-format msgid "could not open directory \"%s\": %m" msgstr "не удалось открыть каталог \"%s\": %m" -#: pg_resetwal.c:1000 pg_resetwal.c:1053 pg_resetwal.c:1103 +#: pg_resetwal.c:1004 pg_resetwal.c:1057 pg_resetwal.c:1107 #, c-format msgid "could not read directory \"%s\": %m" msgstr "не удалось прочитать каталог \"%s\": %m" -#: pg_resetwal.c:1006 pg_resetwal.c:1059 pg_resetwal.c:1109 +#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113 #, c-format msgid "could not close directory \"%s\": %m" msgstr "не удалось закрыть каталог \"%s\": %m" -#: pg_resetwal.c:1045 pg_resetwal.c:1095 +#: pg_resetwal.c:1049 pg_resetwal.c:1099 #, c-format msgid "could not delete file \"%s\": %m" msgstr "ошибка удаления файла \"%s\": %m" -#: pg_resetwal.c:1176 +#: pg_resetwal.c:1180 #, c-format msgid "could not open file \"%s\": %m" msgstr "не удалось открыть файл \"%s\": %m" -#: pg_resetwal.c:1186 pg_resetwal.c:1199 +#: pg_resetwal.c:1190 pg_resetwal.c:1203 #, c-format msgid "could not write file \"%s\": %m" msgstr "не удалось записать файл \"%s\": %m" -#: pg_resetwal.c:1206 +#: pg_resetwal.c:1210 #, c-format msgid "fsync error: %m" msgstr "ошибка синхронизации с ФС: %m" -#: pg_resetwal.c:1217 +#: pg_resetwal.c:1221 #, c-format msgid "" "%s resets the PostgreSQL write-ahead log.\n" @@ -588,7 +588,7 @@ msgstr "" "%s сбрасывает журнал предзаписи PostgreSQL.\n" "\n" -#: pg_resetwal.c:1218 +#: pg_resetwal.c:1222 #, c-format msgid "" "Usage:\n" @@ -599,12 +599,12 @@ msgstr "" " %s [ПАРАМЕТР]... КАТАЛОГ-ДАННЫХ\n" "\n" -#: pg_resetwal.c:1219 +#: pg_resetwal.c:1223 #, c-format msgid "Options:\n" msgstr "Параметры:\n" -#: pg_resetwal.c:1220 +#: pg_resetwal.c:1224 #, c-format msgid "" " -c, --commit-timestamp-ids=XID,XID\n" @@ -616,24 +616,24 @@ msgstr "" " задать старейшую и новейшую транзакции,\n" " несущие метки времени (0 — не менять)\n" -#: pg_resetwal.c:1223 +#: pg_resetwal.c:1227 #, c-format msgid " [-D, --pgdata=]DATADIR data directory\n" msgstr " [-D, --pgdata=]КАТ_ДАННЫХ каталог данных\n" -#: pg_resetwal.c:1224 +#: pg_resetwal.c:1228 #, c-format msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n" msgstr "" " -e, --epoch=XIDEPOCH задать эпоху для ID следующей транзакции\n" -#: pg_resetwal.c:1225 +#: pg_resetwal.c:1229 #, c-format msgid " -f, --force force update to be done\n" msgstr "" " -f, --force принудительное выполнение операции\n" -#: pg_resetwal.c:1226 +#: pg_resetwal.c:1230 #, c-format msgid "" " -l, --next-wal-file=WALFILE set minimum starting location for new " @@ -642,7 +642,7 @@ msgstr "" " -l, --next-wal-file=ФАЙЛ_WAL задать минимальное начальное положение\n" " для нового WAL\n" -#: pg_resetwal.c:1227 +#: pg_resetwal.c:1231 #, c-format msgid "" " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n" @@ -650,7 +650,7 @@ msgstr "" " -m, --multixact-ids=MXID,MXID задать ID следующей и старейшей\n" " мультитранзакции\n" -#: pg_resetwal.c:1228 +#: pg_resetwal.c:1232 #, c-format msgid "" " -n, --dry-run no update, just show what would be done\n" @@ -659,46 +659,46 @@ msgstr "" "выполнены,\n" " но не выполнять их\n" -#: pg_resetwal.c:1229 +#: pg_resetwal.c:1233 #, c-format msgid " -o, --next-oid=OID set next OID\n" msgstr " -o, --next-oid=OID задать следующий OID\n" -#: pg_resetwal.c:1230 +#: pg_resetwal.c:1234 #, c-format msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n" msgstr "" " -O, --multixact-offset=СМЕЩЕНИЕ задать смещение следующей " "мультитранзакции\n" -#: pg_resetwal.c:1231 +#: pg_resetwal.c:1235 #, c-format msgid " -u, --oldest-transaction-id=XID set oldest transaction ID\n" msgstr " -u, --oldest-transaction-id=XID задать ID старейшей ID\n" -#: pg_resetwal.c:1232 +#: pg_resetwal.c:1236 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: pg_resetwal.c:1233 +#: pg_resetwal.c:1237 #, c-format msgid " -x, --next-transaction-id=XID set next transaction ID\n" msgstr " -x, --next-transaction-id=XID задать ID следующей транзакции\n" -#: pg_resetwal.c:1234 +#: pg_resetwal.c:1238 #, c-format msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n" msgstr "" " --wal-segsize=РАЗМЕР размер сегментов WAL (в мегабайтах)\n" -#: pg_resetwal.c:1235 +#: pg_resetwal.c:1239 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: pg_resetwal.c:1236 +#: pg_resetwal.c:1240 #, c-format msgid "" "\n" @@ -707,7 +707,7 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: pg_resetwal.c:1237 +#: pg_resetwal.c:1241 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" diff --git a/src/bin/pg_rewind/file_ops.c b/src/bin/pg_rewind/file_ops.c index 1671feea68f..a8070864bbe 100644 --- a/src/bin/pg_rewind/file_ops.c +++ b/src/bin/pg_rewind/file_ops.c @@ -327,7 +327,7 @@ slurpFile(const char *datadir, const char *path, size_t *filesize) fullpath); if (fstat(fd, &statbuf) < 0) - pg_fatal("could not open file \"%s\" for reading: %m", + pg_fatal("could not stat file \"%s\": %m", fullpath); len = statbuf.st_size; diff --git a/src/bin/pg_rewind/po/es.po b/src/bin/pg_rewind/po/es.po index 47ae755a696..24146d59c28 100644 --- a/src/bin/pg_rewind/po/es.po +++ b/src/bin/pg_rewind/po/es.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:38+0000\n" -"PO-Revision-Date: 2022-08-08 01:00+0200\n" +"POT-Creation-Date: 2026-02-06 21:34+0000\n" +"PO-Revision-Date: 2026-02-07 09:09+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" "Language: es\n" @@ -205,11 +205,17 @@ msgstr "no se pudo crear el link simbólico en «%s»: %m" msgid "could not remove symbolic link \"%s\": %m" msgstr "no se pudo eliminar el enlace simbólico «%s»: %m" -#: file_ops.c:326 file_ops.c:330 +#: file_ops.c:326 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "no se pudo abrir archivo «%s» para lectura: %m" +#: file_ops.c:330 +#, c-format +#| msgid "could not open file \"%s\" for reading: %m" +msgid "could not stat file \"%s\" for reading: %m" +msgstr "no se pudo efectuar «stat» al archivo «%s» para lectura: %m" + #: file_ops.c:341 local_source.c:107 parsexlog.c:369 #, c-format msgid "could not read file \"%s\": %m" @@ -841,122 +847,122 @@ msgstr "posición de registro no válida en %X/%X" msgid "contrecord is requested by %X/%X" msgstr "contrecord solicitado por %X/%X" -#: xlogreader.c:372 xlogreader.c:720 +#: xlogreader.c:372 xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" -#: xlogreader.c:442 +#: xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: xlogreader.c:455 +#: xlogreader.c:456 #, 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" -#: xlogreader.c:728 +#: xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: xlogreader.c:741 xlogreader.c:757 +#: xlogreader.c:749 xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: xlogreader.c:795 +#: xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: xlogreader.c:832 +#: xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: xlogreader.c:846 xlogreader.c:887 +#: xlogreader.c:854 xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: xlogreader.c:861 +#: xlogreader.c:869 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: xlogreader.c:869 +#: xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: xlogreader.c:875 +#: xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: xlogreader.c:906 +#: xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: xlogreader.c:931 +#: xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: xlogreader.c:1276 +#: xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: xlogreader.c:1298 +#: xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: xlogreader.c:1305 +#: xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: xlogreader.c:1341 +#: xlogreader.c:1349 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: xlogreader.c:1357 +#: xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: xlogreader.c:1372 +#: xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1387 +#: xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1403 +#: xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: xlogreader.c:1415 +#: xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: xlogreader.c:1502 +#: xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: xlogreader.c:1591 +#: xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" diff --git a/src/bin/pg_rewind/po/ru.po b/src/bin/pg_rewind/po/ru.po index 617aa68cd5a..f0c559cc00e 100644 --- a/src/bin/pg_rewind/po/ru.po +++ b/src/bin/pg_rewind/po/ru.po @@ -1,13 +1,13 @@ # Russian message translation file for pg_rewind # Copyright (C) 2015-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2015-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2015-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_rewind (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-08 07:45+0200\n" -"PO-Revision-Date: 2024-09-07 13:07+0300\n" +"POT-Creation-Date: 2026-02-21 05:20+0200\n" +"PO-Revision-Date: 2026-02-07 09:14+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -98,7 +98,7 @@ msgstr "неподходящий размер файла \"%s\": %lld вмест msgid "could not open file \"%s\" restored from archive: %m" msgstr "не удалось открыть файл \"%s\", восстановленный из архива: %m" -#: ../../fe_utils/archive.c:97 file_ops.c:417 +#: ../../fe_utils/archive.c:97 file_ops.c:330 file_ops.c:417 #, c-format msgid "could not stat file \"%s\": %m" msgstr "не удалось получить информацию о файле \"%s\": %m" @@ -201,7 +201,7 @@ msgstr "не удалось создать символическую ссылк msgid "could not remove symbolic link \"%s\": %m" msgstr "ошибка при удалении символической ссылки \"%s\": %m" -#: file_ops.c:326 file_ops.c:330 +#: file_ops.c:326 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "не удалось открыть файл \"%s\" для чтения: %m" @@ -785,7 +785,7 @@ msgstr "неверная контрольная сумма управляюще #: pg_rewind.c:996 #, c-format msgid "unexpected control file size %d, expected %d" -msgstr "неверный размер управляющего файла (%d), ожидалось: %d" +msgstr "неверный размер управляющего файла (%d), ожидался: %d" #: pg_rewind.c:1005 #, c-format @@ -896,49 +896,49 @@ msgstr "неверное смещение записи в позиции %X/%X" msgid "contrecord is requested by %X/%X" msgstr "в позиции %X/%X запрошено продолжение записи" -#: xlogreader.c:372 xlogreader.c:720 +#: xlogreader.c:372 xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "неверная длина записи в позиции %X/%X: ожидалось %u, получено %u" -#: xlogreader.c:442 +#: xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: xlogreader.c:455 +#: xlogreader.c:456 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X" -#: xlogreader.c:728 +#: xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X" -#: xlogreader.c:741 xlogreader.c:757 +#: xlogreader.c:749 xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X" -#: xlogreader.c:795 +#: xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции " "%X/%X" -#: xlogreader.c:832 +#: xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" -#: xlogreader.c:846 xlogreader.c:887 +#: xlogreader.c:854 xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" -#: xlogreader.c:861 +#: xlogreader.c:869 #, c-format msgid "" "WAL file is from different database system: WAL file database system " @@ -947,7 +947,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД " "%llu, а идентификатор системы pg_control: %llu" -#: xlogreader.c:869 +#: xlogreader.c:877 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -956,7 +956,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный размер сегмента в заголовке " "страницы" -#: xlogreader.c:875 +#: xlogreader.c:883 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -965,35 +965,35 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы" -#: xlogreader.c:906 +#: xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" -#: xlogreader.c:931 +#: xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте " "журнала %s, смещение %u" -#: xlogreader.c:1276 +#: xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" -#: xlogreader.c:1298 +#: xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" -#: xlogreader.c:1305 +#: xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "" "BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X" -#: xlogreader.c:1341 +#: xlogreader.c:1349 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -1002,21 +1002,21 @@ msgstr "" "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u " "при длине образа блока %u в позиции %X/%X" -#: xlogreader.c:1357 +#: xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина " "%u в позиции %X/%X" -#: xlogreader.c:1372 +#: xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_IS_COMPRESSED установлен, но длина образа блока равна %u в позиции " "%X/%X" -#: xlogreader.c:1387 +#: xlogreader.c:1395 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image " @@ -1025,28 +1025,32 @@ msgstr "" "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_IS_COMPRESSED не установлены, но длина " "образа блока равна %u в позиции %X/%X" -#: xlogreader.c:1403 +#: xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "" "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" "%X" -#: xlogreader.c:1415 +#: xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "неверный идентификатор блока %u в позиции %X/%X" -#: xlogreader.c:1502 +#: xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "запись с неверной длиной в позиции %X/%X" -#: xlogreader.c:1591 +#: xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "неверный сжатый образ в позиции %X/%X, блок %d" +#, c-format +#~ msgid "could not stat file \"%s\" for reading: %m" +#~ msgstr "не удалось получить информацию о файле \"%s\" для чтения: %m" + #, c-format #~ msgid "record length %u at %X/%X too long" #~ msgstr "длина записи %u в позиции %X/%X слишком велика" diff --git a/src/bin/pg_rewind/po/sv.po b/src/bin/pg_rewind/po/sv.po index 529ec2c398b..7ab29a3d277 100644 --- a/src/bin/pg_rewind/po/sv.po +++ b/src/bin/pg_rewind/po/sv.po @@ -1,14 +1,14 @@ # Swedish message translation file for pg_rewind # 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, 2025, 2026. # msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-04-06 21:19+0000\n" -"PO-Revision-Date: 2022-04-11 14:02+0200\n" +"POT-Creation-Date: 2026-02-06 21:34+0000\n" +"PO-Revision-Date: 2026-02-07 09:31+0100\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -116,12 +116,12 @@ msgstr "kunde inte återställa fil \"%s\" från arkiv" #: ../../fe_utils/recovery_gen.c:35 ../../fe_utils/recovery_gen.c:49 #: ../../fe_utils/recovery_gen.c:77 ../../fe_utils/recovery_gen.c:100 #: ../../fe_utils/recovery_gen.c:171 parsexlog.c:77 parsexlog.c:137 -#: parsexlog.c:197 +#: parsexlog.c:199 #, c-format msgid "out of memory" msgstr "slut på minne" -#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:310 +#: ../../fe_utils/recovery_gen.c:134 parsexlog.c:331 #, c-format msgid "could not open file \"%s\": %m" msgstr "kunde inte öppna fil \"%s\": %m" @@ -134,7 +134,7 @@ msgstr "kunde inte skriva till fil \"%s\": %m" #: ../../fe_utils/recovery_gen.c:152 #, c-format msgid "could not create file \"%s\": %m" -msgstr "kan inte skapa fil \"%s\": %m" +msgstr "kunde inte skapa fil \"%s\": %m" #: file_ops.c:67 #, c-format @@ -201,17 +201,22 @@ msgstr "kunde inte skapa en symnbolisk länk vid \"%s\": %m" msgid "could not remove symbolic link \"%s\": %m" msgstr "kan inte ta bort symbolisk länk \"%s\": %m" -#: file_ops.c:326 file_ops.c:330 +#: file_ops.c:326 #, c-format msgid "could not open file \"%s\" for reading: %m" msgstr "kunde inte öppna filen \"%s\" för läsning: %m" -#: file_ops.c:341 local_source.c:107 parsexlog.c:348 +#: file_ops.c:330 +#, c-format +msgid "could not stat file \"%s\" for reading: %m" +msgstr "kunde inte göra stat() på filen \"%s\" för läsning: %m" + +#: file_ops.c:341 local_source.c:107 parsexlog.c:369 #, c-format msgid "could not read file \"%s\": %m" msgstr "kunde inte läsa fil \"%s\": %m" -#: file_ops.c:344 parsexlog.c:350 +#: file_ops.c:344 parsexlog.c:371 #, c-format msgid "could not read file \"%s\": read %d of %zu" msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" @@ -221,57 +226,57 @@ msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" msgid "could not open directory \"%s\": %m" msgstr "kunde inte öppna katalog \"%s\": %m" -#: file_ops.c:446 +#: file_ops.c:442 #, c-format msgid "could not read symbolic link \"%s\": %m" msgstr "kan inte läsa symbolisk länk \"%s\": %m" -#: file_ops.c:449 +#: file_ops.c:445 #, c-format msgid "symbolic link \"%s\" target is too long" msgstr "mål för symbolisk länk \"%s\" är för lång" -#: file_ops.c:464 +#: file_ops.c:460 #, c-format msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform" msgstr "\"%s\" är en symbolisk länk men symboliska länkar stöds inte på denna plattform" -#: file_ops.c:471 +#: file_ops.c:467 #, c-format msgid "could not read directory \"%s\": %m" msgstr "kunde inte läsa katalog \"%s\": %m" -#: file_ops.c:475 +#: file_ops.c:471 #, c-format msgid "could not close directory \"%s\": %m" msgstr "kunde inte stänga katalog \"%s\": %m" -#: filemap.c:237 +#: filemap.c:299 #, c-format msgid "data file \"%s\" in source is not a regular file" msgstr "datafil \"%s\" i källan är inte en vanlig fil" -#: filemap.c:242 filemap.c:275 +#: filemap.c:304 filemap.c:337 #, c-format msgid "duplicate source file \"%s\"" msgstr "duplicerad källflagga \"%s\"" -#: filemap.c:330 +#: filemap.c:392 #, c-format msgid "unexpected page modification for non-regular file \"%s\"" msgstr "oväntad sidmodifiering för icke-regulär fil \"%s\"" -#: filemap.c:680 filemap.c:774 +#: filemap.c:742 filemap.c:844 #, c-format msgid "unknown file type for \"%s\"" msgstr "okänd filtyp på \"%s\"" -#: filemap.c:707 +#: filemap.c:777 #, c-format msgid "file \"%s\" is of different type in source and target" msgstr "filen \"%s\" har olika typ i källa och mål" -#: filemap.c:779 +#: filemap.c:849 #, c-format msgid "could not decide what to do with file \"%s\"" msgstr "kunde inte bestämma vad som skulle göras med filen \"%s\"" @@ -431,22 +436,22 @@ msgstr "kunde inte läsa WAL-post vid %X/%X" msgid "end pointer %X/%X is not a valid end point; expected %X/%X" msgstr "slutpekare %X/%X är inte en giltig slutposition; förväntade %X/%X" -#: parsexlog.c:210 +#: parsexlog.c:212 #, c-format msgid "could not find previous WAL record at %X/%X: %s" msgstr "kunde inte hitta föregående WAL-post vid %X/%X: %s" -#: parsexlog.c:214 +#: parsexlog.c:216 #, c-format msgid "could not find previous WAL record at %X/%X" msgstr "kunde inte hitta förgående WAL-post vid %X/%X" -#: parsexlog.c:339 +#: parsexlog.c:360 #, c-format msgid "could not seek in file \"%s\": %m" msgstr "kunde inte söka (seek) i fil \"%s\": %m" -#: parsexlog.c:431 +#: parsexlog.c:452 #, c-format msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X" msgstr "WAL-post modifierar en relation, men posttypen känns inte igen: lsn: %X/%X, rmgr: %s, info: %02X" @@ -525,9 +530,8 @@ msgid "" " -R, --write-recovery-conf write configuration for replication\n" " (requires --source-server)\n" msgstr "" -" -R, --write-recovery-conf\n" -" skriv konfiguration för replikering\n" -" (kräver --source-server)\n" +" -R, --write-recovery-conf skriv konfiguration för replikering\n" +" (kräver --source-server)\n" #: pg_rewind.c:98 #, c-format @@ -634,124 +638,124 @@ msgstr "servrarna divergerade vid WAL-position %X/%X på tidslinje %u" msgid "no rewind required" msgstr "ingen rewind krävs" -#: pg_rewind.c:403 +#: pg_rewind.c:406 #, c-format msgid "rewinding from last common checkpoint at %X/%X on timeline %u" msgstr "rewind från senaste gemensamma checkpoint vid %X/%X på tidslinje %u" -#: pg_rewind.c:413 +#: pg_rewind.c:416 #, c-format msgid "reading source file list" msgstr "läser källfillista" -#: pg_rewind.c:417 +#: pg_rewind.c:420 #, c-format msgid "reading target file list" msgstr "läser målfillista" -#: pg_rewind.c:426 +#: pg_rewind.c:429 #, c-format msgid "reading WAL in target" msgstr "läser WAL i målet" -#: pg_rewind.c:447 +#: pg_rewind.c:450 #, c-format msgid "need to copy %lu MB (total source directory size is %lu MB)" msgstr "behöver kopiera %lu MB (total källkatalogstorlek är %lu MB)" -#: pg_rewind.c:465 +#: pg_rewind.c:468 #, c-format msgid "syncing target data directory" msgstr "synkar måldatakatalog" -#: pg_rewind.c:481 +#: pg_rewind.c:484 #, c-format msgid "Done!" msgstr "Klar!" -#: pg_rewind.c:564 +#: pg_rewind.c:567 #, c-format msgid "no action decided for file \"%s\"" msgstr "ingen åtgärd beslutades för filen \"%s\"" -#: pg_rewind.c:596 +#: pg_rewind.c:599 #, c-format msgid "source system was modified while pg_rewind was running" msgstr "källsystemet ändrades samtidigt som pg_rewind kördes" -#: pg_rewind.c:600 +#: pg_rewind.c:603 #, c-format msgid "creating backup label and updating control file" msgstr "skapar backupetikett och uppdaterar kontrollfil" -#: pg_rewind.c:650 +#: pg_rewind.c:653 #, c-format msgid "source system was in unexpected state at end of rewind" msgstr "källsystemet var i ett oväntat tillstånd vid slutet av återspolningen" -#: pg_rewind.c:681 +#: pg_rewind.c:684 #, c-format msgid "source and target clusters are from different systems" msgstr "källa och målkluster är från olika system" -#: pg_rewind.c:689 +#: pg_rewind.c:692 #, c-format msgid "clusters are not compatible with this version of pg_rewind" msgstr "klustren är inte kompatibla med denna version av pg_rewind" -#: pg_rewind.c:699 +#: pg_rewind.c:702 #, c-format msgid "target server needs to use either data checksums or \"wal_log_hints = on\"" msgstr "målservern behöver använda antingen datachecksums eller \"wal_log_hints = on\"" -#: pg_rewind.c:710 +#: pg_rewind.c:713 #, c-format msgid "target server must be shut down cleanly" msgstr "målserver måste stängas ner utan fel" -#: pg_rewind.c:720 +#: pg_rewind.c:723 #, c-format msgid "source data directory must be shut down cleanly" msgstr "måldatakatalog måste stängas ner utan fel" -#: pg_rewind.c:772 +#: pg_rewind.c:775 #, c-format msgid "%*s/%s kB (%d%%) copied" msgstr "%*s/%s kB (%d%%) kopierad" -#: pg_rewind.c:835 +#: pg_rewind.c:838 #, c-format msgid "invalid control file" msgstr "ogiltig kontrollfil" -#: pg_rewind.c:919 +#: pg_rewind.c:920 #, c-format msgid "could not find common ancestor of the source and target cluster's timelines" msgstr "kunde inte finna en gemensam anfader av källa och målklusterets tidslinjer" -#: pg_rewind.c:960 +#: pg_rewind.c:961 #, c-format msgid "backup label buffer too small" msgstr "backupetikett-buffer för liten" -#: pg_rewind.c:983 +#: pg_rewind.c:984 #, c-format msgid "unexpected control file CRC" msgstr "oväntad kontrollfil-CRC" -#: pg_rewind.c:995 +#: pg_rewind.c:996 #, c-format msgid "unexpected control file size %d, expected %d" msgstr "oväntad kontrollfilstorlek %d, förväntade %d" -#: pg_rewind.c:1004 +#: pg_rewind.c:1005 #, c-format msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d byte" msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the control file specifies %d bytes" msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men kontrollfilen anger %d byte" -#: pg_rewind.c:1043 pg_rewind.c:1101 +#: pg_rewind.c:1044 pg_rewind.c:1102 #, c-format msgid "" "The program \"%s\" is needed by %s but was not found in the\n" @@ -762,7 +766,7 @@ msgstr "" "katalog som \"%s\".\n" "Kontrollera din installation." -#: pg_rewind.c:1048 pg_rewind.c:1106 +#: pg_rewind.c:1049 pg_rewind.c:1107 #, c-format msgid "" "The program \"%s\" was found by \"%s\"\n" @@ -773,22 +777,22 @@ msgstr "" "men är inte av samma version som %s.\n" "Kontrollera din installation." -#: pg_rewind.c:1069 +#: pg_rewind.c:1070 #, c-format msgid "restore_command is not set in the target cluster" msgstr "restore_command är inte satt i målklustret" -#: pg_rewind.c:1112 +#: pg_rewind.c:1113 #, c-format msgid "executing \"%s\" for target server to complete crash recovery" msgstr "kör \"%s\" för målservern för att slutföra krashåterställning" -#: pg_rewind.c:1132 +#: pg_rewind.c:1133 #, c-format msgid "postgres single-user mode in target cluster failed" msgstr "postgres enanvändarläge misslyckades i målklustret" -#: pg_rewind.c:1133 +#: pg_rewind.c:1134 #, c-format msgid "Command was: %s" msgstr "Kommandot var: %s" @@ -828,137 +832,132 @@ msgstr "ogiltig data i historikfil" msgid "Timeline IDs must be less than child timeline's ID." msgstr "Tidslinje-ID:er måste vara mindre än barnens tidslinje-ID:er." -#: xlogreader.c:354 +#: xlogreader.c:323 #, c-format msgid "invalid record offset at %X/%X" msgstr "ogiltig postoffset vid %X/%X" -#: xlogreader.c:362 +#: xlogreader.c:331 #, c-format msgid "contrecord is requested by %X/%X" msgstr "contrecord är begärd vid %X/%X" -#: xlogreader.c:403 xlogreader.c:733 +#: xlogreader.c:372 xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "ogiltig postlängd vid %X/%X: förväntade %u, fick %u" -#: xlogreader.c:429 -#, c-format -msgid "record length %u at %X/%X too long" -msgstr "postlängd %u vid %X/%X är för lång" - -#: xlogreader.c:477 +#: xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "det finns ingen contrecord-flagga vid %X/%X" -#: xlogreader.c:490 +#: xlogreader.c:456 #, 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" -#: xlogreader.c:741 +#: xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ogiltigt resurshanterar-ID %u vid %X/%X" -#: xlogreader.c:754 xlogreader.c:770 +#: xlogreader.c:749 xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "post med inkorrekt prev-link %X/%X vid %X/%X" -#: xlogreader.c:806 +#: xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X" -#: xlogreader.c:843 +#: xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "felaktigt magiskt nummer %04X i loggsegment %s, offset %u" -#: xlogreader.c:857 xlogreader.c:898 +#: xlogreader.c:854 xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "ogiltiga infobitar %04X i loggsegment %s, offset %u" -#: xlogreader.c:872 +#: xlogreader.c:869 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "WAL-fil är från ett annat databassystem: WAL-filens databassystemidentifierare är %llu, pg_control databassystemidentifierare är %llu" -#: xlogreader.c:880 +#: xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt segmentstorlek i sidhuvud" -#: xlogreader.c:886 +#: xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhuvud" -#: xlogreader.c:917 +#: xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "oväntad sidadress %X/%X i loggsegment %s, offset %u" -#: xlogreader.c:942 +#: xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i loggsegment %s, offset %u" -#: xlogreader.c:1287 +#: xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "ej-i-sekvens block_id %u vid %X/%X" -#: xlogreader.c:1309 +#: xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" -msgstr "BKPBLOCK_HAS_DATA satt, men ingen data inkluderad vid %X/%X" +msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%X" -#: xlogreader.c:1316 +#: xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" -msgstr "BKPBLOCK_HAS_DATA ej satt, men datalängd är %u vid %X/%X" +msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%X" -#: xlogreader.c:1352 +#: xlogreader.c:1349 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" -msgstr "BKPIMAGE_HAS_HOLE satt, men håloffset %u längd %u block-image-längd %u vid %X/%X" +msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%X" -#: xlogreader.c:1368 +#: xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" -msgstr "BKPIMAGE_HAS_HOLE ej satt, men håloffset %u längd %u vid %X/%X" +msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%X" -#: xlogreader.c:1383 +#: xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED satt, men block-image-längd %u vid %X/%X" -#: xlogreader.c:1398 +#: xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_IS_COMPRESSED satt, men block-image-längd är %u vid %X/%X" -#: xlogreader.c:1414 +#: xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" -msgstr "BKPBLOCK_SAME_REL satt men ingen tidigare rel vid %X/%X" +msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%X" -#: xlogreader.c:1426 +#: xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "ogiltig block_id %u vid %X/%X" -#: xlogreader.c:1513 +#: xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "post med ogiltig längd vid %X/%X" -#: xlogreader.c:1602 +#: xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "ogiltig komprimerad image vid %X/%X, block %d" diff --git a/src/bin/pg_test_fsync/po/es.po b/src/bin/pg_test_fsync/po/es.po index 0537b3e5be7..93e442c1cc4 100644 --- a/src/bin/pg_test_fsync/po/es.po +++ b/src/bin/pg_test_fsync/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:39+0000\n" +"POT-Creation-Date: 2026-02-06 21:34+0000\n" "PO-Revision-Date: 2021-05-21 23:25-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_test_fsync/po/pl.po b/src/bin/pg_test_fsync/po/pl.po index 1554043d154..687f436e079 100644 --- a/src/bin/pg_test_fsync/po/pl.po +++ b/src/bin/pg_test_fsync/po/pl.po @@ -1,189 +1,162 @@ -# LANGUAGE message translation file for pg_test_fsync -# Copyright (C) 2017 PostgreSQL Global Development Group -# This file is distributed under the same license as the PostgreSQL package. -# grzegorz , 2017. msgid "" msgstr "" -"Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2017-03-14 17:46+0000\n" -"PO-Revision-Date: 2017-03-14 19:29+0200\n" -"Last-Translator: grzegorz \n" -"Language-Team: begina.felicysym@wp.eu\n" -"Language: pl\n" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-03-27 18:56+0000\n" +"PO-Revision-Date: 2026-01-03 13:40\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"Language: pl_PL\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Virtaal 0.7.1\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /REL_14_STABLE/pg_test_fsync.pot\n" +"X-Crowdin-File-ID: 750\n" -#: pg_test_fsync.c:47 +#. translator: maintain alignment with NA_FORMAT +#: pg_test_fsync.c:31 #, c-format -msgid "Cannot create thread for alarm\n" -msgstr "Nie da się utworzyć wątku dla alarmu\n" +msgid "%13.3f ops/sec %6.0f usecs/op\n" +msgstr "" -#: pg_test_fsync.c:152 +#: pg_test_fsync.c:159 #, c-format msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n" msgstr "Składnia: %s [-f NAZWAPLIKU] [-s SEK-NA-TEST]\n" -#: pg_test_fsync.c:176 pg_test_fsync.c:188 +#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211 #, c-format msgid "Try \"%s --help\" for more information.\n" msgstr "Użyj \"%s --help\" aby uzyskać więcej informacji.\n" -#: pg_test_fsync.c:186 -#, c-format -msgid "%s: too many command-line arguments (first is \"%s\")\n" -msgstr "%s: za duża ilość parametrów (pierwszy to \"%s\")\n" - -#: pg_test_fsync.c:193 +#: pg_test_fsync.c:216 #, c-format -msgid "%d seconds per test\n" -msgstr "%d sekund na test\n" +msgid "%u second per test\n" +msgid_plural "%u seconds per test\n" +msgstr[0] "%u s na test\n" +msgstr[1] "%u s na test\n" +msgstr[2] "%u s na test\n" +msgstr[3] "%u s na test\n" -#: pg_test_fsync.c:195 +#: pg_test_fsync.c:221 #, c-format msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n" msgstr "O_DIRECT wspierane na tej platformie dla open_datasync i open_sync.\n" -#: pg_test_fsync.c:197 +#: pg_test_fsync.c:223 #, c-format msgid "Direct I/O is not supported on this platform.\n" msgstr "Bezpośrednie We/Wy nie jest wspierane na tej platformie.\n" -#: pg_test_fsync.c:222 pg_test_fsync.c:286 pg_test_fsync.c:310 -#: pg_test_fsync.c:333 pg_test_fsync.c:474 pg_test_fsync.c:486 -#: pg_test_fsync.c:502 pg_test_fsync.c:508 pg_test_fsync.c:533 +#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339 +#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519 +#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563 msgid "could not open output file" msgstr "nie można otworzyć pliku wyjścia" -#: pg_test_fsync.c:225 pg_test_fsync.c:267 pg_test_fsync.c:292 -#: pg_test_fsync.c:316 pg_test_fsync.c:339 pg_test_fsync.c:377 -#: pg_test_fsync.c:435 pg_test_fsync.c:476 pg_test_fsync.c:504 -#: pg_test_fsync.c:535 +#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323 +#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411 +#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537 +#: pg_test_fsync.c:568 msgid "write failed" msgstr "niepowodzenie zapisu" -#: pg_test_fsync.c:229 pg_test_fsync.c:318 pg_test_fsync.c:341 -#: pg_test_fsync.c:478 pg_test_fsync.c:510 +#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374 +#: pg_test_fsync.c:511 pg_test_fsync.c:543 msgid "fsync failed" msgstr "niepowodzenie fsync" -#: pg_test_fsync.c:243 +#: pg_test_fsync.c:270 #, c-format -msgid "" -"\n" +msgid "\n" "Compare file sync methods using one %dkB write:\n" -msgstr "" -"\n" +msgstr "\n" "Porównanie metod sync plików używając jednego zapisu %dkB:\n" -#: pg_test_fsync.c:245 +#: pg_test_fsync.c:272 #, c-format -msgid "" -"\n" +msgid "\n" "Compare file sync methods using two %dkB writes:\n" -msgstr "" -"\n" +msgstr "\n" "Porównanie metod sync plików używając dwóch zapisów %dkB:\n" -#: pg_test_fsync.c:246 +#: pg_test_fsync.c:273 #, c-format msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n" -msgstr "(w porząsku preferencji wal_sync_method, poza fdatasync domyślną na " -"Linuksie)\n" - -#: pg_test_fsync.c:257 pg_test_fsync.c:360 pg_test_fsync.c:426 -msgid "n/a*\n" -msgstr "nd.*\n" +msgstr "(w porząsku preferencji wal_sync_method, poza fdatasync domyślną na Linuksie)\n" -#: pg_test_fsync.c:269 pg_test_fsync.c:295 pg_test_fsync.c:320 -#: pg_test_fsync.c:343 pg_test_fsync.c:379 pg_test_fsync.c:437 -msgid "seek failed" -msgstr "niepowodzenie pozycjonowania" +#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458 +msgid "n/a*" +msgstr "" -#: pg_test_fsync.c:275 pg_test_fsync.c:300 pg_test_fsync.c:348 -#: pg_test_fsync.c:385 pg_test_fsync.c:443 -msgid "n/a\n" -msgstr "nd.\n" +#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379 +#: pg_test_fsync.c:417 pg_test_fsync.c:476 +msgid "n/a" +msgstr "" -#: pg_test_fsync.c:390 +#: pg_test_fsync.c:422 #, c-format -msgid "" -"* This file system and its mount options do not support direct\n" +msgid "* This file system and its mount options do not support direct\n" " I/O, e.g. ext4 in journaled mode.\n" -msgstr "" -"* Ten system plików i jego opcje systemowe mount nie obsługują\n" +msgstr "* Ten system plików i jego opcje systemowe mount nie obsługują\n" " bezpośredniego We/Wy, np. ext4 trybie dziennikowym.\n" -#: pg_test_fsync.c:398 +#: pg_test_fsync.c:430 #, c-format -msgid "" -"\n" +msgid "\n" "Compare open_sync with different write sizes:\n" -msgstr "" -"\n" +msgstr "\n" "Porównanie open_sync z różnymi długościami zapisu:\n" -#: pg_test_fsync.c:399 +#: pg_test_fsync.c:431 #, c-format -msgid "" -"(This is designed to compare the cost of writing 16kB in different write\n" +msgid "(This is designed to compare the cost of writing 16kB in different write\n" "open_sync sizes.)\n" -msgstr "" -"(Zaprojektowano to dla porównanie kosztów zapisu 16kB w różnych \n" +msgstr "(Zaprojektowano to dla porównanie kosztów zapisu 16kB w różnych \n" "długościach zapisu open_sync.)\n" -#: pg_test_fsync.c:402 +#: pg_test_fsync.c:434 msgid " 1 * 16kB open_sync write" msgstr " 1 * 16kB zapis open_sync" -#: pg_test_fsync.c:403 +#: pg_test_fsync.c:435 msgid " 2 * 8kB open_sync writes" msgstr " 2 * 8kB zapis open_sync" -#: pg_test_fsync.c:404 +#: pg_test_fsync.c:436 msgid " 4 * 4kB open_sync writes" msgstr " 4 * 4kB zapis open_sync" -#: pg_test_fsync.c:405 +#: pg_test_fsync.c:437 msgid " 8 * 2kB open_sync writes" msgstr " 8 * 2kB zapis open_sync" -#: pg_test_fsync.c:406 +#: pg_test_fsync.c:438 msgid "16 * 1kB open_sync writes" msgstr "16 * 1kB zapis open_sync" -#: pg_test_fsync.c:459 +#: pg_test_fsync.c:492 #, c-format -msgid "" -"\n" +msgid "\n" "Test if fsync on non-write file descriptor is honored:\n" -msgstr "" -"\n" +msgstr "\n" "Test czy jest honorowany fsync na niezapisywalnym deskryptorze pliku:\n" -#: pg_test_fsync.c:460 +#: pg_test_fsync.c:493 #, c-format -msgid "" -"(If the times are similar, fsync() can sync data written on a different\n" +msgid "(If the times are similar, fsync() can sync data written on a different\n" "descriptor.)\n" -msgstr "" -"(Jeśli czasy są podobne, fsync() może sync dane zapisane na innym\n" +msgstr "(Jeśli czasy są podobne, fsync() może sync dane zapisane na innym\n" "deskryptorze.)\n" -#: pg_test_fsync.c:525 +#: pg_test_fsync.c:558 #, c-format -msgid "" -"\n" +msgid "\n" "Non-sync'ed %dkB writes:\n" -msgstr "" -"\n" +msgstr "\n" "Nie-syncowane zapisy %dkB:\n" -#: pg_test_fsync.c:602 -#, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" diff --git a/src/bin/pg_test_timing/po/es.po b/src/bin/pg_test_timing/po/es.po index a0531add78c..a7d0a8a19c6 100644 --- a/src/bin/pg_test_timing/po/es.po +++ b/src/bin/pg_test_timing/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_test_timing (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:36+0000\n" +"POT-Creation-Date: 2026-02-06 21:32+0000\n" "PO-Revision-Date: 2024-11-09 09:57+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index 26dae5681a7..2ecf84ff6fb 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -25,6 +25,7 @@ static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster); static void check_for_user_defined_postfix_ops(ClusterInfo *cluster); static void check_for_incompatible_polymorphics(ClusterInfo *cluster); static void check_for_tables_with_oids(ClusterInfo *cluster); +static void check_for_not_null_inheritance(ClusterInfo *cluster); static void check_for_composite_data_type_usage(ClusterInfo *cluster); static void check_for_reg_data_type_usage(ClusterInfo *cluster); static void check_for_removed_data_type_usage(ClusterInfo *cluster, @@ -149,6 +150,13 @@ check_and_dump_old_cluster(bool live_check) if (GET_MAJOR_VERSION(old_cluster.major_version) <= 1100) check_for_tables_with_oids(&old_cluster); + /* + * Pre-PG 18 allowed child tables to omit not-null constraints that their + * parents columns have, but schema restore fails for them. Verify there + * are none. + */ + check_for_not_null_inheritance(&old_cluster); + /* * PG 12 changed the 'sql_identifier' type storage to be based on name, * not varchar, which breaks on-disk format for existing data. So we need @@ -1201,6 +1209,84 @@ check_for_tables_with_oids(ClusterInfo *cluster) check_ok(); } +/* + * check_for_not_null_inheritance() + * + * An attempt to create child tables lacking not-null constraints that are + * present in their parents errors out. This can no longer occur since 18, + * but previously there were various ways for that to happen. Check that + * the cluster to be upgraded doesn't have any of those problems. + */ +static void +check_for_not_null_inheritance(ClusterInfo *cluster) +{ + FILE *script = NULL; + char output_path[MAXPGPATH]; + int ntup; + + prep_status("Checking for not-null constraint inconsistencies"); + + snprintf(output_path, sizeof(output_path), + "not_null_inconsistent_columns.txt"); + for (int dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) + { + PGresult *res; + bool db_used = false; + int i_nspname, + i_relname, + i_attname; + DbInfo *active_db = &old_cluster.dbarr.dbs[dbnum]; + PGconn *conn = connectToServer(&old_cluster, active_db->db_name); + + res = executeQueryOrDie(conn, + "SELECT nspname, cc.relname, ac.attname " + "FROM pg_catalog.pg_inherits i, pg_catalog.pg_attribute ac, " + " pg_catalog.pg_attribute ap, pg_catalog.pg_class cc, " + " pg_catalog.pg_namespace nc " + "WHERE cc.oid = ac.attrelid AND i.inhrelid = ac.attrelid " + " AND i.inhparent = ap.attrelid AND ac.attname = ap.attname " + " AND cc.relnamespace = nc.oid " + " AND ap.attnum > 0 and ap.attnotnull AND NOT ac.attnotnull"); + + ntup = PQntuples(res); + i_nspname = PQfnumber(res, "nspname"); + i_relname = PQfnumber(res, "relname"); + i_attname = PQfnumber(res, "attname"); + for (int i = 0; i < ntup; i++) + { + if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL) + pg_fatal("could not open file \"%s\": %s\n", output_path, strerror(errno)); + if (!db_used) + { + fprintf(script, "In database: %s\n", active_db->db_name); + db_used = true; + } + + fprintf(script, " %s.%s.%s\n", + PQgetvalue(res, i, i_nspname), + PQgetvalue(res, i, i_relname), + PQgetvalue(res, i, i_attname)); + } + + PQclear(res); + PQfinish(conn); + } + + if (script) + { + fclose(script); + pg_log(PG_REPORT, "fatal\n"); + pg_fatal("Your installation contains inconsistent NOT NULL constraints.\n" + "If the parent column(s) are NOT NULL, then the child column must\n" + "also be marked NOT NULL, or the upgrade will fail.\n" + "You can fix this by running\n" + " ALTER TABLE tablename ALTER column SET NOT NULL;\n" + "on each column listed in the file:\n" + " %s\n\n", output_path); + } + else + check_ok(); +} /* * check_for_composite_data_type_usage() diff --git a/src/bin/pg_upgrade/oracle_test.sh b/src/bin/pg_upgrade/oracle_test.sh index 22093373603..4359ff2a52b 100644 --- a/src/bin/pg_upgrade/oracle_test.sh +++ b/src/bin/pg_upgrade/oracle_test.sh @@ -212,6 +212,7 @@ if "$MAKE" -C "$oldsrc" oracle-installcheck-parallel; then fi pg_dumpall $extra_dump_options --no-sync \ + --restrict-key=test \ -f "$temp_root"/dump1.sql || pg_dumpall1_status=$? if [ "$newsrc" != "$oldsrc" ]; then @@ -275,6 +276,7 @@ esac pg_ctl start -l "$logdir/postmaster2.log" -o "$POSTMASTER_OPTS -p $PGPORT -o $ORAPORT" -w pg_dumpall $extra_dump_options --no-sync \ + --restrict-key=test \ -f "$temp_root"/dump2.sql || pg_dumpall2_status=$? pg_ctl -m fast stop diff --git a/src/bin/pg_upgrade/po/de.po b/src/bin/pg_upgrade/po/de.po index 3a9be2673ef..6fdbe38c361 100644 --- a/src/bin/pg_upgrade/po/de.po +++ b/src/bin/pg_upgrade/po/de.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-08-01 12:49+0000\n" +"POT-Creation-Date: 2025-08-08 08:06+0000\n" "PO-Revision-Date: 2024-08-02 11:21+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -24,7 +24,7 @@ msgstr "" "Führe Konsistenzprüfungen am alten laufenden Server durch\n" "---------------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "" "Performing Consistency Checks\n" @@ -33,7 +33,7 @@ msgstr "" "Führe Konsistenzprüfungen durch\n" "-------------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "" "\n" @@ -42,7 +42,7 @@ msgstr "" "\n" "*Cluster sind kompatibel*\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "neuen Cluster neu mit initdb initialisieren, bevor fortgesetzt\n" "werden kann.\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -67,7 +67,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -76,7 +76,7 @@ msgstr "" "Mit diesem Skript können die Dateien des alten Clusters gelöscht werden:\n" " %s\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -89,77 +89,77 @@ msgstr "" "Datenverzeichnis des neuen Clusters im alten Cluster-Verzeichnis\n" "liegen. Der Inhalt des alten Clusters muss von Hand gelöscht werden.\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "Prüfe Cluster-Versionen" -#: check.c:325 +#: check.c:333 #, c-format msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" msgstr "Dieses Programm kann nur Upgrades von PostgreSQL Version 9.0 oder später durchführen.\n" -#: check.c:329 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Dieses Programm kann nur Upgrades auf PostgreSQL Version %s durchführen.\n" -#: check.c:338 +#: check.c:346 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Dieses Programm kann keine Downgrades auf ältere Hauptversionen von PostgreSQL durchführen.\n" -#: check.c:343 +#: check.c:351 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des alten Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:346 +#: check.c:354 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Die Daten- und Programmverzeichnisse des neuen Clusters stammen von verschiedenen Hauptversionen.\n" -#: check.c:363 +#: check.c:371 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Wenn ein laufender alter Server vor Version 9.1 geprüft wird, muss die Portnummer des alten Servers angegeben werden.\n" -#: check.c:367 +#: check.c:375 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Wenn ein laufender Server geprüft wird, müssen die alte und die neue Portnummer verschieden sein.\n" -#: check.c:382 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "Kodierungen für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:387 +#: check.c:395 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:390 +#: check.c:398 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype-Werte für Datenbank »%s« stimmen nicht überein: alt »%s«, neu »%s«\n" -#: check.c:463 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Datenbank »%s« im neuen Cluster ist nicht leer: Relation »%s.%s« gefunden\n" -#: check.c:520 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Prüfe Tablespace-Verzeichnisse des neuen Clusters" -#: check.c:531 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "Tablespace-Verzeichnis für neuen Cluster existiert bereits: »%s«\n" -#: check.c:564 +#: check.c:572 #, c-format msgid "" "\n" @@ -168,7 +168,7 @@ msgstr "" "\n" "WARNUNG: das neue Datenverzeichnis sollte nicht im alten Datenverzeichnis liegen, z.B. %s\n" -#: check.c:588 +#: check.c:596 #, c-format msgid "" "\n" @@ -177,86 +177,86 @@ msgstr "" "\n" "WARNUNG: benutzerdefinierte Tablespace-Pfade sollten nicht im Datenverzeichnis liegen, z.B. %s\n" -#: check.c:598 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "Erzeuge Skript zum Löschen des alten Clusters" -#: check.c:601 check.c:865 check.c:963 check.c:1093 check.c:1171 check.c:1467 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht öffnen: %s\n" -#: check.c:657 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "konnte Datei »%s« nicht ausführbar machen: %s\n" -#: check.c:677 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "Prüfe ob der Datenbankbenutzer der Installationsbenutzer ist" -#: check.c:693 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "Datenbankbenutzer »%s« ist nicht der Installationsbenutzer\n" -#: check.c:704 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "konnte die Anzahl der Benutzer nicht ermitteln\n" -#: check.c:712 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Nur der Installationsbenutzer darf im neuen Cluster definiert sein.\n" -#: check.c:732 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "Prüfe Verbindungseinstellungen der Datenbank" -#: check.c:754 +#: check.c:762 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 darf keine Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss falsch sein\n" -#: check.c:764 +#: check.c:772 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Alle Datenbanken außer template0 müssen Verbindungen erlauben, d.h. ihr pg_database.datallowconn muss wahr sein\n" -#: check.c:789 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "Prüfe auf vorbereitete Transaktionen" -#: check.c:798 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Der alte Cluster enthält vorbereitete Transaktionen\n" -#: check.c:800 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Der neue Cluster enthält vorbereitete Transaktionen\n" -#: check.c:826 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Prüfe auf contrib/isn mit unpassender bigint-Übergabe" -#: check.c:887 check.c:988 check.c:1113 check.c:1193 check.c:1250 check.c:1309 -#: check.c:1343 check.c:1372 check.c:1490 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:888 +#: check.c:896 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -278,12 +278,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Prüfe auf benutzerdefinierte Postfix-Operatoren" -#: check.c:989 +#: check.c:997 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -300,12 +300,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1013 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "Prüfe auf inkompatible polymorphische Funktionen" -#: check.c:1114 +#: check.c:1122 #, c-format msgid "" "Your installation contains user-defined objects that refer to internal\n" @@ -328,12 +328,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1139 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Prüfe auf Tabellen mit WITH OIDS" -#: check.c:1194 +#: check.c:1202 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -350,12 +350,39 @@ msgstr "" " %s\n" "\n" -#: check.c:1222 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "Prüfe auf Inkonsistenzen bei Not-Null-Constraints" + +#: check.c:1279 +#, c-format +msgid "" +"Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n" +"\n" +msgstr "" +"Ihre Installation enthält inkonsistente NOT-NULL-Constraints.\n" +"Wenn die Spalte in der Elterntabelle NOT NULL ist, dann muss die\n" +"Spalte in der abgeleiteten Tabelle auch NOT NULL sein, ansonsten wird\n" +"das Upgrade fehlschlagen.\n" +"Sie können dies reparieren, indem Sie\n" +" ALTER TABLE tabellenname ALTER spalte SET NOT NULL;\n" +"für jede Spalte in dieser Datei ausführen:\n" +" %s\n" +"\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "Prüfe auf systemdefinierte zusammengesetzte Typen in Benutzertabellen" -#: check.c:1251 +#: check.c:1337 #, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" @@ -375,12 +402,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1279 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Prüfe auf reg*-Datentypen in Benutzertabellen" -#: check.c:1310 +#: check.c:1396 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -400,12 +427,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1334 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "Prüfe auf entfernten Datentyp »%s« in Benutzertabellen" -#: check.c:1344 +#: check.c:1430 #, c-format msgid "" "Your installation contains the \"%s\" data type in user tables.\n" @@ -424,12 +451,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1366 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Prüfe auf inkompatiblen Datentyp »jsonb«" -#: check.c:1373 +#: check.c:1459 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -448,27 +475,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1395 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Prüfe auf Rollen, die mit »pg_« anfangen" -#: check.c:1405 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Der alte Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1407 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Der neue Cluster enthält Rollen, die mit »pg_« anfangen\n" -#: check.c:1428 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Prüfe auf benutzerdefinierte Kodierungsumwandlungen" -#: check.c:1491 +#: check.c:1577 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -489,17 +516,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1518 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "konnte aktuelle Locale nicht ermitteln\n" -#: check.c:1527 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "konnte System-Locale-Namen für »%s« nicht ermitteln\n" -#: check.c:1533 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "konnte alte Locale »%s« nicht wiederherstellen\n" diff --git a/src/bin/pg_upgrade/po/es.po b/src/bin/pg_upgrade/po/es.po index 99c5d821775..b766d573e42 100644 --- a/src/bin/pg_upgrade/po/es.po +++ b/src/bin/pg_upgrade/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:36+0000\n" +"POT-Creation-Date: 2026-02-06 21:32+0000\n" "PO-Revision-Date: 2024-08-02 19:36-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -20,7 +20,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: BlackCAT 1.1\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -29,7 +29,7 @@ msgstr "" "Verificando Consistencia en Vivo en el Servidor Antiguo\n" "-------------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "" "Performing Consistency Checks\n" @@ -38,7 +38,7 @@ msgstr "" "Verificando Consistencia\n" "------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "" "\n" @@ -47,7 +47,7 @@ msgstr "" "\n" "*Los clústers son compatibles*\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "" "\n" @@ -58,7 +58,7 @@ msgstr "" "Si pg_upgrade falla a partir de este punto, deberá re-ejecutar initdb\n" "en el clúster nuevo antes de continuar.\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -71,7 +71,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -80,7 +80,7 @@ msgstr "" "Ejecutando este script se borrarán los archivos de datos del servidor antiguo:\n" " %s\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -93,81 +93,81 @@ msgstr "" "o el directorio de datos del servidor nuevo. El contenido del servidor\n" "antiguo debe ser borrado manualmente.\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "Verificando las versiones de los clústers" -#: check.c:325 +#: check.c:333 #, c-format msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" msgstr "Este programa sólo puede actualizar desde PostgreSQL versión 9.0 y posterior.\n" -#: check.c:329 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Este programa sólo puede actualizar a PostgreSQL versión %s.\n" -#: check.c:338 +#: check.c:346 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Este programa no puede usarse para volver a versiones anteriores de PostgreSQL.\n" -#: check.c:343 +#: check.c:351 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "" "El directorio de datos antiguo y el directorio de binarios antiguo son de\n" "versiones diferentes.\n" -#: check.c:346 +#: check.c:354 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "" "El directorio de datos nuevo y el directorio de binarios nuevo son de\n" "versiones diferentes.\n" -#: check.c:363 +#: check.c:371 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Al verificar un servidor antiguo anterior a 9.1, debe especificar el port de éste.\n" -#: check.c:367 +#: check.c:375 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Al verificar servidores en caliente, los números de port antiguo y nuevo deben ser diferentes.\n" -#: check.c:382 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "las codificaciones de la base de datos «%s» no coinciden: antigua «%s», nueva «%s»\n" -#: check.c:387 +#: check.c:395 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "valores lc_collate de la base de datos «%s» no coinciden: antigua «%s», nueva «%s»\n" -#: check.c:390 +#: check.c:398 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "valores lc_ctype de la base de datos «%s» no coinciden: antigua «%s», nueva «%s»\n" -#: check.c:463 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "La base de datos «%s» del clúster nuevo no está vacía: se encontró la relación «%s.%s»\n" -#: check.c:520 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Verificando los directorios de tablespaces para el nuevo clúster" -#: check.c:531 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "directorio de tablespace para el nuevo clúster ya existe: «%s»\n" -#: check.c:564 +#: check.c:572 #, c-format msgid "" "\n" @@ -177,7 +177,7 @@ msgstr "" "ADVERTENCIA: el directorio de datos nuevo no debería estar dentro del directorio antiguo,\n" "por ej. %s\n" -#: check.c:588 +#: check.c:596 #, c-format msgid "" "\n" @@ -188,86 +188,86 @@ msgstr "" "no deberían estar dentro del directorio de datos,\n" "por ej. %s\n" -#: check.c:598 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "Creando un script para borrar el clúster antiguo" -#: check.c:601 check.c:865 check.c:963 check.c:1093 check.c:1171 check.c:1467 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "no se pudo abrir el archivo «%s»: %s\n" -#: check.c:657 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "no se pudo agregar permisos de ejecución al archivo «%s»: %s\n" -#: check.c:677 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "Verificando que el usuario de base de datos es el usuario de instalación" -#: check.c:693 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "el usuario de base de datos «%s» no es el usuario de instalación\n" -#: check.c:704 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "no se pudo determinar el número de usuarios\n" -#: check.c:712 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Sólo el usuario de instalación puede estar definido en el nuevo clúster.\n" -#: check.c:732 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "Verificando los parámetros de conexión de bases de datos" -#: check.c:754 +#: check.c:762 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 no debe permitir conexiones, es decir su pg_database.datallowconn debe ser «false»\n" -#: check.c:764 +#: check.c:772 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Todas las bases de datos no-template0 deben permitir conexiones, es decir su pg_database.datallowconn debe ser «true»\n" -#: check.c:789 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "Verificando transacciones preparadas" -#: check.c:798 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "El clúster de origen contiene transacciones preparadas\n" -#: check.c:800 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "El clúster de destino contiene transacciones preparadas\n" -#: check.c:826 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Verificando contrib/isn con discordancia en mecanismo de paso de bigint" -#: check.c:887 check.c:988 check.c:1113 check.c:1193 check.c:1250 check.c:1309 -#: check.c:1343 check.c:1372 check.c:1490 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:888 +#: check.c:896 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -288,12 +288,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Verificando operadores postfix definidos por el usuario" -#: check.c:989 +#: check.c:997 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -310,12 +310,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1013 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "Verificando funciones polimórficas incompatibles" -#: check.c:1114 +#: check.c:1122 #, c-format msgid "" "Your installation contains user-defined objects that refer to internal\n" @@ -336,12 +336,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1139 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Verificando tablas WITH OIDS" -#: check.c:1194 +#: check.c:1202 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -358,12 +358,37 @@ msgstr "" " %s\n" "\n" -#: check.c:1222 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "Verificando inconsistencias en restricciones not-null" + +#: check.c:1279 +#, c-format +msgid "" +"Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n" +"\n" +msgstr "" +"Su instalación contiene restricciones NOT NULL inconsistentes. Si las\n" +"columnas padre son NOT NULL, entonces las columnas hijas deben ser también\n" +"NOT NULL, o la actualización fallará. Puede corregir esto ejecutando\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"en cada columna listada en el archivo:\n" +" %s\n" +"\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "Verificando tipos compuestos definidos por el sistema en tablas de usuario" -#: check.c:1251 +#: check.c:1337 #, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" @@ -382,12 +407,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1279 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Verificando tipos de datos reg* en datos de usuario" -#: check.c:1310 +#: check.c:1396 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -406,12 +431,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1334 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "Verificando tipo de datos «%s» eliminado en tablas de usuario" -#: check.c:1344 +#: check.c:1430 #, c-format msgid "" "Your installation contains the \"%s\" data type in user tables.\n" @@ -430,12 +455,12 @@ msgstr "" "Una lista de las columnas problemáticas está en el archivo:\n" " %s\n" -#: check.c:1366 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Verificando datos de usuario en tipo «jsonb» incompatible" -#: check.c:1373 +#: check.c:1459 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -454,27 +479,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1395 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Verificando roles que empiecen con «pg_»" -#: check.c:1405 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "El clúster de origen contiene roles que empiezan con «pg_»\n" -#: check.c:1407 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "El clúster de destino contiene roles que empiezan con «pg_»\n" -#: check.c:1428 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Verificando conversiones de codificación definidas por el usuario" -#: check.c:1491 +#: check.c:1577 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -493,17 +518,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1518 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "no se pudo obtener el «locale» actual\n" -#: check.c:1527 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "no se pudo obtener el nombre del «locale» para «%s»\n" -#: check.c:1533 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "no se pudo restaurar el locale antiguo «%s»\n" diff --git a/src/bin/pg_upgrade/po/fr.po b/src/bin/pg_upgrade/po/fr.po index d1c2c3d6c64..8d1516d4f92 100644 --- a/src/bin/pg_upgrade/po/fr.po +++ b/src/bin/pg_upgrade/po/fr.po @@ -7,18 +7,18 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-07-20 19:09+0000\n" -"PO-Revision-Date: 2024-09-16 16:36+0200\n" +"POT-Creation-Date: 2025-09-19 19:51+0000\n" +"PO-Revision-Date: 2025-09-20 11:00+0200\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" -"X-Generator: Poedit 3.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.7\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -27,7 +27,7 @@ msgstr "" "Exécution de tests de cohérence sur l'ancien serveur\n" "----------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "" "Performing Consistency Checks\n" @@ -36,7 +36,7 @@ msgstr "" "Exécution de tests de cohérence\n" "-------------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "*Les instances sont compatibles*\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "" "\n" @@ -56,7 +56,7 @@ msgstr "" "Si pg_upgrade échoue après cela, vous devez ré-exécuter initdb\n" "sur la nouvelle instance avant de continuer.\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -69,7 +69,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -79,7 +79,7 @@ msgstr "" "instance :\n" " %s\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -93,77 +93,77 @@ msgstr "" "de l'ancienne instance. Le contenu de l'ancienne instance doit être supprimé\n" "manuellement.\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "Vérification des versions des instances" -#: check.c:325 +#: check.c:333 #, c-format msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" msgstr "Cet outil peut seulement mettre à jour les versions 9.0 et ultérieures de PostgreSQL.\n" -#: check.c:329 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Cet outil peut seulement mettre à jour vers la version %s de PostgreSQL.\n" -#: check.c:338 +#: check.c:346 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Cet outil ne peut pas être utilisé pour mettre à jour vers des versions majeures plus anciennes de PostgreSQL.\n" -#: check.c:343 +#: check.c:351 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de l'ancienne instance et des binaires sont de versions majeures différentes.\n" -#: check.c:346 +#: check.c:354 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Les répertoires des données de la nouvelle instance et des binaires sont de versions majeures différentes.\n" -#: check.c:363 +#: check.c:371 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Lors de la vérification d'un serveur antérieur à la 9.1, vous devez spécifier le numéro de port de l'ancien serveur.\n" -#: check.c:367 +#: check.c:375 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Lors de la vérification d'un serveur en production, l'ancien numéro de port doit être différent du nouveau.\n" -#: check.c:382 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les encodages de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:387 +#: check.c:395 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_collate de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:390 +#: check.c:398 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "les valeurs de lc_ctype de la base de données « %s » ne correspondent pas : ancien « %s », nouveau « %s »\n" -#: check.c:463 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "La nouvelle instance « %s » n'est pas vide : relation « %s.%s » trouvée\n" -#: check.c:520 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Vérification des répertoires de tablespace de la nouvelle instance" -#: check.c:531 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "le répertoire du tablespace de la nouvelle instance existe déjà : « %s »\n" -#: check.c:564 +#: check.c:572 #, c-format msgid "" "\n" @@ -172,7 +172,7 @@ msgstr "" "\n" "AVERTISSEMENT : le nouveau répertoire de données ne doit pas être à l'intérieur de l'ancien répertoire de données, %s\n" -#: check.c:588 +#: check.c:596 #, c-format msgid "" "\n" @@ -181,86 +181,86 @@ msgstr "" "\n" "AVERTISSEMENT : les emplacements de tablespaces utilisateurs ne doivent pas être à l'intérieur du répertoire de données, %s\n" -#: check.c:598 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "Création du script pour supprimer l'ancienne instance" -#: check.c:601 check.c:865 check.c:963 check.c:1093 check.c:1171 check.c:1467 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "n'a pas pu ouvrir le fichier « %s » : %s\n" -#: check.c:657 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "n'a pas pu ajouter les droits d'exécution pour le fichier « %s » : %s\n" -#: check.c:677 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "Vérification que l'utilisateur de la base de données est l'utilisateur d'installation" -#: check.c:693 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "l'utilisateur de la base de données « %s » n'est pas l'utilisateur d'installation\n" -#: check.c:704 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "n'a pas pu déterminer le nombre d'utilisateurs\n" -#: check.c:712 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Seul l'utilisateur d'installation peut être défini dans la nouvelle instance.\n" -#: check.c:732 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "Vérification des paramètres de connexion de la base de données" -#: check.c:754 +#: check.c:762 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 ne doit pas autoriser les connexions, ie pg_database.datallowconn doit valoir false\n" -#: check.c:764 +#: check.c:772 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Toutes les bases de données, autre que template0, doivent autoriser les connexions, ie pg_database.datallowconn doit valoir true\n" -#: check.c:789 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "Vérification des transactions préparées" -#: check.c:798 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "L'instance source contient des transactions préparées\n" -#: check.c:800 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "L'instance cible contient des transactions préparées\n" -#: check.c:826 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Vérification de contrib/isn avec une différence sur le passage des bigint" -#: check.c:887 check.c:988 check.c:1113 check.c:1193 check.c:1250 check.c:1309 -#: check.c:1343 check.c:1372 check.c:1490 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatal\n" -#: check.c:888 +#: check.c:896 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -283,12 +283,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Vérification des opérateurs postfixes définis par les utilisateurs" -#: check.c:989 +#: check.c:997 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -304,12 +304,12 @@ msgstr "" "Une liste des opérateurs postfixes définis par les utilisateurs se trouve dans le fichier :\n" " %s\n" -#: check.c:1013 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "Vérification des fonctions polymorphiques incompatibles" -#: check.c:1114 +#: check.c:1122 #, c-format msgid "" "Your installation contains user-defined objects that refer to internal\n" @@ -325,12 +325,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1139 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Vérification des tables WITH OIDS" -#: check.c:1194 +#: check.c:1202 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -346,12 +346,38 @@ msgstr "" "Une liste des tables ayant ce problème se trouve dans le fichier :\n" " %s\n" -#: check.c:1222 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "Vérification des incohérences des contraintes NOT NULL" + +#: check.c:1279 +#, c-format +msgid "" +"Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n" +"\n" +msgstr "" +"Votre installation contient des contraintes NOT NULL incohérentes.\n" +"Si les colonnes parents sont NOT NULL, alors la colonne enfant doit\n" +"aussi être marquée NOT NULL, sinon la mise à jour échouera.\n" +"Vous pouvez corriger ceci en exécutant\n" +" ALTER TABLE nom_table ALTER nom_colonne SET NOT NULL;\n" +"sur chaque colonne listée dans le fichier :\n" +" %s\n" +"\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "Vérification des types composites définis par le système dans les tables utilisateurs" -#: check.c:1251 +#: check.c:1337 #, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" @@ -370,12 +396,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1279 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Vérification des types de données reg* dans les tables utilisateurs" -#: check.c:1310 +#: check.c:1396 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -395,12 +421,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1334 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "Vérification du type de données « %s » supprimé dans les tables utilisateurs" -#: check.c:1344 +#: check.c:1430 #, c-format msgid "" "Your installation contains the \"%s\" data type in user tables.\n" @@ -420,12 +446,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1366 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Vérification des types de données « jsonb » incompatibles" -#: check.c:1373 +#: check.c:1459 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -444,27 +470,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1395 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Vérification des rôles commençant avec « pg_ »" -#: check.c:1405 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "L'instance source contient des rôles commençant avec « pg_ »\n" -#: check.c:1407 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "L'instance cible contient des rôles commençant avec « pg_ »\n" -#: check.c:1428 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Vérification des conversions d'encodage définies par les utilisateurs" -#: check.c:1491 +#: check.c:1577 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -483,17 +509,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1518 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "a échoué pour obtenir la locale courante\n" -#: check.c:1527 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "a échoué pour obtenir le nom de la locale système « %s »\n" -#: check.c:1533 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "a échoué pour restaurer l'ancienne locale « %s »\n" @@ -1964,3 +1990,11 @@ msgstr "" "when executed by psql by the database superuser will update\n" "these extensions.\n" "\n" + +#, c-format +#~ msgid "could not open file \"%s\": %m" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#, c-format +#~ msgid "fatal" +#~ msgstr "fatal" diff --git a/src/bin/pg_upgrade/po/ja.po b/src/bin/pg_upgrade/po/ja.po index 145e6e338f7..1c3a5bdd334 100644 --- a/src/bin/pg_upgrade/po/ja.po +++ b/src/bin/pg_upgrade/po/ja.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL 14)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-05-20 14:18+0900\n" -"PO-Revision-Date: 2024-05-20 16:47+0900\n" +"POT-Creation-Date: 2025-08-19 09:28+0900\n" +"PO-Revision-Date: 2025-08-19 10:58+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -20,7 +20,7 @@ msgstr "" "X-Generator: Poedit 1.8.13\n" "Plural-Forms: nplural=1; plural=0;\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -29,7 +29,7 @@ msgstr "" "元の実行中サーバーの一貫性チェックを実行しています。\n" "--------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "" "Performing Consistency Checks\n" @@ -38,7 +38,7 @@ msgstr "" "整合性チェックを実行しています。\n" "-----------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "" "\n" @@ -47,7 +47,7 @@ msgstr "" "\n" "* クラスタは互換性があります *\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "" "\n" @@ -58,7 +58,7 @@ msgstr "" "この後pg_upgradeが失敗した場合は、続ける前に新しいクラスタを\n" "initdbで再作成する必要があります。\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -71,7 +71,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -80,7 +80,7 @@ msgstr "" "このスクリプトを実行すると、旧クラスタのデータファイル %sが削除されます:\n" "\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -93,77 +93,77 @@ msgstr "" "ファイルを削除するためのスクリプトを作成できませんでした。 古い\n" "クラスタの内容は手動で削除する必要があります。\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "クラスタのバージョンを確認しています" -#: check.c:325 +#: check.c:333 #, c-format msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" msgstr "このユーティリティでは PostgreSQL 9.0以降のバージョンからのみアップグレードできます。\n" -#: check.c:329 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "このユーティリティは、PostgreSQL バージョン %s にのみアップグレードできます。\n" -#: check.c:338 +#: check.c:346 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "このユーティリティは PostgreSQL の過去のメジャーバージョンにダウングレードする用途では使用できません。\n" -#: check.c:343 +#: check.c:351 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "旧クラスタのデータとバイナリのディレクトリは異なるメジャーバージョンのものです。\n" -#: check.c:346 +#: check.c:354 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "新クラスタのデータとバイナリのディレクトリは異なるメジャーバージョンのものです。\n" -#: check.c:363 +#: check.c:371 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "現在動作中の PG 9.1 以前の旧サーバーをチェックする場合、旧サーバーのポート番号を指定する必要があります。\n" -#: check.c:367 +#: check.c:375 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "稼働中のサーバーをチェックする場合、新旧のポート番号が異なっている必要があります。\n" -#: check.c:382 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "データベース\"%s\"のエンコーディングが一致しません: 旧 \"%s\"、新 \"%s\"\n" -#: check.c:387 +#: check.c:395 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "データベース\"%s\"の lc_collateの値が一致しません:旧 \"%s\"、新 \"%s\"\n" -#: check.c:390 +#: check.c:398 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "データベース\"%s\"の lc_ctypeの値が一致しません:旧 \"%s\"、新 \"%s\"\n" -#: check.c:463 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "新クラスタのデータベース\"%s\"が空ではありません: リレーション\"%s.%s\"が見つかりました\n" -#: check.c:520 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "新しいクラスタのテーブルスペースディレクトリを確認しています" -#: check.c:531 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "新しいクラスタのテーブルスペースディレクトリはすでに存在します: \"%s\"\n" -#: check.c:564 +#: check.c:572 #, c-format msgid "" "\n" @@ -172,7 +172,7 @@ msgstr "" "\n" "警告: 新データディレクトリが旧データディレクトリの中にあってはなりません、例えば%s\n" -#: check.c:588 +#: check.c:596 #, c-format msgid "" "\n" @@ -181,86 +181,86 @@ msgstr "" "\n" "警告: ユーザー定義テーブル空間の場所がデータディレクトリ、例えば %s の中にあってはなりません。\n" -#: check.c:598 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "旧クラスタを削除するスクリプトを作成しています" -#: check.c:601 check.c:865 check.c:963 check.c:1093 check.c:1171 check.c:1467 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "ファイル\"%s\"をオープンできませんでした: %s\n" -#: check.c:657 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "ファイル\"%s\"に実行権限を追加できませんでした: %s\n" -#: check.c:677 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "データベースユーザーがインストールユーザーかどうかをチェックしています" -#: check.c:693 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "データベースユーザー\"%s\"がインストールユーザーではありません\n" -#: check.c:704 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "ユーザー数を特定できませんでした\n" -#: check.c:712 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "新クラスタ内で定義できるのはインストールユーザーのみです。\n" -#: check.c:732 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "データベース接続の設定を確認しています" -#: check.c:754 +#: check.c:762 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 には接続を許可してはなりません。すなわち、pg_database.datallowconn は false である必要があります。\n" -#: check.c:764 +#: check.c:772 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "template0 以外のすべてのデータベースは接続を許可する必要があります。すなわち pg_database.datallowconn が true でなければなりません。\n" -#: check.c:789 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "準備済みトランザクションをチェックしています" -#: check.c:798 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "移行元クラスタに準備済みトランザクションがあります\n" -#: check.c:800 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "移行先クラスタに準備済みトランザクションがあります\n" -#: check.c:826 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "bigint を渡す際にミスマッチが発生する contrib/isn をチェックしています" -#: check.c:887 check.c:988 check.c:1113 check.c:1193 check.c:1250 check.c:1309 -#: check.c:1343 check.c:1372 check.c:1490 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "致命的\n" -#: check.c:888 +#: check.c:896 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -282,12 +282,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "ユーザー定義の後置演算子を確認しています" -#: check.c:989 +#: check.c:997 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -304,12 +304,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1013 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "非互換の多態関数を確認しています" -#: check.c:1114 +#: check.c:1122 #, c-format msgid "" "Your installation contains user-defined objects that refer to internal\n" @@ -329,12 +329,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1139 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "WITH OIDS宣言されたテーブルをチェックしています" -#: check.c:1194 +#: check.c:1202 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -351,12 +351,38 @@ msgstr "" " %s\n" "\n" -#: check.c:1222 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "非NULL制約の整合性を確認しています" + +#: check.c:1279 +#, c-format +msgid "" +"Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n" +"\n" +msgstr "" +"このクラスタには整合性の取れていない NOT NULL 制約があります。\n" +"親テーブルの列が NOT NULL である場合、子テーブルの列も NOT NULL としてマーク\n" +"されていなければ、アップグレードは失敗します。\n" +"この状態は、次のコマンドを\n" +" ALTER TABLE テーブル名 ALTER 列名 SET NOT NULL;\n" +"以下のファイルにリストされている各列に対して実行することで解消できます:\n" +" %s\n" +"\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "ユーザーテーブル中のシステム定義の複合型を確認しています" -#: check.c:1251 +#: check.c:1337 #, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" @@ -374,12 +400,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1279 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "ユーザーテーブル内の reg * データ型をチェックしています" -#: check.c:1310 +#: check.c:1396 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -398,12 +424,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1334 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "ユーザーテーブル中で使用されている削除された\"%s\"データ型をチェックしています" -#: check.c:1344 +#: check.c:1430 #, c-format msgid "" "Your installation contains the \"%s\" data type in user tables.\n" @@ -421,12 +447,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1366 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "互換性のない\"jsonb\"データ型をチェックしています" -#: check.c:1373 +#: check.c:1459 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -445,27 +471,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1395 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "'pg_' で始まるロールをチェックしています" -#: check.c:1405 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "移行元クラスタに 'pg_' で始まるロールが含まれています\n" -#: check.c:1407 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "移行先クラスタに \"pg_\" で始まるロールが含まれています\n" -#: check.c:1428 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "ユーザー定義のエンコーディング変換を確認します" -#: check.c:1491 +#: check.c:1577 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -484,17 +510,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1518 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "現在のロケールを取得できませんでした\n" -#: check.c:1527 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "\"%s\"のシステムロケール名を取得できませんでした\n" -#: check.c:1533 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "古いロケール\"%s\"を復元できませんでした\n" diff --git a/src/bin/pg_upgrade/po/ru.po b/src/bin/pg_upgrade/po/ru.po index 352b76cab22..27c5c18bd11 100644 --- a/src/bin/pg_upgrade/po/ru.po +++ b/src/bin/pg_upgrade/po/ru.po @@ -1,14 +1,14 @@ # Russian message translation file for pg_upgrade # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Alexander Lakhin # Maxim Yablokov , 2021. msgid "" msgstr "" "Project-Id-Version: pg_upgrade (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-08-01 12:51+0300\n" -"PO-Revision-Date: 2024-09-07 12:05+0300\n" +"POT-Creation-Date: 2025-08-09 07:13+0300\n" +"PO-Revision-Date: 2025-08-09 07:24+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -27,7 +27,7 @@ msgstr "" "Проверка целостности на старом работающем сервере\n" "-------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "" "Performing Consistency Checks\n" @@ -36,7 +36,7 @@ msgstr "" "Проведение проверок целостности\n" "-------------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "*Кластеры совместимы*\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "" "\n" @@ -57,7 +57,7 @@ msgstr "" "initdb\n" "для нового кластера, чтобы продолжить.\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -70,7 +70,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -79,7 +79,7 @@ msgstr "" "При запуске этого скрипта будут удалены файлы данных старого кластера:\n" " %s\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -92,24 +92,24 @@ msgstr "" "пространства или каталог данных нового кластера.\n" "Содержимое старого кластера нужно будет удалить вручную.\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "Проверка версий кластеров" -#: check.c:325 +#: check.c:333 #, c-format msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" msgstr "" "Эта утилита может производить обновление только с версии PostgreSQL 9.0 и " "новее.\n" -#: check.c:329 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Эта утилита может повышать версию PostgreSQL только до %s.\n" -#: check.c:338 +#: check.c:346 #, c-format msgid "" "This utility cannot be used to downgrade to older major PostgreSQL " @@ -118,7 +118,7 @@ msgstr "" "Эта утилита не может понижать версию до более старой основной версии " "PostgreSQL.\n" -#: check.c:343 +#: check.c:351 #, c-format msgid "" "Old cluster data and binary directories are from different major versions.\n" @@ -126,7 +126,7 @@ msgstr "" "Каталоги данных и исполняемых файлов старого кластера относятся к разным " "основным версиям.\n" -#: check.c:346 +#: check.c:354 #, c-format msgid "" "New cluster data and binary directories are from different major versions.\n" @@ -134,7 +134,7 @@ msgstr "" "Каталоги данных и исполняемых файлов нового кластера относятся к разным " "основным версиям.\n" -#: check.c:363 +#: check.c:371 #, c-format msgid "" "When checking a pre-PG 9.1 live old server, you must specify the old " @@ -143,7 +143,7 @@ msgstr "" "Для проверки старого работающего сервера версии до 9.1 необходимо указать " "номер порта этого сервера.\n" -#: check.c:367 +#: check.c:375 #, c-format msgid "" "When checking a live server, the old and new port numbers must be " @@ -152,14 +152,14 @@ msgstr "" "Для проверки работающего сервера новый номер порта должен отличаться от " "старого.\n" -#: check.c:382 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "" "кодировки в базе данных \"%s\" различаются: старая - \"%s\", новая - " "\"%s\"\n" -#: check.c:387 +#: check.c:395 #, c-format msgid "" "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" @@ -167,7 +167,7 @@ msgstr "" "значения lc_collate в базе данных \"%s\" различаются: старое - \"%s\", " "новое - \"%s\"\n" -#: check.c:390 +#: check.c:398 #, c-format msgid "" "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" @@ -175,24 +175,24 @@ msgstr "" "значения lc_ctype в базе данных \"%s\" различаются: старое - \"%s\", новое " "- \"%s\"\n" -#: check.c:463 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "" "Новая база данных кластера \"%s\" не пустая: найдено отношение \"%s.%s\"\n" -#: check.c:520 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Проверка каталогов табличных пространств в новом кластере" -#: check.c:531 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "" "каталог табличного пространства в новом кластере уже существует: \"%s\"\n" -#: check.c:564 +#: check.c:572 #, c-format msgid "" "\n" @@ -203,7 +203,7 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: новый каталог данных не должен располагаться внутри старого " "каталога данных, то есть, в %s\n" -#: check.c:588 +#: check.c:596 #, c-format msgid "" "\n" @@ -214,49 +214,49 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: пользовательские табличные пространства не должны " "располагаться внутри каталога данных, то есть, в %s\n" -#: check.c:598 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "Создание скрипта для удаления старого кластера" -#: check.c:601 check.c:865 check.c:963 check.c:1093 check.c:1171 check.c:1467 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "не удалось открыть файл \"%s\": %s\n" -#: check.c:657 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "не удалось добавить право выполнения для файла \"%s\": %s\n" -#: check.c:677 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "Проверка, является ли пользователь БД стартовым пользователем" -#: check.c:693 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "пользователь БД \"%s\" не является стартовым пользователем\n" -#: check.c:704 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "не удалось определить количество пользователей\n" -#: check.c:712 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "В новом кластере может быть определён только стартовый пользователь.\n" -#: check.c:732 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "Проверка параметров подключения к базе данных" -#: check.c:754 +#: check.c:762 #, c-format msgid "" "template0 must not allow connections, i.e. its pg_database.datallowconn must " @@ -265,7 +265,7 @@ msgstr "" "база template0 не должна допускать подключения, то есть её свойство " "pg_database.datallowconn должно быть false\n" -#: check.c:764 +#: check.c:772 #, c-format msgid "" "All non-template0 databases must allow connections, i.e. their pg_database." @@ -274,34 +274,34 @@ msgstr "" "Все базы, кроме template0, должны допускать подключения, то есть их свойство " "pg_database.datallowconn должно быть true\n" -#: check.c:789 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "Проверка наличия подготовленных транзакций" -#: check.c:798 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Исходный кластер содержит подготовленные транзакции\n" -#: check.c:800 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Целевой кластер содержит подготовленные транзакции\n" -#: check.c:826 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Проверка несоответствия при передаче bigint в contrib/isn" -#: check.c:887 check.c:988 check.c:1113 check.c:1193 check.c:1250 check.c:1309 -#: check.c:1343 check.c:1372 check.c:1490 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "сбой\n" -#: check.c:888 +#: check.c:896 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -325,12 +325,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Проверка пользовательских постфиксных операторов" -#: check.c:989 +#: check.c:997 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -348,12 +348,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1013 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "Проверка несовместимых полиморфных функций" -#: check.c:1114 +#: check.c:1122 #, c-format msgid "" "Your installation contains user-defined objects that refer to internal\n" @@ -376,12 +376,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1139 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Проверка таблиц со свойством WITH OIDS" -#: check.c:1194 +#: check.c:1202 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -399,12 +399,38 @@ msgstr "" " %s\n" "\n" -#: check.c:1222 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "Проверка несогласованных ограничений NOT NULL" + +#: check.c:1279 +#, c-format +msgid "" +"Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n" +"\n" +msgstr "" +"В вашей инсталляции содержатся несогласованные ограничения NOT NULL.\n" +"Если родительские столбцы помечены NOT NULL, пометку NOT NULL должны\n" +"иметь и их дочерние столбцы, иначе обновление невозможно.\n" +"Исправить эту ситуацию можно, выполнив:\n" +" ALTER TABLE имя_таблицы ALTER столбец SET NOT NULL;\n" +"для всех столбцов, перечисленных в файле:\n" +" %s\n" +"\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "Проверка системных составных типов в пользовательских таблицах" -#: check.c:1251 +#: check.c:1337 #, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" @@ -423,12 +449,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1279 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Проверка типов данных reg* в пользовательских таблицах" -#: check.c:1310 +#: check.c:1396 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -448,12 +474,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1334 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "Проверка удалённого типа данных \"%s\" в пользовательских таблицах" -#: check.c:1344 +#: check.c:1430 #, c-format msgid "" "Your installation contains the \"%s\" data type in user tables.\n" @@ -473,12 +499,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1366 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Проверка несовместимого типа данных \"jsonb\"" -#: check.c:1373 +#: check.c:1459 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -497,27 +523,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1395 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Проверка ролей с именами, начинающимися с \"pg_\"" -#: check.c:1405 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "В исходном кластере есть роли, имена которых начинаются с \"pg_\"\n" -#: check.c:1407 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "В целевом кластере есть роли, имена которых начинаются с \"pg_\"\n" -#: check.c:1428 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Проверка пользовательских перекодировок" -#: check.c:1491 +#: check.c:1577 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -536,17 +562,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1518 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "не удалось получить текущую локаль\n" -#: check.c:1527 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "не удалось получить системное имя локали для \"%s\"\n" -#: check.c:1533 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "не удалось восстановить старую локаль \"%s\"\n" @@ -2158,6 +2184,10 @@ msgstr "" "эти расширения.\n" "\n" +#, c-format +#~ msgid "could not open file \"%s\": %m" +#~ msgstr "не удалось открыть файл \"%s\": %m" + #, c-format #~ msgid "fatal" #~ msgstr "сбой" diff --git a/src/bin/pg_upgrade/po/sv.po b/src/bin/pg_upgrade/po/sv.po index 85631884b26..f2f3db8cf84 100644 --- a/src/bin/pg_upgrade/po/sv.po +++ b/src/bin/pg_upgrade/po/sv.po @@ -1,14 +1,14 @@ # Swedish message translation file for pg_upgrade # 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, 2024. +# Dennis Björklund , 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025. # msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-07-14 19:08+0000\n" -"PO-Revision-Date: 2024-07-14 23:11+0200\n" +"POT-Creation-Date: 2025-08-09 06:06+0000\n" +"PO-Revision-Date: 2025-08-09 20:22+0200\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "" "Performing Consistency Checks on Old Live Server\n" @@ -26,7 +26,7 @@ msgstr "" "Utför konsistenskontroller på gamla live-servern\n" "------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "" "Performing Consistency Checks\n" @@ -35,7 +35,7 @@ msgstr "" "Utför konsistenskontroller\n" "--------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "*Klustren är kompatibla*\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ msgstr "" "Om pg_upgrade misslyckas efter denna punkt så måste du\n" "köra om initdb på nya klustret innan du fortsätter.\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "" "Optimizer statistics are not transferred by pg_upgrade.\n" @@ -68,7 +68,7 @@ msgstr "" " %s/vacuumdb %s--all --analyze-in-stages\n" "\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "" "Running this script will delete the old cluster's data files:\n" @@ -77,7 +77,7 @@ msgstr "" "När detta skript körs så raderas gamla klustrets datafiler:\n" " %s\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "" "Could not create a script to delete the old cluster's data files\n" @@ -90,77 +90,77 @@ msgstr "" "ligger i gamla klusterkatalogen. Det gamla klustrets innehåll\n" "måste raderas för hand.\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "Kontrollerar klustrets versioner" -#: check.c:325 +#: check.c:333 #, c-format msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" msgstr "Detta verktyg kan bara uppgradera från PostgreSQL version 9.0 eller senare.\n" -#: check.c:329 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Detta verktyg kan bara uppgradera till PostgreSQL version %s.\n" -#: check.c:338 +#: check.c:346 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Detta verktyg kan inte användas för att nergradera till äldre major-versioner av PostgreSQL.\n" -#: check.c:343 +#: check.c:351 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Gammal klusterdata och binära kataloger är från olika major-versioner.\n" -#: check.c:346 +#: check.c:354 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Nya klusterdata och binära kataloger är från olika major-versioner.\n" -#: check.c:363 +#: check.c:371 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Vid kontroll av en gammal live-server före PG 9.1 så måste den gamla serverns portnummer anges.\n" -#: check.c:367 +#: check.c:375 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Vid kontroll av en live-server så måste gamla och nya portnumren vara olika.\n" -#: check.c:382 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "kodning för databasen \"%s\" matchar inte: gammal \"%s\", ny \"%s\"\n" -#: check.c:387 +#: check.c:395 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_collate-värden för databasen \"%s\" matchar inte: gammal \"%s\", ny \"%s\"\n" -#: check.c:390 +#: check.c:398 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "lc_ctype-värden för databasen \"%s\" matchar inte: gammal \"%s\", ny \"%s\"\n" -#: check.c:463 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Nya databasklustret \"%s\" är inte tomt: hittade relation \"%s.%s\"\n" -#: check.c:520 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Letar efter nya tablespace-kataloger i klustret" -#: check.c:531 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "i klustret finns redan ny tablespace-katalog: \"%s\"\n" -#: check.c:564 +#: check.c:572 #, c-format msgid "" "\n" @@ -169,7 +169,7 @@ msgstr "" "\n" "VARNING: nya datakatalogen skall inte ligga inuti den gamla datakatalogen, dvs. %s\n" -#: check.c:588 +#: check.c:596 #, c-format msgid "" "\n" @@ -178,86 +178,86 @@ msgstr "" "\n" "VARNING: användardefinierade tabellutrymmens position skall inte vara i datakatalogen, dvs. %s\n" -#: check.c:598 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "Skapar skript för att radera gamla klustret" -#: check.c:601 check.c:865 check.c:963 check.c:1093 check.c:1171 check.c:1467 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "kan inte öppna fil \"%s\": %s\n" -#: check.c:657 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "kan inte sätta rättigheten \"körbar\" på filen \"%s\": %s\n" -#: check.c:677 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "Kontrollerar att databasanvändaren är installationsanvändaren" -#: check.c:693 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "databasanvändare \"%s\" är inte installationsanvändaren\n" -#: check.c:704 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "kunde inte bestämma antalet användare\n" -#: check.c:712 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "Bara installationsanvändaren får finnas i nya klustret.\n" -#: check.c:732 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "Kontrollerar databasens anslutningsinställningar" -#: check.c:754 +#: check.c:762 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 får inte tillåta anslutningar, dvs dess pg_database.datallowconn måste vara false\n" -#: check.c:764 +#: check.c:772 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Alla icke-template0-databaser måste tillåta anslutningar, dvs. deras pg_database.datallowconn måste vara true\n" -#: check.c:789 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "Letar efter förberedda transaktioner" -#: check.c:798 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Källklustret innehåller förberedda transaktioner\n" -#: check.c:800 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Målklustret innehåller förberedda transaktioner\n" -#: check.c:826 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Letar efter contrib/isn med bigint-anropsfel" -#: check.c:887 check.c:988 check.c:1113 check.c:1193 check.c:1250 check.c:1309 -#: check.c:1343 check.c:1372 check.c:1490 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "fatalt\n" -#: check.c:888 +#: check.c:896 #, c-format msgid "" "Your installation contains \"contrib/isn\" functions which rely on the\n" @@ -278,12 +278,12 @@ msgstr "" " %s\n" "\n" -#: check.c:911 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Letar efter användardefinierade postfix-operatorer" -#: check.c:989 +#: check.c:997 #, c-format msgid "" "Your installation contains user-defined postfix operators, which are not\n" @@ -300,12 +300,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1013 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "Letar efter inkompatibla polymorfa funktioner" -#: check.c:1114 +#: check.c:1122 #, c-format msgid "" "Your installation contains user-defined objects that refer to internal\n" @@ -328,12 +328,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1139 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Letar efter tabeller med WITH OIDS" -#: check.c:1194 +#: check.c:1202 #, c-format msgid "" "Your installation contains tables declared WITH OIDS, which is not\n" @@ -350,12 +350,38 @@ msgstr "" " %s\n" "\n" -#: check.c:1222 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "Kontrollerar att icke-null-villkor är konsistenta" + +#: check.c:1279 +#, c-format +msgid "" +"Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n" +"\n" +msgstr "" +"Din installation har inkonsistenta NOT NULL-villkor.\n" +"Om en föräldrakolumn är NOT NULL så måste barnkolumnen också\n" +"sättas till NOT NULL annars så kommer uppgraderingen misslyckas.\n" +"Du kan lösa detta genom att köra\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"för varje kolumn som listas i filen:\n" +" %s\n" +"\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "Letar i användartabeller efter systemdefinierade typer av sorten \"composite\"" -#: check.c:1251 +#: check.c:1337 #, c-format msgid "" "Your installation contains system-defined composite type(s) in user tables.\n" @@ -375,12 +401,12 @@ msgstr "" "\n" # FIXME: is this msgid correct? -#: check.c:1279 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Letar efter reg*-datatyper i användartabeller" -#: check.c:1310 +#: check.c:1396 #, c-format msgid "" "Your installation contains one of the reg* data types in user tables.\n" @@ -399,12 +425,12 @@ msgstr "" " %s\n" "\n" -#: check.c:1334 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "Letar efter borttagen \"%s\"-datatype i användartabeller" -#: check.c:1344 +#: check.c:1430 #, c-format msgid "" "Your installation contains the \"%s\" data type in user tables.\n" @@ -424,12 +450,12 @@ msgstr "" "\n" # FIXME: is this msgid correct? -#: check.c:1366 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Letar efter inkompatibel \"jsonb\"-datatyp" -#: check.c:1373 +#: check.c:1459 #, c-format msgid "" "Your installation contains the \"jsonb\" data type in user tables.\n" @@ -448,27 +474,27 @@ msgstr "" " %s\n" "\n" -#: check.c:1395 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Letar efter roller som startar med \"pg_\"" -#: check.c:1405 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Källklustret innehåller roller som startar med \"pg_\"\n" -#: check.c:1407 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Målklustret innehåller roller som startar med \"pg_\"\n" -#: check.c:1428 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Letar efter användardefinierade teckenkodkonverteringar" -#: check.c:1491 +#: check.c:1577 #, c-format msgid "" "Your installation contains user-defined encoding conversions.\n" @@ -487,17 +513,17 @@ msgstr "" " %s\n" "\n" -#: check.c:1518 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "misslyckades med att hämta aktuell lokal\n" -#: check.c:1527 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "misslyckades med att hämta systemlokalnamn för \"%s\"\n" -#: check.c:1533 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "misslyckades med att återställa gamla lokalen \"%s\"\n" @@ -1307,7 +1333,7 @@ msgstr " -V, --version visa versionsinformation, avsluta sedan\ #: option.c:309 #, c-format msgid " --clone clone instead of copying files to new cluster\n" -msgstr " -clone klona istället för att kopiera filer till nya klustret\n" +msgstr " --clone klona istället för att kopiera filer till nya klustret\n" #: option.c:310 #, c-format @@ -1945,3 +1971,7 @@ msgstr "" " %s\n" "kan köras med psql av databasens superuser och kommer uppdatera\n" "dessa utökningar.\n" + +#, c-format +msgid "fatal" +msgstr "fatalt" diff --git a/src/bin/pg_upgrade/po/uk.po b/src/bin/pg_upgrade/po/uk.po index 1104ee3e280..d849a51f0a6 100644 --- a/src/bin/pg_upgrade/po/uk.po +++ b/src/bin/pg_upgrade/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:47+0000\n" -"PO-Revision-Date: 2023-12-18 17:41\n" +"POT-Creation-Date: 2025-12-31 03:25+0000\n" +"PO-Revision-Date: 2026-01-02 12:56\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -17,28 +17,28 @@ msgstr "" "X-Crowdin-File: /REL_14_STABLE/pg_upgrade.pot\n" "X-Crowdin-File-ID: 778\n" -#: check.c:74 +#: check.c:75 #, c-format msgid "Performing Consistency Checks on Old Live Server\n" "------------------------------------------------\n" msgstr "Перевірка цілістності на старому працюючому сервері\n" "------------------------------------------------\n" -#: check.c:80 +#: check.c:81 #, c-format msgid "Performing Consistency Checks\n" "-----------------------------\n" msgstr "Проведення перевірок цілістності\n" "-----------------------------\n" -#: check.c:234 +#: check.c:242 #, c-format msgid "\n" "*Clusters are compatible*\n" msgstr "\n" "*Кластери сумісні*\n" -#: check.c:240 +#: check.c:248 #, c-format msgid "\n" "If pg_upgrade fails after this point, you must re-initdb the\n" @@ -47,7 +47,7 @@ msgstr "\n" "Якщо робота pg_upgrade після цієї точки перерветься, вам потрібно буде заново виконати initdb \n" "для нового кластера, перед продовженням.\n" -#: check.c:285 +#: check.c:293 #, c-format msgid "Optimizer statistics are not transferred by pg_upgrade.\n" "Once you start the new server, consider running:\n" @@ -56,14 +56,14 @@ msgstr "Статистика оптимізатора не передаєтьс "Після запуску нового серверу, розгляньте можливість запуску:\n" " %s/vacuumdb %s--all --analyze-in-stages\n\n" -#: check.c:291 +#: check.c:299 #, c-format msgid "Running this script will delete the old cluster's data files:\n" " %s\n" msgstr "При запуску цього скрипту файли даних старого кластера будуть видалені:\n" " %s\n" -#: check.c:296 +#: check.c:304 #, c-format msgid "Could not create a script to delete the old cluster's data files\n" "because user-defined tablespaces or the new cluster's data directory\n" @@ -74,170 +74,170 @@ msgstr "Не вдалося створити скрипт для видален "простори або каталог даних нового кластера. Вміст старого кластера\n" "треба буде видалити вручну.\n" -#: check.c:308 +#: check.c:316 #, c-format msgid "Checking cluster versions" msgstr "Перевірка версій кластерів" -#: check.c:320 +#: check.c:333 #, c-format -msgid "This utility can only upgrade from PostgreSQL version 8.4 and later.\n" -msgstr "Ця утиліта може виконувати оновлення тільки з версії PostgreSQL 8.4 і новіше.\n" +msgid "This utility can only upgrade from PostgreSQL version 9.0 and later.\n" +msgstr "Ця утиліта може виконувати оновлення тільки з версії PostgreSQL 9.0 і новіше.\n" -#: check.c:324 +#: check.c:337 #, c-format msgid "This utility can only upgrade to PostgreSQL version %s.\n" msgstr "Ця утиліта може тільки підвищувати версію PostgreSQL до %s.\n" -#: check.c:333 +#: check.c:346 #, c-format msgid "This utility cannot be used to downgrade to older major PostgreSQL versions.\n" msgstr "Ця утиліта не може не може використовуватись щоб понижувати версію до більш старих основних версій PostgreSQL.\n" -#: check.c:338 +#: check.c:351 #, c-format msgid "Old cluster data and binary directories are from different major versions.\n" msgstr "Каталог даних і двійковий каталог старого кластера з різних основних версій.\n" -#: check.c:341 +#: check.c:354 #, c-format msgid "New cluster data and binary directories are from different major versions.\n" msgstr "Каталог даних і двійковий каталог нового кластера з різних основних версій.\n" -#: check.c:358 +#: check.c:371 #, c-format msgid "When checking a pre-PG 9.1 live old server, you must specify the old server's port number.\n" msgstr "Для перевірки старого працюючого сервера до версії 9.1, вам необхідно вказати номер порта цього сервера.\n" -#: check.c:362 +#: check.c:375 #, c-format msgid "When checking a live server, the old and new port numbers must be different.\n" msgstr "Для перевірки працюючого сервера, старий і новий номер порта повинні бути різними.\n" -#: check.c:377 +#: check.c:390 #, c-format msgid "encodings for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "кодування для бази даних \"%s\" не збігаються: старе \"%s\", нове \"%s\"\n" -#: check.c:382 +#: check.c:395 #, c-format msgid "lc_collate values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "значення lc_collate для бази даних \"%s\" не збігаються: старе \"%s\", нове \"%s\"\n" -#: check.c:385 +#: check.c:398 #, c-format msgid "lc_ctype values for database \"%s\" do not match: old \"%s\", new \"%s\"\n" msgstr "значення lc_ctype для бази даних \"%s\" не збігаються: старе \"%s\", нове \"%s\"\n" -#: check.c:458 +#: check.c:471 #, c-format msgid "New cluster database \"%s\" is not empty: found relation \"%s.%s\"\n" msgstr "Новий кластер бази даних \"%s\" не порожній: знайдено відношення \"%s.%s\"\n" -#: check.c:515 +#: check.c:528 #, c-format msgid "Checking for new cluster tablespace directories" msgstr "Перевірка каталогів табличних просторів кластера" -#: check.c:526 +#: check.c:539 #, c-format msgid "new cluster tablespace directory already exists: \"%s\"\n" msgstr "каталог нового кластерного табличного простору вже існує: \"%s\"\n" -#: check.c:559 +#: check.c:572 #, c-format msgid "\n" "WARNING: new data directory should not be inside the old data directory, e.g. %s\n" msgstr "\n" "ПОПЕРЕДЖЕННЯ: новий каталог даних не повинен бути всередині старого каталогу даних, наприклад %s\n" -#: check.c:583 +#: check.c:596 #, c-format msgid "\n" "WARNING: user-defined tablespace locations should not be inside the data directory, e.g. %s\n" msgstr "\n" "ПОПЕРЕДЖЕННЯ: користувацькі розташування табличних просторів не повинні бути всередині каталогу даних, наприклад %s\n" -#: check.c:593 +#: check.c:606 #, c-format msgid "Creating script to delete old cluster" msgstr "Створення скрипту для видалення старого кластеру" -#: check.c:596 check.c:860 check.c:958 check.c:1088 check.c:1166 check.c:1462 -#: file.c:338 function.c:240 option.c:497 version.c:54 version.c:204 -#: version.c:376 version.c:511 +#: check.c:609 check.c:873 check.c:971 check.c:1101 check.c:1179 check.c:1258 +#: check.c:1553 file.c:338 function.c:240 option.c:497 version.c:54 +#: version.c:204 version.c:376 version.c:511 #, c-format msgid "could not open file \"%s\": %s\n" msgstr "не вдалося відкрити файл \"%s\": %s\n" -#: check.c:652 +#: check.c:665 #, c-format msgid "could not add execute permission to file \"%s\": %s\n" msgstr "не вдалося додати право виконання для файлу \"%s\": %s\n" -#: check.c:672 +#: check.c:685 #, c-format msgid "Checking database user is the install user" msgstr "Перевірка, чи є користувач бази даних стартовим користувачем" -#: check.c:688 +#: check.c:701 #, c-format msgid "database user \"%s\" is not the install user\n" msgstr "користувач бази даних \"%s\" не є стартовим користувачем\n" -#: check.c:699 +#: check.c:712 #, c-format msgid "could not determine the number of users\n" msgstr "не вдалося визначити кількість користувачів\n" -#: check.c:707 +#: check.c:720 #, c-format msgid "Only the install user can be defined in the new cluster.\n" msgstr "В новому кластері може бути визначеним тільки стартовий користувач.\n" -#: check.c:727 +#: check.c:740 #, c-format msgid "Checking database connection settings" msgstr "Перевірка параметрів підключення до бази даних" -#: check.c:749 +#: check.c:762 #, c-format msgid "template0 must not allow connections, i.e. its pg_database.datallowconn must be false\n" msgstr "template0 не повинна дозволяти підключення, тобто pg_database.datallowconn повинно бути false\n" -#: check.c:759 +#: check.c:772 #, c-format msgid "All non-template0 databases must allow connections, i.e. their pg_database.datallowconn must be true\n" msgstr "Всі бази даних, окрім template0, повинні дозволяти підключення, тобто pg_database.datallowconn повинно бути true\n" -#: check.c:784 +#: check.c:797 #, c-format msgid "Checking for prepared transactions" msgstr "Перевірка підготовлених транзакцій" -#: check.c:793 +#: check.c:806 #, c-format msgid "The source cluster contains prepared transactions\n" msgstr "Початковий кластер містить підготовлені транзакції\n" -#: check.c:795 +#: check.c:808 #, c-format msgid "The target cluster contains prepared transactions\n" msgstr "Цільовий кластер містить підготовлені транзакції\n" -#: check.c:821 +#: check.c:834 #, c-format msgid "Checking for contrib/isn with bigint-passing mismatch" msgstr "Перевірка невідповідності при передаванні bigint в contrib/isn" -#: check.c:882 check.c:983 check.c:1108 check.c:1188 check.c:1245 check.c:1304 -#: check.c:1338 check.c:1367 check.c:1485 function.c:262 version.c:278 -#: version.c:316 version.c:460 +#: check.c:895 check.c:996 check.c:1121 check.c:1201 check.c:1278 check.c:1336 +#: check.c:1395 check.c:1429 check.c:1458 check.c:1576 function.c:262 +#: version.c:278 version.c:316 version.c:460 #, c-format msgid "fatal\n" msgstr "збій\n" -#: check.c:883 +#: check.c:896 #, c-format msgid "Your installation contains \"contrib/isn\" functions which rely on the\n" "bigint data type. Your old and new clusters pass bigint values\n" @@ -249,12 +249,12 @@ msgid "Your installation contains \"contrib/isn\" functions which rely on the\n" msgstr "Ваша інсталяція містить функції \"contrib/isn\", що використовують тип даних bigint. Старі та нові кластери передають значення bigint по-різному, тому цей кластер наразі неможливо оновити. Ви можете вручну вивантажити бази даних зі старого кластеру, що використовує засоби \"contrib/isn\", видалити їх, виконати оновлення, а потім відновити їх. Список проблемних функцій подано у файлі:\n" " %s\n\n" -#: check.c:906 +#: check.c:919 #, c-format msgid "Checking for user-defined postfix operators" msgstr "Перевірка постфіксних операторів визначених користувачем" -#: check.c:984 +#: check.c:997 #, c-format msgid "Your installation contains user-defined postfix operators, which are not\n" "supported anymore. Consider dropping the postfix operators and replacing\n" @@ -266,12 +266,12 @@ msgstr "Ваша інсталяція містить користувацькі "Список користувацьких постфіксних операторів знаходиться у файлі:\n" " %s\n\n" -#: check.c:1008 +#: check.c:1021 #, c-format msgid "Checking for incompatible polymorphic functions" msgstr "Перевірка несумісних поліморфних функцій" -#: check.c:1109 +#: check.c:1122 #, c-format msgid "Your installation contains user-defined objects that refer to internal\n" "polymorphic functions with arguments of type \"anyarray\" or \"anyelement\".\n" @@ -288,12 +288,12 @@ msgstr "У вашій інсталяції містяться користува "Список проблемних об'єктів знаходиться у файлі:\n" " %s\n\n" -#: check.c:1134 +#: check.c:1147 #, c-format msgid "Checking for tables WITH OIDS" msgstr "Перевірка таблиць WITH OIDS" -#: check.c:1189 +#: check.c:1202 #, c-format msgid "Your installation contains tables declared WITH OIDS, which is not\n" "supported anymore. Consider removing the oid column using\n" @@ -305,12 +305,33 @@ msgstr "Ваша інсталяція містить таблиці, створ "Список проблемних таблиць подано у файлі:\n" " %s\n\n" -#: check.c:1217 +#: check.c:1227 +#, c-format +msgid "Checking for not-null constraint inconsistencies" +msgstr "Перевірка невідповідності обмеженням-null" + +#: check.c:1279 +#, c-format +msgid "Your installation contains inconsistent NOT NULL constraints.\n" +"If the parent column(s) are NOT NULL, then the child column must\n" +"also be marked NOT NULL, or the upgrade will fail.\n" +"You can fix this by running\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"on each column listed in the file:\n" +" %s\n\n" +msgstr "Ваша інсталяція містить суперечливі обмеження NOT NULL.\n" +"Якщо батьківські стовпці мають значення NOT NULL, то дочірні стовпці також повинні бути позначені як NOT NULL, інакше оновлення не відбудеться.\n" +"Ви можете виправити це, виконавши команду\n" +" ALTER TABLE tablename ALTER column SET NOT NULL;\n" +"для кожного стовпця, зазначеного у файлі:\n" +" %s\n\n" + +#: check.c:1308 #, c-format msgid "Checking for system-defined composite types in user tables" msgstr "Перевірка складених типів визначених системою у таблицях користувача" -#: check.c:1246 +#: check.c:1337 #, c-format msgid "Your installation contains system-defined composite type(s) in user tables.\n" "These type OIDs are not stable across PostgreSQL versions,\n" @@ -324,12 +345,12 @@ msgstr "Ваша інсталяція містить складені типи "Список проблемних стовпців знаходиться у файлі:\n" " %s\n\n" -#: check.c:1274 +#: check.c:1365 #, c-format msgid "Checking for reg* data types in user tables" msgstr "Перевірка типів даних reg* в користувацьких таблицях" -#: check.c:1305 +#: check.c:1396 #, c-format msgid "Your installation contains one of the reg* data types in user tables.\n" "These data types reference system OIDs that are not preserved by\n" @@ -343,12 +364,12 @@ msgstr "Ваша інсталяція містить один з типів да "Список проблемних стовпців знаходиться у файлі:\n" " %s\n\n" -#: check.c:1329 +#: check.c:1420 #, c-format msgid "Checking for removed \"%s\" data type in user tables" msgstr "Перевірка видаленого типу даних \"%s\" в користувацьких таблицях" -#: check.c:1339 +#: check.c:1430 #, c-format msgid "Your installation contains the \"%s\" data type in user tables.\n" "The \"%s\" type has been removed in PostgreSQL version %s,\n" @@ -363,12 +384,12 @@ msgstr "Користувацькі таблиці у вашій інсталяц "оновлення. Список проблемних стовпців є у файлі:\n" " %s\n\n" -#: check.c:1361 +#: check.c:1452 #, c-format msgid "Checking for incompatible \"jsonb\" data type" msgstr "Перевірка несумісного типу даних \"jsonb\"" -#: check.c:1368 +#: check.c:1459 #, c-format msgid "Your installation contains the \"jsonb\" data type in user tables.\n" "The internal format of \"jsonb\" changed during 9.4 beta so this\n" @@ -383,27 +404,27 @@ msgstr "Ваша інсталяція містить тип даних \"jsonb\" "Список проблемних стовпців знаходиться у файлі:\n" " %s\n\n" -#: check.c:1390 +#: check.c:1481 #, c-format msgid "Checking for roles starting with \"pg_\"" msgstr "Перевірка ролей, які починаються з \"pg_\"" -#: check.c:1400 +#: check.c:1491 #, c-format msgid "The source cluster contains roles starting with \"pg_\"\n" msgstr "Початковий кластер містить ролі, які починаються з \"pg_\"\n" -#: check.c:1402 +#: check.c:1493 #, c-format msgid "The target cluster contains roles starting with \"pg_\"\n" msgstr "Цільовий кластер містить ролі, які починаються з \"pg_\"\n" -#: check.c:1423 +#: check.c:1514 #, c-format msgid "Checking for user-defined encoding conversions" msgstr "Перевірка користувацьких перетворення кодувань" -#: check.c:1486 +#: check.c:1577 #, c-format msgid "Your installation contains user-defined encoding conversions.\n" "The conversion function parameters changed in PostgreSQL version 14\n" @@ -418,17 +439,17 @@ msgstr "Ваша інсталяція містить користувацькі "Список перетворень кодувань знаходиться у файлі:\n" " %s\n\n" -#: check.c:1513 +#: check.c:1604 #, c-format msgid "failed to get the current locale\n" msgstr "не вдалося отримати поточну локаль\n" -#: check.c:1522 +#: check.c:1613 #, c-format msgid "failed to get system locale name for \"%s\"\n" msgstr "не вдалося отримати системне ім'я локалі для \"%s\"\n" -#: check.c:1528 +#: check.c:1619 #, c-format msgid "failed to restore old locale \"%s\"\n" msgstr "не вдалося відновити стару локаль \"%s\"\n" diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index e9cfe6d51b3..94e2885debd 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -196,6 +196,7 @@ if "$MAKE" -C "$oldsrc" installcheck-parallel; then fi pg_dumpall $extra_dump_options --no-sync \ + --restrict-key=test \ -f "$temp_root"/dump1.sql || pg_dumpall1_status=$? if [ "$newsrc" != "$oldsrc" ]; then @@ -259,6 +260,7 @@ esac pg_ctl start -l "$logdir/postmaster2.log" -o "$POSTMASTER_OPTS" -w pg_dumpall $extra_dump_options --no-sync \ + --restrict-key=test \ -f "$temp_root"/dump2.sql || pg_dumpall2_status=$? pg_ctl -m fast stop diff --git a/src/bin/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c index 98cda39cba2..33d1d04b6b7 100644 --- a/src/bin/pg_upgrade/version.c +++ b/src/bin/pg_upgrade/version.c @@ -189,6 +189,7 @@ check_for_data_types_usage(ClusterInfo *cluster, " c.relkind IN (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ", " + CppAsString2(RELKIND_GLOBAL_INDEX) ", " CppAsString2(RELKIND_INDEX) ") AND " " c.relnamespace = n.oid AND " /* exclude possible orphaned temp tables */ diff --git a/src/bin/pg_verifybackup/po/es.po b/src/bin/pg_verifybackup/po/es.po index b95ac34742d..6c9054f06f4 100644 --- a/src/bin/pg_verifybackup/po/es.po +++ b/src/bin/pg_verifybackup/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:34+0000\n" +"POT-Creation-Date: 2026-02-06 21:30+0000\n" "PO-Revision-Date: 2021-05-24 16:53-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-ayuda \n" @@ -45,82 +45,82 @@ msgstr "memoria agotada\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "no se puede duplicar un puntero nulo (error interno)\n" -#: ../../common/jsonapi.c:1084 +#: ../../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "La secuencia de escape «%s» no es válida." -#: ../../common/jsonapi.c:1087 +#: ../../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Los caracteres con valor 0x%02x deben ser escapados." -#: ../../common/jsonapi.c:1090 +#: ../../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Se esperaba el fin de la entrada, se encontró «%s»." -#: ../../common/jsonapi.c:1093 +#: ../../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Se esperaba un elemento de array o «]», se encontró «%s»." -#: ../../common/jsonapi.c:1096 +#: ../../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Se esperaba «,» o «]», se encontró «%s»." -#: ../../common/jsonapi.c:1099 +#: ../../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Se esperaba «:», se encontró «%s»." -#: ../../common/jsonapi.c:1102 +#: ../../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Se esperaba un valor JSON, se encontró «%s»." -#: ../../common/jsonapi.c:1105 +#: ../../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "La cadena de entrada terminó inesperadamente." -#: ../../common/jsonapi.c:1107 +#: ../../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Se esperaba una cadena o «}», se encontró «%s»." -#: ../../common/jsonapi.c:1110 +#: ../../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Se esperaba «,» o «}», se encontró «%s»." -#: ../../common/jsonapi.c:1113 +#: ../../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Se esperaba una cadena, se encontró «%s»." -#: ../../common/jsonapi.c:1116 +#: ../../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "El elemento «%s» no es válido." -#: ../../common/jsonapi.c:1119 +#: ../../common/jsonapi.c:1122 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 no puede ser convertido a text." -#: ../../common/jsonapi.c:1121 +#: ../../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "«\\u» debe ser seguido por cuatro dígitos hexadecimales." -#: ../../common/jsonapi.c:1124 +#: ../../common/jsonapi.c:1127 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:1126 +#: ../../common/jsonapi.c:1129 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:1128 +#: ../../common/jsonapi.c:1131 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Un «low-surrogate» Unicode debe seguir a un «high-surrogate»." diff --git a/src/bin/pg_verifybackup/po/ru.po b/src/bin/pg_verifybackup/po/ru.po index 7064c0e97ec..b91d4e9cc31 100644 --- a/src/bin/pg_verifybackup/po/ru.po +++ b/src/bin/pg_verifybackup/po/ru.po @@ -1,9 +1,9 @@ -# Alexander Lakhin , 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2020, 2021, 2022, 2023, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_verifybackup (PostgreSQL) 13\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-08-01 12:51+0300\n" +"POT-Creation-Date: 2025-08-02 11:38+0300\n" "PO-Revision-Date: 2024-09-07 09:48+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -41,74 +41,74 @@ msgstr "нехватка памяти\n" msgid "cannot duplicate null pointer (internal error)\n" msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n" -#: ../../common/jsonapi.c:1084 +#: ../../common/jsonapi.c:1087 #, c-format msgid "Escape sequence \"\\%s\" is invalid." msgstr "Неверная спецпоследовательность: \"\\%s\"." -#: ../../common/jsonapi.c:1087 +#: ../../common/jsonapi.c:1090 #, c-format msgid "Character with value 0x%02x must be escaped." msgstr "Символ с кодом 0x%02x необходимо экранировать." -#: ../../common/jsonapi.c:1090 +#: ../../common/jsonapi.c:1093 #, c-format msgid "Expected end of input, but found \"%s\"." msgstr "Ожидался конец текста, но обнаружено продолжение \"%s\"." -#: ../../common/jsonapi.c:1093 +#: ../../common/jsonapi.c:1096 #, c-format msgid "Expected array element or \"]\", but found \"%s\"." msgstr "Ожидался элемент массива или \"]\", но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1096 +#: ../../common/jsonapi.c:1099 #, c-format msgid "Expected \",\" or \"]\", but found \"%s\"." msgstr "Ожидалась \",\" или \"]\", но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1099 +#: ../../common/jsonapi.c:1102 #, c-format msgid "Expected \":\", but found \"%s\"." msgstr "Ожидалось \":\", но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1102 +#: ../../common/jsonapi.c:1105 #, c-format msgid "Expected JSON value, but found \"%s\"." msgstr "Ожидалось значение JSON, но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1105 +#: ../../common/jsonapi.c:1108 msgid "The input string ended unexpectedly." msgstr "Неожиданный конец входной строки." -#: ../../common/jsonapi.c:1107 +#: ../../common/jsonapi.c:1110 #, c-format msgid "Expected string or \"}\", but found \"%s\"." msgstr "Ожидалась строка или \"}\", но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1110 +#: ../../common/jsonapi.c:1113 #, c-format msgid "Expected \",\" or \"}\", but found \"%s\"." msgstr "Ожидалась \",\" или \"}\", но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1113 +#: ../../common/jsonapi.c:1116 #, c-format msgid "Expected string, but found \"%s\"." msgstr "Ожидалась строка, но обнаружено \"%s\"." -#: ../../common/jsonapi.c:1116 +#: ../../common/jsonapi.c:1119 #, c-format msgid "Token \"%s\" is invalid." msgstr "Ошибочный элемент \"%s\"." -#: ../../common/jsonapi.c:1119 +#: ../../common/jsonapi.c:1122 msgid "\\u0000 cannot be converted to text." msgstr "\\u0000 нельзя преобразовать в текст." -#: ../../common/jsonapi.c:1121 +#: ../../common/jsonapi.c:1124 msgid "\"\\u\" must be followed by four hexadecimal digits." msgstr "За \"\\u\" должны следовать четыре шестнадцатеричные цифры." -#: ../../common/jsonapi.c:1124 +#: ../../common/jsonapi.c:1127 msgid "" "Unicode escape values cannot be used for code point values above 007F when " "the encoding is not UTF8." @@ -116,12 +116,12 @@ msgstr "" "Спецкоды Unicode для значений выше 007F можно использовать только с " "кодировкой UTF8." -#: ../../common/jsonapi.c:1126 +#: ../../common/jsonapi.c:1129 msgid "Unicode high surrogate must not follow a high surrogate." msgstr "" "Старшее слово суррогата Unicode не может следовать за другим старшим словом." -#: ../../common/jsonapi.c:1128 +#: ../../common/jsonapi.c:1131 msgid "Unicode low surrogate must follow a high surrogate." msgstr "Младшее слово суррогата Unicode должно следовать за старшим словом." diff --git a/src/bin/pg_waldump/po/es.po b/src/bin/pg_waldump/po/es.po index ef8f8468b01..84c5636ec4d 100644 --- a/src/bin/pg_waldump/po/es.po +++ b/src/bin/pg_waldump/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pg_waldump (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:35+0000\n" +"POT-Creation-Date: 2026-02-06 21:31+0000\n" "PO-Revision-Date: 2021-09-16 09:26+0200\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -320,122 +320,122 @@ msgstr "posición de registro no válida en %X/%X" msgid "contrecord is requested by %X/%X" msgstr "contrecord solicitado por %X/%X" -#: xlogreader.c:372 xlogreader.c:720 +#: xlogreader.c:372 xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "largo de registro no válido en %X/%X: se esperaba %u, se obtuvo %u" -#: xlogreader.c:442 +#: xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "no hay bandera de contrecord en %X/%X" -#: xlogreader.c:455 +#: xlogreader.c:456 #, 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" -#: xlogreader.c:728 +#: xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "ID de gestor de recursos %u no válido en %X/%X" -#: xlogreader.c:741 xlogreader.c:757 +#: xlogreader.c:749 xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "registro con prev-link %X/%X incorrecto en %X/%X" -#: xlogreader.c:795 +#: xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X" -#: xlogreader.c:832 +#: xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "número mágico %04X no válido en archivo %s, posición %u" -#: xlogreader.c:846 xlogreader.c:887 +#: xlogreader.c:854 xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "info bits %04X no válidos en archivo %s, posición %u" -#: xlogreader.c:861 +#: xlogreader.c:869 #, c-format msgid "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu" msgstr "archivo WAL es de un sistema de bases de datos distinto: identificador de sistema en archivo WAL es %llu, identificador en pg_control es %llu" -#: xlogreader.c:869 +#: xlogreader.c:877 #, c-format msgid "WAL file is from different database system: incorrect segment size in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: tamaño de segmento incorrecto en cabecera de paǵina" -#: xlogreader.c:875 +#: xlogreader.c:883 #, c-format msgid "WAL file is from different database system: incorrect XLOG_BLCKSZ in page header" msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ incorrecto en cabecera de paǵina" -#: xlogreader.c:906 +#: xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "pageaddr %X/%X inesperado en archivo %s, posición %u" -#: xlogreader.c:931 +#: xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "ID de timeline %u fuera de secuencia (después de %u) en archivo %s, posición %u" -#: xlogreader.c:1276 +#: xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "block_id %u fuera de orden en %X/%X" -#: xlogreader.c:1298 +#: xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X" -#: xlogreader.c:1305 +#: xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X" -#: xlogreader.c:1341 +#: xlogreader.c:1349 #, c-format msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X" -#: xlogreader.c:1357 +#: xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X" -#: xlogreader.c:1372 +#: xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "BKPIMAGE_IS_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1387 +#: xlogreader.c:1395 #, c-format msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X" msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED está definido, pero largo de imagen de bloque es %u en %X/%X" -#: xlogreader.c:1403 +#: xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X " -#: xlogreader.c:1415 +#: xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "block_id %u no válido en %X/%X" -#: xlogreader.c:1502 +#: xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "registro con largo no válido en %X/%X" -#: xlogreader.c:1591 +#: xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "imagen comprimida no válida en %X/%X, bloque %d" diff --git a/src/bin/pg_waldump/po/ru.po b/src/bin/pg_waldump/po/ru.po index 0b6e1375877..93c00f3716d 100644 --- a/src/bin/pg_waldump/po/ru.po +++ b/src/bin/pg_waldump/po/ru.po @@ -1,12 +1,12 @@ # Russian message translation file for pg_waldump # Copyright (C) 2017 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2017, 2018, 2019, 2020, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2017, 2018, 2019, 2020, 2022, 2023, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pg_waldump (PostgreSQL) 10\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2023-11-03 09:09+0300\n" +"POT-Creation-Date: 2025-08-02 11:38+0300\n" "PO-Revision-Date: 2024-09-07 08:59+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -353,49 +353,49 @@ msgstr "неверное смещение записи в позиции %X/%X" msgid "contrecord is requested by %X/%X" msgstr "в позиции %X/%X запрошено продолжение записи" -#: xlogreader.c:372 xlogreader.c:720 +#: xlogreader.c:372 xlogreader.c:728 #, c-format msgid "invalid record length at %X/%X: wanted %u, got %u" msgstr "неверная длина записи в позиции %X/%X: ожидалось %u, получено %u" -#: xlogreader.c:442 +#: xlogreader.c:443 #, c-format msgid "there is no contrecord flag at %X/%X" msgstr "нет флага contrecord в позиции %X/%X" -#: xlogreader.c:455 +#: xlogreader.c:456 #, c-format msgid "invalid contrecord length %u (expected %lld) at %X/%X" msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X" -#: xlogreader.c:728 +#: xlogreader.c:736 #, c-format msgid "invalid resource manager ID %u at %X/%X" msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X" -#: xlogreader.c:741 xlogreader.c:757 +#: xlogreader.c:749 xlogreader.c:765 #, c-format msgid "record with incorrect prev-link %X/%X at %X/%X" msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X" -#: xlogreader.c:795 +#: xlogreader.c:803 #, c-format msgid "incorrect resource manager data checksum in record at %X/%X" msgstr "" "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции " "%X/%X" -#: xlogreader.c:832 +#: xlogreader.c:840 #, c-format msgid "invalid magic number %04X in log segment %s, offset %u" msgstr "неверное магическое число %04X в сегменте журнала %s, смещение %u" -#: xlogreader.c:846 xlogreader.c:887 +#: xlogreader.c:854 xlogreader.c:895 #, c-format msgid "invalid info bits %04X in log segment %s, offset %u" msgstr "неверные информационные биты %04X в сегменте журнала %s, смещение %u" -#: xlogreader.c:861 +#: xlogreader.c:869 #, c-format msgid "" "WAL file is from different database system: WAL file database system " @@ -404,7 +404,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: в нём указан идентификатор системы БД " "%llu, а идентификатор системы pg_control: %llu" -#: xlogreader.c:869 +#: xlogreader.c:877 #, c-format msgid "" "WAL file is from different database system: incorrect segment size in page " @@ -413,7 +413,7 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный размер сегмента в заголовке " "страницы" -#: xlogreader.c:875 +#: xlogreader.c:883 #, c-format msgid "" "WAL file is from different database system: incorrect XLOG_BLCKSZ in page " @@ -422,35 +422,35 @@ msgstr "" "файл WAL принадлежит другой СУБД: некорректный XLOG_BLCKSZ в заголовке " "страницы" -#: xlogreader.c:906 +#: xlogreader.c:914 #, c-format msgid "unexpected pageaddr %X/%X in log segment %s, offset %u" msgstr "неожиданный pageaddr %X/%X в сегменте журнала %s, смещение %u" -#: xlogreader.c:931 +#: xlogreader.c:939 #, c-format msgid "out-of-sequence timeline ID %u (after %u) in log segment %s, offset %u" msgstr "" "нарушение последовательности ID линии времени %u (после %u) в сегменте " "журнала %s, смещение %u" -#: xlogreader.c:1276 +#: xlogreader.c:1284 #, c-format msgid "out-of-order block_id %u at %X/%X" msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X" -#: xlogreader.c:1298 +#: xlogreader.c:1306 #, c-format msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X" msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет" -#: xlogreader.c:1305 +#: xlogreader.c:1313 #, c-format msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X" msgstr "" "BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X" -#: xlogreader.c:1341 +#: xlogreader.c:1349 #, c-format msgid "" "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " @@ -459,21 +459,21 @@ msgstr "" "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u " "при длине образа блока %u в позиции %X/%X" -#: xlogreader.c:1357 +#: xlogreader.c:1365 #, c-format msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X" msgstr "" "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина " "%u в позиции %X/%X" -#: xlogreader.c:1372 +#: xlogreader.c:1380 #, c-format msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X" msgstr "" "BKPIMAGE_IS_COMPRESSED установлен, но длина образа блока равна %u в позиции " "%X/%X" -#: xlogreader.c:1387 +#: xlogreader.c:1395 #, c-format msgid "" "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image " @@ -482,24 +482,24 @@ msgstr "" "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_IS_COMPRESSED не установлены, но длина " "образа блока равна %u в позиции %X/%X" -#: xlogreader.c:1403 +#: xlogreader.c:1411 #, c-format msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X" msgstr "" "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/" "%X" -#: xlogreader.c:1415 +#: xlogreader.c:1423 #, c-format msgid "invalid block_id %u at %X/%X" msgstr "неверный идентификатор блока %u в позиции %X/%X" -#: xlogreader.c:1502 +#: xlogreader.c:1510 #, c-format msgid "record with invalid length at %X/%X" msgstr "запись с неверной длиной в позиции %X/%X" -#: xlogreader.c:1591 +#: xlogreader.c:1599 #, c-format msgid "invalid compressed image at %X/%X, block %d" msgstr "неверный сжатый образ в позиции %X/%X, блок %d" diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index bef07be3925..fd70196a160 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -3083,14 +3083,28 @@ readCommandResponse(CState *st, MetaCommand meta, char *varprefix) pg_log_debug("client %d pipeline ending", st->id); if (PQexitPipelineMode(st->con) != 1) pg_log_error("client %d failed to exit pipeline mode: %s", st->id, - PQerrorMessage(st->con)); + PQresultErrorMessage(res)); break; + case PGRES_COPY_IN: + case PGRES_COPY_OUT: + case PGRES_COPY_BOTH: + pg_log_error("COPY is not supported in pgbench, aborting"); + + /* + * We need to exit the copy state. Otherwise, PQgetResult() + * will always return an empty PGresult as an effect of + * getCopyResult(), leading to an infinite loop in the error + * cleanup done below. + */ + PQendcopy(st->con); + goto error; + default: /* anything else is unexpected */ pg_log_error("client %d script %d aborted in command %d query %d: %s", st->id, st->use_file, st->command, qrynum, - PQerrorMessage(st->con)); + PQresultErrorMessage(res)); goto error; } diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index fbd45c766cc..52bcf8fec14 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -1315,6 +1315,17 @@ sub check_pgbench_logs check_pgbench_logs($bdir, '001_pgbench_log_3', 1, 10, 10, qr{^0 \d{1,2} \d+ \d \d+ \d+$}); +# Test copy in pgbench +$node->pgbench( + '-t 10', + 2, + [], + [ qr{COPY is not supported in pgbench, aborting} ], + 'Test copy in script', + { + '001_copy' => q{ COPY pgbench_accounts FROM stdin } + }); + # done $node->safe_psql('postgres', 'DROP TABLESPACE regress_pgbench_tap_1_ts'); $node->stop; diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 27511e47d7a..a28d02d0fff 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -127,6 +127,8 @@ static backslashResult exec_command_pset(PsqlScanState scan_state, bool active_b static backslashResult exec_command_quit(PsqlScanState scan_state, bool active_branch); static backslashResult exec_command_reset(PsqlScanState scan_state, bool active_branch, PQExpBuffer query_buf); +static backslashResult exec_command_restrict(PsqlScanState scan_state, bool active_branch, + const char *cmd); static backslashResult exec_command_s(PsqlScanState scan_state, bool active_branch); static backslashResult exec_command_set(PsqlScanState scan_state, bool active_branch); static backslashResult exec_command_setenv(PsqlScanState scan_state, bool active_branch, @@ -136,6 +138,8 @@ static backslashResult exec_command_sf_sv(PsqlScanState scan_state, bool active_ static backslashResult exec_command_t(PsqlScanState scan_state, bool active_branch); static backslashResult exec_command_T(PsqlScanState scan_state, bool active_branch); static backslashResult exec_command_timing(PsqlScanState scan_state, bool active_branch); +static backslashResult exec_command_unrestrict(PsqlScanState scan_state, bool active_branch, + const char *cmd); static backslashResult exec_command_unset(PsqlScanState scan_state, bool active_branch, const char *cmd); static backslashResult exec_command_write(PsqlScanState scan_state, bool active_branch, @@ -185,6 +189,8 @@ static char *pset_value_string(const char *param, printQueryOpt *popt); static void checkWin32Codepage(void); #endif +static bool restricted; +static char *restrict_key; /*---------- @@ -241,8 +247,19 @@ HandleSlashCmds(PsqlScanState scan_state, } - /* And try to execute it */ - status = exec_command(cmd, scan_state, cstack, query_buf, previous_buf); + /* + * And try to execute it. + * + * If we are in "restricted" mode, the only allowable backslash command is + * \unrestrict (to exit restricted mode). + */ + if (restricted && strcmp(cmd, "unrestrict") != 0) + { + pg_log_error("backslash commands are restricted; only \\unrestrict is allowed"); + status = PSQL_CMD_ERROR; + } + else + status = exec_command(cmd, scan_state, cstack, query_buf, previous_buf); if (status == PSQL_CMD_UNKNOWN) @@ -404,6 +421,8 @@ exec_command(const char *cmd, status = exec_command_quit(scan_state, active_branch); else if (strcmp(cmd, "r") == 0 || strcmp(cmd, "reset") == 0) status = exec_command_reset(scan_state, active_branch, query_buf); + else if (strcmp(cmd, "restrict") == 0) + status = exec_command_restrict(scan_state, active_branch, cmd); else if (strcmp(cmd, "s") == 0) status = exec_command_s(scan_state, active_branch); else if (strcmp(cmd, "set") == 0) @@ -420,6 +439,8 @@ exec_command(const char *cmd, status = exec_command_T(scan_state, active_branch); else if (strcmp(cmd, "timing") == 0) status = exec_command_timing(scan_state, active_branch); + else if (strcmp(cmd, "unrestrict") == 0) + status = exec_command_unrestrict(scan_state, active_branch, cmd); else if (strcmp(cmd, "unset") == 0) status = exec_command_unset(scan_state, active_branch, cmd); else if (strcmp(cmd, "w") == 0 || strcmp(cmd, "write") == 0) @@ -2284,6 +2305,35 @@ exec_command_reset(PsqlScanState scan_state, bool active_branch, return PSQL_CMD_SKIP_LINE; } +/* + * \restrict -- enter "restricted mode" with the provided key + */ +static backslashResult +exec_command_restrict(PsqlScanState scan_state, bool active_branch, + const char *cmd) +{ + if (active_branch) + { + char *opt; + + Assert(!restricted); + + opt = psql_scan_slash_option(scan_state, OT_NORMAL, NULL, true); + if (opt == NULL || opt[0] == '\0') + { + pg_log_error("\\%s: missing required argument", cmd); + return PSQL_CMD_ERROR; + } + + restrict_key = pstrdup(opt); + restricted = true; + } + else + ignore_slash_options(scan_state); + + return PSQL_CMD_SKIP_LINE; +} + /* * \s -- save history in a file or show it on the screen */ @@ -2586,6 +2636,46 @@ exec_command_timing(PsqlScanState scan_state, bool active_branch) return success ? PSQL_CMD_SKIP_LINE : PSQL_CMD_ERROR; } +/* + * \unrestrict -- exit "restricted mode" if provided key matches + */ +static backslashResult +exec_command_unrestrict(PsqlScanState scan_state, bool active_branch, + const char *cmd) +{ + if (active_branch) + { + char *opt; + + opt = psql_scan_slash_option(scan_state, OT_NORMAL, NULL, true); + if (opt == NULL || opt[0] == '\0') + { + pg_log_error("\\%s: missing required argument", cmd); + return PSQL_CMD_ERROR; + } + + if (!restricted) + { + pg_log_error("\\%s: not currently in restricted mode", cmd); + return PSQL_CMD_ERROR; + } + else if (strcmp(opt, restrict_key) == 0) + { + pfree(restrict_key); + restricted = false; + } + else + { + pg_log_error("\\%s: wrong key", cmd); + return PSQL_CMD_ERROR; + } + } + else + ignore_slash_options(scan_state); + + return PSQL_CMD_SKIP_LINE; +} + /* * \unset -- unset variable */ diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index b1806391f3d..9a5e3289718 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -2085,6 +2085,7 @@ describeOneTableDetails(const char *schemaname, attgenerated_col = cols++; } if (tableinfo.relkind == RELKIND_INDEX || + tableinfo.relkind == RELKIND_GLOBAL_INDEX || tableinfo.relkind == RELKIND_PARTITIONED_INDEX) { if (pset.sversion >= 110000) @@ -2125,6 +2126,7 @@ describeOneTableDetails(const char *schemaname, /* stats target, if relevant to relkind */ if (tableinfo.relkind == RELKIND_RELATION || tableinfo.relkind == RELKIND_INDEX || + tableinfo.relkind == RELKIND_GLOBAL_INDEX || tableinfo.relkind == RELKIND_PARTITIONED_INDEX || tableinfo.relkind == RELKIND_MATVIEW || tableinfo.relkind == RELKIND_FOREIGN_TABLE || @@ -2190,6 +2192,14 @@ describeOneTableDetails(const char *schemaname, printfPQExpBuffer(&title, _("Index \"%s.%s\""), schemaname, relationname); break; + case RELKIND_GLOBAL_INDEX: + if (tableinfo.relpersistence == 'u') + printfPQExpBuffer(&title, _("Unlogged global index \"%s.%s\""), + schemaname, relationname); + else + printfPQExpBuffer(&title, _("Global index \"%s.%s\""), + schemaname, relationname); + break; case RELKIND_PARTITIONED_INDEX: if (tableinfo.relpersistence == 'u') printfPQExpBuffer(&title, _("Unlogged partitioned index \"%s.%s\""), @@ -2464,6 +2474,7 @@ describeOneTableDetails(const char *schemaname, } if (tableinfo.relkind == RELKIND_INDEX || + tableinfo.relkind == RELKIND_GLOBAL_INDEX || tableinfo.relkind == RELKIND_PARTITIONED_INDEX) { /* Footer information about an index */ @@ -2561,7 +2572,7 @@ describeOneTableDetails(const char *schemaname, /* * If it's a partitioned index, we'll print the tablespace below */ - if (tableinfo.relkind == RELKIND_INDEX) + if (tableinfo.relkind == RELKIND_INDEX || tableinfo.relkind == RELKIND_GLOBAL_INDEX) add_tablespace_footer(&cont, tableinfo.relkind, tableinfo.tablespace, true); } @@ -3760,6 +3771,7 @@ add_tablespace_footer(printTableContent *const cont, char relkind, if (relkind == RELKIND_RELATION || relkind == RELKIND_MATVIEW || relkind == RELKIND_INDEX || + relkind == RELKIND_GLOBAL_INDEX || relkind == RELKIND_PARTITIONED_TABLE || relkind == RELKIND_PARTITIONED_INDEX || relkind == RELKIND_TOASTVALUE) @@ -4115,6 +4127,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys " WHEN " CppAsString2(RELKIND_VIEW) " THEN '%s'" " WHEN " CppAsString2(RELKIND_MATVIEW) " THEN '%s'" " WHEN " CppAsString2(RELKIND_INDEX) " THEN '%s'" + " WHEN " CppAsString2(RELKIND_GLOBAL_INDEX) " THEN '%s'" " WHEN " CppAsString2(RELKIND_SEQUENCE) " THEN '%s'" " WHEN 's' THEN '%s'" " WHEN " CppAsString2(RELKIND_TOASTVALUE) " THEN '%s'" @@ -4129,6 +4142,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys gettext_noop("view"), gettext_noop("materialized view"), gettext_noop("index"), + gettext_noop("global index"), gettext_noop("sequence"), gettext_noop("special"), gettext_noop("TOAST table"), @@ -4227,6 +4241,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys appendPQExpBufferStr(&buf, CppAsString2(RELKIND_MATVIEW) ","); if (showIndexes) appendPQExpBufferStr(&buf, CppAsString2(RELKIND_INDEX) "," + CppAsString2(RELKIND_GLOBAL_INDEX) "," CppAsString2(RELKIND_PARTITIONED_INDEX) ","); if (showSeq) appendPQExpBufferStr(&buf, CppAsString2(RELKIND_SEQUENCE) ","); diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 018ccfe4f32..d8fa625a91d 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -179,6 +179,10 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\gset [PREFIX] execute query and store results in psql variables\n")); fprintf(output, _(" \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output mode\n")); fprintf(output, _(" \\q quit psql\n")); + fprintf(output, _(" \\restrict RESTRICT_KEY\n" + " enter restricted mode with provided key\n")); + fprintf(output, _(" \\unrestrict RESTRICT_KEY\n" + " exit restricted mode if key matches\n")); fprintf(output, _(" \\watch [SEC] execute query every SEC seconds\n")); fprintf(output, "\n"); @@ -438,6 +442,9 @@ helpVariables(unsigned short int pager) " border style (number)\n")); fprintf(output, _(" columns\n" " target width for the wrapped format\n")); + fprintf(output, _(" csv_fieldsep\n" + " field separator for CSV output format (default \"%c\")\n"), + DEFAULT_CSV_FIELD_SEP); fprintf(output, _(" expanded (or x)\n" " expanded output [on, off, auto]\n")); fprintf(output, _(" fieldsep\n" @@ -688,7 +695,7 @@ void print_copyright(void) { puts("PostgreSQL Database Management System\n" - "(formerly known as Postgres, then as Postgres95)\n\n" + "(also known as Postgres, formerly known as Postgres95)\n\n" "Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group\n\n" "Portions Copyright (c) 1994, The Regents of the University of California\n\n" "Permission to use, copy, modify, and distribute this software and its\n" diff --git a/src/bin/psql/po/de.po b/src/bin/psql/po/de.po index 6fdb27f5fe6..b8b69932273 100644 --- a/src/bin/psql/po/de.po +++ b/src/bin/psql/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-08 07:47+0000\n" +"POT-Creation-Date: 2025-11-07 07:20+0000\n" "PO-Revision-Date: 2022-02-01 13:33+0100\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -68,7 +68,7 @@ msgid "%s() failed: %m" msgstr "%s() fehlgeschlagen: %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1316 command.c:3248 command.c:3297 command.c:3414 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -90,7 +90,7 @@ msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n" msgid "could not look up effective user ID %ld: %s" msgstr "konnte effektive Benutzer-ID %ld nicht nachschlagen: %s" -#: ../../common/username.c:45 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "Benutzer existiert nicht" @@ -169,91 +169,96 @@ msgstr "ungültiges Ausgabeformat (interner Fehler): %d" msgid "skipping recursive expansion of variable \"%s\"" msgstr "rekursive Auswertung der Variable »%s« wird ausgelassen" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "Backslash-Befehle sind eingeschränkt; nur \\unrestrict ist erlaubt" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "ungültige Anweisung \\%s" -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr "Versuchen Sie \\? für Hilfe." -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: überflüssiges Argument »%s« ignoriert" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "Befehl \\%s ignoriert; verwenden Sie \\endif oder Strg-C um den aktuellen \\if-Block zu beenden" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "konnte Home-Verzeichnis für Benutzer-ID %ld nicht ermitteln: %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: konnte nicht in das Verzeichnis »%s« wechseln: %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Sie sind gegenwärtig nicht mit einer Datenbank verbunden.\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« auf Adresse »%s« auf Port »%s«.\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« via Socket in »%s« auf Port »%s«.\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« (Adresse »%s«) auf Port »%s«.\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Sie sind verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« auf Port »%s«.\n" -#: command.c:1011 command.c:1120 command.c:2604 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "kein Anfragepuffer" -#: command.c:1044 command.c:5314 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "ungültige Zeilennummer: %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Der Server (Version %s) unterstützt das Bearbeiten des Funktionsquelltextes nicht." -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Der Server (Version %s) unterstützt das Bearbeiten von Sichtdefinitionen nicht." -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "keine Änderungen" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: ungültiger Kodierungsname oder Umwandlungsprozedur nicht gefunden" -#: command.c:1312 command.c:2064 command.c:3244 command.c:3436 command.c:5420 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 #: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 @@ -261,179 +266,189 @@ msgstr "%s: ungültiger Kodierungsname oder Umwandlungsprozedur nicht gefunden" msgid "%s" msgstr "%s" -#: command.c:1319 +#: command.c:1341 msgid "There is no previous error." msgstr "Es gibt keinen vorangegangenen Fehler." -#: command.c:1432 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: rechte Klammer fehlt" -#: command.c:1609 command.c:1914 command.c:1928 command.c:1945 command.c:2115 -#: command.c:2351 command.c:2571 command.c:2611 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: notwendiges Argument fehlt" -#: command.c:1740 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: kann nicht nach \\else kommen" -#: command.c:1745 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: kein passendes \\if" -#: command.c:1809 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: kann nicht nach \\else kommen" -#: command.c:1814 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: kein passendes \\if" -#: command.c:1854 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: kein passendes \\if" -#: command.c:2009 +#: command.c:2031 msgid "Query buffer is empty." msgstr "Anfragepuffer ist leer." -#: command.c:2046 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "Neues Passwort für Benutzer »%s« eingeben: " -#: command.c:2049 +#: command.c:2071 msgid "Enter it again: " msgstr "Geben Sie es noch einmal ein: " -#: command.c:2053 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "Passwörter stimmten nicht überein." -#: command.c:2144 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: konnte Wert für Variable nicht lesen" -#: command.c:2247 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "Anfragepuffer wurde gelöscht." -#: command.c:2269 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Befehlsgeschichte in Datei »%s« geschrieben.\n" -#: command.c:2356 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: Name der Umgebungsvariable darf kein »=« enthalten" -#: command.c:2408 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Der Server (Version %s) unterstützt das Anzeigen des Funktionsquelltextes nicht." -#: command.c:2411 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Der Server (Version %s) unterstützt das Anzeigen von Sichtdefinitionen nicht." -#: command.c:2418 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "Funktionsname wird benötigt" -#: command.c:2420 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "Sichtname wird benötigt" -#: command.c:2543 +#: command.c:2594 msgid "Timing is on." msgstr "Zeitmessung ist an." -#: command.c:2545 +#: command.c:2596 msgid "Timing is off." msgstr "Zeitmessung ist aus." -#: command.c:2630 command.c:2658 command.c:3875 command.c:3878 command.c:3881 -#: command.c:3887 command.c:3889 command.c:3915 command.c:3925 command.c:3937 -#: command.c:3951 command.c:3978 command.c:4036 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s: aktuell nicht im Restricted-Modus" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s: falscher Schlüssel" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:3049 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "Passwort: " -#: command.c:3054 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Passwort für Benutzer %s: " -#: command.c:3106 +#: command.c:3197 #, c-format msgid "Do not give user, host, or port separately when using a connection string" msgstr "Geben Sie Benutzer, Host oder Port nicht separat an, wenn eine Verbindungsangabe verwendet wird" -#: command.c:3141 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "Es gibt keine Verbindung, von der die Parameter verwendet werden können" -#: command.c:3442 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "Vorherige Verbindung wurde behalten" -#: command.c:3448 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3504 +#: command.c:3595 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« auf Adresse »%s« auf Port »%s«.\n" -#: command.c:3507 +#: command.c:3598 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« via Socket in »%s« auf Port »%s«.\n" -#: command.c:3513 +#: command.c:3604 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« (Adresse »%s«) auf Port »%s«.\n" -#: command.c:3516 +#: command.c:3607 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s« auf Host »%s« auf Port »%s«.\n" -#: command.c:3521 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Sie sind jetzt verbunden mit der Datenbank »%s« als Benutzer »%s«.\n" -#: command.c:3561 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, Server %s)\n" -#: command.c:3569 +#: command.c:3660 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -442,29 +457,29 @@ msgstr "" "WARNUNG: %s-Hauptversion %s, Server-Hauptversion %s.\n" " Einige Features von psql werden eventuell nicht funktionieren.\n" -#: command.c:3608 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL-Verbindung (Protokoll: %s, Verschlüsselungsmethode: %s, Bits: %s, Komprimierung: %s)\n" -#: command.c:3609 command.c:3610 command.c:3611 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "unbekannt" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "aus" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "an" -#: command.c:3626 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI-verschlüsselte Verbindung\n" -#: command.c:3646 +#: command.c:3737 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -476,259 +491,259 @@ msgstr "" " richtig. Einzelheiten finden Sie auf der psql-Handbuchseite unter\n" " »Notes for Windows users«.\n" -#: command.c:3751 +#: command.c:3844 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "Umgebungsvariable PSQL_EDITOR_LINENUMBER_ARG muss gesetzt werden, um eine Zeilennummer angeben zu können" -#: command.c:3780 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "konnte Editor »%s« nicht starten" -#: command.c:3782 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "konnte /bin/sh nicht starten" -#: command.c:3832 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "konnte temporäres Verzeichnis nicht finden: %s" -#: command.c:3859 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "konnte temporäre Datei »%s« nicht öffnen: %m" -#: command.c:4195 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: Abkürzung »%s« ist nicht eindeutig, passt auf »%s« und »%s«" -#: command.c:4215 +#: command.c:4308 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: zulässige Formate sind aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4234 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: zulässige Linienstile sind ascii, old-ascii, unicode" -#: command.c:4249 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: zulässige Unicode-Rahmnenlinienstile sind single, double" -#: command.c:4264 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: zulässige Unicode-Spaltenlinienstile sind single, double" -#: command.c:4279 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: zulässige Unicode-Kopflinienstile sind single, double" -#: command.c:4322 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep muss ein einzelnes Ein-Byte-Zeichen sein" -#: command.c:4327 +#: command.c:4420 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep kann nicht doppeltes Anführungszeichen, Newline oder Carriage Return sein" -#: command.c:4464 command.c:4652 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: unbekannte Option: %s" -#: command.c:4484 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "Rahmenstil ist %d.\n" -#: command.c:4490 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "Zielbreite ist nicht gesetzt.\n" -#: command.c:4492 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "Zielbreite ist %d.\n" -#: command.c:4499 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "Erweiterte Anzeige ist an.\n" -#: command.c:4501 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Erweiterte Anzeige wird automatisch verwendet.\n" -#: command.c:4503 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "Erweiterte Anzeige ist aus.\n" -#: command.c:4509 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Feldtrennzeichen für CSV ist »%s«.\n" -#: command.c:4517 command.c:4525 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "Feldtrennzeichen ist ein Null-Byte.\n" -#: command.c:4519 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Feldtrennzeichen ist »%s«.\n" -#: command.c:4532 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "Standardfußzeile ist an.\n" -#: command.c:4534 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "Standardfußzeile ist aus.\n" -#: command.c:4540 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "Ausgabeformat ist »%s«.\n" -#: command.c:4546 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "Linienstil ist %s.\n" -#: command.c:4553 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null-Anzeige ist »%s«.\n" -#: command.c:4561 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Lokalisiertes Format für numerische Daten ist an.\n" -#: command.c:4563 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Lokalisiertes Format für numerische Daten ist aus.\n" -#: command.c:4570 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "Pager wird für lange Ausgaben verwendet.\n" -#: command.c:4572 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "Pager wird immer verwendet.\n" -#: command.c:4574 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "Pager-Verwendung ist aus.\n" -#: command.c:4580 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "Pager wird nicht für weniger als %d Zeile verwendet werden.\n" msgstr[1] "Pager wird nicht für weniger als %d Zeilen verwendet werden.\n" -#: command.c:4590 command.c:4600 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "Satztrennzeichen ist ein Null-Byte.\n" -#: command.c:4592 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "Satztrennzeichen ist .\n" -#: command.c:4594 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Satztrennzeichen ist »%s«.\n" -#: command.c:4607 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Tabellenattribute sind »%s«.\n" -#: command.c:4610 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "Tabellenattribute sind nicht gesetzt.\n" -#: command.c:4617 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "Titel ist »%s«.\n" -#: command.c:4619 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "Titel ist nicht gesetzt.\n" -#: command.c:4626 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "Nur Datenzeilen ist an.\n" -#: command.c:4628 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "Nur Datenzeilen ist aus.\n" -#: command.c:4634 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Unicode-Rahmenlinienstil ist »%s«.\n" -#: command.c:4640 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Unicode-Spaltenlinienstil ist »%s«.\n" -#: command.c:4646 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Unicode-Kopflinienstil ist »%s«.\n" -#: command.c:4879 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\!: fehlgeschlagen" -#: command.c:4904 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch kann nicht mit einer leeren Anfrage verwendet werden" -#: command.c:4945 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (alle %gs)\n" -#: command.c:4948 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (alle %gs)\n" -#: command.c:5010 command.c:5017 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -741,12 +756,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5209 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "»%s.%s« ist keine Sicht" -#: command.c:5225 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "konnte reloptions-Array nicht interpretieren" @@ -2422,7 +2437,7 @@ msgstr "" "psql ist das interaktive PostgreSQL-Terminal.\n" "\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "Aufruf:\n" @@ -2785,251 +2800,269 @@ msgstr " \\q psql beenden\n" #: help.c:182 #, c-format +msgid "" +" \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr "" +" \\restrict RESTRICT_KEY\n" +" Restricted-Modus mit angegebenem Schlüssel starten\n" + +#: help.c:184 +#, c-format +msgid "" +" \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr "" +" \\unrestrict RESTRICT_KEY\n" +" Restricted-Modus beenden, wenn der Schlüssel passt\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEK] Anfrage alle SEK Sekunden ausführen\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "Hilfe\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] Hilfe über Backslash-Befehle anzeigen\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options Hilfe über psql-Kommandozeilenoptionen anzeigen\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables Hilfe über besondere Variablen anzeigen\n" -#: help.c:190 +#: help.c:194 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [NAME] Syntaxhilfe über SQL-Anweisung, * für alle Anweisungen\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "Anfragepuffer\n" -#: help.c:194 +#: help.c:198 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [DATEI] [ZEILE] Anfragepuffer (oder Datei) mit externem Editor bearbeiten\n" -#: help.c:195 +#: help.c:199 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNKNAME [ZEILE]] Funktionsdefinition mit externem Editor bearbeiten\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [SICHTNAME [ZEILE]] Sichtdefinition mit externem Editor bearbeiten\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p aktuellen Inhalt der Anfragepuffers zeigen\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r Anfragepuffer löschen\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [DATEI] Befehlsgeschichte ausgeben oder in Datei schreiben\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w DATEI Anfragepuffer in Datei schreiben\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "Eingabe/Ausgabe\n" -#: help.c:206 +#: help.c:210 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... SQL COPY mit Datenstrom auf Client-Host ausführen\n" -#: help.c:207 +#: help.c:211 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [TEXT] Text auf Standardausgabe schreiben (-n für ohne Newline)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i DATEI Befehle aus Datei ausführen\n" -#: help.c:209 +#: help.c:213 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir DATEI wie \\i, aber relativ zum Ort des aktuellen Skripts\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [DATEI] alle Anfrageergebnisse in Datei oder |Pipe schreiben\n" -#: help.c:211 +#: help.c:215 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr "" " \\qecho [-n] [TEXT] Text auf Ausgabestrom für \\o schreiben (-n für ohne\n" " Newline)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr "" " \\warn [-n] [TEXT] Text auf Standardfehlerausgabe schreiben (-n für ohne\n" " Newline)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "Bedingte Anweisungen\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if AUSDRUCK Beginn einer bedingten Anweisung\n" -#: help.c:217 +#: help.c:221 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif AUSDRUCK Alternative in aktueller bedingter Anweisung\n" -#: help.c:218 +#: help.c:222 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else letzte Alternative in aktueller bedingter Anweisung\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif Ende einer bedingten Anweisung\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "Informationen\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (Optionen: S = Systemobjekte zeigen, + = zusätzliche Details zeigen)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] Tabellen, Sichten und Sequenzen auflisten\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAME Tabelle, Sicht, Sequenz oder Index beschreiben\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MUSTER] Aggregatfunktionen auflisten\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [MUSTER] Zugriffsmethoden auflisten\n" -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMMUST [TYPMUST]] Operatorklassen auflisten\n" -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMMUST [TYPMUST]] Operatorfamilien auflisten\n" -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\dAo[+] [AMMUST [OPFMUST]] Operatoren in Operatorfamilien auflisten\n" -#: help.c:231 +#: help.c:235 #, c-format msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [AMMUST [OPFMUST]] Unterst.funktionen in Operatorfamilien auflisten\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MUSTER] Tablespaces auflisten\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MUSTER] Konversionen auflisten\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MUSTER] Typumwandlungen (Casts) auflisten\n" -#: help.c:235 +#: help.c:239 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [MUSTER] Objektbeschreibungen zeigen, die nirgendwo anders\n" " erscheinen\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MUSTER] Domänen auflisten\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MUSTER] Vorgabeprivilegien auflisten\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MUSTER] Fremdtabellen auflisten\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MUSTER] Fremdserver auflisten\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MUSTER] Fremdtabellen auflisten\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MUSTER] Benutzerabbildungen auflisten\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MUSTER] Fremddaten-Wrapper auflisten\n" -#: help.c:243 +#: help.c:247 #, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" @@ -3038,57 +3071,57 @@ msgstr "" " \\df[anptw][S+] [FUNKMUSTR [TYPMUSTR ...]]\n" " Funktionen [nur Agg/normale/Proz/Trigger/Fenster] auflisten\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [MUSTER] Textsuchekonfigurationen auflisten\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [MUSTER] Textsuchewörterbücher auflisten\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [MUSTER] Textsucheparser auflisten\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [MUSTER] Textsuchevorlagen auflisten\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [MUSTER] Rollen auflisten\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MUSTER] Indexe auflisten\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl Large Objects auflisten, wie \\lo_list\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MUSTER] prozedurale Sprachen auflisten\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MUSTER] materialisierte Sichten auflisten\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MUSTER] Schemas auflisten\n" -#: help.c:255 +#: help.c:259 #, c-format msgid "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" @@ -3097,128 +3130,128 @@ msgstr "" " \\do[S+] [OPMUST [TYPMUST [TYPMUST]]]\n" " Operatoren auflisten\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MUSTER] Sortierfolgen auflisten\n" -#: help.c:258 +#: help.c:262 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr "" " \\dp [MUSTER] Zugriffsprivilegien für Tabellen, Sichten und\n" " Sequenzen auflisten\n" -#: help.c:259 +#: help.c:263 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr "" " \\dP[itn+] [MUSTER] partitionierte Relationen [nur Indexe/Tabellen]\n" " auflisten [n=geschachtelt]\n" -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr " \\drds [ROLLMUST [DBMUST]] datenbankspezifische Rolleneinstellungen auflisten\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [MUSTER] Replikationspublikationen auflisten\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [MUSTER] Replikationssubskriptionen auflisten\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MUSTER] Sequenzen auflisten\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MUSTER] Tabellen auflisten\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MUSTER] Datentypen auflisten\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [MUSTER] Rollen auflisten\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MUSTER] Sichten auflisten\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MUSTER] Erweiterungen auflisten\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [MUSTER] erweiterte Statistiken auflisten\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [MUSTER] Ereignistrigger auflisten\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [MUSTER] Datenbanken auflisten\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] FUNKNAME Funktionsdefinition zeigen\n" -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] SICHTNAME Sichtdefinition zeigen\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MUSTER] äquivalent zu \\dp\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "Formatierung\n" -#: help.c:278 +#: help.c:282 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr "" " \\a zwischen unausgerichtetem und ausgerichtetem Ausgabemodus\n" " umschalten\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [TEXT] Tabellentitel setzen oder löschen\n" -#: help.c:280 +#: help.c:284 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [ZEICHEN] Feldtrennzeichen zeigen oder setzen\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H HTML-Ausgabemodus umschalten (gegenwärtig %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3237,27 +3270,27 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] nur Datenzeilen zeigen (gegenwärtig %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [TEXT] HTML
-Tag-Attribute setzen oder löschen\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] erweiterte Ausgabe umschalten (gegenwärtig %s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "Verbindung\n" -#: help.c:299 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3266,7 +3299,7 @@ msgstr "" " \\c[onnect] {[DBNAME|- BENUTZER|- HOST|- PORT|-] | conninfo}\n" " mit neuer Datenbank verbinden (aktuell »%s«)\n" -#: help.c:303 +#: help.c:307 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3275,74 +3308,74 @@ msgstr "" " \\c[onnect] {[DBNAME|- BENUTZER|- HOST|- PORT|-] | conninfo}\n" " mit neuer Datenbank verbinden (aktuell keine Verbindung)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo Informationen über aktuelle Verbindung anzeigen\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [KODIERUNG] Client-Kodierung zeigen oder setzen\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr "" " \\password [BENUTZERNAME]\n" " sicheres Ändern eines Benutzerpasswortes\n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "Betriebssystem\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [VERZ] Arbeitsverzeichnis wechseln\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [WERT] Umgebungsvariable setzen oder löschen\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] Zeitmessung umschalten (gegenwärtig %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [BEFEHL] Befehl in Shell ausführen oder interaktive Shell starten\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "Variablen\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXT] NAME interne Variable vom Benutzer abfragen\n" -#: help.c:320 +#: help.c:324 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr " \\set [NAME [WERT]] interne Variable setzen, oder alle anzeigen\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NAME interne Variable löschen\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "Large Objects\n" -#: help.c:325 +#: help.c:329 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3355,7 +3388,7 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID Large-Object-Operationen\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "" "List of specially treated variables\n" @@ -3364,12 +3397,12 @@ msgstr "" "Liste besonderer Variablen\n" "\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "psql-Variablen:\n" -#: help.c:356 +#: help.c:360 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3380,7 +3413,7 @@ msgstr "" " oder \\set NAME WERT innerhalb von psql\n" "\n" -#: help.c:358 +#: help.c:362 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3389,7 +3422,7 @@ msgstr "" " AUTOCOMMIT\n" " wenn gesetzt werden alle erfolgreichen SQL-Befehle automatisch committet\n" -#: help.c:360 +#: help.c:364 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3400,7 +3433,7 @@ msgstr "" " bestimmt, ob SQL-Schlüsselwörter in Groß- oder Kleinschreibung\n" " vervollständigt werden [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid "" " DBNAME\n" @@ -3409,7 +3442,7 @@ msgstr "" " DBNAME\n" " Name der aktuellen Datenbank\n" -#: help.c:365 +#: help.c:369 #, c-format msgid "" " ECHO\n" @@ -3420,7 +3453,7 @@ msgstr "" " kontrolliert, welche Eingaben auf die Standardausgabe geschrieben werden\n" " [all, errors, none, queries]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3431,7 +3464,7 @@ msgstr "" " wenn gesetzt, interne Anfragen, die von Backslash-Befehlen ausgeführt werden,\n" " anzeigen; wenn auf »noexec« gesetzt, nur anzeigen, nicht ausführen\n" -#: help.c:371 +#: help.c:375 #, c-format msgid "" " ENCODING\n" @@ -3440,7 +3473,7 @@ msgstr "" " ENCODING\n" " aktuelle Zeichensatzkodierung des Clients\n" -#: help.c:373 +#: help.c:377 #, c-format msgid "" " ERROR\n" @@ -3449,7 +3482,7 @@ msgstr "" " ERROR\n" " »true« wenn die letzte Anfrage fehlgeschlagen ist, sonst »false«\n" -#: help.c:375 +#: help.c:379 #, c-format msgid "" " FETCH_COUNT\n" @@ -3458,7 +3491,7 @@ msgstr "" " FETCH_COUNT\n" " Anzahl auf einmal zu holender und anzuzeigender Zeilen (0 = unbegrenzt)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3467,7 +3500,7 @@ msgstr "" " HIDE_TABLEAM\n" " wenn gesetzt werden Tabellenzugriffsmethoden nicht angezeigt\n" -#: help.c:379 +#: help.c:383 #, c-format msgid "" " HIDE_TOAST_COMPRESSION\n" @@ -3476,7 +3509,7 @@ msgstr "" " HIDE_TOAST_COMPRESSION\n" " wenn gesetzt werden Kompressionsmethoden nicht angezeigt\n" -#: help.c:381 +#: help.c:385 #, c-format msgid "" " HISTCONTROL\n" @@ -3485,7 +3518,7 @@ msgstr "" " HISTCONTROL\n" " kontrolliert Befehlsgeschichte [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid "" " HISTFILE\n" @@ -3494,7 +3527,7 @@ msgstr "" " HISTFILE\n" " Dateiname für die Befehlsgeschichte\n" -#: help.c:385 +#: help.c:389 #, c-format msgid "" " HISTSIZE\n" @@ -3503,7 +3536,7 @@ msgstr "" " HISTSIZE\n" " maximale Anzahl der in der Befehlsgeschichte zu speichernden Befehle\n" -#: help.c:387 +#: help.c:391 #, c-format msgid "" " HOST\n" @@ -3512,7 +3545,7 @@ msgstr "" " HOST\n" " der aktuell verbundene Datenbankserverhost\n" -#: help.c:389 +#: help.c:393 #, c-format msgid "" " IGNOREEOF\n" @@ -3521,7 +3554,7 @@ msgstr "" " IGNOREEOF\n" " Anzahl benötigter EOFs um eine interaktive Sitzung zu beenden\n" -#: help.c:391 +#: help.c:395 #, c-format msgid "" " LASTOID\n" @@ -3530,7 +3563,7 @@ msgstr "" " LASTOID\n" " Wert der zuletzt beinträchtigten OID\n" -#: help.c:393 +#: help.c:397 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3542,7 +3575,7 @@ msgstr "" " Fehlermeldung und SQLSTATE des letzten Fehlers, oder leer und »000000« wenn\n" " kein Fehler\n" -#: help.c:396 +#: help.c:400 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3552,7 +3585,7 @@ msgstr "" " wenn gesetzt beendet ein Fehler die Transaktion nicht (verwendet implizite\n" " Sicherungspunkte)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3561,7 +3594,7 @@ msgstr "" " ON_ERROR_STOP\n" " Skriptausführung bei Fehler beenden\n" -#: help.c:400 +#: help.c:404 #, c-format msgid "" " PORT\n" @@ -3570,7 +3603,7 @@ msgstr "" " PORT\n" " Serverport der aktuellen Verbindung\n" -#: help.c:402 +#: help.c:406 #, c-format msgid "" " PROMPT1\n" @@ -3579,7 +3612,7 @@ msgstr "" " PROMPT1\n" " der normale psql-Prompt\n" -#: help.c:404 +#: help.c:408 #, c-format msgid "" " PROMPT2\n" @@ -3588,7 +3621,7 @@ msgstr "" " PROMPT2\n" " der Prompt, wenn eine Anweisung von der vorherigen Zeile fortgesetzt wird\n" -#: help.c:406 +#: help.c:410 #, c-format msgid "" " PROMPT3\n" @@ -3597,7 +3630,7 @@ msgstr "" " PROMPT3\n" " der Prompt während COPY ... FROM STDIN\n" -#: help.c:408 +#: help.c:412 #, c-format msgid "" " QUIET\n" @@ -3606,7 +3639,7 @@ msgstr "" " QUIET\n" " stille Ausführung (wie Option -q)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid "" " ROW_COUNT\n" @@ -3615,7 +3648,7 @@ msgstr "" " ROW_COUNT\n" " Anzahl der von der letzten Anfrage beeinträchtigten Zeilen, oder 0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3626,7 +3659,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " Serverversion (kurze Zeichenkette oder numerisches Format)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3636,7 +3669,7 @@ msgstr "" " kontrolliert die Anzeige von Kontextinformationen in Meldungen\n" " [never, errors, always]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid "" " SINGLELINE\n" @@ -3645,7 +3678,7 @@ msgstr "" " SINGLELINE\n" " wenn gesetzt beendet Zeilenende die SQL-Anweisung (wie Option -S)\n" -#: help.c:419 +#: help.c:423 #, c-format msgid "" " SINGLESTEP\n" @@ -3654,7 +3687,7 @@ msgstr "" " SINGLESTEP\n" " Einzelschrittmodus (wie Option -s)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid "" " SQLSTATE\n" @@ -3663,7 +3696,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE der letzten Anfrage, oder »00000« wenn kein Fehler\n" -#: help.c:423 +#: help.c:427 #, c-format msgid "" " USER\n" @@ -3672,7 +3705,7 @@ msgstr "" " USER\n" " der aktuell verbundene Datenbankbenutzer\n" -#: help.c:425 +#: help.c:429 #, c-format msgid "" " VERBOSITY\n" @@ -3682,7 +3715,7 @@ msgstr "" " kontrolliert wieviele Details in Fehlermeldungen enthalten sind\n" " [default, verbose, terse, sqlstate]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid "" " VERSION\n" @@ -3695,7 +3728,7 @@ msgstr "" " VERSION_NUM\n" " Version von psql (lange Zeichenkette, kurze Zeichenkette oder numerisch)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "" "\n" @@ -3704,7 +3737,7 @@ msgstr "" "\n" "Anzeigeeinstellungen:\n" -#: help.c:434 +#: help.c:438 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3715,7 +3748,7 @@ msgstr "" " oder \\pset NAME [WERT] innerhalb von psql\n" "\n" -#: help.c:436 +#: help.c:440 #, c-format msgid "" " border\n" @@ -3724,7 +3757,7 @@ msgstr "" " border\n" " Rahmenstil (Zahl)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid "" " columns\n" @@ -3733,7 +3766,16 @@ msgstr "" " columns\n" " Zielbreite für das Format »wrapped«\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid "" +" csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr "" +" csv_fieldsep\n" +" Feldtrennzeichen für CSV-Ausgabeformat (Standard »%c«)\n" + +#: help.c:447 #, c-format msgid "" " expanded (or x)\n" @@ -3742,7 +3784,7 @@ msgstr "" " expanded (oder x)\n" " erweiterte Ausgabe [on, off, auto]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid "" " fieldsep\n" @@ -3751,7 +3793,7 @@ msgstr "" " fieldsep\n" " Feldtrennzeichen für unausgerichteten Ausgabemodus (Standard »%s«)\n" -#: help.c:445 +#: help.c:452 #, c-format msgid "" " fieldsep_zero\n" @@ -3760,7 +3802,7 @@ msgstr "" " fieldsep_zero\n" " Feldtrennzeichen für unausgerichteten Ausgabemodus auf Null-Byte setzen\n" -#: help.c:447 +#: help.c:454 #, c-format msgid "" " footer\n" @@ -3769,7 +3811,7 @@ msgstr "" " footer\n" " Tabellenfußzeile ein- oder auschalten [on, off]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid "" " format\n" @@ -3778,7 +3820,7 @@ msgstr "" " format\n" " Ausgabeformat setzen [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid "" " linestyle\n" @@ -3787,7 +3829,7 @@ msgstr "" " linestyle\n" " Rahmenlinienstil setzen [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid "" " null\n" @@ -3796,7 +3838,7 @@ msgstr "" " null\n" " setzt die Zeichenkette, die anstelle eines NULL-Wertes ausgegeben wird\n" -#: help.c:455 +#: help.c:462 #, c-format msgid "" " numericlocale\n" @@ -3806,7 +3848,7 @@ msgstr "" " Verwendung eines Locale-spezifischen Zeichens zur Trennung von Zifferngruppen\n" " einschalten [on, off]\n" -#: help.c:457 +#: help.c:464 #, c-format msgid "" " pager\n" @@ -3815,7 +3857,7 @@ msgstr "" " pager\n" " kontrolliert Verwendung eines externen Pager-Programms [yes, no, always]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid "" " recordsep\n" @@ -3824,7 +3866,7 @@ msgstr "" " recordsep\n" " Satztrennzeichen für unausgerichteten Ausgabemodus\n" -#: help.c:461 +#: help.c:468 #, c-format msgid "" " recordsep_zero\n" @@ -3833,7 +3875,7 @@ msgstr "" " recordsep_zero\n" " Satztrennzeichen für unausgerichteten Ausgabemodus auf Null-Byte setzen\n" -#: help.c:463 +#: help.c:470 #, c-format msgid "" " tableattr (or T)\n" @@ -3844,7 +3886,7 @@ msgstr "" " Attribute für das »table«-Tag im Format »html« oder proportionale\n" " Spaltenbreite für links ausgerichtete Datentypen im Format »latex-longtable«\n" -#: help.c:466 +#: help.c:473 #, c-format msgid "" " title\n" @@ -3853,7 +3895,7 @@ msgstr "" " title\n" " setzt den Titel darauffolgend ausgegebener Tabellen\n" -#: help.c:468 +#: help.c:475 #, c-format msgid "" " tuples_only\n" @@ -3862,7 +3904,7 @@ msgstr "" " tuples_only\n" " wenn gesetzt werden nur die eigentlichen Tabellendaten gezeigt\n" -#: help.c:470 +#: help.c:477 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3875,7 +3917,7 @@ msgstr "" " unicode_header_linestyle\n" " setzt den Stil für Unicode-Linien [single, double]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "" "\n" @@ -3884,7 +3926,7 @@ msgstr "" "\n" "Umgebungsvariablen:\n" -#: help.c:479 +#: help.c:486 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3895,7 +3937,7 @@ msgstr "" " oder \\setenv NAME [WERT] innerhalb von psql\n" "\n" -#: help.c:481 +#: help.c:488 #, c-format msgid "" " set NAME=VALUE\n" @@ -3908,7 +3950,7 @@ msgstr "" " oder \\setenv NAME [WERT] innerhalb von psql\n" "\n" -#: help.c:484 +#: help.c:491 #, c-format msgid "" " COLUMNS\n" @@ -3917,7 +3959,7 @@ msgstr "" " COLUMNS\n" " Anzahl Spalten im Format »wrapped«\n" -#: help.c:486 +#: help.c:493 #, c-format msgid "" " PGAPPNAME\n" @@ -3926,7 +3968,7 @@ msgstr "" " PGAPPNAME\n" " wie Verbindungsparameter »application_name«\n" -#: help.c:488 +#: help.c:495 #, c-format msgid "" " PGDATABASE\n" @@ -3935,7 +3977,7 @@ msgstr "" " PGDATABASE\n" " wie Verbindungsparameter »dbname«\n" -#: help.c:490 +#: help.c:497 #, c-format msgid "" " PGHOST\n" @@ -3944,7 +3986,7 @@ msgstr "" " PGHOST\n" " wie Verbindungsparameter »host«\n" -#: help.c:492 +#: help.c:499 #, c-format msgid "" " PGPASSFILE\n" @@ -3953,7 +3995,7 @@ msgstr "" " PGPASSFILE\n" " Name der Passwortdatei\n" -#: help.c:494 +#: help.c:501 #, c-format msgid "" " PGPASSWORD\n" @@ -3962,7 +4004,7 @@ msgstr "" " PGPASSWORD\n" " Verbindungspasswort (nicht empfohlen)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid "" " PGPORT\n" @@ -3971,7 +4013,7 @@ msgstr "" " PGPORT\n" " wie Verbindungsparameter »port«\n" -#: help.c:498 +#: help.c:505 #, c-format msgid "" " PGUSER\n" @@ -3980,7 +4022,7 @@ msgstr "" " PGUSER\n" " wie Verbindungsparameter »user«\n" -#: help.c:500 +#: help.c:507 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3989,7 +4031,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " Editor für Befehle \\e, \\ef und \\ev\n" -#: help.c:502 +#: help.c:509 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3998,7 +4040,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " wie die Zeilennummer beim Aufruf des Editors angegeben wird\n" -#: help.c:504 +#: help.c:511 #, c-format msgid "" " PSQL_HISTORY\n" @@ -4007,7 +4049,7 @@ msgstr "" " PSQL_HISTORY\n" " alternativer Pfad für History-Datei\n" -#: help.c:506 +#: help.c:513 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -4016,7 +4058,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " Name des externen Pager-Programms\n" -#: help.c:508 +#: help.c:515 #, c-format msgid "" " PSQLRC\n" @@ -4025,7 +4067,7 @@ msgstr "" " PSQLRC\n" " alternativer Pfad für .psqlrc-Datei des Benutzers\n" -#: help.c:510 +#: help.c:517 #, c-format msgid "" " SHELL\n" @@ -4034,7 +4076,7 @@ msgstr "" " SHELL\n" " Shell für den Befehl \\!\n" -#: help.c:512 +#: help.c:519 #, c-format msgid "" " TMPDIR\n" @@ -4043,11 +4085,11 @@ msgstr "" " TMPDIR\n" " Verzeichnis für temporäre Dateien\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "Verfügbare Hilfe:\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "" "Command: %s\n" @@ -4066,7 +4108,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "" "No help available for \"%s\".\n" @@ -6535,7 +6577,7 @@ msgstr "überflüssiges Kommandozeilenargument »%s« ignoriert" msgid "could not find own program executable" msgstr "konnte eigene Programmdatei nicht finden" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "" "tab completion query failed: %s\n" diff --git a/src/bin/psql/po/es.po b/src/bin/psql/po/es.po index e6caa8efeb7..f02a7e2ceb6 100644 --- a/src/bin/psql/po/es.po +++ b/src/bin/psql/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:35+0000\n" +"POT-Creation-Date: 2026-02-06 21:30+0000\n" "PO-Revision-Date: 2022-01-12 17:40-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -74,7 +74,7 @@ msgid "%s() failed: %m" msgstr "%s() falló: %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1317 command.c:3249 command.c:3298 command.c:3415 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -96,7 +96,7 @@ msgstr "no se puede duplicar un puntero nulo (error interno)\n" msgid "could not look up effective user ID %ld: %s" msgstr "no se pudo buscar el ID de usuario efectivo %ld: %s" -#: ../../common/username.c:45 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "el usuario no existe" @@ -175,91 +175,96 @@ msgstr "formato de salida no válido (error interno): %d" msgid "skipping recursive expansion of variable \"%s\"" msgstr "saltando expansión recursiva de la variable «%s»" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "las órdenes backslash están restringidas; sólo se permite \\unrestrict" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "orden \\%s no válida" -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr "Digite \\? para obtener ayuda." -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: argumento extra «%s» ignorado" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "orden \\%s ignorada: use \\endif o Ctrl-C para salir del bloque \\if actual" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "no se pudo obtener directorio home para el usuario de ID %ld: %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: no se pudo cambiar directorio a «%s»: %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "No está conectado a una base de datos.\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» en la dirección «%s» port «%s».\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» a través del socket en «%s» port «%s».\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» (dirección «%s») port «%s».\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» port «%s».\n" -#: command.c:1011 command.c:1120 command.c:2605 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "no hay búfer de consulta" -#: command.c:1044 command.c:5317 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "número de línea no válido: %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "El servidor (versión %s) no soporta la edición del código fuente de funciones." -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "El servidor (versión %s) no soporta la edición de vistas." -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "Sin cambios" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: nombre de codificación no válido o procedimiento de conversión no encontrado" -#: command.c:1313 command.c:2065 command.c:3245 command.c:3437 command.c:5423 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 #: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 @@ -267,179 +272,189 @@ msgstr "%s: nombre de codificación no válido o procedimiento de conversión no msgid "%s" msgstr "%s" -#: command.c:1320 +#: command.c:1341 msgid "There is no previous error." msgstr "No hay error anterior." -#: command.c:1433 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: falta el paréntesis derecho" -#: command.c:1610 command.c:1915 command.c:1929 command.c:1946 command.c:2116 -#: command.c:2352 command.c:2572 command.c:2612 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: falta argumento requerido" -#: command.c:1741 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: no puede ocurrir después de \\else" -#: command.c:1746 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: no hay un \\if coincidente" -#: command.c:1810 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: no puede ocurrir después de \\else" -#: command.c:1815 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: no hay un \\if coincidente" -#: command.c:1855 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: no hay un \\if coincidente" -#: command.c:2010 +#: command.c:2031 msgid "Query buffer is empty." msgstr "El búfer de consulta está vacío." -#: command.c:2047 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "Ingrese nueva contraseña para usuario «%s»: " -#: command.c:2050 +#: command.c:2071 msgid "Enter it again: " msgstr "Ingrésela nuevamente: " -#: command.c:2054 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "Las contraseñas no coinciden." -#: command.c:2145 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "%s: no se pudo leer el valor para la variable" -#: command.c:2248 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "El búfer de consulta ha sido reiniciado (limpiado)." -#: command.c:2270 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Se escribió la historia en el archivo «%s».\n" -#: command.c:2357 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: el nombre de variable de ambiente no debe contener «=»" -#: command.c:2409 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "El servidor (versión %s) no soporta el despliegue del código fuente de funciones." -#: command.c:2412 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "El servidor (versión %s) no soporta el despliegue de definiciones de vistas." -#: command.c:2419 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "el nombre de la función es requerido" -#: command.c:2421 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "el nombre de la vista es requerido" -#: command.c:2544 +#: command.c:2594 msgid "Timing is on." msgstr "El despliegue de duración está activado." -#: command.c:2546 +#: command.c:2596 msgid "Timing is off." msgstr "El despliegue de duración está desactivado." -#: command.c:2631 command.c:2659 command.c:3878 command.c:3881 command.c:3884 -#: command.c:3890 command.c:3892 command.c:3918 command.c:3928 command.c:3940 -#: command.c:3954 command.c:3981 command.c:4039 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s: no se está actualmente en modo restringido" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s: llave errónea" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:3050 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "Contraseña: " -#: command.c:3055 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Contraseña para usuario %s: " -#: command.c:3107 +#: command.c:3197 #, c-format msgid "Do not give user, host, or port separately when using a connection string" msgstr "No proporcione usuario, host o puerto de forma separada al usar una cadena de conexión" -#: command.c:3142 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "No existe una conexión de base de datos para poder reusar sus parámetros" -#: command.c:3443 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "Se ha mantenido la conexión anterior" -#: command.c:3449 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3505 +#: command.c:3595 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» en la dirección «%s» port «%s».\n" -#: command.c:3508 +#: command.c:3598 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» a través del socket en «%s» port «%s».\n" -#: command.c:3514 +#: command.c:3604 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» (dirección «%s») port «%s».\n" -#: command.c:3517 +#: command.c:3607 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» como el usuario «%s» en el servidor «%s» port «%s».\n" -#: command.c:3522 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Ahora está conectado a la base de datos «%s» con el usuario «%s».\n" -#: command.c:3562 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, servidor %s)\n" -#: command.c:3570 +#: command.c:3660 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -448,29 +463,29 @@ msgstr "" "ADVERTENCIA: %s versión mayor %s, servidor versión mayor %s.\n" " Algunas características de psql podrían no funcionar.\n" -#: command.c:3609 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "Conexión SSL (protocolo: %s, cifrado: %s, bits: %s, compresión: %s)\n" -#: command.c:3610 command.c:3611 command.c:3612 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "desconocido" -#: command.c:3613 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "desactivado" -#: command.c:3613 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "activado" -#: command.c:3627 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "Conexión Cifrada GSSAPI\n" -#: command.c:3647 +#: command.c:3737 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -483,259 +498,259 @@ msgstr "" " Vea la página de referencia de psql «Notes for Windows users»\n" " para obtener más detalles.\n" -#: command.c:3754 +#: command.c:3844 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "la variable de ambiente PSQL_EDITOR_LINENUMBER_SWITCH debe estar definida para poder especificar un número de línea" -#: command.c:3783 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "no se pudo iniciar el editor «%s»" -#: command.c:3785 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "no se pudo iniciar /bin/sh" -#: command.c:3835 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "no se pudo ubicar el directorio temporal: %s" -#: command.c:3862 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "no se pudo abrir archivo temporal «%s»: %m" -#: command.c:4198 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: abreviación ambigua «%s» coincide tanto con «%s» como con «%s»" -#: command.c:4218 +#: command.c:4308 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: formatos permitidos son aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4237 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: estilos de línea permitidos son ascii, old-ascii, unicode" -#: command.c:4252 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: estilos de línea Unicode de borde permitidos son single, double" -#: command.c:4267 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: estilos de línea Unicode de columna permitidos son single, double" -#: command.c:4282 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: estilos de línea Unicode de encabezado permitidos son single, double" -#: command.c:4325 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep debe ser un carácter de un solo byte" -#: command.c:4330 +#: command.c:4420 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldset ni puede ser una comilla doble, un salto de línea, o un retorno de carro" -#: command.c:4467 command.c:4655 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: opción desconocida: %s" -#: command.c:4487 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "El estilo de borde es %d.\n" -#: command.c:4493 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "El ancho no está definido.\n" -#: command.c:4495 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "El ancho es %d.\n" -#: command.c:4502 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "Se ha activado el despliegue expandido.\n" -#: command.c:4504 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "El despliegue expandido se usa automáticamente.\n" -#: command.c:4506 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "Se ha desactivado el despliegue expandido.\n" -#: command.c:4512 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "El separador de campos para CSV es «%s».\n" -#: command.c:4520 command.c:4528 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "El separador de campos es el byte cero.\n" -#: command.c:4522 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "El separador de campos es «%s».\n" -#: command.c:4535 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "El pie por omisión está activo.\n" -#: command.c:4537 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "El pie de página por omisión está desactivado.\n" -#: command.c:4543 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "El formato de salida es %s.\n" -#: command.c:4549 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "El estilo de línea es %s.\n" -#: command.c:4556 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "Despliegue de nulos es «%s».\n" -#: command.c:4564 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "La salida numérica ajustada localmente está habilitada.\n" -#: command.c:4566 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "La salida numérica ajustada localmente está deshabilitada.\n" -#: command.c:4573 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "El paginador se usará para salida larga.\n" -#: command.c:4575 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "El paginador se usará siempre.\n" -#: command.c:4577 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "El paginador no se usará.\n" -#: command.c:4583 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "El paginador no se usará para menos de %d línea.\n" msgstr[1] "El paginador no se usará para menos de %d líneas.\n" -#: command.c:4593 command.c:4603 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "El separador de filas es el byte cero.\n" -#: command.c:4595 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "El separador de filas es .\n" -#: command.c:4597 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "El separador de filas es «%s».\n" -#: command.c:4610 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Los atributos de tabla son «%s».\n" -#: command.c:4613 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "Los atributos de tabla han sido indefinidos.\n" -#: command.c:4620 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "El título es «%s».\n" -#: command.c:4622 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "El título ha sido indefinido.\n" -#: command.c:4629 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "Mostrar sólo filas está activado.\n" -#: command.c:4631 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "Mostrar sólo filas está desactivado.\n" -#: command.c:4637 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "El estilo Unicode de borde es «%s».\n" -#: command.c:4643 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "El estilo de línea Unicode de columna es «%s».\n" -#: command.c:4649 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "El estilo de línea Unicode de encabezado es «%s».\n" -#: command.c:4882 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\!: falló" -#: command.c:4907 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch no puede ser usado con una consulta vacía" -#: command.c:4948 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (cada %gs)\n" -#: command.c:4951 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (cada %gs)\n" -#: command.c:5013 command.c:5020 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -748,12 +763,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5212 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "«%s.%s» no es una vista" -#: command.c:5228 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "no se pudo interpretar el array reloptions" @@ -2429,7 +2444,7 @@ msgstr "" "psql es el terminal interactivo de PostgreSQL.\n" "\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "Empleo:\n" @@ -2783,253 +2798,271 @@ msgstr " \\q salir de psql\n" #: help.c:182 #, c-format +msgid "" +" \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr "" +" \\restrict LLAVE_RESTRICT\n" +" iniciar modo restringido con la llave indicada\n" + +#: help.c:184 +#, c-format +msgid "" +" \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr "" +" \\unrestrict LLAVE_RESTRICT\n" +" salir de modo restringido si la llave coincide\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEGS] ejecutar consulta cada SEGS segundos\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "Ayuda\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] desplegar ayuda sobre las órdenes backslash\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options desplegar ayuda sobre opciones de línea de órdenes\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables desplegar ayuda sobre variables especiales\n" -#: help.c:190 +#: help.c:194 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr "" " \\h [NOMBRE] mostrar ayuda de sintaxis de órdenes SQL;\n" " use «*» para todas las órdenes\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "Búfer de consulta\n" -#: help.c:194 +#: help.c:198 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" " \\e [ARCHIVO] [LÍNEA]\n" " editar el búfer de consulta (o archivo) con editor externo\n" -#: help.c:195 +#: help.c:199 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [NOMBRE-FUNCIÓN [LÍNEA]]\n" " editar una función con editor externo\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [NOMBRE-VISTA [LÍNEA]]\n" " editar definición de una vista con editor externo\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p mostrar el contenido del búfer de consulta\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r reiniciar (limpiar) el búfer de consulta\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ARCHIVO] mostrar historial de órdenes o guardarlo en archivo\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ARCHIVO escribir búfer de consulta a archivo\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "Entrada/Salida\n" -#: help.c:206 +#: help.c:210 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... ejecutar orden SQL COPY con flujo de datos al cliente\n" -#: help.c:207 +#: help.c:211 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [STRING] escribe la cadena en la salida estándar (-n no genera el salto de línea final)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ARCHIVO ejecutar órdenes desde archivo\n" -#: help.c:209 +#: help.c:213 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir ARCHIVO como \\i, pero relativo a la ubicación del script actual\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [ARCHIVO] enviar resultados de consultas a archivo u |orden\n" -#: help.c:211 +#: help.c:215 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr " \\qecho [-n] [STRING] escribe la cadena hacia flujo de salida \\o (-n no genera el salto de línea final)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr " \\warn [-n] [STRING] escribe la cadena a la salida de error estándar (-n no genera el salto de línea final)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "Condicional\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPRESIÓN inicia bloque condicional\n" -#: help.c:217 +#: help.c:221 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR alternativa dentro del bloque condicional actual\n" -#: help.c:218 +#: help.c:222 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else alternativa final dentro del bloque condicional actual\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif termina el bloque condicional\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "Informativo\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (opciones: S = desplegar objectos de sistema, + = agregar más detalle)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] listar tablas, vistas y secuencias\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NOMBRE describir tabla, índice, secuencia o vista\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATRÓN] listar funciones de agregación\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATRÓN] listar métodos de acceso\n" -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] listar las clases de operadores\n" -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] listar las familias de operadores\n" -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] listar los operadores de la familia de operadores\n" -#: help.c:231 +#: help.c:235 #, c-format msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] enumera las funciones de la familia de operadores\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATRÓN] listar tablespaces\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATRÓN] listar conversiones\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATRÓN] listar conversiones de tipo (casts)\n" -#: help.c:235 +#: help.c:239 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [PATRÓN] listar comentarios de objetos que no aparecen en otra parte\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATRÓN] listar dominios\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATRÓN] listar privilegios por omisión\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATRÓN] listar tablas foráneas\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATRÓN] listar servidores foráneos\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [PATRÓN] listar tablas foráneas\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATRÓN] listar mapeos de usuario\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATRÓN] listar conectores de datos externos\n" -#: help.c:243 +#: help.c:247 #, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" @@ -3038,57 +3071,57 @@ msgstr "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" " listar funciones [sólo ag./normal/proc./trigger/ventana]\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATRÓN] listar configuraciones de búsqueda en texto\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATRÓN] listar diccionarios de búsqueda en texto\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [PATRÓN] listar analizadores (parsers) de búsq. en texto\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATRÓN] listar plantillas de búsqueda en texto\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATRÓN] listar roles\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATRÓN] listar índices\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl listar objetos grandes, lo mismo que \\lo_list\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATRÓN] listar lenguajes procedurales\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATRÓN] listar vistas materializadas\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATRÓN] listar esquemas\n" -#: help.c:255 +#: help.c:259 #, c-format msgid "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" @@ -3097,124 +3130,124 @@ msgstr "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " listar operadores\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S] [PATRÓN] listar ordenamientos (collations)\n" -#: help.c:258 +#: help.c:262 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [PATRÓN] listar privilegios de acceso a tablas, vistas y secuencias\n" -#: help.c:259 +#: help.c:263 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[tin+] [PATRÓN] listar relaciones particionadas (sólo tablas/índices) [n=anidadas]\n" -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr " \\drds [PATROL [PATBASE]] listar parámetros de rol por base de datos\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATRÓN] listar publicaciones de replicación\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATRÓN] listar suscripciones de replicación\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATRÓN] listar secuencias\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATRÓN] listar tablas\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATRÓN] listar tipos de dato\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATRÓN] listar roles\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATRÓN] listar vistas\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATRÓN] listar extensiones\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [PATRÓN] listar estadísticas extendidas\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [PATRÓN] listar disparadores por eventos\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATRÓN] listar bases de datos\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] FUNCIÓN mostrar la definición de una función\n" -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] VISTA mostrar la definición de una vista\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [PATRÓN] lo mismo que \\dp\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "Formato\n" -#: help.c:278 +#: help.c:282 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a cambiar entre modo de salida alineado y sin alinear\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [CADENA] definir título de tabla, o indefinir si es vacío\n" -#: help.c:280 +#: help.c:284 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr "" " \\f [CADENA] mostrar o definir separador de campos para\n" " modo de salida sin alinear\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H cambiar modo de salida HTML (actualmente %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3232,27 +3265,27 @@ msgstr "" " tuples_only|unicode_border_linestyle|unicode_column_linestyle\n" " |unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] mostrar sólo filas (actualmente %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [CADENA] definir atributos HTML de
, o indefinir si es vacío\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] cambiar modo expandido (actualmente %s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "Conexiones\n" -#: help.c:299 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3261,7 +3294,7 @@ msgstr "" " \\c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIÓN|- PUERTO|- | conninfo]\n" " conectar a una nueva base de datos (actual: «%s»)\n" -#: help.c:303 +#: help.c:307 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3270,84 +3303,84 @@ msgstr "" " \\c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIÓN|- PUERTO|- | conninfo]\n" " conectar a una nueva base de datos (no hay conexión actual)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo despliega la información sobre la conexión actual\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr "" " \\encoding [CODIFICACIÓN]\n" " mostrar o definir codificación del cliente\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr "" " \\password [USUARIO]\n" " cambiar la contraseña para un usuario en forma segura\n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "Sistema Operativo\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] cambiar el directorio de trabajo actual\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr "" " \\setenv NOMBRE [VALOR]\n" " definir o indefinir variable de ambiente\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr "" " \\timing [on|off] mostrar tiempo de ejecución de órdenes\n" " (actualmente %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr "" " \\! [ORDEN] ejecutar orden en intérprete de órdenes (shell),\n" " o iniciar intérprete interactivo\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "Variables\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXTO] NOMBRE preguntar al usuario el valor de la variable\n" -#: help.c:320 +#: help.c:324 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr "" " \\set [NOMBRE [VALOR]] definir variables internas,\n" " listar todas si no se dan parámetros\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NOMBRE indefinir (eliminar) variable interna\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "Objetos Grandes\n" -#: help.c:325 +#: help.c:329 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3360,7 +3393,7 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID operaciones con objetos grandes\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "" "List of specially treated variables\n" @@ -3369,12 +3402,12 @@ msgstr "" "Lista de variables con tratamiento especial\n" "\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "variables psql:\n" -#: help.c:356 +#: help.c:360 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3384,7 +3417,7 @@ msgstr "" " psql --set=NOMBRE=VALOR\n" " o \\set NOMBRE VALOR dentro de psql\n" -#: help.c:358 +#: help.c:362 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3393,7 +3426,7 @@ msgstr "" " AUTOCOMMIT si está definida, órdenes SQL exitosas se comprometen\n" " automáticamente\n" -#: help.c:360 +#: help.c:364 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3403,14 +3436,14 @@ msgstr "" " COMP_KEYWORD_CASE determina si usar mayúsculas al completar palabras SQL\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid "" " DBNAME\n" " the currently connected database name\n" msgstr " DBNAME la base de datos actualmente conectada\n" -#: help.c:365 +#: help.c:369 #, c-format msgid "" " ECHO\n" @@ -3420,7 +3453,7 @@ msgstr "" " ECHO controla qué entrada se escribe a la salida estándar\n" " [all, errors, none, queries]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3430,21 +3463,21 @@ msgstr "" " ECHO_HIDDEN muestra consultas internas usadas por órdenes backslash\n" " con «noexec» sólo las muestra sin ejecutarlas\n" -#: help.c:371 +#: help.c:375 #, c-format msgid "" " ENCODING\n" " current client character set encoding\n" msgstr " ENCODING codificación actual del cliente\n" -#: help.c:373 +#: help.c:377 #, c-format msgid "" " ERROR\n" " true if last query failed, else false\n" msgstr " ERROR verdadero si la última consulta falló; si no, falso\n" -#: help.c:375 +#: help.c:379 #, c-format msgid "" " FETCH_COUNT\n" @@ -3453,7 +3486,7 @@ msgstr "" " FETCH_COUNT número de filas del resultado que extraer y mostrar cada vez\n" " (por omisión: 0=sin límite)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3462,7 +3495,7 @@ msgstr "" " HIDE_TABLEAM\n" " ocultar métodos de acceso de tabla\n" -#: help.c:379 +#: help.c:383 #, c-format msgid "" " HIDE_TOAST_COMPRESSION\n" @@ -3471,7 +3504,7 @@ msgstr "" " HIDE_TOAST_COMPRESSION\n" " ocultar métodos de compresión\n" -#: help.c:381 +#: help.c:385 #, c-format msgid "" " HISTCONTROL\n" @@ -3480,28 +3513,28 @@ msgstr "" " HISTCONTROL controla la lista de historia de órdenes\n" " [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid "" " HISTFILE\n" " file name used to store the command history\n" msgstr " HISTFILE nombre de archivo para almacenar historia de órdenes\n" -#: help.c:385 +#: help.c:389 #, c-format msgid "" " HISTSIZE\n" " maximum number of commands to store in the command history\n" msgstr " HISTSIZE número de órdenes a guardar en la historia de órdenes\n" -#: help.c:387 +#: help.c:391 #, c-format msgid "" " HOST\n" " the currently connected database server host\n" msgstr " HOST el servidor actualmente conectado\n" -#: help.c:389 +#: help.c:393 #, c-format msgid "" " IGNOREEOF\n" @@ -3510,14 +3543,14 @@ msgstr "" " IGNOREEOF si no está definida, enviar un EOF a sesión interactiva\n" " termina la aplicación\n" -#: help.c:391 +#: help.c:395 #, c-format msgid "" " LASTOID\n" " value of the last affected OID\n" msgstr " LASTOID el valor del último OID afectado\n" -#: help.c:393 +#: help.c:397 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3529,7 +3562,7 @@ msgstr "" " mensaje y SQLSTATE del último error, o cadena vacía y\n" " «00000» si no hubo\n" -#: help.c:396 +#: help.c:400 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3538,28 +3571,28 @@ msgstr "" " ON_ERROR_ROLLBACK si está definido, un error no aborta la transacción\n" " (usa «savepoints» implícitos)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid "" " ON_ERROR_STOP\n" " stop batch execution after error\n" msgstr " ON_ERROR_STOP detiene ejecución por lotes al ocurrir un error\n" -#: help.c:400 +#: help.c:404 #, c-format msgid "" " PORT\n" " server port of the current connection\n" msgstr " PORT puerto del servidor de la conexión actual\n" -#: help.c:402 +#: help.c:406 #, c-format msgid "" " PROMPT1\n" " specifies the standard psql prompt\n" msgstr " PROMPT1 especifica el prompt estándar de psql\n" -#: help.c:404 +#: help.c:408 #, c-format msgid "" " PROMPT2\n" @@ -3568,21 +3601,21 @@ msgstr "" " PROMPT2 especifica el prompt usado cuando una sentencia continúa\n" " de una línea anterior\n" -#: help.c:406 +#: help.c:410 #, c-format msgid "" " PROMPT3\n" " specifies the prompt used during COPY ... FROM STDIN\n" msgstr " PROMPT3 especifica el prompt usado durante COPY ... FROM STDIN\n" -#: help.c:408 +#: help.c:412 #, c-format msgid "" " QUIET\n" " run quietly (same as -q option)\n" msgstr " QUIET ejecuta silenciosamente (igual que -q)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid "" " ROW_COUNT\n" @@ -3591,7 +3624,7 @@ msgstr "" " ROW_COUNT número de tuplas retornadas o afectadas por última\n" " consulta, o 0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3602,7 +3635,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " versión del servidor (cadena corta o numérica)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3611,35 +3644,35 @@ msgstr "" " SHOW_CONTEXT controla el despliegue de campos de contexto de mensaje\n" " [never, errors, always]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid "" " SINGLELINE\n" " if set, end of line terminates SQL commands (same as -S option)\n" msgstr " SINGLELINE fin de línea termina modo de órdenes SQL (igual que -S)\n" -#: help.c:419 +#: help.c:423 #, c-format msgid "" " SINGLESTEP\n" " single-step mode (same as -s option)\n" msgstr " SINGLESTEP modo paso a paso (igual que -s)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid "" " SQLSTATE\n" " SQLSTATE of last query, or \"00000\" if no error\n" msgstr " SQLSTATE SQLSTATE de la última consulta, o «00000» si no hubo error\n" -#: help.c:423 +#: help.c:427 #, c-format msgid "" " USER\n" " the currently connected database user\n" msgstr " USER el usuario actualmente conectado\n" -#: help.c:425 +#: help.c:429 #, c-format msgid "" " VERBOSITY\n" @@ -3648,7 +3681,7 @@ msgstr "" " VERBOSITY controla la verbosidad de errores [default, verbose,\n" " terse, sqlstate]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid "" " VERSION\n" @@ -3661,7 +3694,7 @@ msgstr "" " VERSION_NUM\n" " versión de psql (cadena verbosa, corta o numérica)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "" "\n" @@ -3670,7 +3703,7 @@ msgstr "" "\n" "Parámetros de despliegue:\n" -#: help.c:434 +#: help.c:438 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3681,28 +3714,35 @@ msgstr "" " o \\pset NOMBRE [VALOR] dentro de psql\n" "\n" -#: help.c:436 +#: help.c:440 #, c-format msgid "" " border\n" " border style (number)\n" msgstr " border estilo de borde (número)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid "" " columns\n" " target width for the wrapped format\n" msgstr " columns define el ancho para formato «wrapped»\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid "" +" csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr " csv_fieldsep separador de campos para CSV (por omisión: «%c»)\n" + +#: help.c:447 #, c-format msgid "" " expanded (or x)\n" " expanded output [on, off, auto]\n" msgstr " expanded (o x) salida expandida [on, off, auto]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid "" " fieldsep\n" @@ -3711,42 +3751,42 @@ msgstr "" " fieldsep separador de campos para formato «unaligned»\n" " (por omisión: «%s»)\n" -#: help.c:445 +#: help.c:452 #, c-format msgid "" " fieldsep_zero\n" " set field separator for unaligned output to a zero byte\n" msgstr " fieldsep_zero separador de campos en «unaligned» es byte cero\n" -#: help.c:447 +#: help.c:454 #, c-format msgid "" " footer\n" " enable or disable display of the table footer [on, off]\n" msgstr " footer activa o desactiva el pie de tabla [on, off]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid "" " format\n" " set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" msgstr " format define el formato de salida [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid "" " linestyle\n" " set the border line drawing style [ascii, old-ascii, unicode]\n" msgstr " linestyle define el estilo de dibujo de líneas [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid "" " null\n" " set the string to be printed in place of a null value\n" msgstr " null define la cadena a imprimirse para valores null\n" -#: help.c:455 +#: help.c:462 #, c-format msgid "" " numericlocale\n" @@ -3755,21 +3795,21 @@ msgstr "" " numericlocale activa despliegue de carácter específico del lenguaje para\n" " separar grupos de dígitos\n" -#: help.c:457 +#: help.c:464 #, c-format msgid "" " pager\n" " control when an external pager is used [yes, no, always]\n" msgstr " pager controla cuándo se usará un paginador externo [yes, no, always]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid "" " recordsep\n" " record (line) separator for unaligned output\n" msgstr " recordsep separador de registros (líneas) para formato «unaligned»\n" -#: help.c:461 +#: help.c:468 #, c-format msgid "" " recordsep_zero\n" @@ -3777,7 +3817,7 @@ msgid "" msgstr " recordsep_zero separador de registros en «unaligned» es byte cero\n" # XXX WTF does this mean? -#: help.c:463 +#: help.c:470 #, c-format msgid "" " tableattr (or T)\n" @@ -3788,21 +3828,21 @@ msgstr "" " o ancho proporcional de columnas alineadas a la izquierda\n" " en formato «latex-longtable»\n" -#: help.c:466 +#: help.c:473 #, c-format msgid "" " title\n" " set the table title for subsequently printed tables\n" msgstr " title define el título de tablas\n" -#: help.c:468 +#: help.c:475 #, c-format msgid "" " tuples_only\n" " if set, only actual table data is shown\n" msgstr " tuples_only si está definido, sólo los datos de la tabla se muestran\n" -#: help.c:470 +#: help.c:477 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3815,7 +3855,7 @@ msgstr "" " unicode_header_linestyle\n" " define el estilo de líneas Unicode [single, double]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "" "\n" @@ -3824,7 +3864,7 @@ msgstr "" "\n" "Variables de ambiente:\n" -#: help.c:479 +#: help.c:486 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3834,7 +3874,7 @@ msgstr "" " NOMBRE=VALOR [NOMBRE=VALOR] psql ...\n" " o \\setenv NOMBRE [VALOR] dentro de psql\n" -#: help.c:481 +#: help.c:488 #, c-format msgid "" " set NAME=VALUE\n" @@ -3846,63 +3886,63 @@ msgstr "" " psql ...\n" " o \\setenv NOMBRE [VALOR] dentro de psql\n" -#: help.c:484 +#: help.c:491 #, c-format msgid "" " COLUMNS\n" " number of columns for wrapped format\n" msgstr " COLUMNS número de columnas para formato «wrapped»\n" -#: help.c:486 +#: help.c:493 #, c-format msgid "" " PGAPPNAME\n" " same as the application_name connection parameter\n" msgstr " PGAPPNAME igual que el parámetro de conexión application_name\n" -#: help.c:488 +#: help.c:495 #, c-format msgid "" " PGDATABASE\n" " same as the dbname connection parameter\n" msgstr " PGDATABASE igual que el parámetro de conexión dbname\n" -#: help.c:490 +#: help.c:497 #, c-format msgid "" " PGHOST\n" " same as the host connection parameter\n" msgstr " PGHOST igual que el parámetro de conexión host\n" -#: help.c:492 +#: help.c:499 #, c-format msgid "" " PGPASSFILE\n" " password file name\n" msgstr " PGPASSFILE nombre de archivo de contraseñas\n" -#: help.c:494 +#: help.c:501 #, c-format msgid "" " PGPASSWORD\n" " connection password (not recommended)\n" msgstr " PGPASSWORD contraseña de la conexión (no recomendado)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid "" " PGPORT\n" " same as the port connection parameter\n" msgstr " PGPORT igual que el parámetro de conexión port\n" -#: help.c:498 +#: help.c:505 #, c-format msgid "" " PGUSER\n" " same as the user connection parameter\n" msgstr " PGUSER igual que el parámetro de conexión user\n" -#: help.c:500 +#: help.c:507 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3911,7 +3951,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " editor usado por órdenes \\e, \\ef, y \\ev\n" -#: help.c:502 +#: help.c:509 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3920,46 +3960,46 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARGS\n" " cómo especificar número de línea al invocar al editor\n" -#: help.c:504 +#: help.c:511 #, c-format msgid "" " PSQL_HISTORY\n" " alternative location for the command history file\n" msgstr " PSQL_HISTORY ubicación alternativa del archivo de historia de órdenes\n" -#: help.c:506 +#: help.c:513 #, c-format msgid "" " PSQL_PAGER, PAGER\n" " name of external pager program\n" msgstr " PSQL_PAGER, PAGER nombre de programa paginador externo\n" -#: help.c:508 +#: help.c:515 #, c-format msgid "" " PSQLRC\n" " alternative location for the user's .psqlrc file\n" msgstr " PSQLRC ubicación alternativa para el archivo .psqlrc del usuario\n" -#: help.c:510 +#: help.c:517 #, c-format msgid "" " SHELL\n" " shell used by the \\! command\n" msgstr " SHELL intérprete usado por la orden \\!\n" -#: help.c:512 +#: help.c:519 #, c-format msgid "" " TMPDIR\n" " directory for temporary files\n" msgstr " TMPDIR directorio para archivos temporales\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "Ayuda disponible:\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "" "Command: %s\n" @@ -3978,7 +4018,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "" "No help available for \"%s\".\n" @@ -6448,7 +6488,7 @@ msgstr "se ignoró argumento extra «%s» en línea de órdenes" msgid "could not find own program executable" msgstr "no se pudo encontrar el ejecutable propio" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "" "tab completion query failed: %s\n" diff --git a/src/bin/psql/po/fr.po b/src/bin/psql/po/fr.po index 13c3dd4ff70..c4d23999a3d 100644 --- a/src/bin/psql/po/fr.po +++ b/src/bin/psql/po/fr.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-11 02:35+0000\n" -"PO-Revision-Date: 2024-11-11 09:57+0100\n" +"POT-Creation-Date: 2025-11-08 01:20+0000\n" +"PO-Revision-Date: 2025-11-08 11:47+0100\n" "Last-Translator: Guillaume Lelarge \n" "Language-Team: French \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.8\n" #: ../../../src/common/logging.c:259 #, c-format @@ -71,7 +71,7 @@ msgid "%s() failed: %m" msgstr "échec de %s() : %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1316 command.c:3248 command.c:3297 command.c:3414 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -93,7 +93,7 @@ msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n" msgid "could not look up effective user ID %ld: %s" msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s" -#: ../../common/username.c:45 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "l'utilisateur n'existe pas" @@ -176,91 +176,96 @@ msgstr "format de sortie invalide (erreur interne) : %d" msgid "skipping recursive expansion of variable \"%s\"" msgstr "ignore l'expansion récursive de la variable « %s »" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "les commandes antislashs sont restreintes ; seule \\unrestrict est autorisée" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "commande \\%s invalide" -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr "Essayez \\? pour l'aide." -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s : argument « %s » supplémentaire ignoré" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "commande \\%s ignorée ; utilisez \\endif ou Ctrl-C pour quitter le bloc \\if courant" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "n'a pas pu obtenir le répertoire principal pour l'identifiant d'utilisateur %ld : %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s : n'a pas pu accéder au répertoire « %s » : %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Vous n'êtes pas connecté à une base de données.\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » à l'adresse « %s » via le port « %s ».\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » via le socket dans « %s » via le port « %s ».\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » (adresse « %s ») via le port « %s ».\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Vous êtes connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » via le port « %s ».\n" -#: command.c:1011 command.c:1120 command.c:2604 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "aucun tampon de requête" -#: command.c:1044 command.c:5314 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "numéro de ligne invalide : %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Le serveur (version %s) ne supporte pas l'édition du code de la fonction." -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Le serveur (version %s) ne supporte pas l'édition des définitions de vue." -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "Aucun changement" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s : nom d'encodage invalide ou procédure de conversion introuvable" -#: command.c:1312 command.c:2064 command.c:3244 command.c:3436 command.c:5420 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 #: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 @@ -268,179 +273,189 @@ msgstr "%s : nom d'encodage invalide ou procédure de conversion introuvable" msgid "%s" msgstr "%s" -#: command.c:1319 +#: command.c:1341 msgid "There is no previous error." msgstr "Il n'y a pas d'erreur précédente." -#: command.c:1432 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: parenthèse droite manquante" -#: command.c:1609 command.c:1914 command.c:1928 command.c:1945 command.c:2115 -#: command.c:2351 command.c:2571 command.c:2611 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s : argument requis manquant" -#: command.c:1740 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif : ne peut pas survenir après \\else" -#: command.c:1745 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif : pas de \\if correspondant" -#: command.c:1809 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else : ne peut pas survenir après \\else" -#: command.c:1814 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else : pas de \\if correspondant" -#: command.c:1854 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif : pas de \\if correspondant" -#: command.c:2009 +#: command.c:2031 msgid "Query buffer is empty." msgstr "Le tampon de requête est vide." -#: command.c:2046 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "Saisir le nouveau mot de passe de l'utilisateur « %s » : " -#: command.c:2049 +#: command.c:2071 msgid "Enter it again: " msgstr "Saisir le mot de passe à nouveau : " -#: command.c:2053 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "Les mots de passe ne sont pas identiques." -#: command.c:2144 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s : n'a pas pu lire la valeur pour la variable" -#: command.c:2247 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "Le tampon de requête a été effacé." -#: command.c:2269 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Historique sauvegardé dans le fichier « %s ».\n" -#: command.c:2356 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s : le nom de la variable d'environnement ne doit pas contenir « = »" -#: command.c:2408 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Le serveur (version %s) ne supporte pas l'affichage du code de la fonction." -#: command.c:2411 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Le serveur (version %s) ne supporte pas l'affichage des définitions de vues." -#: command.c:2418 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "le nom de la fonction est requis" -#: command.c:2420 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "le nom de la vue est requis" -#: command.c:2543 +#: command.c:2594 msgid "Timing is on." msgstr "Chronométrage activé." -#: command.c:2545 +#: command.c:2596 msgid "Timing is off." msgstr "Chronométrage désactivé." -#: command.c:2630 command.c:2658 command.c:3875 command.c:3878 command.c:3881 -#: command.c:3887 command.c:3889 command.c:3915 command.c:3925 command.c:3937 -#: command.c:3951 command.c:3978 command.c:4036 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s : n'est pas actuellement en mode restreint" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s : mauvaise clé" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s : %m" -#: command.c:3049 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "Mot de passe : " -#: command.c:3054 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Mot de passe pour l'utilisateur %s : " -#: command.c:3106 +#: command.c:3197 #, c-format msgid "Do not give user, host, or port separately when using a connection string" msgstr "Ne pas donner utilisateur, hôte ou port lors de l'utilisation d'une chaîne de connexion" -#: command.c:3141 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "Aucune connexion de base existante pour réutiliser ses paramètres" -#: command.c:3442 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "Connexion précédente conservée" -#: command.c:3448 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect : %s" -#: command.c:3504 +#: command.c:3595 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » à l'adresse « %s » via le port « %s ».\n" -#: command.c:3507 +#: command.c:3598 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » via le socket dans « %s » via le port « %s ».\n" -#: command.c:3513 +#: command.c:3604 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » (adresse « %s » ) via le port « %s ».\n" -#: command.c:3516 +#: command.c:3607 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s » sur l'hôte « %s » via le port « %s ».\n" -#: command.c:3521 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Vous êtes maintenant connecté à la base de données « %s » en tant qu'utilisateur « %s ».\n" -#: command.c:3561 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, serveur %s)\n" -#: command.c:3569 +#: command.c:3660 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -449,29 +464,29 @@ msgstr "" "ATTENTION : %s version majeure %s, version majeure du serveur %s.\n" " Certaines fonctionnalités de psql pourraient ne pas fonctionner.\n" -#: command.c:3608 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "Connexion SSL (protocole : %s, chiffrement : %s, bits : %s, compression : %s)\n" -#: command.c:3609 command.c:3610 command.c:3611 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "inconnu" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "désactivé" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "activé" -#: command.c:3626 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "connexion chiffrée avec GSSAPI\n" -#: command.c:3646 +#: command.c:3737 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -483,259 +498,259 @@ msgstr "" " Voir la section « Notes aux utilisateurs de Windows » de la page\n" " référence de psql pour les détails.\n" -#: command.c:3751 +#: command.c:3844 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "la variable d'environnement PSQL_EDITOR_LINENUMBER_ARG doit être définie avec un numéro de ligne" -#: command.c:3780 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "n'a pas pu exécuter l'éditeur « %s »" -#: command.c:3782 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "n'a pas pu exécuter /bin/sh" -#: command.c:3832 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "n'a pas pu localiser le répertoire temporaire : %s" -#: command.c:3859 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "n'a pas pu ouvrir le fichier temporaire « %s » : %m" -#: command.c:4195 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: abréviation ambiguë : « %s » correspond à « %s » comme à « %s »" -#: command.c:4215 +#: command.c:4308 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset : les formats autorisés sont aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4234 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: les styles de lignes autorisés sont ascii, old-ascii, unicode" -#: command.c:4249 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset : les styles autorisés de ligne de bordure Unicode sont single, double" -#: command.c:4264 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset : les styles autorisés pour la ligne de colonne Unicode sont single, double" -#: command.c:4279 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset : les styles autorisés pour la ligne d'en-tête Unicode sont single, double" -#: command.c:4322 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep doit être un unique caractère d'un octet" -#: command.c:4327 +#: command.c:4420 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep ne peut pas être un guillemet, un retour à la ligne ou un retour chariot" -#: command.c:4464 command.c:4652 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset : option inconnue : %s" -#: command.c:4484 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "Le style de bordure est %d.\n" -#: command.c:4490 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "La largeur cible n'est pas configuré.\n" -#: command.c:4492 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "La largeur cible est %d.\n" -#: command.c:4499 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "Affichage étendu activé.\n" -#: command.c:4501 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "L'affichage étendu est utilisé automatiquement.\n" -#: command.c:4503 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "Affichage étendu désactivé.\n" -#: command.c:4509 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Le séparateur de champs pour un CSV est « %s ».\n" -#: command.c:4517 command.c:4525 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "Le séparateur de champs est l'octet zéro.\n" -#: command.c:4519 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Le séparateur de champs est « %s ».\n" -#: command.c:4532 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "Le bas de page pas défaut est activé.\n" -#: command.c:4534 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "Le bas de page par défaut est désactivé.\n" -#: command.c:4540 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "Le format de sortie est %s.\n" -#: command.c:4546 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "Le style de ligne est %s.\n" -#: command.c:4553 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "L'affichage de null est « %s ».\n" -#: command.c:4561 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "L'affichage de la sortie numérique adaptée à la locale est activé.\n" -#: command.c:4563 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "L'affichage de la sortie numérique adaptée à la locale est désactivé.\n" -#: command.c:4570 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "Le paginateur est utilisé pour les affichages longs.\n" -#: command.c:4572 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "Le paginateur est toujours utilisé.\n" -#: command.c:4574 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "L'utilisation du paginateur est désactivé.\n" -#: command.c:4580 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "Le paginateur ne sera pas utilisé pour moins que %d ligne.\n" msgstr[1] "Le paginateur ne sera pas utilisé pour moins que %d lignes.\n" -#: command.c:4590 command.c:4600 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "Le séparateur d'enregistrements est l'octet zéro.\n" -#: command.c:4592 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "Le séparateur d'enregistrement est .\n" -#: command.c:4594 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Le séparateur d'enregistrements est « %s ».\n" -#: command.c:4607 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Les attributs de la table sont « %s ».\n" -#: command.c:4610 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "Les attributs de la table ne sont pas définis.\n" -#: command.c:4617 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "Le titre est « %s ».\n" -#: command.c:4619 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "Le titre n'est pas défini.\n" -#: command.c:4626 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "L'affichage des tuples seuls est activé.\n" -#: command.c:4628 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "L'affichage des tuples seuls est désactivé.\n" -#: command.c:4634 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Le style de bordure Unicode est « %s ».\n" -#: command.c:4640 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Le style de ligne Unicode est « %s ».\n" -#: command.c:4646 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Le style d'en-tête Unicode est « %s ».\n" -#: command.c:4879 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\! : échec" -#: command.c:4904 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch ne peut pas être utilisé avec une requête vide" -#: command.c:4945 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (chaque %gs)\n" -#: command.c:4948 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (chaque %gs)\n" -#: command.c:5010 command.c:5017 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -748,12 +763,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5209 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "« %s.%s » n'est pas une vue" -#: command.c:5225 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "n'a pas pu analyser le tableau reloptions" @@ -2433,7 +2448,7 @@ msgstr "" "psql est l'interface interactive de PostgreSQL.\n" "\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "Usage :\n" @@ -2817,269 +2832,287 @@ msgstr " \\q quitte psql\n" #: help.c:182 #, c-format +msgid "" +" \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr "" +" \\restrict CLE_RESTRICTION\n" +" entre en mode restreint avec la clé fournie\n" + +#: help.c:184 +#, c-format +msgid "" +" \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr "" +" \\unrestrict CLE_RESTRICTION\n" +" sort du mode restreint si la clé correspond\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] exécute la requête toutes les SEC secondes\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "Aide\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commandes] affiche l'aide sur les métacommandes\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options affiche l'aide sur les options en ligne de commande de psql\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables affiche l'aide sur les variables spéciales\n" -#: help.c:190 +#: help.c:194 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr "" " \\h [NOM] aide-mémoire pour les commandes SQL, * pour toutes\n" " les commandes\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "Tampon de requête\n" -#: help.c:194 +#: help.c:198 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" " \\e [FICHIER] [LIGNE] édite le tampon de requête ou le fichier avec un\n" " éditeur externe\n" -#: help.c:195 +#: help.c:199 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [FONCTION [LIGNE]] édite la définition de fonction avec un éditeur\n" " externe\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [VUE [LIGNE]] édite la définition de vue avec un éditeur\n" " externe\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p affiche le contenu du tampon de requête\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r efface le tampon de requêtes\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr "" " \\s [FICHIER] affiche l'historique ou le sauvegarde dans un\n" " fichier\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr "" " \\w [FICHIER] écrit le contenu du tampon de requêtes dans un\n" " fichier\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "Entrée/Sortie\n" -#: help.c:206 +#: help.c:210 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr "" " \\copy ... exécute SQL COPY avec le flux de données dirigé vers\n" " l'hôte client\n" -#: help.c:207 +#: help.c:211 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [TEXTE] écrit le texte sur la sortie standard (-n pour supprimer le retour à la ligne)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FICHIER exécute les commandes du fichier\n" -#: help.c:209 +#: help.c:213 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr "" " \\ir FICHIER identique à \\i, mais relatif à l'emplacement du script\n" " ou un |tube\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr "" " \\o [FICHIER] envoie les résultats de la requête vers un fichier\n" " ou un |tube\n" -#: help.c:211 +#: help.c:215 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr "" " \\qecho [-n] [TEXTE] écrit un texte sur la sortie des résultats des\n" " requêtes (\\o) (-n pour supprimer le retour à la ligne)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr " \\warn [-n] [TEXTE] écrit le texte sur la sortie des erreurs (-n pour supprimer le retour à la ligne)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "Conditionnel\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR début du bloc conditionnel\n" -#: help.c:217 +#: help.c:221 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif alternative à l'intérieur du bloc conditionnel courant\n" -#: help.c:218 +#: help.c:222 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else alternative finale à l'intérieur du bloc conditionnel courant\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif bloc conditionnel de fin\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "Informations\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (options : S = affiche les objets systèmes, + = informations supplémentaires)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] affiche la liste des tables, vues et séquences\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr "" " \\d[S+] NOM affiche la description de la table, de la vue,\n" " de la séquence ou de l'index\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MODÈLE] affiche les agrégats\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [MODÈLE] affiche la liste des méthodes d'accès\n" -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] affiche les classes d'opérateurs\n" -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] affiche les familles d'opérateur\n" -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] affiche les opérateurs des familles d'opérateur\n" -#: help.c:231 +#: help.c:235 #, c-format msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] liste les fonctions de support des familles d'opérateur\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MODÈLE] affiche la liste des tablespaces\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MODÈLE] affiche la liste des conversions\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MODÈLE] affiche la liste des transtypages\n" -#: help.c:235 +#: help.c:239 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [MODÈLE] affiche les commentaires des objets dont le commentaire\n" " n'est affiché nul part ailleurs\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MODÈLE] affiche la liste des domaines\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MODÈLE] affiche les droits par défaut\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MODÈLE] affiche la liste des tables distantes\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MODÈLE] affiche la liste des serveurs distants\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MODÈLE] affiche la liste des tables distantes\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MODÈLE] affiche la liste des correspondances utilisateurs\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MODÈLE] affiche la liste des wrappers de données distantes\n" -#: help.c:243 +#: help.c:247 #, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" @@ -3088,67 +3121,67 @@ msgstr "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" " affiche la liste des fonctions [seulement agrégat/normal/procédure/trigger/window]\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr "" " \\dF[+] [MODÈLE] affiche la liste des configurations de la recherche\n" " plein texte\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr "" " \\dFd[+] [MODÈLE] affiche la liste des dictionnaires de la recherche de\n" " texte\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr "" " \\dFp[+] [MODÈLE] affiche la liste des analyseurs de la recherche de\n" " texte\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr "" " \\dFt[+] [MODÈLE] affiche la liste des modèles de la recherche de\n" " texte\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [MODÈLE] affiche la liste des rôles (utilisateurs)\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MODÈLE] affiche la liste des index\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr "" " \\dl affiche la liste des « Large Objects », identique à\n" " \\lo_list\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MODÈLE] affiche la liste des langages procéduraux\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MODÈLE] affiche la liste des vues matérialisées\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MODÈLE] affiche la liste des schémas\n" -#: help.c:255 +#: help.c:259 #, c-format msgid "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" @@ -3157,132 +3190,132 @@ msgstr "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " affiche la liste des opérateurs\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MODÈLE] affiche la liste des collationnements\n" -#: help.c:258 +#: help.c:262 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr "" " \\dp [MODÈLE] affiche la liste des droits d'accès aux tables,\n" " vues, séquences\n" -#: help.c:259 +#: help.c:263 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[itn+] [PATTERN] affiche les relations partitionnées [seulement index/table] [n=imbriquées]\n" -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr "" " \\drds [ROLEPTRN [DBPTRN]] liste la configuration utilisateur par base de données\n" "\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[S+] [MODÈLE] affiche la liste des publications de réplication\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [MODÈLE] affiche la liste des souscriptions de réplication\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MODÈLE] affiche la liste des séquences\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MODÈLE] affiche la liste des tables\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MODÈLE] affiche la liste des types de données\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [MODÈLE] affiche la liste des rôles (utilisateurs)\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MODÈLE] affiche la liste des vues\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MODÈLE] affiche la liste des extensions\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [MODÈLE] affiche les statistiques étendues\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [MODÈLE] affiche les triggers sur évènement\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [MODÈLE] affiche la liste des bases de données\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] [FONCTION] édite la définition d'une fonction\n" -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv [FONCTION] édite la définition d'une vue\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MODÈLE] identique à \\dp\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "Formatage\n" -#: help.c:278 +#: help.c:282 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr "" " \\a bascule entre les modes de sortie alignée et non\n" " alignée\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [CHAÎNE] initialise le titre d'une table, ou le désactive en\n" " l'absence d'argument\n" -#: help.c:280 +#: help.c:284 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr "" " \\f [CHAÎNE] affiche ou initialise le séparateur de champ pour\n" " une sortie non alignée des requêtes\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H bascule le mode de sortie HTML (actuellement %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3301,29 +3334,29 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t affiche uniquement les lignes (actuellement %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr "" " \\T [CHAÎNE] initialise les attributs HTML de la balise
,\n" " ou l'annule en l'absence d'argument\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] bascule l'affichage étendu (actuellement %s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "Connexions\n" -#: help.c:299 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3333,7 +3366,7 @@ msgstr "" " se connecte à une autre base de données\n" " (actuellement « %s »)\n" -#: help.c:303 +#: help.c:307 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3343,17 +3376,17 @@ msgstr "" " se connecte à une nouvelle base de données\n" " (aucune connexion actuellement)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo affiche des informations sur la connexion en cours\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [ENCODAGE] affiche ou initialise l'encodage du client\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr "" @@ -3361,65 +3394,65 @@ msgstr "" " modifie de façon sécurisé le mot de passe d'un\n" " utilisateur\n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "Système d'exploitation\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [RÉPERTOIRE] change de répertoire de travail\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NOM [VALEUR] (dés)initialise une variable d'environnement\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr "" " \\timing [on|off] bascule l'activation du chronométrage des commandes\n" " (actuellement %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr "" " \\! [COMMANDE] exécute la commande dans un shell ou exécute un\n" " shell interactif\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "Variables\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr "" " \\prompt [TEXTE] NOM demande à l'utilisateur de configurer la variable\n" " interne\n" -#: help.c:320 +#: help.c:324 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr "" " \\set [NOM [VALEUR]] initialise une variable interne ou les affiche\n" " toutes en l'absence de paramètre\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NOM désactive (supprime) la variable interne\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "« Large objects »\n" -#: help.c:325 +#: help.c:329 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3433,7 +3466,7 @@ msgstr "" " \\lo_unlink OIDLOB\n" " opérations sur les « Large Objects »\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "" "List of specially treated variables\n" @@ -3442,12 +3475,12 @@ msgstr "" "Liste des variables traitées spécialement\n" "\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "variables psql :\n" -#: help.c:356 +#: help.c:360 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3458,7 +3491,7 @@ msgstr "" " ou \\set NOM VALEUR dans psql\n" "\n" -#: help.c:358 +#: help.c:362 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3467,7 +3500,7 @@ msgstr "" " AUTOCOMMIT\n" " si activé, les commandes SQL réussies sont automatiquement validées\n" -#: help.c:360 +#: help.c:364 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3478,7 +3511,7 @@ msgstr "" " détermine la casse utilisée pour compléter les mots clés SQL\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid "" " DBNAME\n" @@ -3487,7 +3520,7 @@ msgstr "" " DBNAME\n" " le nom de base de données actuel\n" -#: help.c:365 +#: help.c:369 #, c-format msgid "" " ECHO\n" @@ -3498,7 +3531,7 @@ msgstr "" " contrôle ce qui est envoyé sur la sortie standard\n" " [all, errors, none, queries]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3509,7 +3542,7 @@ msgstr "" " si activé, affiche les requêtes internes exécutées par les méta-commandes ;\n" " si configuré à « noexec », affiche les requêtes sans les exécuter\n" -#: help.c:371 +#: help.c:375 #, c-format msgid "" " ENCODING\n" @@ -3518,7 +3551,7 @@ msgstr "" " ENCODING\n" " encodage du jeu de caractères client\n" -#: help.c:373 +#: help.c:377 #, c-format msgid "" " ERROR\n" @@ -3527,7 +3560,7 @@ msgstr "" " ERROR\n" " true si la dernière requête a échoué, sinon false\n" -#: help.c:375 +#: help.c:379 #, c-format msgid "" " FETCH_COUNT\n" @@ -3537,7 +3570,7 @@ msgstr "" " le nombre de lignes résultats à récupérer et à afficher à la fois\n" " (0 pour illimité)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3546,7 +3579,7 @@ msgstr "" " HIDE_TABLEAM\n" " si activé, les méthodes d'accès ne sont pas affichées\n" -#: help.c:379 +#: help.c:383 #, c-format msgid "" " HIDE_TOAST_COMPRESSION\n" @@ -3556,7 +3589,7 @@ msgstr "" " si activé, les méthodes de compression methods ne sont pas affichées\n" "\n" -#: help.c:381 +#: help.c:385 #, c-format msgid "" " HISTCONTROL\n" @@ -3565,7 +3598,7 @@ msgstr "" " HISTCONTROL\n" " contrôle l'historique des commandes [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid "" " HISTFILE\n" @@ -3574,7 +3607,7 @@ msgstr "" " HISTFILE\n" " nom du fichier utilisé pour stocker l'historique des commandes\n" -#: help.c:385 +#: help.c:389 #, c-format msgid "" " HISTSIZE\n" @@ -3583,7 +3616,7 @@ msgstr "" " HISTSIZE\n" " nombre maximum de commandes à stocker dans l'historique de commandes\n" -#: help.c:387 +#: help.c:391 #, c-format msgid "" " HOST\n" @@ -3592,7 +3625,7 @@ msgstr "" " HOST\n" " l'hôte de la base de données\n" -#: help.c:389 +#: help.c:393 #, c-format msgid "" " IGNOREEOF\n" @@ -3601,7 +3634,7 @@ msgstr "" " IGNOREEOF\n" " nombre d'EOF nécessaire pour terminer une session interactive\n" -#: help.c:391 +#: help.c:395 #, c-format msgid "" " LASTOID\n" @@ -3610,7 +3643,7 @@ msgstr "" " LASTOID\n" " valeur du dernier OID affecté\n" -#: help.c:393 +#: help.c:397 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3621,7 +3654,7 @@ msgstr "" " LAST_ERROR_SQLSTATE\n" " message et SQLSTATE de la dernière erreur ou une chaîne vide et \"00000\" if si aucune erreur\n" -#: help.c:396 +#: help.c:400 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3630,7 +3663,7 @@ msgstr "" " ON_ERROR_ROLLBACK\n" " si activé, une erreur n'arrête pas une transaction (utilise des savepoints implicites)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3639,7 +3672,7 @@ msgstr "" " ON_ERROR_STOP\n" " arrête l'exécution d'un batch après une erreur\n" -#: help.c:400 +#: help.c:404 #, c-format msgid "" " PORT\n" @@ -3648,7 +3681,7 @@ msgstr "" " PORT\n" " port du serveur pour la connexion actuelle\n" -#: help.c:402 +#: help.c:406 #, c-format msgid "" " PROMPT1\n" @@ -3657,7 +3690,7 @@ msgstr "" " PROMPT1\n" " spécifie l'invite standard de psql\n" -#: help.c:404 +#: help.c:408 #, c-format msgid "" " PROMPT2\n" @@ -3666,7 +3699,7 @@ msgstr "" " PROMPT2\n" " spécifie l'invite utilisé quand une requête continue après la ligne courante\n" -#: help.c:406 +#: help.c:410 #, c-format msgid "" " PROMPT3\n" @@ -3675,7 +3708,7 @@ msgstr "" " PROMPT3\n" " spécifie l'invite utilisée lors d'un COPY ... FROM STDIN\n" -#: help.c:408 +#: help.c:412 #, c-format msgid "" " QUIET\n" @@ -3684,7 +3717,7 @@ msgstr "" " QUIET\n" " s'exécute en silence (identique à l'option -q)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid "" " ROW_COUNT\n" @@ -3693,7 +3726,7 @@ msgstr "" " ROW_COUNT\n" " nombre de lignes renvoyées ou affectées par la dernière requête, ou 0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3704,7 +3737,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " version du serveur (chaîne courte ou format numérique)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3713,7 +3746,7 @@ msgstr "" " SHOW_CONTEXT\n" " contrôle l'affichage des champs de contexte du message [never, errors, always]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid "" " SINGLELINE\n" @@ -3722,7 +3755,7 @@ msgstr "" " SINGLELINE\n" " une fin de ligne termine le mode de commande SQL (identique à l'option -S)\n" -#: help.c:419 +#: help.c:423 #, c-format msgid "" " SINGLESTEP\n" @@ -3731,7 +3764,7 @@ msgstr "" " SINGLESTEP\n" " mode pas à pas (identique à l'option -s)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid "" " SQLSTATE\n" @@ -3740,7 +3773,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE de la dernière requête, ou \"00000\" si aucune erreur\n" -#: help.c:423 +#: help.c:427 #, c-format msgid "" " USER\n" @@ -3749,7 +3782,7 @@ msgstr "" " USER\n" " l'utilisateur actuellement connecté\n" -#: help.c:425 +#: help.c:429 #, c-format msgid "" " VERBOSITY\n" @@ -3758,7 +3791,7 @@ msgstr "" " VERBOSITY\n" " contrôle la verbosité des rapports d'erreurs [default, verbose, terse, sqlstate]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid "" " VERSION\n" @@ -3771,7 +3804,7 @@ msgstr "" " VERSION_NUM\n" " version de psql (chaîne longue, chaîne courte, ou format numérique)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "" "\n" @@ -3780,7 +3813,7 @@ msgstr "" "\n" "Paramètres d'affichage :\n" -#: help.c:434 +#: help.c:438 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3791,7 +3824,7 @@ msgstr "" " ou \\pset NOM [VALEUR] dans psql\n" "\n" -#: help.c:436 +#: help.c:440 #, c-format msgid "" " border\n" @@ -3800,7 +3833,7 @@ msgstr "" " border\n" " style de bordure (nombre)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid "" " columns\n" @@ -3809,7 +3842,16 @@ msgstr "" " columns\n" " largeur cible pour le format encadré\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid "" +" csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr "" +" csv_fieldsep\n" +" champ séparateur pour le format de sortie CSV (par défaut « %c »)\n" + +#: help.c:447 #, c-format msgid "" " expanded (or x)\n" @@ -3818,7 +3860,7 @@ msgstr "" " expanded (ou x)\n" " sortie étendue [on, off, auto]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid "" " fieldsep\n" @@ -3827,7 +3869,7 @@ msgstr "" " fieldsep\n" " champ séparateur pour l'affichage non aligné (par défaut « %s »)\n" -#: help.c:445 +#: help.c:452 #, c-format msgid "" " fieldsep_zero\n" @@ -3836,7 +3878,7 @@ msgstr "" " fieldsep_zero\n" " configure le séparateur de champ pour l'affichage non alignée à l'octet zéro\n" -#: help.c:447 +#: help.c:454 #, c-format msgid "" " footer\n" @@ -3845,7 +3887,7 @@ msgstr "" " footer\n" " active ou désactive l'affiche du bas de tableau [on, off]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid "" " format\n" @@ -3854,7 +3896,7 @@ msgstr "" " format\n" " active le format de sortie [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid "" " linestyle\n" @@ -3863,7 +3905,7 @@ msgstr "" " linestyle\n" " configure l'affichage des lignes de bordure [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid "" " null\n" @@ -3872,7 +3914,7 @@ msgstr "" " null\n" " configure la chaîne à afficher à la place d'une valeur NULL\n" -#: help.c:455 +#: help.c:462 #, c-format msgid "" " numericlocale\n" @@ -3882,7 +3924,7 @@ msgstr "" " active ou désactive l'affichage d'un caractère spécifique à la locale pour séparer\n" " des groupes de chiffres [on, off]\n" -#: help.c:457 +#: help.c:464 #, c-format msgid "" " pager\n" @@ -3891,7 +3933,7 @@ msgstr "" " pager\n" " contrôle quand un paginateur externe est utilisé [yes, no, always]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid "" " recordsep\n" @@ -3900,7 +3942,7 @@ msgstr "" " recordsep\n" " enregistre le séparateur de ligne pour les affichages non alignés\n" -#: help.c:461 +#: help.c:468 #, c-format msgid "" " recordsep_zero\n" @@ -3910,7 +3952,7 @@ msgstr "" " initialise le séparateur d'enregistrements pour un affichage\n" " non aligné à l'octet zéro\n" -#: help.c:463 +#: help.c:470 #, c-format msgid "" " tableattr (or T)\n" @@ -3922,7 +3964,7 @@ msgstr "" " proportionnelles de colonnes pour les types de données alignés à gauche dans le\n" " format latex-longtable\n" -#: help.c:466 +#: help.c:473 #, c-format msgid "" " title\n" @@ -3931,7 +3973,7 @@ msgstr "" " title\n" " configure le titre de la table pour toute table affichée\n" -#: help.c:468 +#: help.c:475 #, c-format msgid "" " tuples_only\n" @@ -3940,7 +3982,7 @@ msgstr "" " tuples_only\n" " si activé, seules les données de la table sont affichées\n" -#: help.c:470 +#: help.c:477 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3953,7 +3995,7 @@ msgstr "" " unicode_header_linestyle\n" " configure le style d'affichage de ligne Unicode [single, double]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "" "\n" @@ -3962,7 +4004,7 @@ msgstr "" "\n" "Variables d'environnement :\n" -#: help.c:479 +#: help.c:486 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3973,7 +4015,7 @@ msgstr "" " ou \\setenv NOM [VALEUR] dans psql\n" "\n" -#: help.c:481 +#: help.c:488 #, c-format msgid "" " set NAME=VALUE\n" @@ -3986,7 +4028,7 @@ msgstr "" " ou \\setenv NOM [VALEUR] dans psql\n" "\n" -#: help.c:484 +#: help.c:491 #, c-format msgid "" " COLUMNS\n" @@ -3995,7 +4037,7 @@ msgstr "" " COLUMNS\n" " nombre de colonnes pour le format encadré\n" -#: help.c:486 +#: help.c:493 #, c-format msgid "" " PGAPPNAME\n" @@ -4004,7 +4046,7 @@ msgstr "" " PGAPPNAME\n" " identique au paramètre de connexion application_name\n" -#: help.c:488 +#: help.c:495 #, c-format msgid "" " PGDATABASE\n" @@ -4013,7 +4055,7 @@ msgstr "" " PGDATABASE\n" " identique au paramètre de connexion dbname\n" -#: help.c:490 +#: help.c:497 #, c-format msgid "" " PGHOST\n" @@ -4022,7 +4064,7 @@ msgstr "" " PGHOST\n" " identique au paramètre de connexion host\n" -#: help.c:492 +#: help.c:499 #, c-format msgid "" " PGPASSFILE\n" @@ -4031,7 +4073,7 @@ msgstr "" " PGPASSFILE\n" " nom du fichier de mot de passe\n" -#: help.c:494 +#: help.c:501 #, c-format msgid "" " PGPASSWORD\n" @@ -4040,7 +4082,7 @@ msgstr "" " PGPASSWORD\n" " mot de passe de connexion (non recommendé)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid "" " PGPORT\n" @@ -4049,7 +4091,7 @@ msgstr "" " PGPORT\n" " identique au paramètre de connexion port\n" -#: help.c:498 +#: help.c:505 #, c-format msgid "" " PGUSER\n" @@ -4058,7 +4100,7 @@ msgstr "" " PGUSER\n" " identique au paramètre de connexion user\n" -#: help.c:500 +#: help.c:507 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -4067,7 +4109,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " éditeur utilisé par les commandes \\e, \\ef et \\ev\n" -#: help.c:502 +#: help.c:509 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -4076,7 +4118,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " comment spécifier un numéro de ligne lors de l'appel de l'éditeur\n" -#: help.c:504 +#: help.c:511 #, c-format msgid "" " PSQL_HISTORY\n" @@ -4085,7 +4127,7 @@ msgstr "" " PSQL_HISTORY\n" " autre emplacement pour le fichier d'historique des commandes\n" -#: help.c:506 +#: help.c:513 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -4094,7 +4136,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " nom du paginateur externe\n" -#: help.c:508 +#: help.c:515 #, c-format msgid "" " PSQLRC\n" @@ -4103,7 +4145,7 @@ msgstr "" " PSQLRC\n" " autre emplacement pour le fichier .psqlrc de l'utilisateur\n" -#: help.c:510 +#: help.c:517 #, c-format msgid "" " SHELL\n" @@ -4112,7 +4154,7 @@ msgstr "" " SHELL\n" " shell utilisé par la commande \\!\n" -#: help.c:512 +#: help.c:519 #, c-format msgid "" " TMPDIR\n" @@ -4121,11 +4163,11 @@ msgstr "" " TMPDIR\n" " répertoire pour les fichiers temporaires\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "Aide-mémoire disponible :\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "" "Command: %s\n" @@ -4144,7 +4186,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "" "No help available for \"%s\".\n" @@ -6619,7 +6661,7 @@ msgstr "option supplémentaire « %s » ignorée" msgid "could not find own program executable" msgstr "n'a pas pu trouver son propre exécutable" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "" "tab completion query failed: %s\n" diff --git a/src/bin/psql/po/ja.po b/src/bin/psql/po/ja.po index 9eceb2ead77..f2eb10b215e 100644 --- a/src/bin/psql/po/ja.po +++ b/src/bin/psql/po/ja.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL 14)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-05 09:18+0900\n" -"PO-Revision-Date: 2024-11-05 09:29+0900\n" +"POT-Creation-Date: 2025-11-05 10:26+0900\n" +"PO-Revision-Date: 2025-11-05 11:20+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -73,7 +73,7 @@ msgid "%s() failed: %m" msgstr "%s() が失敗しました: %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1316 command.c:3248 command.c:3297 command.c:3414 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -95,7 +95,7 @@ msgstr "nullポインタは複製できません (内部エラー)\n" msgid "could not look up effective user ID %ld: %s" msgstr "実効ユーザーID %ld が見つかりませんでした: %s" -#: ../../common/username.c:45 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "ユーザーが存在しません" @@ -169,91 +169,96 @@ msgstr "テーブルの内容にセルを追加できませんでした: 全セ msgid "invalid output format (internal error): %d" msgstr "出力フォーマットが無効(内部エラー): %d" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "バックスラッシュコマンドは制限されています; \\unrestrict のみ実行可能です" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "不正なコマンド \\%s " -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr " \\? でヘルプを表示します。" -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: 余分な引数\"%s\"は無視されました" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "\\%s コマンドは無視されます; 現在の\\ifブロックを抜けるには\\endifまたはCtrl-Cを使用します" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "ユーザーID %ldのホームディレクトリを取得できませんでした : %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: ディレクトリを\"%s\"に変更できませんでした: %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "現在データベースに接続していません。\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ホスト\"%s\"上のポート\"%s\"で接続しています。\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、\"%s\"のソケットを介してポート\"%s\"で接続しています。\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ホスト\"%s\"(アドレス\"%s\")上のポート\"%s\"で接続しています。\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ホスト\"%s\"上のポート\"%s\"で接続しています。\n" -#: command.c:1011 command.c:1120 command.c:2604 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "問い合わせバッファがありません" -#: command.c:1044 command.c:5314 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "不正な行番号です: %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "このサーバー(バージョン%s)は関数ソースコードの編集をサポートしていません。" -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "このサーバー(バージョン%s)はビュー定義の編集をサポートしていません。" -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "変更されていません" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: エンコーディング名が不正であるか、または変換プロシージャが見つかりません。" -#: command.c:1312 command.c:2064 command.c:3244 command.c:3436 command.c:5420 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 #: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 @@ -261,179 +266,189 @@ msgstr "%s: エンコーディング名が不正であるか、または変換 msgid "%s" msgstr "%s" -#: command.c:1319 +#: command.c:1341 msgid "There is no previous error." msgstr "直前のエラーはありません。" -#: command.c:1432 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: 右括弧がありません" -#: command.c:1609 command.c:1914 command.c:1928 command.c:1945 command.c:2115 -#: command.c:2351 command.c:2571 command.c:2611 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: 必要な引数がありません" -#: command.c:1740 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: \\else の後には置けません" -#: command.c:1745 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: 対応する \\if がありません" -#: command.c:1809 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: \\else の後には置けません" -#: command.c:1814 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: 対応する \\if がありません" -#: command.c:1854 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: 対応する \\if がありません" -#: command.c:2009 +#: command.c:2031 msgid "Query buffer is empty." msgstr "問い合わせバッファは空です。" -#: command.c:2046 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "ユーザー\"%s\"の新しいパスワードを入力してください: " -#: command.c:2049 +#: command.c:2071 msgid "Enter it again: " msgstr "もう一度入力してください: " -#: command.c:2053 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "パスワードが一致しませんでした。" -#: command.c:2144 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: 変数の値を読み取ることができませんでした" -#: command.c:2247 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "問い合わせバッファがリセット(クリア)されました。" -#: command.c:2269 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "ファイル\"%s\"にヒストリーを出力しました。\n" -#: command.c:2356 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: 環境変数名に\"=\"を含めることはできません" -#: command.c:2408 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "このサーバー(バージョン%s)は関数ソースの表示をサポートしていません。" -#: command.c:2411 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "このサーバー(バージョン%s)はビュー定義の表示をサポートしていません。" -#: command.c:2418 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "関数名が必要です" -#: command.c:2420 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "ビュー名が必要です" -#: command.c:2543 +#: command.c:2594 msgid "Timing is on." msgstr "タイミングは on です。" -#: command.c:2545 +#: command.c:2596 msgid "Timing is off." msgstr "タイミングは off です。" -#: command.c:2630 command.c:2658 command.c:3875 command.c:3878 command.c:3881 -#: command.c:3887 command.c:3889 command.c:3915 command.c:3925 command.c:3937 -#: command.c:3951 command.c:3978 command.c:4036 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s: 現在制限モードではありません" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s: キーが間違っています" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:3049 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "パスワード: " -#: command.c:3054 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "ユーザー %s のパスワード: " -#: command.c:3106 +#: command.c:3197 #, c-format msgid "Do not give user, host, or port separately when using a connection string" msgstr "接続文字列の使用時ー、ホスト、あるいはポートを個別に指定しないでください" -#: command.c:3141 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "パラメータの再利用のもととなる既存のデータベース接続がありません" -#: command.c:3442 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "以前の接続は保持されています" -#: command.c:3448 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3504 +#: command.c:3595 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ホスト\"%s\"のポート\"%s\"で接続しました。\n" -#: command.c:3507 +#: command.c:3598 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ソケット\"%s\"のポート\"%s\"を介して接続しました。\n" -#: command.c:3513 +#: command.c:3604 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ホスト\"%s\"(アドレス\"%s\")のポート\"%s\"で接続しました。\n" -#: command.c:3516 +#: command.c:3607 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として、ホスト\"%s\"のポート\"%s\"を介して接続しました。\n" -#: command.c:3521 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "データベース\"%s\"にユーザー\"%s\"として接続しました。\n" -#: command.c:3561 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s、サーバー %s)\n" -#: command.c:3569 +#: command.c:3660 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -442,29 +457,29 @@ msgstr "" "警告: %s のメジャーバージョンは %s ですが、サーバーのメジャーバージョンは %s です。\n" " psql の機能の中で、動作しないものがあるかもしれません。\n" -#: command.c:3608 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL 接続 (プロトコル: %s、暗号化方式: %s、ビット長: %s、圧縮: %s)\n" -#: command.c:3609 command.c:3610 command.c:3611 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "不明" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "オフ" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "オン" -#: command.c:3626 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI暗号化接続\n" -#: command.c:3646 +#: command.c:3737 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -475,258 +490,258 @@ msgstr "" " 8ビット文字が正しく表示されない可能性があります。詳細はpsqlリファレンスマニュアルの\n" " \"Windowsユーザー向けの注意\" (Notes for Windows users)を参照してください。\n" -#: command.c:3751 +#: command.c:3844 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "環境変数PSQL_EDITOR_LINENUMBER_ARGで行番号を指定する必要があります" -#: command.c:3780 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "エディタ\"%s\"を起動できませんでした" -#: command.c:3782 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "/bin/shを起動できませんでした" -#: command.c:3832 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "一時ディレクトリが見つかりませんでした: %s" -#: command.c:3859 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "一時ファイル\"%s\"をオープンできませんでした: %m" -#: command.c:4195 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: 曖昧な短縮形\"%s\"が\"%s\"と\"%s\"のどちらにも合致します" -#: command.c:4215 +#: command.c:4308 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: 有効なフォーマットはaligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4234 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: 有効な線のスタイルは ascii, old-ascii, unicode" -#: command.c:4249 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: 有効な Unicode 罫線のスタイルは single, double" -#: command.c:4264 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: 有効な Unicode 列罫線のスタイルは single, double" -#: command.c:4279 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: 有効な Unicode ヘッダー罫線のスタイルは single, double" -#: command.c:4322 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsepは単一の1バイト文字でなければなりません" -#: command.c:4327 +#: command.c:4420 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsepはダブルクォート、改行(LF)または復帰(CR)にはできません" -#: command.c:4464 command.c:4652 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: 未定義のオプション: %s" -#: command.c:4484 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "罫線スタイルは %d です。\n" -#: command.c:4490 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "ターゲットの幅が設定されていません。\n" -#: command.c:4492 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "ターゲットの幅は %d です。\n" -#: command.c:4499 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "拡張表示は on です。\n" -#: command.c:4501 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "拡張表示が自動的に使われます。\n" -#: command.c:4503 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "拡張表示は off です。\n" -#: command.c:4509 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "CSVのフィールド区切り文字は\"%s\"です。\n" -#: command.c:4517 command.c:4525 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "フィールド区切り文字はゼロバイトです。\n" -#: command.c:4519 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "フィールド区切り文字は\"%s\"です。\n" -#: command.c:4532 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "デフォルトフッター(行数の表示)は on です。\n" -#: command.c:4534 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "デフォルトフッター(行数の表示)は off です。\n" -#: command.c:4540 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "出力形式は %s です。\n" -#: command.c:4546 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "線のスタイルは %s です。\n" -#: command.c:4553 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null表示は\"%s\"です。\n" -#: command.c:4561 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "『数値出力時のロケール調整』は on です。\n" -#: command.c:4563 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "『数値出力時のロケール調整』は off です。\n" -#: command.c:4570 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "表示が縦に長くなる場合はページャーを使います。\n" -#: command.c:4572 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "常にページャーを使います。\n" -#: command.c:4574 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "「ページャーを使う」は off です。\n" -#: command.c:4580 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "%d 行未満の場合、ページャーは使われません。\n" -#: command.c:4590 command.c:4600 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "レコードの区切り文字はゼロバイトです\n" -#: command.c:4592 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "レコード区切り文字はです。\n" -#: command.c:4594 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "レコード区切り記号は\"%s\"です。\n" -#: command.c:4607 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "テーブル属性は\"%s\"です。\n" -#: command.c:4610 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "テーブル属性は設定されていません。\n" -#: command.c:4617 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "タイトルは\"%s\"です。\n" -#: command.c:4619 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "タイトルは設定されていません。\n" -#: command.c:4626 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "「タプルのみ表示」は on です。\n" -#: command.c:4628 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "「タプルのみ表示」は off です。\n" -#: command.c:4634 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Unicode の罫線スタイルは\"%s\"です。\n" -#: command.c:4640 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Unicode 行罫線のスタイルは\"%s\"です。\n" -#: command.c:4646 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Unicodeヘッダー行のスタイルは\"%s\"です。\n" -#: command.c:4879 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\!: 失敗" -#: command.c:4904 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watchは空の問い合わせでは使えません" -#: command.c:4945 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (%g 秒毎)\n" -#: command.c:4948 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (%g 秒毎)\n" -#: command.c:5010 command.c:5017 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -739,12 +754,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5209 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\"はビューではありません" -#: command.c:5225 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "reloptions配列をパースできませんでした" @@ -2419,7 +2434,7 @@ msgstr "" "psql は PostgreSQL の対話型ターミナルです。\n" "\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "使用方法:\n" @@ -2743,7 +2758,7 @@ msgstr "" #: help.c:177 #, c-format msgid " \\gdesc describe result of query, without executing it\n" -msgstr " \\gdesc 問い合わせを実行せずに結果の説明を行う\n" +msgstr " \\gdesc 問い合わせを実行せずに結果の形式を出力する\n" #: help.c:178 #, c-format @@ -2767,253 +2782,271 @@ msgstr " \\q psql を終了する\n" #: help.c:182 #, c-format +msgid "" +" \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr "" +" \\restrict RESTRICT_KEY\n" +" 指定のキーで制限モードを開始する\n" + +#: help.c:184 +#, c-format +msgid "" +" \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr "" +" \\unrestrict RESTRICT_KEY\n" +" キーが一致していれば制限モードを終了する\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [秒数] 指定した秒数ごとに問い合わせを実行\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "ヘルプ\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [コマンド] バックスラッシュコマンドのヘルプを表示\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? オプション psql のコマンドライン・オプションのヘルプを表示\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? 変数名 特殊変数のヘルプを表示\n" -#: help.c:190 +#: help.c:194 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [名前] SQLコマンドの文法ヘルプの表示。* で全コマンドを表示\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "問い合わせバッファ\n" -#: help.c:194 +#: help.c:198 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr "" " \\e [ファイル] [行番号] 現在の問い合わせバッファ(やファイル)を外部エディタで\n" " 編集\n" -#: help.c:195 +#: help.c:199 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [関数名 [行番号]] 関数定義を外部エディタで編集\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [ビュー名 [行番号]] ビュー定義を外部エディタで編集\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p 問い合わせバッファの内容を表示\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r 問い合わせバッファをリセット(クリア)\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ファイル] ヒストリを表示またはファイルに保存\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ファイル 問い合わせバッファの内容をファイルに保存\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "入出力\n" -#: help.c:206 +#: help.c:210 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr "" " \\copy ... クライアントホストに対し、データストリームを使って\n" " SQL COPYを実行\n" -#: help.c:207 +#: help.c:211 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [文字列] 文字列を標準出力に書き込む (-n で改行しない)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ファイル ファイルからコマンドを読み込んで実行\n" -#: help.c:209 +#: help.c:213 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr "" " \\ir ファイル \\i と同じ。ただし現在のスクリプトの場所からの相対パス\n" " で指定\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [ファイル] 問い合わせ結果をすべてファイルまたは |パイプ へ送出\n" -#: help.c:211 +#: help.c:215 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr "" " \\qecho [-n] [文字列] 文字列を\\oで指定した出力ストリームに書き込む(-n で改行\n" " しない)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr " \\warn [-n] [文字列] 文字列を標準エラー出力に書き込む (-n で改行しない)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "条件分岐\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR 条件分岐ブロックの開始\n" -#: help.c:217 +#: help.c:221 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR 現在の条件分岐ブロック内の選択肢\n" -#: help.c:218 +#: help.c:222 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else 現在の条件分岐ブロックにおける最後の選択肢\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif 条件分岐ブロックの終了\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "情報表示\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (オプション: S = システムオブジェクトを表示, + = 詳細表示)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] テーブル、ビュー、およびシーケンスの一覧を表示\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] 名前 テーブル、ビュー、シーケンス、またはインデックスの説明を表示\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [パターン] 集約関数の一覧を表示\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [パターン] アクセスメソッドの一覧を表示\n" -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] 演算子クラスの一覧を表示\n" -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] 演算子族の一覧を表示\n" -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] 演算子族の演算子の一覧を表示\n" -#: help.c:231 +#: help.c:235 #, c-format msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] 演算子族のサポート関数の一覧を表示\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [パターン] テーブル空間の一覧を表示\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [パターン] 符号化方式間の変換の一覧を表示\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [パターン] キャストの一覧を表示します。\n" -#: help.c:235 +#: help.c:239 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [パターン] 他では表示されないオブジェクトの説明を表示\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [パターン] ドメインの一覧を表示\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [パターン] デフォルト権限の一覧を表示\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [パターン] 外部テーブルの一覧を表示\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [パターン] 外部サーバーの一覧を表示\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [パターン] 外部テーブルの一覧を表示\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [パターン] ユーザーマッピングの一覧を表示\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [パターン] 外部データラッパの一覧を表示\n" -#: help.c:243 +#: help.c:247 #, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" @@ -3022,57 +3055,57 @@ msgstr "" " \\df[anptw][S+] [関数パターン [型パターン ...]]\n" " [集約関数のみ/通常関数/プロシージャ/トリガ関数/ウィンドウ関数]の一覧を表示\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [パターン] テキスト検索設定の一覧を表示\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [パターン] テキスト検索辞書の一覧を表示\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [パターン] テキスト検索パーサの一覧を表示\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [パターン] テキスト検索テンプレートの一覧を表示\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [パターン] ロールの一覧を表示\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [パターン] インデックスの一覧を表示\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl ラージオブジェクトの一覧を表示、\\lo_list と同じ\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [パターン] 手続き言語の一覧を表示\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [パターン] 実体化ビューの一覧を表示\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [パターン] スキーマの一覧を表示\n" -#: help.c:255 +#: help.c:259 #, c-format msgid "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" @@ -3081,128 +3114,128 @@ msgstr "" " \\do[S+] [演算子パターン [型パターン [型パターン]]]\n" " 演算子の一覧を表示\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [パターン] 照合順序の一覧を表示\n" -#: help.c:258 +#: help.c:262 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [パターン] テーブル、ビュー、シーケンスのアクセス権の一覧を表示\n" -#: help.c:259 +#: help.c:263 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr "" " \\dP[itn+] [パターン] パーティションリレーション[テーブル/インデックスのみ]\n" " の一覧を表示 [n=入れ子]\n" -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr "" " \\drds [ロールパターン [DBパターン]]\n" " データベース毎のロール設定の一覧を表示\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [パターン] レプリケーションのパブリケーションの一覧を表示\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [パターン] レプリケーションのサブスクリプションの一覧を表示\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [パターン] シーケンスの一覧を表示\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [パターン] テーブルの一覧を表示\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [パターン] データ型の一覧を表示\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [パターン] ロールの一覧を表示\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [パターン] ビューの一覧を表示\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [パターン] 機能拡張の一覧を表示\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [パターン] 拡張統計情報の一覧を表示\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [パターン] イベントトリガーの一覧を表示\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [パターン] データベースの一覧を表示\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] 関数名 関数の定義を表示\n" -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] ビュー名 ビューの定義を表示\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [パターン] \\dp と同じ\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "書式設定\n" -#: help.c:278 +#: help.c:282 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a 非整列と整列間の出力モードの切り替え\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [文字列] テーブルのタイトルを設定、値がなければ削除\n" -#: help.c:280 +#: help.c:284 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr "" " \\f [文字列] 問い合わせ結果の非整列出力時のフィールド区切り文字を\n" " 表示または設定\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H HTML出力モードの切り替え (現在値: %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3221,27 +3254,27 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] 結果行のみ表示 (現在値: %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [文字列] HTMLの
タグ属性の設定、値がなければ解除\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] 拡張出力の切り替え (現在値: %s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "接続\n" -#: help.c:299 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3250,7 +3283,7 @@ msgstr "" " \\c[onnect] {[DB名|- ユーザー名|- ホスト名|- ポート番号|-] | 接続文字列}\n" " 新しいデータベースに接続 (現在: \"%s\")\n" -#: help.c:303 +#: help.c:307 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3259,74 +3292,74 @@ msgstr "" " \\c[onnect] {[DB名|- ユーザー名|- ホスト名|- ポート番号|-] | 接続文字列}\n" " 新しいデータベースに接続 (現在: 未接続)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo 現在の接続に関する情報を表示\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [エンコーディング] クライアントのエンコーディングを表示または設定\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [ユーザー名] ユーザーのパスワードを安全に変更\n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "オペレーティングシステム\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] カレントディレクトリを変更\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv 名前 [値] 環境変数を設定または解除\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] コマンドの実行時間表示の切り替え (現在値: %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr "" " \\! [コマンド] シェルでコマンドを実行するか、もしくは対話型シェルを\n" " 起動します。\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "変数\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [テキスト] 変数名 ユーザーに対して内部変数の設定を要求します\n" -#: help.c:320 +#: help.c:324 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr " \\set [変数名 [値]] 内部変数の値を設定、パラメータがなければ一覧を表示\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset 変数名 内部変数を削除\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "ラージ・オブジェクト\n" -#: help.c:325 +#: help.c:329 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3339,7 +3372,7 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID ラージオブジェクトの操作\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "" "List of specially treated variables\n" @@ -3348,12 +3381,12 @@ msgstr "" "特別に扱われる変数の一覧\n" "\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "psql変数:\n" -#: help.c:356 +#: help.c:360 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3364,7 +3397,7 @@ msgstr "" " またはpsql内で \\set 名前 値\n" "\n" -#: help.c:358 +#: help.c:362 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3373,7 +3406,7 @@ msgstr "" " AUTOCOMMIT\n" " セットされている場合、SQLコマンドが成功した際に自動的にコミット\n" -#: help.c:360 +#: help.c:364 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3384,7 +3417,7 @@ msgstr "" " SQLキーワードの補完に使う文字ケースを指定\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid "" " DBNAME\n" @@ -3393,7 +3426,7 @@ msgstr "" " DBNAME\n" " 現在接続中のデータベース名\n" -#: help.c:365 +#: help.c:369 #, c-format msgid "" " ECHO\n" @@ -3404,7 +3437,7 @@ msgstr "" " どの入力を標準出力への出力対象とするかを設定\n" " [all, errors, none, queries]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3415,7 +3448,7 @@ msgstr "" " セットされていれば、バックスラッシュコマンドで実行される内部問い合わせを\n" " 表示; \"noexec\"を設定した場合は実行せずに表示のみ\n" -#: help.c:371 +#: help.c:375 #, c-format msgid "" " ENCODING\n" @@ -3424,7 +3457,7 @@ msgstr "" " ENCODING\n" " 現在のクライアント側の文字セットのエンコーディング\n" -#: help.c:373 +#: help.c:377 #, c-format msgid "" " ERROR\n" @@ -3433,7 +3466,7 @@ msgstr "" " ERROR\n" " 最後の問い合わせが失敗であれば真、そうでなければ偽\n" -#: help.c:375 +#: help.c:379 #, c-format msgid "" " FETCH_COUNT\n" @@ -3442,7 +3475,7 @@ msgstr "" " FETCH_COUNT\n" " 一度に取得および表示する結果の行数 (0 = 無制限)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3452,7 +3485,7 @@ msgstr "" " 設定すると、テーブルアクセスメソッドは表示されない\n" "\n" -#: help.c:379 +#: help.c:383 #, c-format msgid "" " HIDE_TOAST_COMPRESSION\n" @@ -3461,7 +3494,7 @@ msgstr "" " HIDE_TOAST_COMPRESSION\n" " 設定すると圧縮方式は表示されません\n" -#: help.c:381 +#: help.c:385 #, c-format msgid "" " HISTCONTROL\n" @@ -3470,7 +3503,7 @@ msgstr "" " HISTCONTROL\n" " コマンド履歴の制御 [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid "" " HISTFILE\n" @@ -3479,7 +3512,7 @@ msgstr "" " HISTFILE\n" " コマンド履歴を保存するファイルの名前\n" -#: help.c:385 +#: help.c:389 #, c-format msgid "" " HISTSIZE\n" @@ -3488,7 +3521,7 @@ msgstr "" " HISTSIZE\n" " コマンド履歴で保存するコマンド数の上限\n" -#: help.c:387 +#: help.c:391 #, c-format msgid "" " HOST\n" @@ -3497,7 +3530,7 @@ msgstr "" " HOST\n" " 現在接続中のデータベースサーバーホスト\n" -#: help.c:389 +#: help.c:393 #, c-format msgid "" " IGNOREEOF\n" @@ -3506,7 +3539,7 @@ msgstr "" " IGNOREEOF\n" " 対話形セッションを終わらせるのに必要なEOFの数\n" -#: help.c:391 +#: help.c:395 #, c-format msgid "" " LASTOID\n" @@ -3515,7 +3548,7 @@ msgstr "" " LASTOID\n" " 最後の変更の影響を受けたOID\n" -#: help.c:393 +#: help.c:397 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3527,7 +3560,7 @@ msgstr "" " 最後のエラーのメッセージおよび SQLSTATE、\n" " なにもなければ空の文字列および\"00000\"\n" -#: help.c:396 +#: help.c:400 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3537,7 +3570,7 @@ msgstr "" " セットされている場合、エラーでトランザクションを停止しない (暗黙のセーブ\n" " ポイントを使用)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3546,7 +3579,7 @@ msgstr "" " ON_ERROR_STOP\n" " エラー発生後にバッチ実行を停止\n" -#: help.c:400 +#: help.c:404 #, c-format msgid "" " PORT\n" @@ -3555,7 +3588,7 @@ msgstr "" " PORT\n" " 現在の接続のサーバーポート\n" -#: help.c:402 +#: help.c:406 #, c-format msgid "" " PROMPT1\n" @@ -3564,7 +3597,7 @@ msgstr "" " PROMPT1\n" " psql の標準のプロンプトを指定\n" -#: help.c:404 +#: help.c:408 #, c-format msgid "" " PROMPT2\n" @@ -3573,7 +3606,7 @@ msgstr "" " PROMPT2\n" " ステートメントが前行から継続する場合のプロンプトを指定\n" -#: help.c:406 +#: help.c:410 #, c-format msgid "" " PROMPT3\n" @@ -3582,7 +3615,7 @@ msgstr "" " PROMPT3\n" " COPY ... FROM STDIN の最中に使われるプロンプトを指定\n" -#: help.c:408 +#: help.c:412 #, c-format msgid "" " QUIET\n" @@ -3591,7 +3624,7 @@ msgstr "" " QUIET\n" " メッセージを表示しない (-q オプションと同じ)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid "" " ROW_COUNT\n" @@ -3600,7 +3633,7 @@ msgstr "" " ROW_COUNT\n" " 最後の問い合わせで返却した、または影響を与えた行の数、または0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3611,7 +3644,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " サーバーのバージョン(短い文字列または数値)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3620,7 +3653,7 @@ msgstr "" " SHOW_CONTEXT\n" " メッセージコンテキストフィールドの表示を制御 [never, errors, always]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid "" " SINGLELINE\n" @@ -3629,7 +3662,7 @@ msgstr "" " SINGLELINE\n" " セットした場合、改行はSQLコマンドを終端する (-S オプションと同じ)\n" -#: help.c:419 +#: help.c:423 #, c-format msgid "" " SINGLESTEP\n" @@ -3638,7 +3671,7 @@ msgstr "" " SINGLESTEP\n" " シングルステップモード (-s オプションと同じ)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid "" " SQLSTATE\n" @@ -3647,7 +3680,7 @@ msgstr "" " SQLSTATE\n" " 最後の問い合わせの SQLSTATE、またはエラーでなければ\"00000\"\n" -#: help.c:423 +#: help.c:427 #, c-format msgid "" " USER\n" @@ -3656,7 +3689,7 @@ msgstr "" " USER\n" " 現在接続中のデータベースユーザー\n" -#: help.c:425 +#: help.c:429 #, c-format msgid "" " VERBOSITY\n" @@ -3665,7 +3698,7 @@ msgstr "" " VERBOSITY\n" " エラー報告の詳細度を制御 [default, verbose, terse, sqlstate]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid "" " VERSION\n" @@ -3678,7 +3711,7 @@ msgstr "" " VERSION_NUM\n" " psql のバージョン(長い文字列、短い文字列または数値)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "" "\n" @@ -3687,7 +3720,7 @@ msgstr "" "\n" "表示設定:\n" -#: help.c:434 +#: help.c:438 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3698,7 +3731,7 @@ msgstr "" " またはpsql内で \\pset 名前 [値]\n" "\n" -#: help.c:436 +#: help.c:440 #, c-format msgid "" " border\n" @@ -3707,7 +3740,7 @@ msgstr "" " border\n" " 境界線のスタイル (番号)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid "" " columns\n" @@ -3716,7 +3749,16 @@ msgstr "" " columns\n" " 折り返し形式で目標とする横幅\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid "" +" csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr "" +" csv_fieldsep\n" +" CSV出力形式のフィールド区切り文字(デフォルトは \"%c\")\n" + +#: help.c:447 #, c-format msgid "" " expanded (or x)\n" @@ -3725,7 +3767,7 @@ msgstr "" " expanded (or x)\n" " 拡張出力 [on, off, auto]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid "" " fieldsep\n" @@ -3734,7 +3776,7 @@ msgstr "" " fieldsep\n" " 非整列出力でのフィールド区切り文字(デフォルトは \"%s\")\n" -#: help.c:445 +#: help.c:452 #, c-format msgid "" " fieldsep_zero\n" @@ -3743,7 +3785,7 @@ msgstr "" " fieldsep_zero\n" " 非整列出力でのフィールド区切り文字をバイト値の0に設定\n" -#: help.c:447 +#: help.c:454 #, c-format msgid "" " footer\n" @@ -3752,7 +3794,7 @@ msgstr "" " footer\n" " テーブルフッター出力の要否を設定 [on, off]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid "" " format\n" @@ -3761,7 +3803,7 @@ msgstr "" " format\n" " 出力フォーマットを設定 [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid "" " linestyle\n" @@ -3770,7 +3812,7 @@ msgstr "" " linestyle\n" " 境界線の描画スタイルを設定 [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid "" " null\n" @@ -3779,7 +3821,7 @@ msgstr "" " null\n" " null 値の代わりに表示する文字列を設定\n" -#: help.c:455 +#: help.c:462 #, c-format msgid "" " numericlocale\n" @@ -3788,7 +3830,7 @@ msgstr "" " numericlocale\n" " ロケール固有文字での桁区切りを表示するかどうかを指定\n" -#: help.c:457 +#: help.c:464 #, c-format msgid "" " pager\n" @@ -3797,7 +3839,7 @@ msgstr "" " pager\n" " いつ外部ページャーを使うかを制御 [yes, no, always]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid "" " recordsep\n" @@ -3806,7 +3848,7 @@ msgstr "" " recordsep\n" " 非整列出力でのレコード(行)区切り\n" -#: help.c:461 +#: help.c:468 #, c-format msgid "" " recordsep_zero\n" @@ -3815,7 +3857,7 @@ msgstr "" " recordsep_zero\n" " 非整列出力でレコード区切りにバイト値の0に設定\n" -#: help.c:463 +#: help.c:470 #, c-format msgid "" " tableattr (or T)\n" @@ -3826,7 +3868,7 @@ msgstr "" " HTMLフォーマット時のtableタグの属性、もしくは latex-longtable\n" " フォーマット時に左寄せするデータ型の相対カラム幅を指定\n" -#: help.c:466 +#: help.c:473 #, c-format msgid "" " title\n" @@ -3835,7 +3877,7 @@ msgstr "" " title\n" " 以降に表示される表のタイトルを設定\n" -#: help.c:468 +#: help.c:475 #, c-format msgid "" " tuples_only\n" @@ -3844,7 +3886,7 @@ msgstr "" " tuples_only\n" " セットされた場合、実際のテーブルデータのみを表示\n" -#: help.c:470 +#: help.c:477 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3857,7 +3899,7 @@ msgstr "" " unicode_header_linestyle\n" " Unicode による線描画時のスタイルを設定 [single, double]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "" "\n" @@ -3866,7 +3908,7 @@ msgstr "" "\n" "環境変数:\n" -#: help.c:479 +#: help.c:486 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3877,7 +3919,7 @@ msgstr "" " またはpsql内で \\setenv 名前 [値]\n" "\n" -#: help.c:481 +#: help.c:488 #, c-format msgid "" " set NAME=VALUE\n" @@ -3890,7 +3932,7 @@ msgstr "" " またはpsq内で \\setenv 名前 [値]\n" "\n" -#: help.c:484 +#: help.c:491 #, c-format msgid "" " COLUMNS\n" @@ -3899,7 +3941,7 @@ msgstr "" " COLUMNS\n" " 折り返し書式におけるカラム数\n" -#: help.c:486 +#: help.c:493 #, c-format msgid "" " PGAPPNAME\n" @@ -3908,7 +3950,7 @@ msgstr "" " PGAPPNAME\n" " application_name 接続パラメータと同じ\n" -#: help.c:488 +#: help.c:495 #, c-format msgid "" " PGDATABASE\n" @@ -3917,7 +3959,7 @@ msgstr "" " PGDATABASE\n" " dbname 接続パラメータと同じ\n" -#: help.c:490 +#: help.c:497 #, c-format msgid "" " PGHOST\n" @@ -3926,7 +3968,7 @@ msgstr "" " PGHOST\n" " host 接続パラメータと同じ\n" -#: help.c:492 +#: help.c:499 #, c-format msgid "" " PGPASSFILE\n" @@ -3935,7 +3977,7 @@ msgstr "" " PGPASSFILE\n" " パスワードファイル名\n" -#: help.c:494 +#: help.c:501 #, c-format msgid "" " PGPASSWORD\n" @@ -3944,7 +3986,7 @@ msgstr "" " PGPASSWORD\n" " 接続用パスワード (推奨されません)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid "" " PGPORT\n" @@ -3953,7 +3995,7 @@ msgstr "" " PGPORT\n" " port 接続パラメータと同じ\n" -#: help.c:498 +#: help.c:505 #, c-format msgid "" " PGUSER\n" @@ -3962,7 +4004,7 @@ msgstr "" " PGUSER\n" " user 接続パラメータと同じ\n" -#: help.c:500 +#: help.c:507 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3971,7 +4013,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " \\e, \\ef, \\ev コマンドで使われるエディタ\n" -#: help.c:502 +#: help.c:509 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3980,7 +4022,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " エディタの起動時に行番号を指定する方法\n" -#: help.c:504 +#: help.c:511 #, c-format msgid "" " PSQL_HISTORY\n" @@ -3989,7 +4031,7 @@ msgstr "" " PSQL_HISTORY\n" " コマンドライン履歴ファイルの代替の場所\n" -#: help.c:506 +#: help.c:513 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -3998,7 +4040,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " 外部ページャープログラムの名前\n" -#: help.c:508 +#: help.c:515 #, c-format msgid "" " PSQLRC\n" @@ -4007,7 +4049,7 @@ msgstr "" " PSQLRC\n" " ユーザーの .psqlrc ファイルの代替の場所\n" -#: help.c:510 +#: help.c:517 #, c-format msgid "" " SHELL\n" @@ -4016,7 +4058,7 @@ msgstr "" " SHELL\n" " \\! コマンドで使われるシェル\n" -#: help.c:512 +#: help.c:519 #, c-format msgid "" " TMPDIR\n" @@ -4025,11 +4067,11 @@ msgstr "" " TMPDIR\n" " テンポラリファイル用ディレクトリ\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "利用可能なヘルプ:\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "" "Command: %s\n" @@ -4048,7 +4090,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "" "No help available for \"%s\".\n" @@ -6521,7 +6563,7 @@ msgstr "余分なコマンドライン引数\"%s\"は無視されました" msgid "could not find own program executable" msgstr "実行可能ファイルが見つかりませんでした" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "" "tab completion query failed: %s\n" diff --git a/src/bin/psql/po/ru.po b/src/bin/psql/po/ru.po index 9d70236a807..6c8f2c07dec 100644 --- a/src/bin/psql/po/ru.po +++ b/src/bin/psql/po/ru.po @@ -4,14 +4,14 @@ # Serguei A. Mokhov , 2001-2005. # Oleg Bartunov , 2004-2005. # Sergey Burladyan , 2012. -# Alexander Lakhin , 2012-2025. +# SPDX-FileCopyrightText: 2012-2025, 2026 Alexander Lakhin # Maxim Yablokov , 2021. msgid "" msgstr "" "Project-Id-Version: psql (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-02 08:22+0300\n" -"PO-Revision-Date: 2025-02-08 08:33+0200\n" +"POT-Creation-Date: 2025-11-09 06:29+0200\n" +"PO-Revision-Date: 2025-11-09 08:23+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -72,7 +72,7 @@ msgid "%s() failed: %m" msgstr "ошибка в %s(): %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1316 command.c:3248 command.c:3297 command.c:3414 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -94,7 +94,7 @@ msgstr "попытка дублирования нулевого указате msgid "could not look up effective user ID %ld: %s" msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s" -#: ../../common/username.c:45 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "пользователь не существует" @@ -176,44 +176,50 @@ msgstr "неверный формат вывода (внутренняя оши msgid "skipping recursive expansion of variable \"%s\"" msgstr "рекурсивное расширение переменной \"%s\" пропускается" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "" +"команды с обратной косой чертой отключены; разрешается только \\unrestrict" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "неверная команда \\%s" -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr "Введите \\? для получения справки." -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: лишний аргумент \"%s\" пропущен" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "" "команда \\%s игнорируется; добавьте \\endif или нажмите Ctrl-C для " "завершения текущего блока \\if" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "не удалось получить домашний каталог пользователя c ид. %ld: %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: не удалось перейти в каталог \"%s\": %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "В данный момент вы не подключены к базе данных.\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at " @@ -222,7 +228,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (адрес сервера " "\"%s\", порт \"%s\").\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at " @@ -231,7 +237,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" через сокет в " "\"%s\", порт \"%s\".\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address " @@ -240,7 +246,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (компьютер " "\"%s\": адрес \"%s\", порт \"%s\").\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "" "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port " @@ -249,40 +255,40 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (компьютер " "\"%s\", порт \"%s\").\n" -#: command.c:1011 command.c:1120 command.c:2604 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "нет буфера запросов" -#: command.c:1044 command.c:5314 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "неверный номер строки: %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "" "Сервер (версия %s) не поддерживает редактирование исходного кода функции." -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "" "Сервер (версия %s) не поддерживает редактирование определения представления." -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "Изменений нет" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "" "%s: неверное название кодировки символов или не найдена процедура " "перекодировки" -#: command.c:1312 command.c:2064 command.c:3244 command.c:3436 command.c:5420 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 #: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 @@ -290,129 +296,139 @@ msgstr "" msgid "%s" msgstr "%s" -#: command.c:1319 +#: command.c:1341 msgid "There is no previous error." msgstr "Ошибки не было." -#: command.c:1432 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: отсутствует правая скобка" -#: command.c:1609 command.c:1914 command.c:1928 command.c:1945 command.c:2115 -#: command.c:2351 command.c:2571 command.c:2611 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "отсутствует необходимый аргумент \\%s" -#: command.c:1740 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif не может находиться после \\else" -#: command.c:1745 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif без соответствующего \\if" -#: command.c:1809 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else не может находиться после \\else" -#: command.c:1814 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else без соответствующего \\if" -#: command.c:1854 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif без соответствующего \\if" -#: command.c:2009 +#: command.c:2031 msgid "Query buffer is empty." msgstr "Буфер запроса пуст." -#: command.c:2046 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "Введите новый пароль для пользователя \"%s\": " -#: command.c:2049 +#: command.c:2071 msgid "Enter it again: " msgstr "Повторите его: " -#: command.c:2053 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "Пароли не совпадают." -#: command.c:2144 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: не удалось прочитать значение переменной" -#: command.c:2247 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "Буфер запроса сброшен (очищен)." -#: command.c:2269 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "История записана в файл \"%s\".\n" -#: command.c:2356 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: имя переменной окружения не может содержать знак \"=\"" -#: command.c:2408 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Сервер (версия %s) не поддерживает вывод исходного кода функции." -#: command.c:2411 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Сервер (версия %s) не поддерживает вывод определения представлений." -#: command.c:2418 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "требуется имя функции" -#: command.c:2420 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "требуется имя представления" -#: command.c:2543 +#: command.c:2594 msgid "Timing is on." msgstr "Секундомер включён." -#: command.c:2545 +#: command.c:2596 msgid "Timing is off." msgstr "Секундомер выключен." -#: command.c:2630 command.c:2658 command.c:3875 command.c:3878 command.c:3881 -#: command.c:3887 command.c:3889 command.c:3915 command.c:3925 command.c:3937 -#: command.c:3951 command.c:3978 command.c:4036 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s: ограниченный режим не активен" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s: неверный ключ" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:3049 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "Пароль: " -#: command.c:3054 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Пароль пользователя %s: " -#: command.c:3106 +#: command.c:3197 #, c-format msgid "" "Do not give user, host, or port separately when using a connection string" @@ -420,23 +436,23 @@ msgstr "" "Не указывайте пользователя, компьютер или порт отдельно, когда используете " "строку подключения" -#: command.c:3141 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "" "Нет подключения к базе, из которого можно было бы использовать параметры" -#: command.c:3442 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "Сохранено предыдущее подключение" -#: command.c:3448 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3504 +#: command.c:3595 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at " @@ -445,7 +461,7 @@ msgstr "" "Сейчас вы подключены к базе данных \"%s\" как пользователь \"%s\" (адрес " "сервера \"%s\", порт \"%s\").\n" -#: command.c:3507 +#: command.c:3598 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" " @@ -454,7 +470,7 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" через сокет в " "\"%s\", порт \"%s\".\n" -#: command.c:3513 +#: command.c:3604 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host " @@ -463,7 +479,7 @@ msgstr "" "Сейчас вы подключены к базе данных \"%s\" как пользователь \"%s\" (компьютер " "\"%s\": адрес \"%s\", порт \"%s\").\n" -#: command.c:3516 +#: command.c:3607 #, c-format msgid "" "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at " @@ -472,17 +488,17 @@ msgstr "" "Вы подключены к базе данных \"%s\" как пользователь \"%s\" (компьютер " "\"%s\", порт \"%s\").\n" -#: command.c:3521 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Вы подключены к базе данных \"%s\" как пользователь \"%s\".\n" -#: command.c:3561 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, сервер %s)\n" -#: command.c:3569 +#: command.c:3660 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -491,29 +507,29 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: %s имеет базовую версию %s, а сервер - %s.\n" " Часть функций psql может не работать.\n" -#: command.c:3608 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL-соединение (протокол: %s, шифр: %s, бит: %s, сжатие: %s)\n" -#: command.c:3609 command.c:3610 command.c:3611 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "неизвестно" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "выкл." -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "вкл." -#: command.c:3626 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "Соединение зашифровано GSSAPI\n" -#: command.c:3646 +#: command.c:3737 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -526,7 +542,7 @@ msgstr "" " Подробнее об этом смотрите документацию psql, раздел\n" " \"Notes for Windows users\".\n" -#: command.c:3751 +#: command.c:3844 #, c-format msgid "" "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a " @@ -535,33 +551,33 @@ msgstr "" "в переменной окружения PSQL_EDITOR_LINENUMBER_ARG должен быть указан номер " "строки" -#: command.c:3780 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "не удалось запустить редактор \"%s\"" -#: command.c:3782 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "не удалось запустить /bin/sh" -#: command.c:3832 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "не удалось найти временный каталог: %s" -#: command.c:3859 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "не удалось открыть временный файл \"%s\": %m" -#: command.c:4195 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "" "\\pset: неоднозначному сокращению \"%s\" соответствует и \"%s\", и \"%s\"" -#: command.c:4215 +#: command.c:4308 #, c-format msgid "" "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-" @@ -570,32 +586,32 @@ msgstr "" "\\pset: допустимые форматы: aligned, asciidoc, csv, html, latex, latex-" "longtable, troff-ms, unaligned, wrapped" -#: command.c:4234 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: допустимые стили линий: ascii, old-ascii, unicode" -#: command.c:4249 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: допустимые стили Unicode-линий границ: single, double" -#: command.c:4264 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: допустимые стили Unicode-линий столбцов: single, double" -#: command.c:4279 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: допустимые стили Unicode-линий заголовков: single, double" -#: command.c:4322 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: символ csv_fieldsep должен быть однобайтовым" -#: command.c:4327 +#: command.c:4420 #, c-format msgid "" "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage " @@ -604,107 +620,107 @@ msgstr "" "\\pset: в качестве csv_fieldsep нельзя выбрать символ кавычек, новой строки " "или возврата каретки" -#: command.c:4464 command.c:4652 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "неизвестный параметр \\pset: %s" -#: command.c:4484 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "Стиль границ: %d.\n" -#: command.c:4490 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "Ширина вывода сброшена.\n" -#: command.c:4492 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "Ширина вывода: %d.\n" -#: command.c:4499 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "Расширенный вывод включён.\n" -#: command.c:4501 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Расширенный вывод применяется автоматически.\n" -#: command.c:4503 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "Расширенный вывод выключен.\n" -#: command.c:4509 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Разделитель полей для CSV: \"%s\".\n" -#: command.c:4517 command.c:4525 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "Разделитель полей - нулевой байт.\n" -#: command.c:4519 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Разделитель полей: \"%s\".\n" -#: command.c:4532 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "Строка итогов включена.\n" -#: command.c:4534 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "Строка итогов выключена.\n" -#: command.c:4540 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "Формат вывода: %s.\n" -#: command.c:4546 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "Установлен стиль линий: %s.\n" -#: command.c:4553 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null выводится как: \"%s\".\n" -#: command.c:4561 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Локализованный вывод чисел включён.\n" -#: command.c:4563 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Локализованный вывод чисел выключен.\n" -#: command.c:4570 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "Постраничник используется для вывода длинного текста.\n" -#: command.c:4572 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "Постраничник используется всегда.\n" -#: command.c:4574 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "Постраничник выключен.\n" -#: command.c:4580 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" @@ -712,87 +728,87 @@ msgstr[0] "Постраничник не будет использоваться msgstr[1] "Постраничник не будет использоваться, если строк меньше %d\n" msgstr[2] "Постраничник не будет использоваться, если строк меньше %d\n" -#: command.c:4590 command.c:4600 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "Разделитель записей - нулевой байт.\n" -#: command.c:4592 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "Разделитель записей: <новая строка>.\n" -#: command.c:4594 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Разделитель записей: \"%s\".\n" -#: command.c:4607 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Атрибуты HTML-таблицы: \"%s\".\n" -#: command.c:4610 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "Атрибуты HTML-таблицы не заданы.\n" -#: command.c:4617 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "Заголовок: \"%s\".\n" -#: command.c:4619 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "Заголовок не задан.\n" -#: command.c:4626 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "Режим вывода только кортежей включён.\n" -#: command.c:4628 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "Режим вывода только кортежей выключен.\n" -#: command.c:4634 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Стиль Unicode-линий границ: \"%s\".\n" -#: command.c:4640 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Стиль Unicode-линий столбцов: \"%s\".\n" -#: command.c:4646 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Стиль Unicode-линий границ: \"%s\".\n" -#: command.c:4879 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\!: ошибка" -#: command.c:4904 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch нельзя использовать с пустым запросом" -#: command.c:4945 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (обновление: %g с)\n" -#: command.c:4948 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (обновление: %g с)\n" -#: command.c:5010 command.c:5017 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -805,12 +821,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5209 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" — не представление" -#: command.c:5225 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "не удалось разобрать массив reloptions" @@ -2521,7 +2537,7 @@ msgstr "" "psql - это интерактивный терминал PostgreSQL.\n" "\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "Использование:\n" @@ -2945,33 +2961,51 @@ msgstr " \\q выйти из psql\n" #: help.c:182 #, c-format +msgid "" +" \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr "" +" \\restrict ОГРАНИЧИВАЮЩИЙ_КЛЮЧ\n" +" войти в ограниченный режим с указанным ключом\n" + +#: help.c:184 +#, c-format +msgid "" +" \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr "" +" \\unrestrict ОГРАНИЧИВАЮЩИЙ_КЛЮЧ\n" +" выйти из ограниченного режима, если ключ совпадает\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr "" " \\watch [СЕК] повторять запрос в цикле через заданное число " "секунд\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "Справка\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] справка по командам psql c \\\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr "" " \\? options справка по параметрам командной строки psql\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables справка по специальным переменным\n" -#: help.c:190 +#: help.c:194 #, c-format msgid "" " \\h [NAME] help on syntax of SQL commands, * for all " @@ -2979,12 +3013,12 @@ msgid "" msgstr "" " \\h [ИМЯ] справка по заданному SQL-оператору; * - по всем\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "Буфер запроса\n" -#: help.c:194 +#: help.c:198 #, c-format msgid "" " \\e [FILE] [LINE] edit the query buffer (or file) with external " @@ -2993,53 +3027,53 @@ msgstr "" " \\e [ФАЙЛ] [СТРОКА] править буфер запроса (или файл) во внешнем " "редакторе\n" -#: help.c:195 +#: help.c:199 #, c-format msgid "" " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr "" " \\ef [ФУНКЦИЯ [СТРОКА]] править определение функции во внешнем редакторе\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr "" " \\ev [VIEWNAME [LINE]] править определение представления во внешнем " "редакторе\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p вывести содержимое буфера запросов\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r очистить буфер запроса\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [ФАЙЛ] вывести историю или сохранить её в файл\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w ФАЙЛ записать буфер запроса в файл\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "Ввод/Вывод\n" -#: help.c:206 +#: help.c:210 #, c-format msgid "" " \\copy ... perform SQL COPY with data stream to the client " "host\n" msgstr " \\copy ... выполнить SQL COPY на стороне клиента\n" -#: help.c:207 +#: help.c:211 #, c-format msgid "" " \\echo [-n] [STRING] write string to standard output (-n for no " @@ -3048,12 +3082,12 @@ msgstr "" " \\echo [-n] [СТРОКА] записать строку в поток стандартного вывода\n" " (-n отключает перевод строки)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i ФАЙЛ выполнить команды из файла\n" -#: help.c:209 +#: help.c:213 #, c-format msgid "" " \\ir FILE as \\i, but relative to location of current " @@ -3062,14 +3096,14 @@ msgstr "" " \\ir ФАЙЛ подобно \\i, но путь задаётся относительно\n" " текущего скрипта\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr "" " \\o [ФАЙЛ] выводить все результаты запросов в файл или канал " "|\n" -#: help.c:211 +#: help.c:215 #, c-format msgid "" " \\qecho [-n] [STRING] write string to \\o output stream (-n for no " @@ -3078,7 +3112,7 @@ msgstr "" " \\qecho [-n] [СТРОКА] записать строку в выходной поток \\o\n" " (-n отключает перевод строки)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid "" " \\warn [-n] [STRING] write string to standard error (-n for no " @@ -3087,24 +3121,24 @@ msgstr "" " \\warn [-n] [СТРОКА] записать строку в поток вывода ошибок\n" " (-n отключает перевод строки)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "Условия\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if ВЫРАЖЕНИЕ начало блока условия\n" -#: help.c:217 +#: help.c:221 #, c-format msgid "" " \\elif EXPR alternative within current conditional block\n" msgstr "" " \\elif ВЫРАЖЕНИЕ альтернативная ветвь в текущем блоке условия\n" -#: help.c:218 +#: help.c:222 #, c-format msgid "" " \\else final alternative within current conditional " @@ -3112,31 +3146,31 @@ msgid "" msgstr "" " \\else окончательная ветвь в текущем блоке условия\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif конец блока условия\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "Информационные\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr "" " (дополнения: S = показывать системные объекты, + = дополнительные " "подробности)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr "" " \\d[S+] список таблиц, представлений и " "последовательностей\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr "" @@ -3144,101 +3178,101 @@ msgstr "" "последовательности\n" " или индекса\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [МАСКА] список агрегатных функций\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [МАСКА] список методов доступа\n" # well-spelled: МСК -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [МСК_МД [МСК_ТИПА]] список классов операторов\n" # well-spelled: МСК -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [МСК_МД [МСК_ТИПА]] список семейств операторов\n" # well-spelled: МСК -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr "" " \\dAo[+] [МСК_МД [МСК_СОП]] список операторов из семейств операторов\n" # well-spelled: МСК -#: help.c:231 +#: help.c:235 #, c-format msgid "" " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [МСК_МД [МСК_СОП]] список опорных функций из семейств\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [МАСКА] список табличных пространств\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [МАСКА] список преобразований\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [МАСКА] список приведений типов\n" -#: help.c:235 +#: help.c:239 #, c-format msgid "" " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr "" " \\dd[S] [МАСКА] описания объектов, не выводимые в других режимах\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [МАСКА] список доменов\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [МАСКА] список прав по умолчанию\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [МАСКА] список сторонних таблиц\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [МАСКА] список сторонних серверов\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [МАСКА] список сторонних таблиц\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [МАСКА] список сопоставлений пользователей\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [МАСКА] список обёрток сторонних данных\n" # well-spelled: МСК, ФУНК -#: help.c:243 +#: help.c:247 #, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" @@ -3249,59 +3283,59 @@ msgstr "" " список функций [только агрегатных/обычных/процедур/" "триггеров/оконных]\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [МАСКА] список конфигураций текстового поиска\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [МАСКА] список словарей текстового поиска\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [МАСКА] список анализаторов текстового поиска\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [МАСКА] список шаблонов текстового поиска\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [МАСКА] список ролей\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [МАСКА] список индексов\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr "" " \\dl список больших объектов (то же, что и \\lo_list)\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [МАСКА] список языков процедур\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [МАСКА] список материализованных представлений\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [МАСКА] список схем\n" # well-spelled: МСК -#: help.c:255 +#: help.c:259 #, c-format msgid "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" @@ -3310,12 +3344,12 @@ msgstr "" " \\do[S+] [МСК_ОП [МСК_ТИПА [МСК_ТИПА]]]\n" " список операторов\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [МАСКА] список правил сортировки\n" -#: help.c:258 +#: help.c:262 #, c-format msgid "" " \\dp [PATTERN] list table, view, and sequence access privileges\n" @@ -3323,7 +3357,7 @@ msgstr "" " \\dp [МАСКА] список прав доступа к таблицам, представлениям и\n" " последовательностям\n" -#: help.c:259 +#: help.c:263 #, c-format msgid "" " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations " @@ -3334,88 +3368,88 @@ msgstr "" "(n)\n" # well-spelled: МСК -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr " \\drds [МСК_РОЛИ [МСК_БД]] список параметров роли на уровне БД\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [МАСКА] список публикаций для репликации\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [МАСКА] список подписок на репликацию\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [МАСКА] список последовательностей\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [МАСКА] список таблиц\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [МАСКА] список типов данных\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [МАСКА] список ролей\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [МАСКА] список представлений\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [МАСКА] список расширений\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [МАСКА] список расширенных статистик\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [МАСКА] список событийных триггеров\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [МАСКА] список баз данных\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] ИМЯ_ФУНКЦИИ показать определение функции\n" # well-spelled: ПРЕДСТ -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] ИМЯ_ПРЕДСТ показать определение представления\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [МАСКА] то же, что и \\dp\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "Форматирование\n" -#: help.c:278 +#: help.c:282 #, c-format msgid "" " \\a toggle between unaligned and aligned output mode\n" @@ -3423,14 +3457,14 @@ msgstr "" " \\a переключение режимов вывода:\n" " неформатированный/выровненный\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr "" " \\C [СТРОКА] задать заголовок таблицы или убрать, если не " "задан\n" -#: help.c:280 +#: help.c:284 #, c-format msgid "" " \\f [STRING] show or set field separator for unaligned query " @@ -3439,13 +3473,13 @@ msgstr "" " \\f [СТРОКА] показать или установить разделитель полей для\n" " неформатированного вывода\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr "" " \\H переключить режим вывода в HTML (текущий: %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3464,12 +3498,12 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] режим вывода только строк (сейчас: %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid "" " \\T [STRING] set HTML
tag attributes, or unset if none\n" @@ -3477,19 +3511,19 @@ msgstr "" " \\T [СТРОКА] задать атрибуты для
или убрать, если не " "заданы\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr "" " \\x [on|off|auto] переключить режим развёрнутого вывода (сейчас: " "%s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "Соединение\n" -#: help.c:299 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3499,7 +3533,7 @@ msgstr "" " подключиться к другой базе данных\n" " (текущая: \"%s\")\n" -#: help.c:303 +#: help.c:307 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3509,44 +3543,44 @@ msgstr "" " подключиться к другой базе данных\n" " (сейчас подключения нет)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid "" " \\conninfo display information about current connection\n" msgstr " \\conninfo информация о текущем соединении\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [КОДИРОВКА] показать/установить клиентскую кодировку\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [ИМЯ] безопасно сменить пароль пользователя\n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "Операционная система\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [ПУТЬ] сменить текущий каталог\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr "" " \\setenv ИМЯ [ЗНАЧЕНИЕ] установить или сбросить переменную окружения\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] включить/выключить секундомер (сейчас: %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid "" " \\! [COMMAND] execute command in shell or start interactive " @@ -3555,19 +3589,19 @@ msgstr "" " \\! [КОМАНДА] выполнить команду в командной оболочке\n" " или запустить интерактивную оболочку\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "Переменные\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr "" " \\prompt [ТЕКСТ] ИМЯ предложить пользователю задать внутреннюю " "переменную\n" -#: help.c:320 +#: help.c:324 #, c-format msgid "" " \\set [NAME [VALUE]] set internal variable, or list all if no " @@ -3576,17 +3610,17 @@ msgstr "" " \\set [ИМЯ [ЗНАЧЕНИЕ]] установить внутреннюю переменную или вывести все,\n" " если имя не задано\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset ИМЯ сбросить (удалить) внутреннюю переменную\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "Большие объекты\n" -#: help.c:325 +#: help.c:329 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3599,7 +3633,7 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID операции с большими объектами\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "" "List of specially treated variables\n" @@ -3608,12 +3642,12 @@ msgstr "" "Список специальных переменных\n" "\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "Переменные psql:\n" -#: help.c:356 +#: help.c:360 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3624,7 +3658,7 @@ msgstr "" " или \\set ИМЯ ЗНАЧЕНИЕ в приглашении psql\n" "\n" -#: help.c:358 +#: help.c:362 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3633,7 +3667,7 @@ msgstr "" " AUTOCOMMIT\n" " если установлен, успешные SQL-команды фиксируются автоматически\n" -#: help.c:360 +#: help.c:364 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3646,7 +3680,7 @@ msgstr "" " preserve-lower (сохранять нижний),\n" " preserve-upper (сохранять верхний)]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid "" " DBNAME\n" @@ -3655,7 +3689,7 @@ msgstr "" " DBNAME\n" " имя текущей подключённой базы данных\n" -#: help.c:365 +#: help.c:369 #, c-format msgid "" " ECHO\n" @@ -3667,7 +3701,7 @@ msgstr "" " [all (всё), errors (ошибки), none (ничего),\n" " queries (запросы)]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3678,7 +3712,7 @@ msgstr "" " если включено, выводит внутренние запросы, порождаемые командами с \\;\n" " если установлено значение \"noexec\", они выводятся, но не выполняются\n" -#: help.c:371 +#: help.c:375 #, c-format msgid "" " ENCODING\n" @@ -3687,7 +3721,7 @@ msgstr "" " ENCODING\n" " текущая кодировка клиентского набора символов\n" -#: help.c:373 +#: help.c:377 #, c-format msgid "" " ERROR\n" @@ -3696,7 +3730,7 @@ msgstr "" " ERROR\n" " true в случае ошибки в последнем запросе, иначе — false\n" -#: help.c:375 +#: help.c:379 #, c-format msgid "" " FETCH_COUNT\n" @@ -3707,7 +3741,7 @@ msgstr "" " число результирующих строк, извлекаемых и отображаемых за раз\n" " (0 = без ограничений)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3716,7 +3750,7 @@ msgstr "" " HIDE_TABLEAM\n" " если установлено, табличные методы доступа не выводятся\n" -#: help.c:379 +#: help.c:383 #, c-format msgid "" " HIDE_TOAST_COMPRESSION\n" @@ -3725,7 +3759,7 @@ msgstr "" " HIDE_TOAST_COMPRESSION\n" " если установлено, методы сжатия не выводятся\n" -#: help.c:381 +#: help.c:385 #, c-format msgid "" " HISTCONTROL\n" @@ -3735,7 +3769,7 @@ msgstr "" " управляет историей команд [ignorespace (игнорировать пробелы),\n" " ignoredups (игнорировать дубли), ignoreboth (и то, и другое)]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid "" " HISTFILE\n" @@ -3744,7 +3778,7 @@ msgstr "" " HISTFILE\n" " имя файла, в котором будет сохраняться история команд\n" -#: help.c:385 +#: help.c:389 #, c-format msgid "" " HISTSIZE\n" @@ -3753,7 +3787,7 @@ msgstr "" " HISTSIZE\n" " максимальное число команд, сохраняемых в истории\n" -#: help.c:387 +#: help.c:391 #, c-format msgid "" " HOST\n" @@ -3762,7 +3796,7 @@ msgstr "" " HOST\n" " компьютер с сервером баз данных, к которому установлено подключение\n" -#: help.c:389 +#: help.c:393 #, c-format msgid "" " IGNOREEOF\n" @@ -3771,7 +3805,7 @@ msgstr "" " IGNOREEOF\n" " количество EOF для завершения интерактивного сеанса\n" -#: help.c:391 +#: help.c:395 #, c-format msgid "" " LASTOID\n" @@ -3780,7 +3814,7 @@ msgstr "" " LASTOID\n" " значение последнего задействованного OID\n" -#: help.c:393 +#: help.c:397 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3794,7 +3828,7 @@ msgstr "" "\"00000\",\n" " если ошибки не было\n" -#: help.c:396 +#: help.c:400 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3804,7 +3838,7 @@ msgstr "" " если установлено, транзакция не прекращается при ошибке\n" " (используются неявные точки сохранения)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3813,7 +3847,7 @@ msgstr "" " ON_ERROR_STOP\n" " останавливать выполнение пакета команд после ошибки\n" -#: help.c:400 +#: help.c:404 #, c-format msgid "" " PORT\n" @@ -3822,7 +3856,7 @@ msgstr "" " PORT\n" " порт сервера для текущего соединения\n" -#: help.c:402 +#: help.c:406 #, c-format msgid "" " PROMPT1\n" @@ -3831,7 +3865,7 @@ msgstr "" " PROMPT1\n" " устанавливает стандартное приглашение psql\n" -#: help.c:404 +#: help.c:408 #, c-format msgid "" " PROMPT2\n" @@ -3842,7 +3876,7 @@ msgstr "" " устанавливает приглашение, которое выводится при переносе оператора\n" " на новую строку\n" -#: help.c:406 +#: help.c:410 #, c-format msgid "" " PROMPT3\n" @@ -3851,7 +3885,7 @@ msgstr "" " PROMPT3\n" " устанавливает приглашение для выполнения COPY ... FROM STDIN\n" -#: help.c:408 +#: help.c:412 #, c-format msgid "" " QUIET\n" @@ -3860,7 +3894,7 @@ msgstr "" " QUIET\n" " выводить минимум сообщений (как и с параметром -q)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid "" " ROW_COUNT\n" @@ -3870,7 +3904,7 @@ msgstr "" " число строк, возвращённых или обработанных последним SQL-запросом, либо " "0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3881,7 +3915,7 @@ msgstr "" " SERVER_VERSION_NUM\n" " версия сервера (в коротком текстовом и числовом формате)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3891,7 +3925,7 @@ msgstr "" " управляет отображением полей контекста сообщений\n" " [never (не отображать никогда), errors (ошибки), always (всегда]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid "" " SINGLELINE\n" @@ -3901,7 +3935,7 @@ msgstr "" " если установлено, конец строки завершает режим ввода SQL-команды\n" " (как и с параметром -S)\n" -#: help.c:419 +#: help.c:423 #, c-format msgid "" " SINGLESTEP\n" @@ -3910,7 +3944,7 @@ msgstr "" " SINGLESTEP\n" " пошаговый режим (как и с параметром -s)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid "" " SQLSTATE\n" @@ -3920,7 +3954,7 @@ msgstr "" " SQLSTATE последнего запроса или \"00000\", если он выполнился без " "ошибок\n" -#: help.c:423 +#: help.c:427 #, c-format msgid "" " USER\n" @@ -3929,7 +3963,7 @@ msgstr "" " USER\n" " текущий пользователь, подключённый к БД\n" -#: help.c:425 +#: help.c:429 #, c-format msgid "" " VERBOSITY\n" @@ -3939,7 +3973,7 @@ msgstr "" " управляет детализацией отчётов об ошибках [default (по умолчанию),\n" " verbose (подробно), terse (кратко), sqlstate (код состояния)]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid "" " VERSION\n" @@ -3952,7 +3986,7 @@ msgstr "" " VERSION_NUM\n" " версия psql (в развёрнутом, в коротком текстовом и в числовом формате)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "" "\n" @@ -3961,7 +3995,7 @@ msgstr "" "\n" "Параметры отображения:\n" -#: help.c:434 +#: help.c:438 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3972,7 +4006,7 @@ msgstr "" " или \\pset ИМЯ [ЗНАЧЕНИЕ] в приглашении psql\n" "\n" -#: help.c:436 +#: help.c:440 #, c-format msgid "" " border\n" @@ -3981,7 +4015,7 @@ msgstr "" " border\n" " стиль границы (число)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid "" " columns\n" @@ -3990,7 +4024,16 @@ msgstr "" " columns\n" " целевая ширина для формата с переносом\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid "" +" csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr "" +" csv_fieldsep\n" +" разделитель полей для формата вывода CSV (по умолчанию \"%c\")\n" + +#: help.c:447 #, c-format msgid "" " expanded (or x)\n" @@ -3999,7 +4042,7 @@ msgstr "" " expanded (или x)\n" " развёрнутый вывод [on (вкл.), off (выкл.), auto (авто)]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid "" " fieldsep\n" @@ -4008,7 +4051,7 @@ msgstr "" " fieldsep\n" " разделитель полей для неформатированного вывода (по умолчанию \"%s\")\n" -#: help.c:445 +#: help.c:452 #, c-format msgid "" " fieldsep_zero\n" @@ -4017,7 +4060,7 @@ msgstr "" " fieldsep_zero\n" " устанавливает ноль разделителем полей при неформатированном выводе\n" -#: help.c:447 +#: help.c:454 #, c-format msgid "" " footer\n" @@ -4026,7 +4069,7 @@ msgstr "" " footer\n" " включает или выключает вывод подписей таблицы [on (вкл.), off (выкл.)]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid "" " format\n" @@ -4037,7 +4080,7 @@ msgstr "" "\n" " aligned (выровненный), wrapped (с переносом), html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid "" " linestyle\n" @@ -4046,7 +4089,7 @@ msgstr "" " linestyle\n" " задаёт стиль рисования линий границы [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid "" " null\n" @@ -4055,7 +4098,7 @@ msgstr "" " null\n" " устанавливает строку, выводимую вместо значения NULL\n" -#: help.c:455 +#: help.c:462 #, c-format msgid "" " numericlocale\n" @@ -4065,7 +4108,7 @@ msgstr "" " numericlocale\n" " отключает вывод заданного локалью разделителя группы цифр\n" -#: help.c:457 +#: help.c:464 #, c-format msgid "" " pager\n" @@ -4075,7 +4118,7 @@ msgstr "" " определяет, используется ли внешний постраничник\n" " [yes (да), no (нет), always (всегда)]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid "" " recordsep\n" @@ -4084,7 +4127,7 @@ msgstr "" " recordsep\n" " разделитель записей (строк) при неформатированном выводе\n" -#: help.c:461 +#: help.c:468 #, c-format msgid "" " recordsep_zero\n" @@ -4093,7 +4136,7 @@ msgstr "" " recordsep_zero\n" " устанавливает ноль разделителем записей при неформатированном выводе\n" -#: help.c:463 +#: help.c:470 #, c-format msgid "" " tableattr (or T)\n" @@ -4104,7 +4147,7 @@ msgstr "" " задаёт атрибуты для тега table в формате html или пропорциональные\n" " ширины столбцов для выровненных влево данных, в формате latex-longtable\n" -#: help.c:466 +#: help.c:473 #, c-format msgid "" " title\n" @@ -4113,7 +4156,7 @@ msgstr "" " title\n" " задаёт заголовок таблицы для последовательно печатаемых таблиц\n" -#: help.c:468 +#: help.c:475 #, c-format msgid "" " tuples_only\n" @@ -4122,7 +4165,7 @@ msgstr "" " tuples_only\n" " если установлено, выводятся только непосредственно табличные данные\n" -#: help.c:470 +#: help.c:477 #, c-format msgid "" " unicode_border_linestyle\n" @@ -4136,7 +4179,7 @@ msgstr "" " задаёт стиль рисуемых линий Unicode [single (одинарные), double " "(двойные)]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "" "\n" @@ -4145,7 +4188,7 @@ msgstr "" "\n" "Переменные окружения:\n" -#: help.c:479 +#: help.c:486 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -4156,7 +4199,7 @@ msgstr "" " или \\setenv ИМЯ [ЗНАЧЕНИЕ] в приглашении psql\n" "\n" -#: help.c:481 +#: help.c:488 #, c-format msgid "" " set NAME=VALUE\n" @@ -4169,7 +4212,7 @@ msgstr "" " или \\setenv ИМЯ ЗНАЧЕНИЕ в приглашении psql\n" "\n" -#: help.c:484 +#: help.c:491 #, c-format msgid "" " COLUMNS\n" @@ -4178,7 +4221,7 @@ msgstr "" " COLUMNS\n" " число столбцов для форматирования с переносом\n" -#: help.c:486 +#: help.c:493 #, c-format msgid "" " PGAPPNAME\n" @@ -4187,7 +4230,7 @@ msgstr "" " PGAPPNAME\n" " синоним параметра подключения application_name\n" -#: help.c:488 +#: help.c:495 #, c-format msgid "" " PGDATABASE\n" @@ -4196,7 +4239,7 @@ msgstr "" " PGDATABASE\n" " синоним параметра подключения dbname\n" -#: help.c:490 +#: help.c:497 #, c-format msgid "" " PGHOST\n" @@ -4205,7 +4248,7 @@ msgstr "" " PGHOST\n" " синоним параметра подключения host\n" -#: help.c:492 +#: help.c:499 #, c-format msgid "" " PGPASSFILE\n" @@ -4214,7 +4257,7 @@ msgstr "" " PGPASSFILE\n" " имя файла с паролем\n" -#: help.c:494 +#: help.c:501 #, c-format msgid "" " PGPASSWORD\n" @@ -4223,7 +4266,7 @@ msgstr "" " PGPASSWORD\n" " пароль для подключения (использовать не рекомендуется)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid "" " PGPORT\n" @@ -4232,7 +4275,7 @@ msgstr "" " PGPORT\n" " синоним параметра подключения port\n" -#: help.c:498 +#: help.c:505 #, c-format msgid "" " PGUSER\n" @@ -4241,7 +4284,7 @@ msgstr "" " PGUSER\n" " синоним параметра подключения user\n" -#: help.c:500 +#: help.c:507 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -4250,7 +4293,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " редактор, вызываемый командами \\e, \\ef и \\ev\n" -#: help.c:502 +#: help.c:509 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -4259,7 +4302,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " определяет способ передачи номера строки при вызове редактора\n" -#: help.c:504 +#: help.c:511 #, c-format msgid "" " PSQL_HISTORY\n" @@ -4268,7 +4311,7 @@ msgstr "" " PSQL_HISTORY\n" " альтернативное размещение файла с историей команд\n" -#: help.c:506 +#: help.c:513 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -4277,7 +4320,7 @@ msgstr "" " PSQL_PAGER, PAGER\n" " имя программы внешнего постраничника\n" -#: help.c:508 +#: help.c:515 #, c-format msgid "" " PSQLRC\n" @@ -4286,7 +4329,7 @@ msgstr "" " PSQLRC\n" " альтернативное размещение пользовательского файла .psqlrc\n" -#: help.c:510 +#: help.c:517 #, c-format msgid "" " SHELL\n" @@ -4295,7 +4338,7 @@ msgstr "" " SHELL\n" " оболочка, вызываемая командой \\!\n" -#: help.c:512 +#: help.c:519 #, c-format msgid "" " TMPDIR\n" @@ -4304,11 +4347,11 @@ msgstr "" " TMPDIR\n" " каталог для временных файлов\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "Имеющаяся справка:\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "" "Command: %s\n" @@ -4327,7 +4370,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "" "No help available for \"%s\".\n" @@ -5695,7 +5738,7 @@ msgstr "имя_функции_в_sql" #: sql_help.c:3071 msgid "referenced_table_name" -msgstr "ссылающаяся_таблица" +msgstr "целевая_таблица" #: sql_help.c:3072 msgid "transition_relation_name" @@ -6806,7 +6849,7 @@ msgstr "лишний аргумент \"%s\" проигнорирован" msgid "could not find own program executable" msgstr "не удалось найти свой исполняемый файл" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "" "tab completion query failed: %s\n" diff --git a/src/bin/psql/po/sv.po b/src/bin/psql/po/sv.po index 3fe2603054d..09e66447113 100644 --- a/src/bin/psql/po/sv.po +++ b/src/bin/psql/po/sv.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-12 08:05+0000\n" -"PO-Revision-Date: 2025-02-12 20:57+0100\n" +"POT-Creation-Date: 2026-01-30 21:53+0000\n" +"PO-Revision-Date: 2026-02-02 23:07+0100\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -69,7 +69,7 @@ msgid "%s() failed: %m" msgstr "%s() misslyckades: %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1317 command.c:3249 command.c:3298 command.c:3415 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -91,7 +91,7 @@ msgstr "kan inte duplicera null-pekare (internt fel)\n" 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 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "användaren finns inte" @@ -170,91 +170,96 @@ msgstr "ogiltigt utdataformat (internt fel): %d" msgid "skipping recursive expansion of variable \"%s\"" msgstr "hoppar över rekursiv expandering av variabeln \"%s\"" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "baksträckkommandon är begränsade; bara \\unrestrict tillåts" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "ogiltigt kommando \\%s" -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr "Försök med \\? för hjälp." -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: extra argument \"%s\" ignorerat" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "kommandot \\%s ignorerat; använd \\endif eller Ctrl-C för att avsluta nuvarande \\if-block" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "kunde inte hämta hemkatalog för användar-ID %ld: %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: kunde inte byta katalog till \"%s\": %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "Du är för närvarande inte uppkopplad mot en databas.\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Du är uppkopplad upp mot databas \"%s\" som användare \"%s\" på adress \"%s\" på port \"%s\".\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Du är uppkopplad mot databas \"%s\" som användare \"%s\" via uttag i \"%s\" på port \"%s\".\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Du är uppkopplad upp mot databas \"%s\" som användare \"%s\" på värd \"%s\" (adress \"%s\") på port \"%s\".\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Du är uppkopplad upp mot databas \"%s\" som användare \"%s\" på värd \"%s\" på port \"%s\".\n" -#: command.c:1011 command.c:1120 command.c:2605 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "ingen frågebuffert" -#: command.c:1044 command.c:5317 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "ogiltigt radnummer: %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Servern (version %s) stöder inte redigering av funktionskällkod." -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Servern (version %s) stöder inte redigering av vydefinitioner." -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "Inga ändringar" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: ogiltigt kodningsnamn eller konverteringsprocedur hittades inte" -#: command.c:1313 command.c:2065 command.c:3245 command.c:3437 command.c:5423 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 #: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 @@ -262,179 +267,189 @@ msgstr "%s: ogiltigt kodningsnamn eller konverteringsprocedur hittades inte" msgid "%s" msgstr "%s" -#: command.c:1320 +#: command.c:1341 msgid "There is no previous error." msgstr "Det finns inget tidigare fel." -#: command.c:1433 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: saknar höger parentes" -#: command.c:1610 command.c:1915 command.c:1929 command.c:1946 command.c:2116 -#: command.c:2352 command.c:2572 command.c:2612 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: obligatoriskt argument saknas" -#: command.c:1741 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: kan inte komma efter \\else" -#: command.c:1746 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: ingen matchande \\if" -#: command.c:1810 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: kan inte komma efter \\else" -#: command.c:1815 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: ingen matchande \\if" -#: command.c:1855 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: ingen matchande \\if" -#: command.c:2010 +#: command.c:2031 msgid "Query buffer is empty." msgstr "Frågebufferten är tom." -#: command.c:2047 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "Mata in nytt lösenord för användare \"%s\": " -#: command.c:2050 +#: command.c:2071 msgid "Enter it again: " msgstr "Mata in det igen: " -#: command.c:2054 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "Lösenorden stämde inte överens." -#: command.c:2145 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: kunde inte läsa värde på varibeln" -#: command.c:2248 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "Frågebufferten har blivit borttagen." -#: command.c:2270 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Skrev historiken till fil \"%s\".\n" -#: command.c:2357 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: omgivningsvariabelnamn får ej innehålla \"=\"" -#: command.c:2409 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Servern (version %s) stöder inte visning av funktionskällkod." -#: command.c:2412 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Servern (version %s) stöder inte visning av vydefinitioner." -#: command.c:2419 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "funktionsnamn krävs" -#: command.c:2421 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "vynamn krävs" -#: command.c:2544 +#: command.c:2594 msgid "Timing is on." msgstr "Tidtagning är på." -#: command.c:2546 +#: command.c:2596 msgid "Timing is off." msgstr "Tidtagning är av." -#: command.c:2631 command.c:2659 command.c:3878 command.c:3881 command.c:3884 -#: command.c:3890 command.c:3892 command.c:3918 command.c:3928 command.c:3940 -#: command.c:3954 command.c:3981 command.c:4039 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s: ej i begränsat läge just nu" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s: fel nyckel" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:3050 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "Lösenord: " -#: command.c:3055 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Lösenord för användare %s: " -#: command.c:3107 +#: command.c:3197 #, c-format msgid "Do not give user, host, or port separately when using a connection string" msgstr "Ange inte användare, värd eller port separat tillsammans med en anslutningssträng" -#: command.c:3142 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "Det finns ingen anslutning att återanvända parametrar från" -#: command.c:3443 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "Föregående anslutning bevarad" -#: command.c:3449 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3505 +#: command.c:3595 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Du är nu uppkopplad mot databasen \"%s\" som användare \"%s\" på adress \"%s\" på port \"%s\".\n" -#: command.c:3508 +#: command.c:3598 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Du är nu uppkopplad mot databasen \"%s\" som användare \"%s\" via uttag i \"%s\" på port \"%s\".\n" -#: command.c:3514 +#: command.c:3604 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Du är nu uppkopplad mot databasen \"%s\" som användare \"%s\" på värd \"%s\" (adress \"%s\") på port \"%s\".\n" -#: command.c:3517 +#: command.c:3607 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Du är nu uppkopplad mot databasen \"%s\" som användare \"%s\" på värd \"%s\" på port \"%s\".\n" -#: command.c:3522 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Du är nu uppkopplad mot databasen \"%s\" som användare \"%s\".\n" -#: command.c:3562 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, server %s)\n" -#: command.c:3570 +#: command.c:3660 #, c-format msgid "" "WARNING: %s major version %s, server major version %s.\n" @@ -443,29 +458,29 @@ msgstr "" "VARNING: %s huvudversion %s, server huvudversion %s.\n" " En del psql-finesser kommer kanske inte fungera.\n" -#: command.c:3609 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "SSL-anslutning (protokoll: %s, krypto: %s, bitar: %s, komprimering: %s)\n" -#: command.c:3610 command.c:3611 command.c:3612 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "okänd" -#: command.c:3613 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "av" -#: command.c:3613 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "på" -#: command.c:3627 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "GSSAPI-krypterad anslutning\n" -#: command.c:3647 +#: command.c:3737 #, c-format msgid "" "WARNING: Console code page (%u) differs from Windows code page (%u)\n" @@ -476,259 +491,259 @@ msgstr "" " 8-bitars tecken kommer troligen inte fungera korrekt. Se psql:s\n" " referensmanual i sektionen \"Notes for Windows users\" för mer detaljer.\n" -#: command.c:3754 +#: command.c:3844 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "omgivningsvariabeln PSQL_EDITOR_LINENUMBER_ARG måste ange ett radnummer" -#: command.c:3783 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "kunde inte starta editorn \"%s\"" -#: command.c:3785 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "kunde inte starta /bin/sh" -#: command.c:3835 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "kunde inte hitta temp-katalog: %s" -#: command.c:3862 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "kunde inte öppna temporär fil \"%s\": %m" -#: command.c:4198 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: tvetydig förkortning \"%s\" matchar både \"%s\" och \"%s\"" -#: command.c:4218 +#: command.c:4308 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: tillåtna format är aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4237 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: tillåtna linjestilar är ascii, old-ascii, unicode" -#: command.c:4252 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: tillåtna Unicode-ramstilar är single, double" -#: command.c:4267 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: tillåtna Unicode-kolumnlinjestilar ärsingle, double" -#: command.c:4282 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: tillåtna Unicode-rubriklinjestilar är single, double" -#: command.c:4325 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep måste vara ett ensamt en-byte-tecken" -#: command.c:4330 +#: command.c:4420 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldset kan inte vara dubbelcitat, nyrad eller vagnretur" -#: command.c:4467 command.c:4655 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: okänd parameter: %s" -#: command.c:4487 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "Ramstil är %d.\n" -#: command.c:4493 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "Målvidd är inte satt.\n" -#: command.c:4495 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "Målvidd är %d.\n" -#: command.c:4502 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "Utökad visning är på.\n" -#: command.c:4504 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Utökad visning används automatiskt.\n" -#: command.c:4506 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "Utökad visning är av.\n" -#: command.c:4512 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Fältseparatorn för CSV är \"%s\".\n" -#: command.c:4520 command.c:4528 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "Fältseparatorn är noll-byte.\n" -#: command.c:4522 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Fältseparatorn är \"%s\".\n" -#: command.c:4535 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "Standard sidfot är på.\n" -#: command.c:4537 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "Standard sidfot är av.\n" -#: command.c:4543 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "Utdataformatet är \"%s\".\n" -#: command.c:4549 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "Linjestil är %s.\n" -#: command.c:4556 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null-visare är \"%s\".\n" -#: command.c:4564 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Lokal-anpassad numerisk utdata är på.\n" -#: command.c:4566 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Lokal-anpassad numerisk utdata är av.\n" -#: command.c:4573 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "Siduppdelare är på för lång utdata.\n" -#: command.c:4575 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "Siduppdelare används alltid.\n" -#: command.c:4577 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "Siduppdelare är av.\n" -#: command.c:4583 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" msgstr[0] "Siduppdelare kommer inte användas för färre än %d linje.\n" msgstr[1] "Siduppdelare kommer inte användas för färre än %d linjer.\n" -#: command.c:4593 command.c:4603 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "Postseparatorn är noll-byte.\n" -#: command.c:4595 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "Postseparatorn är .\n" -#: command.c:4597 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Postseparatorn är \"%s\".\n" -#: command.c:4610 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Tabellattributen är \"%s\".\n" -#: command.c:4613 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "Tabellattributen är ej satta.\n" -#: command.c:4620 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "Titeln är \"%s\".\n" -#: command.c:4622 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "Titeln är inte satt.\n" -#: command.c:4629 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "Visa bara tupler är på.\n" -#: command.c:4631 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "Visa bara tupler är av.\n" -#: command.c:4637 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Unicode-ramstil är \"%s\".\n" -#: command.c:4643 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Unicode-kolumnLinjestil är \"%s\".\n" -#: command.c:4649 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Unicode-rubriklinjestil är \"%s\".\n" -#: command.c:4882 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\!: misslyckades" -#: command.c:4907 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch kan inte användas på en tom fråga" -#: command.c:4948 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (varje %gs)\n" -#: command.c:4951 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (varje %gs)\n" -#: command.c:5013 command.c:5020 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "" "********* QUERY **********\n" @@ -741,12 +756,12 @@ msgstr "" "**************************\n" "\n" -#: command.c:5212 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" är inte en vy" -#: command.c:5228 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "kunde inte parsa arrayen reloptions" @@ -2427,7 +2442,7 @@ msgstr "" "psql är den interaktiva PostgreSQL-terminalen.\n" "\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "Användning:\n" @@ -2771,245 +2786,263 @@ msgstr " \\q avsluta psql\n" #: help.c:182 #, c-format +msgid "" +" \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr "" +" \\restrict RESTRICT_KEY\n" +" gå in i begränsat läge med angiven nyckel\n" + +#: help.c:184 +#, c-format +msgid "" +" \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr "" +" \\unrestrict RESTRICT_KEY\n" +" avsluta begränsat läge om nyckeln matchar\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEK] kör fråga var SEK sekund\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "Hjälp\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [kommandon] visa hjälp om backstreckkommandon\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options visa hjälp för psqls kommandoradflaggor\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables visa hjälp om speciella variabler\n" -#: help.c:190 +#: help.c:194 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [NAMN] hjälp med syntaxen för SQL-kommandon, * för alla kommandon\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "Frågebuffert\n" -#: help.c:194 +#: help.c:198 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [FIL] [RAD] redigera frågebufferten (eller filen) med extern redigerare\n" -#: help.c:195 +#: help.c:199 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNKNAMN [RAD]] redigera funktionsdefinition med extern redigerare\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [FUNKNAMN [RAD]] redigera vydefinition med extern redigerare\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p visa innehållet i frågebufferten\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r nollställ (radera) frågebufferten\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [FILNAMN] visa kommandohistorien eller spara den i fil\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w FILNAMN skriv frågebuffert till fil\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "In-/Utmatning\n" -#: help.c:206 +#: help.c:210 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... utför SQL COPY med dataström till klientvärden\n" -#: help.c:207 +#: help.c:211 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [TEXT] skriv text till standard ut (-n för ingen nyrad)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FILNAMN kör kommandon från fil\n" -#: help.c:209 +#: help.c:213 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir FIL som \\i, men relativt platsen för aktuellt script\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [FIL] skicka frågeresultat till fil eller |rör\n" -#: help.c:211 +#: help.c:215 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr " \\qecho [-n] [TEXT] skriv text till \\o-utdataströmmen (-n för ingen nyrad)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr " \\warn [-n] [TEXT] skriv text till standard error (-n för ingen nyrad)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "Villkor\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR starta villkorsblock\n" -#: help.c:217 +#: help.c:221 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR alternativ inom aktuellt villkorsblock\n" -#: help.c:218 +#: help.c:222 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else avslutningsalternativ inom aktuellt villkorsblock\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif avsluta villkorsblock\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "Information\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (flaggor: S = lista systemobjekt, + = mer detaljer)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] lista tabeller, vyer och sekvenser\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAMN beskriv tabell, vy, sekvens eller index\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [MALL] lista aggregatfunktioner\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [MALL] lista accessmetoder\n" -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] lista operatorklasser\n" -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] lista operatorfamiljer\n" -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] lista operatorer i operatorfamiljer\n" -#: help.c:231 +#: help.c:235 #, c-format msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] lista supportfunktioner i operatorfamiljer\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [MALL] lista tabellutrymmen\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [MALL] lista konverteringar\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [MALL] lista typomvandlingar\n" -#: help.c:235 +#: help.c:239 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [MALL] visa objektbeskrivning som inte visas på andra ställen\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [MALL] lista domäner\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [MALL] lista standardrättigheter\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [MALL] lista främmande tabeller\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [MALL] lista främmande servrar\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\det[+] [MALL] lista främmande tabeller\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [MALL] lista användarmappning\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [MALL] lista främmande data-omvandlare\n" -#: help.c:243 +#: help.c:247 #, c-format msgid "" " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" @@ -3018,57 +3051,57 @@ msgstr "" " \\df[anptw][S+] [FUNKMALL [TYPMALL ...]]\n" " lista [endast agg/normala/procedur/trigger/window] funktioner\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [MALL] lista textsökkonfigurationer\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [MALL] lista textsökordlistor\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [MALL] lista textsökparsrar\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [MALL] lista textsökmallar\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [MALL] lista roller\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [MALL] lista index\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl lista stora objekt, samma som \\lo_list\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [MALL] lista procedurspråk\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [MALL] lista materialiserade vyer\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [MALL] lista scheman\n" -#: help.c:255 +#: help.c:259 #, c-format msgid "" " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" @@ -3077,124 +3110,124 @@ msgstr "" " \\do[S+] [OPMALL [TYPMALL [TYPMALL]]]\n" " lista operatorer\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [MALL] lista jämförelser (collation)\n" -#: help.c:258 +#: help.c:262 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [MALL] lista åtkomsträttigheter för tabeller, vyer och sekvenser\n" -#: help.c:259 +#: help.c:263 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[tin+] [MALL] lista [bara tabell/index] partitionerade relationer [n=nästlad]\n" -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr "" " \\drds [ROLLMALL1 [DBMALL2]]\n" " lista rollinställningar per databas\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [MALL] lista replikeringspubliceringar\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [MALL] lista replikeringsprenumerationer\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [MALL] lista sekvenser\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [MALL] lista tabeller\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [MALL] lista datatyper\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [MALL] lista roller\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [MALL] lista vyer\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [MALL] lista utökningar\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [MALL] lista utökad statistik\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [MALL] lista händelsetriggrar\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [MALL] lista databaser\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] FUNKNAMN visa en funktions definition\n" -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] VYNAMN visa en vys definition\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [MALL] samma som \\dp\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "Formatering\n" -#: help.c:278 +#: help.c:282 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a byt mellan ojusterat och justerat utdataformat\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [TEXT] sätt tabelltitel, eller nollställ\n" -#: help.c:280 +#: help.c:284 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [TEXT] visa eller sätt fältseparatorn för ojusterad utmatning\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H slå på/av HTML-utskriftsläge (för närvarande: %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid "" " \\pset [NAME [VALUE]] set table output option\n" @@ -3213,27 +3246,27 @@ msgstr "" " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] visa endast rader (för närvarande: %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [TEXT] sätt HTML-tabellens
-attribut, eller nollställ\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] slå på/av expanderat utmatningsläge (för närvarande: %s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "Anslutning\n" -#: help.c:299 +#: help.c:303 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3242,7 +3275,7 @@ msgstr "" " \\c[onnect] {[DBNAMN|- ANVÄNDARE|- VÄRD|- PORT|-] | conninfo}\n" " koppla upp mot ny databas (för närvarande \"%s\")\n" -#: help.c:303 +#: help.c:307 #, c-format msgid "" " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" @@ -3251,72 +3284,72 @@ msgstr "" " \\c[onnect] {[DBNAMN|- ANVÄNDARE|- VÄRD|- PORT|-] | conninfo}\n" " koppla upp mot ny databas (för närvarande ingen uppkoppling)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo visa information om aktuell uppkoppling\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [KODNING] visa eller sätt klientens teckenkodning\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [ANVÄNDARNAMN] byt användares lösenord på ett säkert sätt\n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "Operativsystem\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [KATALOG] byt den aktuella katalogen\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAMN [VÄRDE] sätt eller nollställ omgivningsvariabel\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] slå på/av tidstagning av kommandon (för närvarande: %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [KOMMANDO] kör kommando i skal eller starta interaktivt skal\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "Variabler\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXT] NAMN be användaren att sätta en intern variabel\n" -#: help.c:320 +#: help.c:324 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr " \\set [NAMN [VÄRDE]] sätt intern variabel, eller lista alla om ingen param\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NAME ta bort intern variabel\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "Stora objekt\n" -#: help.c:325 +#: help.c:329 #, c-format msgid "" " \\lo_export LOBOID FILE\n" @@ -3329,19 +3362,19 @@ msgstr "" " \\lo_list\n" " \\lo_unlink LOBOID operationer på stora objekt\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "" "List of specially treated variables\n" "\n" msgstr "Lista av variabler som hanteras speciellt\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "psql-variabler:\n" -#: help.c:356 +#: help.c:360 #, c-format msgid "" " psql --set=NAME=VALUE\n" @@ -3352,7 +3385,7 @@ msgstr "" " eller \\set NAMN VÄRDE inne i psql\n" "\n" -#: help.c:358 +#: help.c:362 #, c-format msgid "" " AUTOCOMMIT\n" @@ -3361,7 +3394,7 @@ msgstr "" " AUTOCOMMIT\n" " om satt så kommer efterföljande SQL-kommandon commit:as automatiskt\n" -#: help.c:360 +#: help.c:364 #, c-format msgid "" " COMP_KEYWORD_CASE\n" @@ -3372,7 +3405,7 @@ msgstr "" " bestämmer skiftläge för att komplettera SQL-nyckelord\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid "" " DBNAME\n" @@ -3381,7 +3414,7 @@ msgstr "" " DBNAME\n" " den uppkopplade databasens namn\n" -#: help.c:365 +#: help.c:369 #, c-format msgid "" " ECHO\n" @@ -3392,7 +3425,7 @@ msgstr "" " bestämmer vilken indata som skrivs till standard ut\n" " [all, errors, none, queries]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid "" " ECHO_HIDDEN\n" @@ -3403,7 +3436,7 @@ msgstr "" " om satt, visa interna frågor som körs av backåtstreckkommandon:\n" " om satt till \"noexec\", bara visa dem utan att köra\n" -#: help.c:371 +#: help.c:375 #, c-format msgid "" " ENCODING\n" @@ -3412,7 +3445,7 @@ msgstr "" " ENCODING\n" " aktuell teckenkodning för klient\n" -#: help.c:373 +#: help.c:377 #, c-format msgid "" " ERROR\n" @@ -3421,7 +3454,7 @@ msgstr "" " ERROR\n" " sant om sista frågan misslyckades, falskt annars\n" -#: help.c:375 +#: help.c:379 #, c-format msgid "" " FETCH_COUNT\n" @@ -3430,7 +3463,7 @@ msgstr "" " FETCH_COUNT\n" " antal resultatrader som hämtas och visas åt gången (0=obegränsat)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid "" " HIDE_TABLEAM\n" @@ -3439,7 +3472,7 @@ msgstr "" " HIDE_TABLEAM\n" " om satt så visas inte accessmetoder\n" -#: help.c:379 +#: help.c:383 #, c-format msgid "" " HIDE_TOAST_COMPRESSION\n" @@ -3448,7 +3481,7 @@ msgstr "" " HIDE_TOAST_COMPRESSION\n" " om satt så visas inte komprimeringsmetoder\n" -#: help.c:381 +#: help.c:385 #, c-format msgid "" " HISTCONTROL\n" @@ -3457,7 +3490,7 @@ msgstr "" " HISTCONTROL\n" " styr kommandohistoriken [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid "" " HISTFILE\n" @@ -3466,7 +3499,7 @@ msgstr "" " HISTFILE\n" " filnamn för att spara kommandohistoriken i\n" -#: help.c:385 +#: help.c:389 #, c-format msgid "" " HISTSIZE\n" @@ -3475,7 +3508,7 @@ msgstr "" " HISTSIZE\n" " maximalt antal kommandon som sparas i kommandohistoriken\n" -#: help.c:387 +#: help.c:391 #, c-format msgid "" " HOST\n" @@ -3484,7 +3517,7 @@ msgstr "" " HOST\n" " den uppkopplade databasens värd\n" -#: help.c:389 +#: help.c:393 #, c-format msgid "" " IGNOREEOF\n" @@ -3493,7 +3526,7 @@ msgstr "" " IGNOREEOF\n" " antal EOF som behövs för att avsluta en interaktiv session\n" -#: help.c:391 +#: help.c:395 #, c-format msgid "" " LASTOID\n" @@ -3502,7 +3535,7 @@ msgstr "" " LASTOID\n" " värdet av den senast påverkade OID:en\n" -#: help.c:393 +#: help.c:397 #, c-format msgid "" " LAST_ERROR_MESSAGE\n" @@ -3513,7 +3546,7 @@ msgstr "" " LAST_ERROR_SQLSTATE\n" " meddelande och SQLSTATE för sista felet eller en tom sträng och \"00000\" om det inte varit fel\n" -#: help.c:396 +#: help.c:400 #, c-format msgid "" " ON_ERROR_ROLLBACK\n" @@ -3522,7 +3555,7 @@ msgstr "" " ON_ERROR_ROLLBACK\n" " om satt, ett fel stoppar inte en transaktion (använder implicita sparpunkter)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid "" " ON_ERROR_STOP\n" @@ -3531,7 +3564,7 @@ msgstr "" " ON_ERROR_STOP\n" " avsluta batchkörning vid fel\n" -#: help.c:400 +#: help.c:404 #, c-format msgid "" " PORT\n" @@ -3540,7 +3573,7 @@ msgstr "" " PORT\n" " värdport för den aktuella uppkopplingen\n" -#: help.c:402 +#: help.c:406 #, c-format msgid "" " PROMPT1\n" @@ -3549,7 +3582,7 @@ msgstr "" " PROMPT1\n" " anger standardprompten för psql\n" -#: help.c:404 +#: help.c:408 #, c-format msgid "" " PROMPT2\n" @@ -3558,7 +3591,7 @@ msgstr "" " PROMPT2\n" " anger den prompt som används om en sats forsätter på efterföljande rad\n" -#: help.c:406 +#: help.c:410 #, c-format msgid "" " PROMPT3\n" @@ -3567,7 +3600,7 @@ msgstr "" " PROMPT3\n" " anger den prompt som används för COPY ... FROM STDIN\n" -#: help.c:408 +#: help.c:412 #, c-format msgid "" " QUIET\n" @@ -3576,7 +3609,7 @@ msgstr "" " QUIET\n" " kör tyst (samma som flaggan -q)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid "" " ROW_COUNT\n" @@ -3585,7 +3618,7 @@ msgstr "" " ROW_COUNT\n" " antal rader som returnerades eller påverkades av senaste frågan alternativt 0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid "" " SERVER_VERSION_NAME\n" @@ -3596,7 +3629,7 @@ msgstr "" " SERVER_VERSION_NAME\n" " serverns version (i kort sträng eller numeriskt format)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid "" " SHOW_CONTEXT\n" @@ -3605,7 +3638,7 @@ msgstr "" " SHOW_CONTEXT\n" " styr visning av meddelandekontextfält [never, errors, always]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid "" " SINGLELINE\n" @@ -3614,7 +3647,7 @@ msgstr "" " SINGLELINE\n" " om satt, slut på raden avslutar SQL-kommandon (samma som flaggan -S )\n" -#: help.c:419 +#: help.c:423 #, c-format msgid "" " SINGLESTEP\n" @@ -3623,7 +3656,7 @@ msgstr "" " SINGLESTEP\n" " stegningsläge (samma som flaggan -s)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid "" " SQLSTATE\n" @@ -3632,7 +3665,7 @@ msgstr "" " SQLSTATE\n" " SQLSTATE för sista frågan eller \"00000\" om det inte varit fel\n" -#: help.c:423 +#: help.c:427 #, c-format msgid "" " USER\n" @@ -3641,7 +3674,7 @@ msgstr "" " USER\n" " den uppkopplade databasanvändaren\n" -#: help.c:425 +#: help.c:429 #, c-format msgid "" " VERBOSITY\n" @@ -3650,7 +3683,7 @@ msgstr "" " VERBOSITY\n" " styr verbositet för felrapporter [default, verbose, terse, sqlstate]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid "" " VERSION\n" @@ -3663,7 +3696,7 @@ msgstr "" " VERSION_NUM\n" " psql:s version (i lång sträng, kort sträng eller numeriskt format)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "" "\n" @@ -3672,7 +3705,7 @@ msgstr "" "\n" "Visningsinställningar:\n" -#: help.c:434 +#: help.c:438 #, c-format msgid "" " psql --pset=NAME[=VALUE]\n" @@ -3683,7 +3716,7 @@ msgstr "" " eller \\pset NAMN [VÄRDE] inne i psql\n" "\n" -#: help.c:436 +#: help.c:440 #, c-format msgid "" " border\n" @@ -3692,7 +3725,7 @@ msgstr "" " border\n" " ramstil (nummer)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid "" " columns\n" @@ -3701,7 +3734,16 @@ msgstr "" " columns\n" " målvidd för wrappade format\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid "" +" csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr "" +" csv_fieldsep\n" +" fältseparator för utdataformatet CSV (standard \"%c\")\n" + +#: help.c:447 #, c-format msgid "" " expanded (or x)\n" @@ -3710,7 +3752,7 @@ msgstr "" " expanded (eller x)\n" " expanderat utmatningsläge [on, off, auto]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid "" " fieldsep\n" @@ -3719,7 +3761,7 @@ msgstr "" " fieldsep\n" " fältseparator för ej justerad utdata (standard \"%s\")\n" -#: help.c:445 +#: help.c:452 #, c-format msgid "" " fieldsep_zero\n" @@ -3728,7 +3770,7 @@ msgstr "" " fieldsep_zero\n" " sätt fältseparator för ej justerad utdata till noll-byte\n" -#: help.c:447 +#: help.c:454 #, c-format msgid "" " footer\n" @@ -3737,7 +3779,7 @@ msgstr "" " footer\n" " slå på/av visning av tabellfot [on, off]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid "" " format\n" @@ -3746,7 +3788,7 @@ msgstr "" " format\n" " sätt utdataformat [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid "" " linestyle\n" @@ -3755,7 +3797,7 @@ msgstr "" " linestyle\n" " sätt ramlinjestil [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid "" " null\n" @@ -3764,7 +3806,7 @@ msgstr "" " null\n" " sätt sträng som visas istället för null-värden\n" -#: help.c:455 +#: help.c:462 #, c-format msgid "" " numericlocale\n" @@ -3773,7 +3815,7 @@ msgstr "" " numericlocale\n" " slå på visning av lokalspecifika tecken för gruppering av siffror\n" -#: help.c:457 +#: help.c:464 #, c-format msgid "" " pager\n" @@ -3782,7 +3824,7 @@ msgstr "" " pager\n" " styr när en extern pagenerare används [yes, no, always]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid "" " recordsep\n" @@ -3791,7 +3833,7 @@ msgstr "" " recordsep\n" " post (rad) separator för ej justerad utdata\n" -#: help.c:461 +#: help.c:468 #, c-format msgid "" " recordsep_zero\n" @@ -3800,7 +3842,7 @@ msgstr "" " recordsep_zero\n" " sätt postseparator för ej justerad utdata till noll-byte\n" -#: help.c:463 +#: help.c:470 #, c-format msgid "" " tableattr (or T)\n" @@ -3811,7 +3853,7 @@ msgstr "" " ange attribut för tabelltaggen i html-format eller proportionella\n" " kolumnvidder för vänsterjusterade datatypet i latex-longtable-format\n" -#: help.c:466 +#: help.c:473 #, c-format msgid "" " title\n" @@ -3820,7 +3862,7 @@ msgstr "" " title\n" " sätt tabelltitel för efterkommande tabellutskrifter\n" -#: help.c:468 +#: help.c:475 #, c-format msgid "" " tuples_only\n" @@ -3829,7 +3871,7 @@ msgstr "" " tuples_only\n" " om satt, bara tabelldatan visas\n" -#: help.c:470 +#: help.c:477 #, c-format msgid "" " unicode_border_linestyle\n" @@ -3842,7 +3884,7 @@ msgstr "" " unicode_header_linestyle\n" " sätter stilen på Unicode-linjer [single, double]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "" "\n" @@ -3851,7 +3893,7 @@ msgstr "" "\n" "Omgivningsvariabler:\n" -#: help.c:479 +#: help.c:486 #, c-format msgid "" " NAME=VALUE [NAME=VALUE] psql ...\n" @@ -3862,7 +3904,7 @@ msgstr "" " eller \\setenv NAMN [VÄRDE] inne psql\n" "\n" -#: help.c:481 +#: help.c:488 #, c-format msgid "" " set NAME=VALUE\n" @@ -3875,7 +3917,7 @@ msgstr "" " eller \\setenv NAMN [VÄRDE] inne i psql\n" "\n" -#: help.c:484 +#: help.c:491 #, c-format msgid "" " COLUMNS\n" @@ -3884,7 +3926,7 @@ msgstr "" " COLUMNS\n" " antal kolumner i wrappade format\n" -#: help.c:486 +#: help.c:493 #, c-format msgid "" " PGAPPNAME\n" @@ -3893,7 +3935,7 @@ msgstr "" " PGAPPNAME\n" " samma som anslutningsparametern \"application_name\"\n" -#: help.c:488 +#: help.c:495 #, c-format msgid "" " PGDATABASE\n" @@ -3902,7 +3944,7 @@ msgstr "" " PGDATABASE\n" " samma som anslutningsparametern \"dbname\"\n" -#: help.c:490 +#: help.c:497 #, c-format msgid "" " PGHOST\n" @@ -3911,7 +3953,7 @@ msgstr "" " PGHOST\n" " samma som anslutningsparametern \"host\"\n" -#: help.c:492 +#: help.c:499 #, c-format msgid "" " PGPASSFILE\n" @@ -3920,7 +3962,7 @@ msgstr "" " PGPASSFILE\n" " lösenordsfilnamn\n" -#: help.c:494 +#: help.c:501 #, c-format msgid "" " PGPASSWORD\n" @@ -3929,7 +3971,7 @@ msgstr "" " PGPASSWORD\n" " uppkoppingens lösenord (rekommenderas inte)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid "" " PGPORT\n" @@ -3938,7 +3980,7 @@ msgstr "" " PGPORT\n" " samma som anslutingsparametern \"port\"\n" -#: help.c:498 +#: help.c:505 #, c-format msgid "" " PGUSER\n" @@ -3947,7 +3989,7 @@ msgstr "" " PGUSER\n" " samma som anslutningsparametern \"user\"\n" -#: help.c:500 +#: help.c:507 #, c-format msgid "" " PSQL_EDITOR, EDITOR, VISUAL\n" @@ -3956,7 +3998,7 @@ msgstr "" " PSQL_EDITOR, EDITOR, VISUAL\n" " redigerare som används av kommanona \\e, \\ef och \\ev\n" -#: help.c:502 +#: help.c:509 #, c-format msgid "" " PSQL_EDITOR_LINENUMBER_ARG\n" @@ -3965,7 +4007,7 @@ msgstr "" " PSQL_EDITOR_LINENUMBER_ARG\n" " hur radnummer anges när redigerare startas\n" -#: help.c:504 +#: help.c:511 #, c-format msgid "" " PSQL_HISTORY\n" @@ -3974,7 +4016,7 @@ msgstr "" " PSQL_HISTORY\n" " alternativ plats för kommandohistorikfilen\n" -#: help.c:506 +#: help.c:513 #, c-format msgid "" " PSQL_PAGER, PAGER\n" @@ -3983,7 +4025,7 @@ msgstr "" " PAGER\n" " namnet på den externa pageneraren\n" -#: help.c:508 +#: help.c:515 #, c-format msgid "" " PSQLRC\n" @@ -3992,7 +4034,7 @@ msgstr "" " PSQLRC\n" " alternativ plats för användarens \".psqlrc\"-fil\n" -#: help.c:510 +#: help.c:517 #, c-format msgid "" " SHELL\n" @@ -4001,7 +4043,7 @@ msgstr "" " SHELL\n" " skalet som används av kommandot \\!\n" -#: help.c:512 +#: help.c:519 #, c-format msgid "" " TMPDIR\n" @@ -4010,11 +4052,11 @@ msgstr "" " TMPDIR\n" " katalog för temporärfiler\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "Tillgänglig hjälp:\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "" "Command: %s\n" @@ -4033,7 +4075,7 @@ msgstr "" "URL: %s\n" "\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "" "No help available for \"%s\".\n" @@ -6501,7 +6543,7 @@ msgstr "extra kommandoradsargument \"%s\" ignorerad" msgid "could not find own program executable" msgstr "kunde inte hitta det egna programmets körbara fil" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "" "tab completion query failed: %s\n" diff --git a/src/bin/psql/po/uk.po b/src/bin/psql/po/uk.po index f85f3caf16e..7ab713806ba 100644 --- a/src/bin/psql/po/uk.po +++ b/src/bin/psql/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-18 19:30+0000\n" -"PO-Revision-Date: 2023-04-19 15:37\n" +"POT-Creation-Date: 2025-12-31 03:23+0000\n" +"PO-Revision-Date: 2025-12-31 15:41\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -68,7 +68,7 @@ msgid "%s() failed: %m" msgstr "%s() помилка: %m" #: ../../common/exec.c:560 ../../common/exec.c:605 ../../common/exec.c:697 -#: command.c:1316 command.c:3248 command.c:3297 command.c:3414 input.c:227 +#: command.c:1338 command.c:3339 command.c:3388 command.c:3505 input.c:227 #: mainloop.c:81 mainloop.c:402 #, c-format msgid "out of memory" @@ -90,7 +90,7 @@ msgstr "неможливо дублювати нульовий покажчик msgid "could not look up effective user ID %ld: %s" msgstr "не можу знайти користувача з ефективним ID %ld: %s" -#: ../../common/username.c:45 command.c:564 +#: ../../common/username.c:45 command.c:585 msgid "user does not exist" msgstr "користувача не існує" @@ -171,300 +171,315 @@ msgstr "невірний формат виводу (внутрішня поми msgid "skipping recursive expansion of variable \"%s\"" msgstr "пропуск рекурсивного розгортання змінної \"%s\"" -#: command.c:229 +#: command.c:238 +#, c-format +msgid "backslash commands are restricted; only \\unrestrict is allowed" +msgstr "команди зворотнього слешу обмежені; дозволяється лише \\unstrict" + +#: command.c:246 #, c-format msgid "invalid command \\%s" msgstr "Невірна команда \\%s" -#: command.c:231 +#: command.c:248 #, c-format msgid "Try \\? for help." msgstr "Спробуйте \\? для отримання довідки." -#: command.c:249 +#: command.c:266 #, c-format msgid "\\%s: extra argument \"%s\" ignored" msgstr "\\%s: зайвий аргумент \"%s\" проігноровано" -#: command.c:301 +#: command.c:318 #, c-format msgid "\\%s command ignored; use \\endif or Ctrl-C to exit current \\if block" msgstr "\\%s команду проігноровано; скористайтесь \\endif або Ctrl-C, щоб вийти з поточного блоку \\if" -#: command.c:562 +#: command.c:583 #, c-format msgid "could not get home directory for user ID %ld: %s" msgstr "неможливо отримати домашню директорію для користувача ID %ld: %s" -#: command.c:580 +#: command.c:601 #, c-format msgid "\\%s: could not change directory to \"%s\": %m" msgstr "\\%s: неможливо змінити директорію на \"%s\": %m" -#: command.c:605 +#: command.c:626 #, c-format msgid "You are currently not connected to a database.\n" msgstr "На даний момент ви від'єднанні від бази даних.\n" -#: command.c:615 +#: command.c:636 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" за аресою \"%s\" на порту \"%s\".\n" -#: command.c:618 +#: command.c:639 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" через сокет в \"%s\" на порту \"%s\".\n" -#: command.c:624 +#: command.c:645 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" (за аресою \"%s\") на порту \"%s\".\n" -#: command.c:627 +#: command.c:648 #, c-format msgid "You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" на порту \"%s\".\n" -#: command.c:1011 command.c:1120 command.c:2604 +#: command.c:1032 command.c:1141 command.c:2695 #, c-format msgid "no query buffer" msgstr "немає буферу запитів" -#: command.c:1044 command.c:5314 +#: command.c:1065 command.c:5407 #, c-format msgid "invalid line number: %s" msgstr "невірний номер рядка: %s" -#: command.c:1111 +#: command.c:1132 #, c-format msgid "The server (version %s) does not support editing function source." msgstr "Сервер (версія %s) не пітдримує редагування вихідного коду функцій." -#: command.c:1114 +#: command.c:1135 #, c-format msgid "The server (version %s) does not support editing view definitions." msgstr "Сервер (версія %s) не підтримує редагування визначення подання." -#: command.c:1198 +#: command.c:1219 msgid "No changes" msgstr "Без змін" -#: command.c:1277 +#: command.c:1298 #, c-format msgid "%s: invalid encoding name or conversion procedure not found" msgstr "%s: невірне ім'я кодування або не знайдено процедуру конверсії" -#: command.c:1312 command.c:2064 command.c:3244 command.c:3436 command.c:5420 +#: command.c:1334 command.c:2086 command.c:3335 command.c:3527 command.c:5513 #: common.c:174 common.c:223 common.c:392 common.c:1248 common.c:1276 -#: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:709 help.c:62 +#: common.c:1385 common.c:1492 common.c:1530 copy.c:488 copy.c:710 help.c:62 #: large_obj.c:157 large_obj.c:192 large_obj.c:254 startup.c:298 #, c-format msgid "%s" msgstr "%s" -#: command.c:1319 +#: command.c:1341 msgid "There is no previous error." msgstr "Попередня помилка відсутня." -#: command.c:1432 +#: command.c:1454 #, c-format msgid "\\%s: missing right parenthesis" msgstr "\\%s: відсутня права дужка" -#: command.c:1609 command.c:1914 command.c:1928 command.c:1945 command.c:2115 -#: command.c:2351 command.c:2571 command.c:2611 +#: command.c:1631 command.c:1936 command.c:1950 command.c:1967 command.c:2137 +#: command.c:2291 command.c:2402 command.c:2620 command.c:2662 command.c:2702 #, c-format msgid "\\%s: missing required argument" msgstr "\\%s: не вистачає обов'язкового аргументу" -#: command.c:1740 +#: command.c:1762 #, c-format msgid "\\elif: cannot occur after \\else" msgstr "\\elif: не може йти після \\else" -#: command.c:1745 +#: command.c:1767 #, c-format msgid "\\elif: no matching \\if" msgstr "\\elif: немає відповідного \\if" -#: command.c:1809 +#: command.c:1831 #, c-format msgid "\\else: cannot occur after \\else" msgstr "\\else: не може йти після \\else" -#: command.c:1814 +#: command.c:1836 #, c-format msgid "\\else: no matching \\if" msgstr "\\else: немає відповідного \\if" -#: command.c:1854 +#: command.c:1876 #, c-format msgid "\\endif: no matching \\if" msgstr "\\endif: немає відповідного \\if" -#: command.c:2009 +#: command.c:2031 msgid "Query buffer is empty." msgstr "Буфер запиту порожній." -#: command.c:2046 +#: command.c:2068 #, c-format msgid "Enter new password for user \"%s\": " msgstr "Введіть новий пароль користувача \"%s\": " -#: command.c:2049 +#: command.c:2071 msgid "Enter it again: " msgstr "Введіть знову: " -#: command.c:2053 +#: command.c:2075 #, c-format msgid "Passwords didn't match." msgstr "Паролі не співпадають." -#: command.c:2144 +#: command.c:2166 #, c-format msgid "\\%s: could not read value for variable" msgstr "\\%s: не вдалося прочитати значення змінної" -#: command.c:2247 +#: command.c:2269 msgid "Query buffer reset (cleared)." msgstr "Буфер запитів скинуто (очищено)." -#: command.c:2269 +#: command.c:2320 #, c-format msgid "Wrote history to file \"%s\".\n" msgstr "Історію записано до файлу \"%s\".\n" -#: command.c:2356 +#: command.c:2407 #, c-format msgid "\\%s: environment variable name must not contain \"=\"" msgstr "\\%s: змінна середовища не повинна містити \"=\"" -#: command.c:2408 +#: command.c:2459 #, c-format msgid "The server (version %s) does not support showing function source." msgstr "Сервер (версія %s) не пітдримує відображнення вихідного коду функцій." -#: command.c:2411 +#: command.c:2462 #, c-format msgid "The server (version %s) does not support showing view definitions." msgstr "Сервер (версія %s) не підтримує відображення визначення подання." -#: command.c:2418 +#: command.c:2469 #, c-format msgid "function name is required" msgstr "необхідне ім'я функції" -#: command.c:2420 +#: command.c:2471 #, c-format msgid "view name is required" msgstr "необхідне ім'я подання" -#: command.c:2543 +#: command.c:2594 msgid "Timing is on." msgstr "Таймер увімкнено." -#: command.c:2545 +#: command.c:2596 msgid "Timing is off." msgstr "Таймер вимкнено." -#: command.c:2630 command.c:2658 command.c:3875 command.c:3878 command.c:3881 -#: command.c:3887 command.c:3889 command.c:3915 command.c:3925 command.c:3937 -#: command.c:3951 command.c:3978 command.c:4036 common.c:70 copy.c:331 +#: command.c:2626 +#, c-format +msgid "\\%s: not currently in restricted mode" +msgstr "\\%s: наразі не обмежено" + +#: command.c:2636 +#, c-format +msgid "\\%s: wrong key" +msgstr "\\%s: неправильний ключ" + +#: command.c:2721 command.c:2749 command.c:3968 command.c:3971 command.c:3974 +#: command.c:3980 command.c:3982 command.c:4008 command.c:4018 command.c:4030 +#: command.c:4044 command.c:4071 command.c:4129 common.c:70 copy.c:331 #: copy.c:403 psqlscanslash.l:784 psqlscanslash.l:795 psqlscanslash.l:805 #, c-format msgid "%s: %m" msgstr "%s: %m" -#: command.c:3049 startup.c:237 startup.c:287 +#: command.c:3140 startup.c:237 startup.c:287 msgid "Password: " msgstr "Пароль: " -#: command.c:3054 startup.c:284 +#: command.c:3145 startup.c:284 #, c-format msgid "Password for user %s: " msgstr "Пароль користувача %s:" -#: command.c:3106 +#: command.c:3197 #, c-format msgid "Do not give user, host, or port separately when using a connection string" msgstr "Не надайте користувачеві, хосту або порту окремо під час використання рядка підключення" -#: command.c:3141 +#: command.c:3232 #, c-format msgid "No database connection exists to re-use parameters from" msgstr "Не існує підключення до бази даних для повторного використання параметрів" -#: command.c:3442 +#: command.c:3533 #, c-format msgid "Previous connection kept" msgstr "Попереднє підключення триває" -#: command.c:3448 +#: command.c:3539 #, c-format msgid "\\connect: %s" msgstr "\\connect: %s" -#: command.c:3504 +#: command.c:3595 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on address \"%s\" at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" за адресою \"%s\" на порту \"%s\".\n" -#: command.c:3507 +#: command.c:3598 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n" msgstr "Ви тепер під'єднані до бази даних \"%s\" як користувач \"%s\" через сокет в \"%s\" на порту \"%s\".\n" -#: command.c:3513 +#: command.c:3604 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" (address \"%s\") at port \"%s\".\n" msgstr "Ви під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" (за адресою \"%s\") на порту \"%s\".\n" -#: command.c:3516 +#: command.c:3607 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n" msgstr "Ви тепер під'єднані до бази даних \"%s\" як користувач \"%s\" на хості \"%s\" на порту \"%s\".\n" -#: command.c:3521 +#: command.c:3612 #, c-format msgid "You are now connected to database \"%s\" as user \"%s\".\n" msgstr "Ви тепер під'єднані до бази даних \"%s\" як користувач \"%s\".\n" -#: command.c:3561 +#: command.c:3652 #, c-format msgid "%s (%s, server %s)\n" msgstr "%s (%s, сервер %s)\n" -#: command.c:3569 +#: command.c:3660 #, c-format msgid "WARNING: %s major version %s, server major version %s.\n" " Some psql features might not work.\n" msgstr "УВАГА: мажорна версія %s %s, мажорна версія сервера %s.\n" " Деякі функції psql можуть не працювати.\n" -#: command.c:3608 +#: command.c:3699 #, c-format msgid "SSL connection (protocol: %s, cipher: %s, bits: %s, compression: %s)\n" msgstr "З'єднання SSL (протокол: %s, шифр: %s, біти: %s, компресія: %s)\n" -#: command.c:3609 command.c:3610 command.c:3611 +#: command.c:3700 command.c:3701 command.c:3702 msgid "unknown" msgstr "невідомо" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "off" msgstr "вимк" -#: command.c:3612 help.c:45 +#: command.c:3703 help.c:45 msgid "on" msgstr "увімк" -#: command.c:3626 +#: command.c:3717 #, c-format msgid "GSSAPI-encrypted connection\n" msgstr "З'єднання зашифровано GSSAPI\n" -#: command.c:3646 +#: command.c:3737 #, c-format msgid "WARNING: Console code page (%u) differs from Windows code page (%u)\n" " 8-bit characters might not work correctly. See psql reference\n" @@ -473,172 +488,172 @@ msgstr "УВАГА: Кодова сторінка консолі (%u) відрі " 8-бітові символи можуть працювати неправильно. Детальніше у розділі \n" " \"Нотатки для користувачів Windows\" у документації psql.\n" -#: command.c:3751 +#: command.c:3844 #, c-format msgid "environment variable PSQL_EDITOR_LINENUMBER_ARG must be set to specify a line number" msgstr "змінна середовища PSQL_EDITOR_LINENUMBER_ARG має бути встановлена, щоб вказувати номер рядка" -#: command.c:3780 +#: command.c:3873 #, c-format msgid "could not start editor \"%s\"" msgstr "неможливо запустити редактор \"%s\"" -#: command.c:3782 +#: command.c:3875 #, c-format msgid "could not start /bin/sh" msgstr "неможливо запустити /bin/sh" -#: command.c:3832 +#: command.c:3925 #, c-format msgid "could not locate temporary directory: %s" msgstr "неможливо знайти тимчасову директорію: %s" -#: command.c:3859 +#: command.c:3952 #, c-format msgid "could not open temporary file \"%s\": %m" msgstr "неможливо відкрити тимчасовий файл \"%s\": %m" -#: command.c:4195 +#: command.c:4288 #, c-format msgid "\\pset: ambiguous abbreviation \"%s\" matches both \"%s\" and \"%s\"" msgstr "\\pset: неоднозначна абревіатура \"%s\" відповідає обом \"%s\" і \"%s" -#: command.c:4215 +#: command.c:4308 #, c-format msgid "\\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" msgstr "\\pset: дозволені формати: aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned, wrapped" -#: command.c:4234 +#: command.c:4327 #, c-format msgid "\\pset: allowed line styles are ascii, old-ascii, unicode" msgstr "\\pset: дозволені стилі ліній: ascii, old-ascii, unicode" -#: command.c:4249 +#: command.c:4342 #, c-format msgid "\\pset: allowed Unicode border line styles are single, double" msgstr "\\pset: дозволені стилі ліній рамок Unicode: single, double" -#: command.c:4264 +#: command.c:4357 #, c-format msgid "\\pset: allowed Unicode column line styles are single, double" msgstr "\\pset: дозволені стилі ліній стовпців для Unicode: single, double" -#: command.c:4279 +#: command.c:4372 #, c-format msgid "\\pset: allowed Unicode header line styles are single, double" msgstr "\\pset: дозволені стилі ліній заголовків для Unicode: single, double" -#: command.c:4322 +#: command.c:4415 #, c-format msgid "\\pset: csv_fieldsep must be a single one-byte character" msgstr "\\pset: csv_fieldsep повинен бути однобайтовим символом" -#: command.c:4327 +#: command.c:4420 #, c-format msgid "\\pset: csv_fieldsep cannot be a double quote, a newline, or a carriage return" msgstr "\\pset: csv_fieldsep не може бути подвійною лапкою, новим рядком або поверненням каретки" -#: command.c:4464 command.c:4652 +#: command.c:4557 command.c:4745 #, c-format msgid "\\pset: unknown option: %s" msgstr "\\pset: невідомий параметр: %s" -#: command.c:4484 +#: command.c:4577 #, c-format msgid "Border style is %d.\n" msgstr "Стиль рамки %d.\n" -#: command.c:4490 +#: command.c:4583 #, c-format msgid "Target width is unset.\n" msgstr "Цільова ширина не встановлена.\n" -#: command.c:4492 +#: command.c:4585 #, c-format msgid "Target width is %d.\n" msgstr "Цільова ширина %d.\n" -#: command.c:4499 +#: command.c:4592 #, c-format msgid "Expanded display is on.\n" msgstr "Розширене відображення увімкнуто.\n" -#: command.c:4501 +#: command.c:4594 #, c-format msgid "Expanded display is used automatically.\n" msgstr "Розширене відображення використовується автоматично.\n" -#: command.c:4503 +#: command.c:4596 #, c-format msgid "Expanded display is off.\n" msgstr "Розширене відображення вимкнуто.\n" -#: command.c:4509 +#: command.c:4602 #, c-format msgid "Field separator for CSV is \"%s\".\n" msgstr "Розділювач полів CSV: \"%s\".\n" -#: command.c:4517 command.c:4525 +#: command.c:4610 command.c:4618 #, c-format msgid "Field separator is zero byte.\n" msgstr "Розділювач полів - нульовий байт.\n" -#: command.c:4519 +#: command.c:4612 #, c-format msgid "Field separator is \"%s\".\n" msgstr "Розділювач полів \"%s\".\n" -#: command.c:4532 +#: command.c:4625 #, c-format msgid "Default footer is on.\n" msgstr "Нинжній колонтитул увімкнуто за замовчуванням.\n" -#: command.c:4534 +#: command.c:4627 #, c-format msgid "Default footer is off.\n" msgstr "Нинжній колонтитул вимкнуто за замовчуванням.\n" -#: command.c:4540 +#: command.c:4633 #, c-format msgid "Output format is %s.\n" msgstr "Формат виводу %s.\n" -#: command.c:4546 +#: command.c:4639 #, c-format msgid "Line style is %s.\n" msgstr "Стиль лінії %s.\n" -#: command.c:4553 +#: command.c:4646 #, c-format msgid "Null display is \"%s\".\n" msgstr "Null відображається як \"%s\".\n" -#: command.c:4561 +#: command.c:4654 #, c-format msgid "Locale-adjusted numeric output is on.\n" msgstr "Локалізоване виведення чисел ввімкнено.\n" -#: command.c:4563 +#: command.c:4656 #, c-format msgid "Locale-adjusted numeric output is off.\n" msgstr "Локалізоване виведення чисел вимкнено.\n" -#: command.c:4570 +#: command.c:4663 #, c-format msgid "Pager is used for long output.\n" msgstr "Пейджер використовується для виведення довгого тексту.\n" -#: command.c:4572 +#: command.c:4665 #, c-format msgid "Pager is always used.\n" msgstr "Завжди використовується пейджер.\n" -#: command.c:4574 +#: command.c:4667 #, c-format msgid "Pager usage is off.\n" msgstr "Пейджер не використовується.\n" -#: command.c:4580 +#: command.c:4673 #, c-format msgid "Pager won't be used for less than %d line.\n" msgid_plural "Pager won't be used for less than %d lines.\n" @@ -647,87 +662,87 @@ msgstr[1] "Пейджер не буде використовуватися дл msgstr[2] "Пейджер не буде використовуватися для менш ніж %d рядків.\n" msgstr[3] "Пейджер не буде використовуватися для менш ніж %d рядка.\n" -#: command.c:4590 command.c:4600 +#: command.c:4683 command.c:4693 #, c-format msgid "Record separator is zero byte.\n" msgstr "Розділювач записів - нульовий байт.\n" -#: command.c:4592 +#: command.c:4685 #, c-format msgid "Record separator is .\n" msgstr "Розділювач записів: .\n" -#: command.c:4594 +#: command.c:4687 #, c-format msgid "Record separator is \"%s\".\n" msgstr "Розділювач записів: \"%s\".\n" -#: command.c:4607 +#: command.c:4700 #, c-format msgid "Table attributes are \"%s\".\n" msgstr "Табличні атрибути \"%s\".\n" -#: command.c:4610 +#: command.c:4703 #, c-format msgid "Table attributes unset.\n" msgstr "Атрибути таблиць не задані.\n" -#: command.c:4617 +#: command.c:4710 #, c-format msgid "Title is \"%s\".\n" msgstr "Заголовок: \"%s\".\n" -#: command.c:4619 +#: command.c:4712 #, c-format msgid "Title is unset.\n" msgstr "Заголовок не встановлено.\n" -#: command.c:4626 +#: command.c:4719 #, c-format msgid "Tuples only is on.\n" msgstr "Увімкнуто тільки кортежі.\n" -#: command.c:4628 +#: command.c:4721 #, c-format msgid "Tuples only is off.\n" msgstr "Вимкнуто тільки кортежі.\n" -#: command.c:4634 +#: command.c:4727 #, c-format msgid "Unicode border line style is \"%s\".\n" msgstr "Стиль ліній рамки для Unicode: \"%s\".\n" -#: command.c:4640 +#: command.c:4733 #, c-format msgid "Unicode column line style is \"%s\".\n" msgstr "Стиль ліній стовпців для Unicode: \"%s\".\n" -#: command.c:4646 +#: command.c:4739 #, c-format msgid "Unicode header line style is \"%s\".\n" msgstr "Стиль ліній заголовків для Unicode: \"%s\".\n" -#: command.c:4879 +#: command.c:4972 #, c-format msgid "\\!: failed" msgstr "\\!: помилка" -#: command.c:4904 common.c:652 +#: command.c:4997 common.c:652 #, c-format msgid "\\watch cannot be used with an empty query" msgstr "\\watch не може бути використано із пустим запитом" -#: command.c:4945 +#: command.c:5038 #, c-format msgid "%s\t%s (every %gs)\n" msgstr "%s\t%s (кожні %g сек)\n" -#: command.c:4948 +#: command.c:5041 #, c-format msgid "%s (every %gs)\n" msgstr "%s (кожні %g сек)\n" -#: command.c:5010 command.c:5017 common.c:552 common.c:559 common.c:1231 +#: command.c:5103 command.c:5110 common.c:552 common.c:559 common.c:1231 #, c-format msgid "********* QUERY **********\n" "%s\n" @@ -736,12 +751,12 @@ msgstr "********* ЗАПИТ **********\n" "%s\n" "**************************\n\n" -#: command.c:5209 +#: command.c:5302 #, c-format msgid "\"%s.%s\" is not a view" msgstr "\"%s.%s\" не є поданням" -#: command.c:5225 +#: command.c:5318 #, c-format msgid "could not parse reloptions array" msgstr "неможливо розібрати масив reloptions" @@ -946,11 +961,11 @@ msgid "Enter data to be copied followed by a newline.\n" msgstr "Введіть дані для копювання, розділяючи переносом рядка.\n" "Завершіть введення за допомогою \"\\.\" або за допомогою сигналу EOF." -#: copy.c:671 +#: copy.c:672 msgid "aborted because of read failure" msgstr "перервано через помилку читання" -#: copy.c:705 +#: copy.c:706 msgid "trying to exit copy mode" msgstr "спроба вийти з режиму копіювання" @@ -2407,7 +2422,7 @@ msgstr "Список функцій підтримки сімейств опер msgid "psql is the PostgreSQL interactive terminal.\n\n" msgstr "psql - це інтерактивний термінал PostgreSQL.\n\n" -#: help.c:74 help.c:355 help.c:433 help.c:476 +#: help.c:74 help.c:359 help.c:437 help.c:483 #, c-format msgid "Usage:\n" msgstr "Використання:\n" @@ -2721,424 +2736,438 @@ msgstr " \\q вийти з psql\n" #: help.c:182 #, c-format +msgid " \\restrict RESTRICT_KEY\n" +" enter restricted mode with provided key\n" +msgstr " \\restrict RESTRICT_KEY\n" +" увійти в обмежений режим з наданим ключем\n" + +#: help.c:184 +#, c-format +msgid " \\unrestrict RESTRICT_KEY\n" +" exit restricted mode if key matches\n" +msgstr " \\unrestrict RESTRICT_KEY\n" +" вийти з обмеженого режиму, якщо ключ збігається\n" + +#: help.c:186 +#, c-format msgid " \\watch [SEC] execute query every SEC seconds\n" msgstr " \\watch [SEC] виконувати запит кожні SEC секунд\n" -#: help.c:185 +#: help.c:189 #, c-format msgid "Help\n" msgstr "Довідка\n" -#: help.c:187 +#: help.c:191 #, c-format msgid " \\? [commands] show help on backslash commands\n" msgstr " \\? [commands] показати довідку по командах з \\\n" -#: help.c:188 +#: help.c:192 #, c-format msgid " \\? options show help on psql command-line options\n" msgstr " \\? options показати довідку по параметрах командного рядку psql\n" -#: help.c:189 +#: help.c:193 #, c-format msgid " \\? variables show help on special variables\n" msgstr " \\? variables показати довідку по спеціальних змінних\n" -#: help.c:190 +#: help.c:194 #, c-format msgid " \\h [NAME] help on syntax of SQL commands, * for all commands\n" msgstr " \\h [NAME] довідка з синтаксису команд SQL, * для всіх команд\n" -#: help.c:193 +#: help.c:197 #, c-format msgid "Query Buffer\n" msgstr "Буфер запитів\n" -#: help.c:194 +#: help.c:198 #, c-format msgid " \\e [FILE] [LINE] edit the query buffer (or file) with external editor\n" msgstr " \\e [FILE] [LINE] редагувати буфер запитів (або файл) зовнішнім редактором\n" -#: help.c:195 +#: help.c:199 #, c-format msgid " \\ef [FUNCNAME [LINE]] edit function definition with external editor\n" msgstr " \\ef [FUNCNAME [LINE]] редагувати визначення функції зовнішнім редактором\n" -#: help.c:196 +#: help.c:200 #, c-format msgid " \\ev [VIEWNAME [LINE]] edit view definition with external editor\n" msgstr " \\ev [VIEWNAME [LINE]] редагувати визначення подання зовнішнім редактором\n" -#: help.c:197 +#: help.c:201 #, c-format msgid " \\p show the contents of the query buffer\n" msgstr " \\p показати вміст буфера запитів\n" -#: help.c:198 +#: help.c:202 #, c-format msgid " \\r reset (clear) the query buffer\n" msgstr " \\r скинути (очистити) буфер запитів\n" -#: help.c:200 +#: help.c:204 #, c-format msgid " \\s [FILE] display history or save it to file\n" msgstr " \\s [FILE] відобразити історію або зберегти її до файлу\n" -#: help.c:202 +#: help.c:206 #, c-format msgid " \\w FILE write query buffer to file\n" msgstr " \\w FILE писати буфер запитів до файлу\n" -#: help.c:205 +#: help.c:209 #, c-format msgid "Input/Output\n" msgstr "Ввід/Вивід\n" -#: help.c:206 +#: help.c:210 #, c-format msgid " \\copy ... perform SQL COPY with data stream to the client host\n" msgstr " \\copy ... виконати команду SQL COPY з потоком даних на клієнтський хост\n" -#: help.c:207 +#: help.c:211 #, c-format msgid " \\echo [-n] [STRING] write string to standard output (-n for no newline)\n" msgstr " \\echo [-n] [STRING] записати рядок до стандартного виводу (-n для пропуску нового рядка)\n" -#: help.c:208 +#: help.c:212 #, c-format msgid " \\i FILE execute commands from file\n" msgstr " \\i FILE виконати команди з файлу\n" -#: help.c:209 +#: help.c:213 #, c-format msgid " \\ir FILE as \\i, but relative to location of current script\n" msgstr " \\ir ФАЙЛ те саме, що \\i, але відносно розташування поточного сценарію\n" -#: help.c:210 +#: help.c:214 #, c-format msgid " \\o [FILE] send all query results to file or |pipe\n" msgstr " \\o [FILE] надсилати всі результати запитів до файлу або до каналу |\n" -#: help.c:211 +#: help.c:215 #, c-format msgid " \\qecho [-n] [STRING] write string to \\o output stream (-n for no newline)\n" msgstr " \\qecho [-n] [STRING] записати рядок до вихідного потоку \\o (-n для пропуску нового рядка)\n" -#: help.c:212 +#: help.c:216 #, c-format msgid " \\warn [-n] [STRING] write string to standard error (-n for no newline)\n" msgstr " \\warn [-n] [STRING] записати рядок до стандартної помилки (-n для пропуску нового рядка)\n" -#: help.c:215 +#: help.c:219 #, c-format msgid "Conditional\n" msgstr "Умовний\n" -#: help.c:216 +#: help.c:220 #, c-format msgid " \\if EXPR begin conditional block\n" msgstr " \\if EXPR початок умовного блоку\n" -#: help.c:217 +#: help.c:221 #, c-format msgid " \\elif EXPR alternative within current conditional block\n" msgstr " \\elif EXPR альтернатива в рамках поточного блоку\n" -#: help.c:218 +#: help.c:222 #, c-format msgid " \\else final alternative within current conditional block\n" msgstr " \\else остаточна альтернатива в рамках поточного умовного блоку\n" -#: help.c:219 +#: help.c:223 #, c-format msgid " \\endif end conditional block\n" msgstr " \\endif кінець умовного блоку\n" -#: help.c:222 +#: help.c:226 #, c-format msgid "Informational\n" msgstr "Інформаційний\n" -#: help.c:223 +#: help.c:227 #, c-format msgid " (options: S = show system objects, + = additional detail)\n" msgstr " (параметри: S = показати системні об'єкти, + = додаткові деталі)\n" -#: help.c:224 +#: help.c:228 #, c-format msgid " \\d[S+] list tables, views, and sequences\n" msgstr " \\d[S+] вивести таблиці, подання і послідовності\n" -#: help.c:225 +#: help.c:229 #, c-format msgid " \\d[S+] NAME describe table, view, sequence, or index\n" msgstr " \\d[S+] NAME описати таблицю, подання, послідовність або індекс\n" -#: help.c:226 +#: help.c:230 #, c-format msgid " \\da[S] [PATTERN] list aggregates\n" msgstr " \\da[S] [PATTERN] вивести агрегати\n" -#: help.c:227 +#: help.c:231 #, c-format msgid " \\dA[+] [PATTERN] list access methods\n" msgstr " \\dA[+] [PATTERN] вивести методи доступу\n" -#: help.c:228 +#: help.c:232 #, c-format msgid " \\dAc[+] [AMPTRN [TYPEPTRN]] list operator classes\n" msgstr " \\dAc[+] [AMPTRN [TYPEPTRN]] список класів операторів\n" -#: help.c:229 +#: help.c:233 #, c-format msgid " \\dAf[+] [AMPTRN [TYPEPTRN]] list operator families\n" msgstr " \\dAf[+] [AMPTRN [TYPEPTRN]] список сімейств операторів\n" -#: help.c:230 +#: help.c:234 #, c-format msgid " \\dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families\n" msgstr " \\dAo[+] [AMPTRN [OPFPTRN]] список операторів сімейств операторів\n" -#: help.c:231 +#: help.c:235 #, c-format msgid " \\dAp[+] [AMPTRN [OPFPTRN]] list support functions of operator families\n" msgstr " \\dAp[+] [AMPTRN [OPFPTRN]] список функцій підтримки сімейств операторів\n" -#: help.c:232 +#: help.c:236 #, c-format msgid " \\db[+] [PATTERN] list tablespaces\n" msgstr " \\db[+] [PATTERN] вивести табличні простори\n" -#: help.c:233 +#: help.c:237 #, c-format msgid " \\dc[S+] [PATTERN] list conversions\n" msgstr " \\dc[S+] [PATTERN] вивести перетворення\n" -#: help.c:234 +#: help.c:238 #, c-format msgid " \\dC[+] [PATTERN] list casts\n" msgstr " \\dC[+] [PATTERN] вивести приведення типів\n" -#: help.c:235 +#: help.c:239 #, c-format msgid " \\dd[S] [PATTERN] show object descriptions not displayed elsewhere\n" msgstr " \\dd[S] [PATTERN] показати опис об'єкта, що не відображається в іншому місці\n" -#: help.c:236 +#: help.c:240 #, c-format msgid " \\dD[S+] [PATTERN] list domains\n" msgstr " \\dD[S+] [PATTERN] вивести домени\n" -#: help.c:237 +#: help.c:241 #, c-format msgid " \\ddp [PATTERN] list default privileges\n" msgstr " \\ddp [PATTERN] вивести привілеї за замовчуванням\n" -#: help.c:238 +#: help.c:242 #, c-format msgid " \\dE[S+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] вивести зовнішні таблиці\n" -#: help.c:239 +#: help.c:243 #, c-format msgid " \\des[+] [PATTERN] list foreign servers\n" msgstr " \\des[+] [PATTERN] вивести зовнішні сервери\n" -#: help.c:240 +#: help.c:244 #, c-format msgid " \\det[+] [PATTERN] list foreign tables\n" msgstr " \\dE[S+] [PATTERN] вивести зовнішні таблиці\n" -#: help.c:241 +#: help.c:245 #, c-format msgid " \\deu[+] [PATTERN] list user mappings\n" msgstr " \\deu[+] [PATTERN] вивести користувацькі зіставлення\n" -#: help.c:242 +#: help.c:246 #, c-format msgid " \\dew[+] [PATTERN] list foreign-data wrappers\n" msgstr " \\dew[+] [PATTERN] список джерел сторонніх даних\n" -#: help.c:243 +#: help.c:247 #, c-format msgid " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" " list [only agg/normal/procedure/trigger/window] functions\n" msgstr " \\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]]\n" " список [лише агрегатних/нормальних/процедурних/тригерних/віконних] функцій\n" -#: help.c:245 +#: help.c:249 #, c-format msgid " \\dF[+] [PATTERN] list text search configurations\n" msgstr " \\dF[+] [PATTERN] вивести конфігурації текстового пошуку\n" -#: help.c:246 +#: help.c:250 #, c-format msgid " \\dFd[+] [PATTERN] list text search dictionaries\n" msgstr " \\dFd[+] [PATTERN] вивести словники текстового пошуку\n" -#: help.c:247 +#: help.c:251 #, c-format msgid " \\dFp[+] [PATTERN] list text search parsers\n" msgstr " \\dFp[+] [PATTERN] вивести парсери текстового пошуку\n" -#: help.c:248 +#: help.c:252 #, c-format msgid " \\dFt[+] [PATTERN] list text search templates\n" msgstr " \\dFt[+] [PATTERN] вивести шаблони текстового пошуку\n" -#: help.c:249 +#: help.c:253 #, c-format msgid " \\dg[S+] [PATTERN] list roles\n" msgstr " \\dg[S+] [PATTERN] вивести ролі\n" -#: help.c:250 +#: help.c:254 #, c-format msgid " \\di[S+] [PATTERN] list indexes\n" msgstr " \\di[S+] [PATTERN] вивести індекси\n" -#: help.c:251 +#: help.c:255 #, c-format msgid " \\dl list large objects, same as \\lo_list\n" msgstr " \\dl вивести великі об'єкти, те саме, що \\lo_list\n" -#: help.c:252 +#: help.c:256 #, c-format msgid " \\dL[S+] [PATTERN] list procedural languages\n" msgstr " \\dL[S+] [PATTERN] вивести процедурні мови\n" -#: help.c:253 +#: help.c:257 #, c-format msgid " \\dm[S+] [PATTERN] list materialized views\n" msgstr " \\dm[S+] [PATTERN] вивести матеріалізовані подання\n" -#: help.c:254 +#: help.c:258 #, c-format msgid " \\dn[S+] [PATTERN] list schemas\n" msgstr " \\dn[S+] [PATTERN] вивести схеми\n" -#: help.c:255 +#: help.c:259 #, c-format msgid " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " list operators\n" msgstr " \\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]]\n" " список операторів\n" -#: help.c:257 +#: help.c:261 #, c-format msgid " \\dO[S+] [PATTERN] list collations\n" msgstr " \\dO[S+] [PATTERN] вивести правила сортування\n" -#: help.c:258 +#: help.c:262 #, c-format msgid " \\dp [PATTERN] list table, view, and sequence access privileges\n" msgstr " \\dp [PATTERN] вивести привілеї доступу до таблиць, подань або послідновностей \n" -#: help.c:259 +#: help.c:263 #, c-format msgid " \\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]\n" msgstr " \\dP[itn+] [PATTERN] вивести [тільки індекс/таблицю] секційні відношення [n=вкладені]\n" -#: help.c:260 +#: help.c:264 #, c-format msgid " \\drds [ROLEPTRN [DBPTRN]] list per-database role settings\n" msgstr " \\drds [ROLEPTRN [DBPTRN]] вивести налаштування ролей побазово\n" -#: help.c:261 +#: help.c:265 #, c-format msgid " \\dRp[+] [PATTERN] list replication publications\n" msgstr " \\dRp[+] [PATTERN] вивести реплікаційні публікації\n" -#: help.c:262 +#: help.c:266 #, c-format msgid " \\dRs[+] [PATTERN] list replication subscriptions\n" msgstr " \\dRs[+] [PATTERN] вивести реплікаційні підписки\n" -#: help.c:263 +#: help.c:267 #, c-format msgid " \\ds[S+] [PATTERN] list sequences\n" msgstr " \\ds[S+] [PATTERN] вивести послідовності\n" -#: help.c:264 +#: help.c:268 #, c-format msgid " \\dt[S+] [PATTERN] list tables\n" msgstr " \\dt[S+] [PATTERN] вивести таблиці\n" -#: help.c:265 +#: help.c:269 #, c-format msgid " \\dT[S+] [PATTERN] list data types\n" msgstr " \\dT[S+] [PATTERN] вивести типи даних\n" -#: help.c:266 +#: help.c:270 #, c-format msgid " \\du[S+] [PATTERN] list roles\n" msgstr " \\du[S+] [PATTERN] вивести ролі\n" -#: help.c:267 +#: help.c:271 #, c-format msgid " \\dv[S+] [PATTERN] list views\n" msgstr " \\dv[S+] [PATTERN] вивести подання\n" -#: help.c:268 +#: help.c:272 #, c-format msgid " \\dx[+] [PATTERN] list extensions\n" msgstr " \\dx[+] [PATTERN] вивести розширення\n" -#: help.c:269 +#: help.c:273 #, c-format msgid " \\dX [PATTERN] list extended statistics\n" msgstr " \\dX [PATTERN] список розширеної статистики\n" -#: help.c:270 +#: help.c:274 #, c-format msgid " \\dy[+] [PATTERN] list event triggers\n" msgstr " \\dy[+] [PATTERN] вивести тригери подій\n" -#: help.c:271 +#: help.c:275 #, c-format msgid " \\l[+] [PATTERN] list databases\n" msgstr " \\l[+] [PATTERN] вивести бази даних\n" -#: help.c:272 +#: help.c:276 #, c-format msgid " \\sf[+] FUNCNAME show a function's definition\n" msgstr " \\sf[+] FUNCNAME відобразити визначення функції\n" -#: help.c:273 +#: help.c:277 #, c-format msgid " \\sv[+] VIEWNAME show a view's definition\n" msgstr " \\sv[+] VIEWNAME відобразити визначення подання\n" -#: help.c:274 +#: help.c:278 #, c-format msgid " \\z [PATTERN] same as \\dp\n" msgstr " \\z [PATTERN] те саме, що \\dp\n" -#: help.c:277 +#: help.c:281 #, c-format msgid "Formatting\n" msgstr "Форматування\n" -#: help.c:278 +#: help.c:282 #, c-format msgid " \\a toggle between unaligned and aligned output mode\n" msgstr " \\a перемикання між режимами виводу: unaligned, aligned\n" -#: help.c:279 +#: help.c:283 #, c-format msgid " \\C [STRING] set table title, or unset if none\n" msgstr " \\C [STRING] встановити заголовок таблиці або прибрати, якщо не задано\n" -#: help.c:280 +#: help.c:284 #, c-format msgid " \\f [STRING] show or set field separator for unaligned query output\n" msgstr " \\f [STRING] показати або встановити розділювач полів для не вирівняного виводу запиту\n" -#: help.c:281 +#: help.c:285 #, c-format msgid " \\H toggle HTML output mode (currently %s)\n" msgstr " \\H переключити режим виводу HTML (поточний: %s)\n" -#: help.c:283 +#: help.c:287 #, c-format msgid " \\pset [NAME [VALUE]] set table output option\n" " (border|columns|csv_fieldsep|expanded|fieldsep|\n" @@ -3155,104 +3184,104 @@ msgstr " \\pset [NAME [VALUE]] встановити параметр виво " unicode_border_linestyle|unicode_column_linestyle|\n" " unicode_header_linestyle)\n" -#: help.c:290 +#: help.c:294 #, c-format msgid " \\t [on|off] show only rows (currently %s)\n" msgstr " \\t [on|off] показувати лише рядки (поточно %s)\n" -#: help.c:292 +#: help.c:296 #, c-format msgid " \\T [STRING] set HTML
tag attributes, or unset if none\n" msgstr " \\T [STRING] встановити атрибути для HTML
або прибрати, якщо не задані\n" -#: help.c:293 +#: help.c:297 #, c-format msgid " \\x [on|off|auto] toggle expanded output (currently %s)\n" msgstr " \\x [on|off|auto] переключити розширений вивід (поточний: %s)\n" -#: help.c:297 +#: help.c:301 #, c-format msgid "Connection\n" msgstr "Підключення\n" -#: help.c:299 +#: help.c:303 #, c-format msgid " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently \"%s\")\n" msgstr " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} під'єднатися до нової бази даних (поточно \"%s\")\n" -#: help.c:303 +#: help.c:307 #, c-format msgid " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}\n" " connect to new database (currently no connection)\n" msgstr " \\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} під'єднатися до нової бази даних (зараз з'єднання відсутнє)\n" -#: help.c:305 +#: help.c:309 #, c-format msgid " \\conninfo display information about current connection\n" msgstr " \\conninfo показати інформацію про поточне з'єднання\n" -#: help.c:306 +#: help.c:310 #, c-format msgid " \\encoding [ENCODING] show or set client encoding\n" msgstr " \\encoding [ENCODING] показати або встановити кодування клієнта\n" -#: help.c:307 +#: help.c:311 #, c-format msgid " \\password [USERNAME] securely change the password for a user\n" msgstr " \\password [USERNAME] безпечно змінити пароль користувача \n" -#: help.c:310 +#: help.c:314 #, c-format msgid "Operating System\n" msgstr "Операційна система\n" -#: help.c:311 +#: help.c:315 #, c-format msgid " \\cd [DIR] change the current working directory\n" msgstr " \\cd [DIR] змінити поточний робочий каталог\n" -#: help.c:312 +#: help.c:316 #, c-format msgid " \\setenv NAME [VALUE] set or unset environment variable\n" msgstr " \\setenv NAME [VALUE] встановити або скинути змінну середовища\n" -#: help.c:313 +#: help.c:317 #, c-format msgid " \\timing [on|off] toggle timing of commands (currently %s)\n" msgstr " \\timing [on|off] переключити таймер команд (поточний: %s)\n" -#: help.c:315 +#: help.c:319 #, c-format msgid " \\! [COMMAND] execute command in shell or start interactive shell\n" msgstr " \\! [COMMAND] виконати команду в оболонці або запустити інтерактивну оболонку\n" -#: help.c:318 +#: help.c:322 #, c-format msgid "Variables\n" msgstr "Змінні\n" -#: help.c:319 +#: help.c:323 #, c-format msgid " \\prompt [TEXT] NAME prompt user to set internal variable\n" msgstr " \\prompt [TEXT] NAME запитати користувача значення внутрішньої змінної\n" -#: help.c:320 +#: help.c:324 #, c-format msgid " \\set [NAME [VALUE]] set internal variable, or list all if no parameters\n" msgstr " \\set [NAME [VALUE]] встановити внутрішню змінну або вивести всі, якщо не задані параметри\n" -#: help.c:321 +#: help.c:325 #, c-format msgid " \\unset NAME unset (delete) internal variable\n" msgstr " \\unset NAME скинути (видалити) значення внутрішньої змінної\n" -#: help.c:324 +#: help.c:328 #, c-format msgid "Large Objects\n" msgstr "Великі об'єкти\n" -#: help.c:325 +#: help.c:329 #, c-format msgid " \\lo_export LOBOID FILE\n" " \\lo_import FILE [COMMENT]\n" @@ -3263,31 +3292,31 @@ msgstr " \\lo_export LOBOID FILE\n" " \\lo_list\n" " \\lo_unlink LOBOID операції з великими об'єктами\n" -#: help.c:352 +#: help.c:356 #, c-format msgid "List of specially treated variables\n\n" msgstr "Список спеціальних змінних\n\n" -#: help.c:354 +#: help.c:358 #, c-format msgid "psql variables:\n" msgstr "змінні psql:\n" -#: help.c:356 +#: help.c:360 #, c-format msgid " psql --set=NAME=VALUE\n" " or \\set NAME VALUE inside psql\n\n" msgstr " psql --set=ІМ'Я=ЗНАЧЕННЯ\n" " або \\set ІМ'Я ЗНАЧЕННЯ усередині psql\n\n" -#: help.c:358 +#: help.c:362 #, c-format msgid " AUTOCOMMIT\n" " if set, successful SQL commands are automatically committed\n" msgstr " AUTOCOMMIT\n" " якщо встановлений, успішні SQL-команди підтверджуються автоматично\n" -#: help.c:360 +#: help.c:364 #, c-format msgid " COMP_KEYWORD_CASE\n" " determines the case used to complete SQL key words\n" @@ -3296,20 +3325,20 @@ msgstr " COMP_KEYWORD_CASE\n" " визначає регістр для автодоповнення ключових слів SQL\n" " [lower, upper, preserve-lower, preserve-upper]\n" -#: help.c:363 +#: help.c:367 #, c-format msgid " DBNAME\n" " the currently connected database name\n" msgstr " DBNAME назва під'єднаної бази даних\n" -#: help.c:365 +#: help.c:369 #, c-format msgid " ECHO\n" " controls what input is written to standard output\n" " [all, errors, none, queries]\n" msgstr " ECHO контролює ввід, що виводиться на стандартний вивід [all, errors, none, queries]\n" -#: help.c:368 +#: help.c:372 #, c-format msgid " ECHO_HIDDEN\n" " if set, display internal queries executed by backslash commands;\n" @@ -3318,78 +3347,78 @@ msgstr " ECHO_HIDDEN\n" " якщо ввімкнено, виводить внутрішні запити, виконані за допомогою \"\\\";\n" " якщо встановлено значення \"noexec\", тільки виводяться, але не виконуються\n" -#: help.c:371 +#: help.c:375 #, c-format msgid " ENCODING\n" " current client character set encoding\n" msgstr " ENCODING\n" " поточне кодування набору символів клієнта\n" -#: help.c:373 +#: help.c:377 #, c-format msgid " ERROR\n" " true if last query failed, else false\n" msgstr " ERROR\n" " істина, якщо в останньому запиті є помилка, в іншому разі - хибність\n" -#: help.c:375 +#: help.c:379 #, c-format msgid " FETCH_COUNT\n" " the number of result rows to fetch and display at a time (0 = unlimited)\n" msgstr " FETCH_COUNT\n" " число рядків з результатами для передачі та відображення за один раз (0 = необмежено)\n" -#: help.c:377 +#: help.c:381 #, c-format msgid " HIDE_TABLEAM\n" " if set, table access methods are not displayed\n" msgstr " HIDE_TABLEAM\n" " якщо вказано, методи доступу до таблиць не відображаються\n" -#: help.c:379 +#: help.c:383 #, c-format msgid " HIDE_TOAST_COMPRESSION\n" " if set, compression methods are not displayed\n" msgstr " HIDE_TOAST_COMPRESSION\n" " якщо встановлено, методи стискання не відображаються\n" -#: help.c:381 +#: help.c:385 #, c-format msgid " HISTCONTROL\n" " controls command history [ignorespace, ignoredups, ignoreboth]\n" msgstr " HISTCONTROL контролює історію команд [ignorespace, ignoredups, ignoreboth]\n" -#: help.c:383 +#: help.c:387 #, c-format msgid " HISTFILE\n" " file name used to store the command history\n" msgstr " HISTFILE ім'я файлу для зберігання історії команд\n" -#: help.c:385 +#: help.c:389 #, c-format msgid " HISTSIZE\n" " maximum number of commands to store in the command history\n" msgstr " HISTSIZE максимальна кількість команд для зберігання в історії команд\n" -#: help.c:387 +#: help.c:391 #, c-format msgid " HOST\n" " the currently connected database server host\n" msgstr " HOST поточний підключений хост сервера бази даних\n" -#: help.c:389 +#: help.c:393 #, c-format msgid " IGNOREEOF\n" " number of EOFs needed to terminate an interactive session\n" msgstr " IGNOREEOF кількість EOF для завершення інтерактивної сесії\n" -#: help.c:391 +#: help.c:395 #, c-format msgid " LASTOID\n" " value of the last affected OID\n" msgstr " LASTOID значення останнього залученого OID\n" -#: help.c:393 +#: help.c:397 #, c-format msgid " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" @@ -3398,63 +3427,63 @@ msgstr " LAST_ERROR_MESSAGE\n" " LAST_ERROR_SQLSTATE\n" " повідомлення та код SQLSTATE останньої помилки, або пустий рядок та \"00000\", якщо помилки не було\n" -#: help.c:396 +#: help.c:400 #, c-format msgid " ON_ERROR_ROLLBACK\n" " if set, an error doesn't stop a transaction (uses implicit savepoints)\n" msgstr " ON_ERROR_ROLLBACK\n" " якщо встановлено, транзакція не припиняється у разі помилки (використовуються неявні точки збереження)\n" -#: help.c:398 +#: help.c:402 #, c-format msgid " ON_ERROR_STOP\n" " stop batch execution after error\n" msgstr " ON_ERROR_STOP\n" " зупиняти виконання пакету команд після помилки\n" -#: help.c:400 +#: help.c:404 #, c-format msgid " PORT\n" " server port of the current connection\n" msgstr " PORT\n" " порт сервера для поточного з'єднання\n" -#: help.c:402 +#: help.c:406 #, c-format msgid " PROMPT1\n" " specifies the standard psql prompt\n" msgstr " PROMPT1\n" " визначає стандратне запрошення psql \n" -#: help.c:404 +#: help.c:408 #, c-format msgid " PROMPT2\n" " specifies the prompt used when a statement continues from a previous line\n" msgstr " PROMPT2\n" " визначає запрошення, яке використовується при продовженні команди з попереднього рядка\n" -#: help.c:406 +#: help.c:410 #, c-format msgid " PROMPT3\n" " specifies the prompt used during COPY ... FROM STDIN\n" msgstr " PROMPT3\n" " визначає запрошення, яке виконується під час COPY ... FROM STDIN\n" -#: help.c:408 +#: help.c:412 #, c-format msgid " QUIET\n" " run quietly (same as -q option)\n" msgstr " QUIET\n" " тихий запуск ( як із параметром -q)\n" -#: help.c:410 +#: help.c:414 #, c-format msgid " ROW_COUNT\n" " number of rows returned or affected by last query, or 0\n" msgstr " ROW_COUNT\n" " число повернених або оброблених рядків останнім запитом, або 0\n" -#: help.c:412 +#: help.c:416 #, c-format msgid " SERVER_VERSION_NAME\n" " SERVER_VERSION_NUM\n" @@ -3463,49 +3492,49 @@ msgstr " SERVER_VERSION_NAME\n" " SERVER_VERSION_NUM\n" " версія серевера (у короткому текстовому або числовому форматі)\n" -#: help.c:415 +#: help.c:419 #, c-format msgid " SHOW_CONTEXT\n" " controls display of message context fields [never, errors, always]\n" msgstr " SHOW_CONTEXT\n" " керує відображенням полів контексту повідомлень [never, errors, always]\n" -#: help.c:417 +#: help.c:421 #, c-format msgid " SINGLELINE\n" " if set, end of line terminates SQL commands (same as -S option)\n" msgstr " SINGLELINE\n" " якщо встановлено, кінець рядка завершує режим вводу SQL-команди (як з параметром -S)\n" -#: help.c:419 +#: help.c:423 #, c-format msgid " SINGLESTEP\n" " single-step mode (same as -s option)\n" msgstr " SINGLESTEP\n" " покроковий режим (як з параметром -s)\n" -#: help.c:421 +#: help.c:425 #, c-format msgid " SQLSTATE\n" " SQLSTATE of last query, or \"00000\" if no error\n" msgstr " SQLSTATE\n" " SQLSTATE останнього запиту, або \"00000\" якщо немає помилок\n" -#: help.c:423 +#: help.c:427 #, c-format msgid " USER\n" " the currently connected database user\n" msgstr " USER\n" " поточний користувач, підключений до бази даних\n" -#: help.c:425 +#: help.c:429 #, c-format msgid " VERBOSITY\n" " controls verbosity of error reports [default, verbose, terse, sqlstate]\n" msgstr " VERBOSITY\n" " контролює докладність звітів про помилку [default, verbose, terse, sqlstate]\n" -#: help.c:427 +#: help.c:431 #, c-format msgid " VERSION\n" " VERSION_NAME\n" @@ -3516,112 +3545,119 @@ msgstr " VERSION\n" " VERSION_NUM\n" " psql версія (в розгорнутому, в короткому текстовому або числовому форматі)\n" -#: help.c:432 +#: help.c:436 #, c-format msgid "\n" "Display settings:\n" msgstr "\n" "Налаштування відобреження:\n" -#: help.c:434 +#: help.c:438 #, c-format msgid " psql --pset=NAME[=VALUE]\n" " or \\pset NAME [VALUE] inside psql\n\n" msgstr " psql --pset=NAME[=VALUE]\n" " або \\pset ІМ'Я [VALUE] всередині psql\n\n" -#: help.c:436 +#: help.c:440 #, c-format msgid " border\n" " border style (number)\n" msgstr " border\n" " стиль рамки (число)\n" -#: help.c:438 +#: help.c:442 #, c-format msgid " columns\n" " target width for the wrapped format\n" msgstr " columns\n" " цільова ширина для формату з переносом\n" -#: help.c:440 +#: help.c:444 +#, c-format +msgid " csv_fieldsep\n" +" field separator for CSV output format (default \"%c\")\n" +msgstr " csv_fieldsep\n" +" розділювач полів для виводу CSV (за замовчуванням \"%c\")\n" + +#: help.c:447 #, c-format msgid " expanded (or x)\n" " expanded output [on, off, auto]\n" msgstr " expanded (or x)\n" " розширений вивід [on, off, auto]\n" -#: help.c:442 +#: help.c:449 #, c-format msgid " fieldsep\n" " field separator for unaligned output (default \"%s\")\n" msgstr " fieldsep\n" " розділювач полів для не вирівняного виводу (за замовчуванням \"%s\")\n" -#: help.c:445 +#: help.c:452 #, c-format msgid " fieldsep_zero\n" " set field separator for unaligned output to a zero byte\n" msgstr " fieldsep_zero\n" " встановити розділювач полів для невирівняного виводу на нульовий байт\n" -#: help.c:447 +#: help.c:454 #, c-format msgid " footer\n" " enable or disable display of the table footer [on, off]\n" msgstr " footer\n" " вмикає або вимикає вивід підписів таблиці [on, off]\n" -#: help.c:449 +#: help.c:456 #, c-format msgid " format\n" " set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n" msgstr " format\n" " встановити формат виводу [unaligned, aligned, wrapped, html, asciidoc, ...]\n" -#: help.c:451 +#: help.c:458 #, c-format msgid " linestyle\n" " set the border line drawing style [ascii, old-ascii, unicode]\n" msgstr " linestyle\n" " встановлює стиль малювання ліній рамки [ascii, old-ascii, unicode]\n" -#: help.c:453 +#: help.c:460 #, c-format msgid " null\n" " set the string to be printed in place of a null value\n" msgstr " null\n" " встановлює рядок, який буде виведено замість значення (null)\n" -#: help.c:455 +#: help.c:462 #, c-format msgid " numericlocale\n" " enable display of a locale-specific character to separate groups of digits\n" msgstr " numericlocale\n" " вмикає виведення заданого локалью роздільника групи цифр\n" -#: help.c:457 +#: help.c:464 #, c-format msgid " pager\n" " control when an external pager is used [yes, no, always]\n" msgstr " pager\n" " контролює використання зовнішнього пейджера [yes, no, always]\n" -#: help.c:459 +#: help.c:466 #, c-format msgid " recordsep\n" " record (line) separator for unaligned output\n" msgstr " recordsep\n" " розділювач записів (рядків) для не вирівняного виводу\n" -#: help.c:461 +#: help.c:468 #, c-format msgid " recordsep_zero\n" " set record separator for unaligned output to a zero byte\n" msgstr " recordsep_zero\n" " встановлює розділювач записів для невирівняного виводу на нульовий байт\n" -#: help.c:463 +#: help.c:470 #, c-format msgid " tableattr (or T)\n" " specify attributes for table tag in html format, or proportional\n" @@ -3630,21 +3666,21 @@ msgstr " tableattr (або T)\n" " вказує атрибути для тегу table у html форматі або пропорційні \n" " ширини стовпців для вирівняних вліво даних, у latex-longtable форматі\n" -#: help.c:466 +#: help.c:473 #, c-format msgid " title\n" " set the table title for subsequently printed tables\n" msgstr " title\n" " задає заголовок таблиці для послідовно друкованих таблиць\n" -#: help.c:468 +#: help.c:475 #, c-format msgid " tuples_only\n" " if set, only actual table data is shown\n" msgstr " tuples_only\n" " якщо встановлено, виводяться лише фактичні табличні дані\n" -#: help.c:470 +#: help.c:477 #, c-format msgid " unicode_border_linestyle\n" " unicode_column_linestyle\n" @@ -3655,21 +3691,21 @@ msgstr " unicode_border_linestyle\n" " unicode_header_linestyle\n" " задає стиль мальювання ліній (Unicode) [single, double]\n" -#: help.c:475 +#: help.c:482 #, c-format msgid "\n" "Environment variables:\n" msgstr "\n" "Змінні оточення:\n" -#: help.c:479 +#: help.c:486 #, c-format msgid " NAME=VALUE [NAME=VALUE] psql ...\n" " or \\setenv NAME [VALUE] inside psql\n\n" msgstr " ІМ'Я=ЗНАЧЕННЯ [ІМ'Я=ЗНАЧЕННЯ] psql ...\n" " або \\setenv ІМ'Я [VALUE] всередині psql\n\n" -#: help.c:481 +#: help.c:488 #, c-format msgid " set NAME=VALUE\n" " psql ...\n" @@ -3678,116 +3714,116 @@ msgstr " встановлює ІМ'Я=ЗНАЧЕННЯ\n" " psql ...\n" " або \\setenv ІМ'Я [VALUE] всередині psql\n\n" -#: help.c:484 +#: help.c:491 #, c-format msgid " COLUMNS\n" " number of columns for wrapped format\n" msgstr " COLUMNS\n" " число стовпців для форматування з переносом\n" -#: help.c:486 +#: help.c:493 #, c-format msgid " PGAPPNAME\n" " same as the application_name connection parameter\n" msgstr " PGAPPNAME\n" " те саме, що параметр підключення application_name\n" -#: help.c:488 +#: help.c:495 #, c-format msgid " PGDATABASE\n" " same as the dbname connection parameter\n" msgstr " PGDATABASE\n" " те саме, що параметр підключення dbname\n" -#: help.c:490 +#: help.c:497 #, c-format msgid " PGHOST\n" " same as the host connection parameter\n" msgstr " PGHOST\n" " те саме, що параметр підключення host\n" -#: help.c:492 +#: help.c:499 #, c-format msgid " PGPASSFILE\n" " password file name\n" msgstr " PGPASSFILE\n" " назва файлу з паролем\n" -#: help.c:494 +#: help.c:501 #, c-format msgid " PGPASSWORD\n" " connection password (not recommended)\n" msgstr " PGPASSWORD\n" " пароль для підключення (не рекомендується)\n" -#: help.c:496 +#: help.c:503 #, c-format msgid " PGPORT\n" " same as the port connection parameter\n" msgstr " PGPORT\n" " те саме, що параметр підключення port\n" -#: help.c:498 +#: help.c:505 #, c-format msgid " PGUSER\n" " same as the user connection parameter\n" msgstr " PGUSER\n" " те саме, що параметр підключення user\n" -#: help.c:500 +#: help.c:507 #, c-format msgid " PSQL_EDITOR, EDITOR, VISUAL\n" " editor used by the \\e, \\ef, and \\ev commands\n" msgstr " PSQL_EDITOR, EDITOR, VISUAL\n" " редактор для команд \\e, \\ef і \\ev\n" -#: help.c:502 +#: help.c:509 #, c-format msgid " PSQL_EDITOR_LINENUMBER_ARG\n" " how to specify a line number when invoking the editor\n" msgstr " PSQL_EDITOR_LINENUMBER_ARG\n" " як вказати номер рядка при виклику редактора\n" -#: help.c:504 +#: help.c:511 #, c-format msgid " PSQL_HISTORY\n" " alternative location for the command history file\n" msgstr " PSQL_HISTORY\n" " альтернативне розміщення файлу з історією команд\n" -#: help.c:506 +#: help.c:513 #, c-format msgid " PSQL_PAGER, PAGER\n" " name of external pager program\n" msgstr " PSQL_PAGER, PAGER\n" " ім'я програми зовнішнього пейджеру\n" -#: help.c:508 +#: help.c:515 #, c-format msgid " PSQLRC\n" " alternative location for the user's .psqlrc file\n" msgstr " PSQLRC\n" " альтернативне розміщення користувацького файла .psqlrc\n" -#: help.c:510 +#: help.c:517 #, c-format msgid " SHELL\n" " shell used by the \\! command\n" msgstr " SHELL\n" " оболонка, що використовується командою \\!\n" -#: help.c:512 +#: help.c:519 #, c-format msgid " TMPDIR\n" " directory for temporary files\n" msgstr " TMPDIR\n" " каталог для тимчасових файлів\n" -#: help.c:557 +#: help.c:564 msgid "Available help:\n" msgstr "Доступна довідка:\n" -#: help.c:652 +#: help.c:659 #, c-format msgid "Command: %s\n" "Description: %s\n" @@ -3800,7 +3836,7 @@ msgstr "Команда: %s\n" "%s\n\n" "URL: %s\n\n" -#: help.c:675 +#: help.c:682 #, c-format msgid "No help available for \"%s\".\n" "Try \\h with no arguments to see available help.\n" @@ -3921,2300 +3957,2305 @@ msgstr "%s: бракує пам'яті" #: sql_help.c:35 sql_help.c:38 sql_help.c:41 sql_help.c:65 sql_help.c:66 #: sql_help.c:68 sql_help.c:70 sql_help.c:81 sql_help.c:83 sql_help.c:85 #: sql_help.c:111 sql_help.c:117 sql_help.c:119 sql_help.c:121 sql_help.c:123 -#: sql_help.c:126 sql_help.c:128 sql_help.c:130 sql_help.c:235 sql_help.c:237 -#: sql_help.c:238 sql_help.c:240 sql_help.c:242 sql_help.c:245 sql_help.c:247 -#: sql_help.c:249 sql_help.c:251 sql_help.c:263 sql_help.c:264 sql_help.c:265 -#: sql_help.c:267 sql_help.c:316 sql_help.c:318 sql_help.c:320 sql_help.c:322 -#: sql_help.c:391 sql_help.c:396 sql_help.c:398 sql_help.c:440 sql_help.c:442 -#: sql_help.c:445 sql_help.c:447 sql_help.c:516 sql_help.c:521 sql_help.c:526 -#: sql_help.c:531 sql_help.c:536 sql_help.c:590 sql_help.c:592 sql_help.c:594 -#: sql_help.c:596 sql_help.c:598 sql_help.c:601 sql_help.c:603 sql_help.c:606 -#: sql_help.c:617 sql_help.c:619 sql_help.c:662 sql_help.c:664 sql_help.c:666 -#: sql_help.c:669 sql_help.c:671 sql_help.c:673 sql_help.c:709 sql_help.c:713 -#: sql_help.c:717 sql_help.c:736 sql_help.c:739 sql_help.c:742 sql_help.c:771 -#: sql_help.c:783 sql_help.c:791 sql_help.c:794 sql_help.c:797 sql_help.c:812 -#: sql_help.c:815 sql_help.c:844 sql_help.c:849 sql_help.c:854 sql_help.c:859 -#: sql_help.c:864 sql_help.c:886 sql_help.c:888 sql_help.c:890 sql_help.c:892 -#: sql_help.c:895 sql_help.c:897 sql_help.c:939 sql_help.c:984 sql_help.c:989 -#: sql_help.c:994 sql_help.c:999 sql_help.c:1004 sql_help.c:1023 -#: sql_help.c:1034 sql_help.c:1036 sql_help.c:1055 sql_help.c:1065 -#: sql_help.c:1067 sql_help.c:1069 sql_help.c:1081 sql_help.c:1085 -#: sql_help.c:1087 sql_help.c:1099 sql_help.c:1101 sql_help.c:1103 -#: sql_help.c:1105 sql_help.c:1123 sql_help.c:1125 sql_help.c:1129 -#: sql_help.c:1133 sql_help.c:1137 sql_help.c:1140 sql_help.c:1141 -#: sql_help.c:1142 sql_help.c:1145 sql_help.c:1147 sql_help.c:1282 -#: sql_help.c:1284 sql_help.c:1287 sql_help.c:1290 sql_help.c:1292 -#: sql_help.c:1294 sql_help.c:1297 sql_help.c:1300 sql_help.c:1413 -#: sql_help.c:1415 sql_help.c:1417 sql_help.c:1420 sql_help.c:1441 -#: sql_help.c:1444 sql_help.c:1447 sql_help.c:1450 sql_help.c:1454 -#: sql_help.c:1456 sql_help.c:1458 sql_help.c:1460 sql_help.c:1474 -#: sql_help.c:1477 sql_help.c:1479 sql_help.c:1481 sql_help.c:1491 -#: sql_help.c:1493 sql_help.c:1503 sql_help.c:1505 sql_help.c:1515 -#: sql_help.c:1518 sql_help.c:1541 sql_help.c:1543 sql_help.c:1545 -#: sql_help.c:1547 sql_help.c:1550 sql_help.c:1552 sql_help.c:1555 -#: sql_help.c:1558 sql_help.c:1609 sql_help.c:1652 sql_help.c:1655 -#: sql_help.c:1657 sql_help.c:1659 sql_help.c:1662 sql_help.c:1664 -#: sql_help.c:1666 sql_help.c:1669 sql_help.c:1719 sql_help.c:1735 -#: sql_help.c:1966 sql_help.c:2035 sql_help.c:2054 sql_help.c:2067 -#: sql_help.c:2124 sql_help.c:2131 sql_help.c:2141 sql_help.c:2162 -#: sql_help.c:2188 sql_help.c:2206 sql_help.c:2234 sql_help.c:2345 -#: sql_help.c:2391 sql_help.c:2415 sql_help.c:2438 sql_help.c:2442 -#: sql_help.c:2476 sql_help.c:2496 sql_help.c:2518 sql_help.c:2532 -#: sql_help.c:2553 sql_help.c:2577 sql_help.c:2607 sql_help.c:2632 -#: sql_help.c:2679 sql_help.c:2967 sql_help.c:2980 sql_help.c:2997 -#: sql_help.c:3013 sql_help.c:3053 sql_help.c:3107 sql_help.c:3111 -#: sql_help.c:3113 sql_help.c:3120 sql_help.c:3139 sql_help.c:3166 -#: sql_help.c:3201 sql_help.c:3213 sql_help.c:3222 sql_help.c:3266 -#: sql_help.c:3280 sql_help.c:3308 sql_help.c:3316 sql_help.c:3328 -#: sql_help.c:3338 sql_help.c:3346 sql_help.c:3354 sql_help.c:3362 -#: sql_help.c:3370 sql_help.c:3379 sql_help.c:3390 sql_help.c:3398 -#: sql_help.c:3406 sql_help.c:3414 sql_help.c:3422 sql_help.c:3432 -#: sql_help.c:3441 sql_help.c:3450 sql_help.c:3458 sql_help.c:3468 -#: sql_help.c:3479 sql_help.c:3487 sql_help.c:3496 sql_help.c:3507 -#: sql_help.c:3516 sql_help.c:3524 sql_help.c:3532 sql_help.c:3540 -#: sql_help.c:3548 sql_help.c:3556 sql_help.c:3564 sql_help.c:3572 -#: sql_help.c:3580 sql_help.c:3588 sql_help.c:3596 sql_help.c:3613 -#: sql_help.c:3622 sql_help.c:3630 sql_help.c:3647 sql_help.c:3662 -#: sql_help.c:3964 sql_help.c:4015 sql_help.c:4044 sql_help.c:4059 -#: sql_help.c:4552 sql_help.c:4600 sql_help.c:4758 +#: sql_help.c:126 sql_help.c:128 sql_help.c:130 sql_help.c:242 sql_help.c:244 +#: sql_help.c:245 sql_help.c:247 sql_help.c:249 sql_help.c:252 sql_help.c:254 +#: sql_help.c:256 sql_help.c:258 sql_help.c:273 sql_help.c:274 sql_help.c:275 +#: sql_help.c:277 sql_help.c:326 sql_help.c:328 sql_help.c:330 sql_help.c:332 +#: sql_help.c:401 sql_help.c:406 sql_help.c:408 sql_help.c:450 sql_help.c:452 +#: sql_help.c:455 sql_help.c:457 sql_help.c:526 sql_help.c:531 sql_help.c:536 +#: sql_help.c:541 sql_help.c:546 sql_help.c:600 sql_help.c:602 sql_help.c:604 +#: sql_help.c:606 sql_help.c:608 sql_help.c:611 sql_help.c:613 sql_help.c:616 +#: sql_help.c:627 sql_help.c:629 sql_help.c:672 sql_help.c:674 sql_help.c:676 +#: sql_help.c:679 sql_help.c:681 sql_help.c:683 sql_help.c:719 sql_help.c:723 +#: sql_help.c:727 sql_help.c:746 sql_help.c:749 sql_help.c:752 sql_help.c:781 +#: sql_help.c:793 sql_help.c:801 sql_help.c:804 sql_help.c:807 sql_help.c:822 +#: sql_help.c:825 sql_help.c:854 sql_help.c:859 sql_help.c:864 sql_help.c:869 +#: sql_help.c:874 sql_help.c:896 sql_help.c:898 sql_help.c:900 sql_help.c:902 +#: sql_help.c:905 sql_help.c:907 sql_help.c:949 sql_help.c:994 sql_help.c:999 +#: sql_help.c:1004 sql_help.c:1009 sql_help.c:1014 sql_help.c:1033 +#: sql_help.c:1044 sql_help.c:1046 sql_help.c:1065 sql_help.c:1075 +#: sql_help.c:1077 sql_help.c:1079 sql_help.c:1091 sql_help.c:1095 +#: sql_help.c:1097 sql_help.c:1109 sql_help.c:1111 sql_help.c:1113 +#: sql_help.c:1115 sql_help.c:1133 sql_help.c:1135 sql_help.c:1139 +#: sql_help.c:1143 sql_help.c:1147 sql_help.c:1150 sql_help.c:1151 +#: sql_help.c:1152 sql_help.c:1155 sql_help.c:1157 sql_help.c:1291 +#: sql_help.c:1293 sql_help.c:1296 sql_help.c:1299 sql_help.c:1301 +#: sql_help.c:1303 sql_help.c:1306 sql_help.c:1309 sql_help.c:1425 +#: sql_help.c:1427 sql_help.c:1429 sql_help.c:1432 sql_help.c:1453 +#: sql_help.c:1456 sql_help.c:1459 sql_help.c:1462 sql_help.c:1466 +#: sql_help.c:1468 sql_help.c:1470 sql_help.c:1472 sql_help.c:1486 +#: sql_help.c:1489 sql_help.c:1491 sql_help.c:1493 sql_help.c:1503 +#: sql_help.c:1505 sql_help.c:1515 sql_help.c:1517 sql_help.c:1527 +#: sql_help.c:1530 sql_help.c:1553 sql_help.c:1555 sql_help.c:1557 +#: sql_help.c:1559 sql_help.c:1562 sql_help.c:1564 sql_help.c:1567 +#: sql_help.c:1570 sql_help.c:1621 sql_help.c:1664 sql_help.c:1667 +#: sql_help.c:1669 sql_help.c:1671 sql_help.c:1674 sql_help.c:1676 +#: sql_help.c:1678 sql_help.c:1681 sql_help.c:1731 sql_help.c:1747 +#: sql_help.c:1978 sql_help.c:2047 sql_help.c:2066 sql_help.c:2079 +#: sql_help.c:2136 sql_help.c:2143 sql_help.c:2153 sql_help.c:2174 +#: sql_help.c:2200 sql_help.c:2218 sql_help.c:2246 sql_help.c:2357 +#: sql_help.c:2403 sql_help.c:2427 sql_help.c:2450 sql_help.c:2454 +#: sql_help.c:2488 sql_help.c:2508 sql_help.c:2530 sql_help.c:2544 +#: sql_help.c:2565 sql_help.c:2589 sql_help.c:2619 sql_help.c:2644 +#: sql_help.c:2691 sql_help.c:2982 sql_help.c:2995 sql_help.c:3012 +#: sql_help.c:3028 sql_help.c:3068 sql_help.c:3122 sql_help.c:3126 +#: sql_help.c:3128 sql_help.c:3135 sql_help.c:3154 sql_help.c:3181 +#: sql_help.c:3216 sql_help.c:3228 sql_help.c:3237 sql_help.c:3281 +#: sql_help.c:3295 sql_help.c:3323 sql_help.c:3331 sql_help.c:3343 +#: sql_help.c:3353 sql_help.c:3361 sql_help.c:3369 sql_help.c:3377 +#: sql_help.c:3385 sql_help.c:3394 sql_help.c:3405 sql_help.c:3413 +#: sql_help.c:3421 sql_help.c:3429 sql_help.c:3437 sql_help.c:3447 +#: sql_help.c:3456 sql_help.c:3465 sql_help.c:3473 sql_help.c:3483 +#: sql_help.c:3494 sql_help.c:3502 sql_help.c:3511 sql_help.c:3522 +#: sql_help.c:3531 sql_help.c:3539 sql_help.c:3547 sql_help.c:3555 +#: sql_help.c:3563 sql_help.c:3571 sql_help.c:3579 sql_help.c:3587 +#: sql_help.c:3595 sql_help.c:3603 sql_help.c:3611 sql_help.c:3628 +#: sql_help.c:3637 sql_help.c:3645 sql_help.c:3662 sql_help.c:3677 +#: sql_help.c:3979 sql_help.c:4030 sql_help.c:4059 sql_help.c:4074 +#: sql_help.c:4567 sql_help.c:4615 sql_help.c:4773 msgid "name" msgstr "назва" -#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:327 sql_help.c:1816 -#: sql_help.c:3281 sql_help.c:4320 +#: sql_help.c:36 sql_help.c:39 sql_help.c:42 sql_help.c:337 sql_help.c:1828 +#: sql_help.c:3296 sql_help.c:4335 msgid "aggregate_signature" msgstr "сигнатура_агр_функції" -#: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:250 -#: sql_help.c:268 sql_help.c:399 sql_help.c:446 sql_help.c:525 sql_help.c:573 -#: sql_help.c:591 sql_help.c:618 sql_help.c:670 sql_help.c:738 sql_help.c:793 -#: sql_help.c:814 sql_help.c:853 sql_help.c:898 sql_help.c:940 sql_help.c:993 -#: sql_help.c:1025 sql_help.c:1035 sql_help.c:1068 sql_help.c:1088 -#: sql_help.c:1102 sql_help.c:1148 sql_help.c:1291 sql_help.c:1414 -#: sql_help.c:1457 sql_help.c:1478 sql_help.c:1492 sql_help.c:1504 -#: sql_help.c:1517 sql_help.c:1544 sql_help.c:1610 sql_help.c:1663 +#: sql_help.c:37 sql_help.c:67 sql_help.c:82 sql_help.c:118 sql_help.c:257 +#: sql_help.c:278 sql_help.c:409 sql_help.c:456 sql_help.c:535 sql_help.c:583 +#: sql_help.c:601 sql_help.c:628 sql_help.c:680 sql_help.c:748 sql_help.c:803 +#: sql_help.c:824 sql_help.c:863 sql_help.c:908 sql_help.c:950 sql_help.c:1003 +#: sql_help.c:1035 sql_help.c:1045 sql_help.c:1078 sql_help.c:1098 +#: sql_help.c:1112 sql_help.c:1158 sql_help.c:1300 sql_help.c:1426 +#: sql_help.c:1469 sql_help.c:1490 sql_help.c:1504 sql_help.c:1516 +#: sql_help.c:1529 sql_help.c:1556 sql_help.c:1622 sql_help.c:1675 msgid "new_name" msgstr "нова_назва" -#: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:248 -#: sql_help.c:266 sql_help.c:397 sql_help.c:482 sql_help.c:530 sql_help.c:620 -#: sql_help.c:629 sql_help.c:692 sql_help.c:712 sql_help.c:741 sql_help.c:796 -#: sql_help.c:858 sql_help.c:896 sql_help.c:998 sql_help.c:1037 sql_help.c:1066 -#: sql_help.c:1086 sql_help.c:1100 sql_help.c:1146 sql_help.c:1354 -#: sql_help.c:1416 sql_help.c:1459 sql_help.c:1480 sql_help.c:1542 -#: sql_help.c:1658 sql_help.c:2953 +#: sql_help.c:40 sql_help.c:69 sql_help.c:84 sql_help.c:120 sql_help.c:255 +#: sql_help.c:276 sql_help.c:407 sql_help.c:492 sql_help.c:540 sql_help.c:630 +#: sql_help.c:639 sql_help.c:702 sql_help.c:722 sql_help.c:751 sql_help.c:806 +#: sql_help.c:868 sql_help.c:906 sql_help.c:1008 sql_help.c:1047 +#: sql_help.c:1076 sql_help.c:1096 sql_help.c:1110 sql_help.c:1156 +#: sql_help.c:1363 sql_help.c:1428 sql_help.c:1471 sql_help.c:1492 +#: sql_help.c:1554 sql_help.c:1670 sql_help.c:2968 msgid "new_owner" msgstr "новий_власник" -#: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:252 sql_help.c:319 -#: sql_help.c:448 sql_help.c:535 sql_help.c:672 sql_help.c:716 sql_help.c:744 -#: sql_help.c:799 sql_help.c:863 sql_help.c:1003 sql_help.c:1070 -#: sql_help.c:1104 sql_help.c:1293 sql_help.c:1461 sql_help.c:1482 -#: sql_help.c:1494 sql_help.c:1506 sql_help.c:1546 sql_help.c:1665 +#: sql_help.c:43 sql_help.c:71 sql_help.c:86 sql_help.c:259 sql_help.c:329 +#: sql_help.c:458 sql_help.c:545 sql_help.c:682 sql_help.c:726 sql_help.c:754 +#: sql_help.c:809 sql_help.c:873 sql_help.c:1013 sql_help.c:1080 +#: sql_help.c:1114 sql_help.c:1302 sql_help.c:1473 sql_help.c:1494 +#: sql_help.c:1506 sql_help.c:1518 sql_help.c:1558 sql_help.c:1677 msgid "new_schema" msgstr "нова_схема" -#: sql_help.c:44 sql_help.c:1880 sql_help.c:3282 sql_help.c:4349 +#: sql_help.c:44 sql_help.c:1892 sql_help.c:3297 sql_help.c:4364 msgid "where aggregate_signature is:" msgstr "де сигнатура_агр_функції:" -#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:337 sql_help.c:350 -#: sql_help.c:354 sql_help.c:370 sql_help.c:373 sql_help.c:376 sql_help.c:517 -#: sql_help.c:522 sql_help.c:527 sql_help.c:532 sql_help.c:537 sql_help.c:845 -#: sql_help.c:850 sql_help.c:855 sql_help.c:860 sql_help.c:865 sql_help.c:985 -#: sql_help.c:990 sql_help.c:995 sql_help.c:1000 sql_help.c:1005 -#: sql_help.c:1834 sql_help.c:1851 sql_help.c:1857 sql_help.c:1881 -#: sql_help.c:1884 sql_help.c:1887 sql_help.c:2036 sql_help.c:2055 -#: sql_help.c:2058 sql_help.c:2346 sql_help.c:2554 sql_help.c:3283 -#: sql_help.c:3286 sql_help.c:3289 sql_help.c:3380 sql_help.c:3469 -#: sql_help.c:3497 sql_help.c:3842 sql_help.c:4222 sql_help.c:4326 -#: sql_help.c:4333 sql_help.c:4339 sql_help.c:4350 sql_help.c:4353 -#: sql_help.c:4356 +#: sql_help.c:45 sql_help.c:48 sql_help.c:51 sql_help.c:347 sql_help.c:360 +#: sql_help.c:364 sql_help.c:380 sql_help.c:383 sql_help.c:386 sql_help.c:527 +#: sql_help.c:532 sql_help.c:537 sql_help.c:542 sql_help.c:547 sql_help.c:855 +#: sql_help.c:860 sql_help.c:865 sql_help.c:870 sql_help.c:875 sql_help.c:995 +#: sql_help.c:1000 sql_help.c:1005 sql_help.c:1010 sql_help.c:1015 +#: sql_help.c:1846 sql_help.c:1863 sql_help.c:1869 sql_help.c:1893 +#: sql_help.c:1896 sql_help.c:1899 sql_help.c:2048 sql_help.c:2067 +#: sql_help.c:2070 sql_help.c:2358 sql_help.c:2566 sql_help.c:3298 +#: sql_help.c:3301 sql_help.c:3304 sql_help.c:3395 sql_help.c:3484 +#: sql_help.c:3512 sql_help.c:3857 sql_help.c:4237 sql_help.c:4341 +#: sql_help.c:4348 sql_help.c:4354 sql_help.c:4365 sql_help.c:4368 +#: sql_help.c:4371 msgid "argmode" msgstr "режим_аргументу" -#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:338 sql_help.c:351 -#: sql_help.c:355 sql_help.c:371 sql_help.c:374 sql_help.c:377 sql_help.c:518 -#: sql_help.c:523 sql_help.c:528 sql_help.c:533 sql_help.c:538 sql_help.c:846 -#: sql_help.c:851 sql_help.c:856 sql_help.c:861 sql_help.c:866 sql_help.c:986 -#: sql_help.c:991 sql_help.c:996 sql_help.c:1001 sql_help.c:1006 -#: sql_help.c:1835 sql_help.c:1852 sql_help.c:1858 sql_help.c:1882 -#: sql_help.c:1885 sql_help.c:1888 sql_help.c:2037 sql_help.c:2056 -#: sql_help.c:2059 sql_help.c:2347 sql_help.c:2555 sql_help.c:3284 -#: sql_help.c:3287 sql_help.c:3290 sql_help.c:3381 sql_help.c:3470 -#: sql_help.c:3498 sql_help.c:4327 sql_help.c:4334 sql_help.c:4340 -#: sql_help.c:4351 sql_help.c:4354 sql_help.c:4357 +#: sql_help.c:46 sql_help.c:49 sql_help.c:52 sql_help.c:348 sql_help.c:361 +#: sql_help.c:365 sql_help.c:381 sql_help.c:384 sql_help.c:387 sql_help.c:528 +#: sql_help.c:533 sql_help.c:538 sql_help.c:543 sql_help.c:548 sql_help.c:856 +#: sql_help.c:861 sql_help.c:866 sql_help.c:871 sql_help.c:876 sql_help.c:996 +#: sql_help.c:1001 sql_help.c:1006 sql_help.c:1011 sql_help.c:1016 +#: sql_help.c:1847 sql_help.c:1864 sql_help.c:1870 sql_help.c:1894 +#: sql_help.c:1897 sql_help.c:1900 sql_help.c:2049 sql_help.c:2068 +#: sql_help.c:2071 sql_help.c:2359 sql_help.c:2567 sql_help.c:3299 +#: sql_help.c:3302 sql_help.c:3305 sql_help.c:3396 sql_help.c:3485 +#: sql_help.c:3513 sql_help.c:4342 sql_help.c:4349 sql_help.c:4355 +#: sql_help.c:4366 sql_help.c:4369 sql_help.c:4372 msgid "argname" msgstr "ім'я_аргументу" -#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:339 sql_help.c:352 -#: sql_help.c:356 sql_help.c:372 sql_help.c:375 sql_help.c:378 sql_help.c:519 -#: sql_help.c:524 sql_help.c:529 sql_help.c:534 sql_help.c:539 sql_help.c:847 -#: sql_help.c:852 sql_help.c:857 sql_help.c:862 sql_help.c:867 sql_help.c:987 -#: sql_help.c:992 sql_help.c:997 sql_help.c:1002 sql_help.c:1007 -#: sql_help.c:1836 sql_help.c:1853 sql_help.c:1859 sql_help.c:1883 -#: sql_help.c:1886 sql_help.c:1889 sql_help.c:2348 sql_help.c:2556 -#: sql_help.c:3285 sql_help.c:3288 sql_help.c:3291 sql_help.c:3382 -#: sql_help.c:3471 sql_help.c:3499 sql_help.c:4328 sql_help.c:4335 -#: sql_help.c:4341 sql_help.c:4352 sql_help.c:4355 sql_help.c:4358 +#: sql_help.c:47 sql_help.c:50 sql_help.c:53 sql_help.c:349 sql_help.c:362 +#: sql_help.c:366 sql_help.c:382 sql_help.c:385 sql_help.c:388 sql_help.c:529 +#: sql_help.c:534 sql_help.c:539 sql_help.c:544 sql_help.c:549 sql_help.c:857 +#: sql_help.c:862 sql_help.c:867 sql_help.c:872 sql_help.c:877 sql_help.c:997 +#: sql_help.c:1002 sql_help.c:1007 sql_help.c:1012 sql_help.c:1017 +#: sql_help.c:1848 sql_help.c:1865 sql_help.c:1871 sql_help.c:1895 +#: sql_help.c:1898 sql_help.c:1901 sql_help.c:2360 sql_help.c:2568 +#: sql_help.c:3300 sql_help.c:3303 sql_help.c:3306 sql_help.c:3397 +#: sql_help.c:3486 sql_help.c:3514 sql_help.c:4343 sql_help.c:4350 +#: sql_help.c:4356 sql_help.c:4367 sql_help.c:4370 sql_help.c:4373 msgid "argtype" msgstr "тип_аргументу" -#: sql_help.c:112 sql_help.c:394 sql_help.c:471 sql_help.c:483 sql_help.c:934 -#: sql_help.c:1083 sql_help.c:1475 sql_help.c:1604 sql_help.c:1636 -#: sql_help.c:1688 sql_help.c:1751 sql_help.c:1937 sql_help.c:1944 -#: sql_help.c:2237 sql_help.c:2287 sql_help.c:2294 sql_help.c:2303 -#: sql_help.c:2392 sql_help.c:2608 sql_help.c:2701 sql_help.c:2982 -#: sql_help.c:3167 sql_help.c:3189 sql_help.c:3329 sql_help.c:3684 -#: sql_help.c:3883 sql_help.c:4058 sql_help.c:4821 +#: sql_help.c:112 sql_help.c:404 sql_help.c:481 sql_help.c:493 sql_help.c:944 +#: sql_help.c:1093 sql_help.c:1487 sql_help.c:1616 sql_help.c:1648 +#: sql_help.c:1700 sql_help.c:1763 sql_help.c:1949 sql_help.c:1956 +#: sql_help.c:2249 sql_help.c:2299 sql_help.c:2306 sql_help.c:2315 +#: sql_help.c:2404 sql_help.c:2620 sql_help.c:2713 sql_help.c:2997 +#: sql_help.c:3182 sql_help.c:3204 sql_help.c:3344 sql_help.c:3699 +#: sql_help.c:3898 sql_help.c:4073 sql_help.c:4836 msgid "option" msgstr "параметр" -#: sql_help.c:113 sql_help.c:935 sql_help.c:1605 sql_help.c:2393 -#: sql_help.c:2609 sql_help.c:3168 sql_help.c:3330 +#: sql_help.c:113 sql_help.c:945 sql_help.c:1617 sql_help.c:2405 +#: sql_help.c:2621 sql_help.c:3183 sql_help.c:3345 msgid "where option can be:" msgstr "де параметр може бути:" -#: sql_help.c:114 sql_help.c:2170 +#: sql_help.c:114 sql_help.c:2182 msgid "allowconn" msgstr "дозвол_підкл" -#: sql_help.c:115 sql_help.c:936 sql_help.c:1606 sql_help.c:2171 -#: sql_help.c:2394 sql_help.c:2610 sql_help.c:3169 +#: sql_help.c:115 sql_help.c:946 sql_help.c:1618 sql_help.c:2183 +#: sql_help.c:2406 sql_help.c:2622 sql_help.c:3184 msgid "connlimit" msgstr "ліміт_підключень" -#: sql_help.c:116 sql_help.c:2172 +#: sql_help.c:116 sql_help.c:2184 msgid "istemplate" msgstr "чи_шаблон" -#: sql_help.c:122 sql_help.c:608 sql_help.c:675 sql_help.c:688 sql_help.c:1296 -#: sql_help.c:1347 sql_help.c:4062 +#: sql_help.c:122 sql_help.c:618 sql_help.c:685 sql_help.c:698 sql_help.c:1305 +#: sql_help.c:1356 sql_help.c:4077 msgid "new_tablespace" msgstr "новий_табл_простір" -#: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:545 sql_help.c:547 -#: sql_help.c:548 sql_help.c:870 sql_help.c:872 sql_help.c:873 sql_help.c:943 -#: sql_help.c:947 sql_help.c:950 sql_help.c:1012 sql_help.c:1014 -#: sql_help.c:1015 sql_help.c:1159 sql_help.c:1162 sql_help.c:1613 -#: sql_help.c:1617 sql_help.c:1620 sql_help.c:2358 sql_help.c:2560 -#: sql_help.c:4080 sql_help.c:4540 +#: sql_help.c:124 sql_help.c:127 sql_help.c:129 sql_help.c:555 sql_help.c:557 +#: sql_help.c:558 sql_help.c:880 sql_help.c:882 sql_help.c:883 sql_help.c:953 +#: sql_help.c:957 sql_help.c:960 sql_help.c:1022 sql_help.c:1024 +#: sql_help.c:1025 sql_help.c:1169 sql_help.c:1171 sql_help.c:1625 +#: sql_help.c:1629 sql_help.c:1632 sql_help.c:2370 sql_help.c:2572 +#: sql_help.c:4095 sql_help.c:4555 msgid "configuration_parameter" msgstr "параметр_конфігурації" -#: sql_help.c:125 sql_help.c:395 sql_help.c:466 sql_help.c:472 sql_help.c:484 -#: sql_help.c:546 sql_help.c:600 sql_help.c:681 sql_help.c:690 sql_help.c:871 -#: sql_help.c:894 sql_help.c:944 sql_help.c:1013 sql_help.c:1084 -#: sql_help.c:1128 sql_help.c:1132 sql_help.c:1136 sql_help.c:1139 -#: sql_help.c:1144 sql_help.c:1160 sql_help.c:1161 sql_help.c:1327 -#: sql_help.c:1349 sql_help.c:1397 sql_help.c:1419 sql_help.c:1476 -#: sql_help.c:1560 sql_help.c:1614 sql_help.c:1637 sql_help.c:2238 -#: sql_help.c:2288 sql_help.c:2295 sql_help.c:2304 sql_help.c:2359 -#: sql_help.c:2360 sql_help.c:2423 sql_help.c:2426 sql_help.c:2460 -#: sql_help.c:2561 sql_help.c:2562 sql_help.c:2580 sql_help.c:2702 -#: sql_help.c:2741 sql_help.c:2847 sql_help.c:2860 sql_help.c:2874 -#: sql_help.c:2915 sql_help.c:2939 sql_help.c:2956 sql_help.c:2983 -#: sql_help.c:3190 sql_help.c:3884 sql_help.c:4541 sql_help.c:4542 -#: sql_help.c:4543 sql_help.c:4544 +#: sql_help.c:125 sql_help.c:405 sql_help.c:476 sql_help.c:482 sql_help.c:494 +#: sql_help.c:556 sql_help.c:610 sql_help.c:691 sql_help.c:700 sql_help.c:881 +#: sql_help.c:904 sql_help.c:954 sql_help.c:1023 sql_help.c:1094 +#: sql_help.c:1138 sql_help.c:1142 sql_help.c:1146 sql_help.c:1149 +#: sql_help.c:1154 sql_help.c:1170 sql_help.c:1336 sql_help.c:1358 +#: sql_help.c:1406 sql_help.c:1414 sql_help.c:1431 sql_help.c:1488 +#: sql_help.c:1572 sql_help.c:1626 sql_help.c:1649 sql_help.c:2250 +#: sql_help.c:2300 sql_help.c:2307 sql_help.c:2316 sql_help.c:2371 +#: sql_help.c:2372 sql_help.c:2435 sql_help.c:2438 sql_help.c:2472 +#: sql_help.c:2573 sql_help.c:2574 sql_help.c:2592 sql_help.c:2714 +#: sql_help.c:2753 sql_help.c:2859 sql_help.c:2872 sql_help.c:2886 +#: sql_help.c:2927 sql_help.c:2935 sql_help.c:2954 sql_help.c:2971 +#: sql_help.c:2998 sql_help.c:3205 sql_help.c:3899 sql_help.c:4556 +#: sql_help.c:4557 sql_help.c:4558 sql_help.c:4559 msgid "value" msgstr "значення" -#: sql_help.c:197 +#: sql_help.c:199 msgid "target_role" msgstr "цільова_роль" -#: sql_help.c:198 sql_help.c:2222 sql_help.c:2657 sql_help.c:2662 -#: sql_help.c:3817 sql_help.c:3826 sql_help.c:3845 sql_help.c:3854 -#: sql_help.c:4197 sql_help.c:4206 sql_help.c:4225 sql_help.c:4234 +#: sql_help.c:200 sql_help.c:2234 sql_help.c:2669 sql_help.c:2674 +#: sql_help.c:3832 sql_help.c:3841 sql_help.c:3860 sql_help.c:3869 +#: sql_help.c:4212 sql_help.c:4221 sql_help.c:4240 sql_help.c:4249 msgid "schema_name" msgstr "ім'я_схеми" -#: sql_help.c:199 +#: sql_help.c:201 msgid "abbreviated_grant_or_revoke" msgstr "скорочено_GRANT_або_REVOKE" -#: sql_help.c:200 +#: sql_help.c:202 msgid "where abbreviated_grant_or_revoke is one of:" msgstr "де скорочено_GRANT_або_REVOKE є одним з:" -#: sql_help.c:201 sql_help.c:202 sql_help.c:203 sql_help.c:204 sql_help.c:205 -#: sql_help.c:206 sql_help.c:207 sql_help.c:208 sql_help.c:209 sql_help.c:210 -#: sql_help.c:571 sql_help.c:607 sql_help.c:674 sql_help.c:817 sql_help.c:954 -#: sql_help.c:1295 sql_help.c:1624 sql_help.c:2397 sql_help.c:2398 -#: sql_help.c:2399 sql_help.c:2400 sql_help.c:2401 sql_help.c:2534 -#: sql_help.c:2613 sql_help.c:2614 sql_help.c:2615 sql_help.c:2616 -#: sql_help.c:2617 sql_help.c:3172 sql_help.c:3173 sql_help.c:3174 -#: sql_help.c:3175 sql_help.c:3176 sql_help.c:3863 sql_help.c:3867 -#: sql_help.c:4243 sql_help.c:4247 sql_help.c:4562 +#: sql_help.c:203 sql_help.c:204 sql_help.c:205 sql_help.c:206 sql_help.c:207 +#: sql_help.c:208 sql_help.c:209 sql_help.c:210 sql_help.c:211 sql_help.c:212 +#: sql_help.c:581 sql_help.c:617 sql_help.c:684 sql_help.c:827 sql_help.c:964 +#: sql_help.c:1304 sql_help.c:1636 sql_help.c:2409 sql_help.c:2410 +#: sql_help.c:2411 sql_help.c:2412 sql_help.c:2413 sql_help.c:2546 +#: sql_help.c:2625 sql_help.c:2626 sql_help.c:2627 sql_help.c:2628 +#: sql_help.c:2629 sql_help.c:3187 sql_help.c:3188 sql_help.c:3189 +#: sql_help.c:3190 sql_help.c:3191 sql_help.c:3878 sql_help.c:3882 +#: sql_help.c:4258 sql_help.c:4262 sql_help.c:4577 msgid "role_name" msgstr "ім'я_ролі" -#: sql_help.c:236 sql_help.c:459 sql_help.c:1311 sql_help.c:1313 -#: sql_help.c:1364 sql_help.c:1376 sql_help.c:1401 sql_help.c:1654 -#: sql_help.c:2191 sql_help.c:2195 sql_help.c:2307 sql_help.c:2312 -#: sql_help.c:2419 sql_help.c:2718 sql_help.c:2723 sql_help.c:2725 -#: sql_help.c:2842 sql_help.c:2855 sql_help.c:2869 sql_help.c:2878 -#: sql_help.c:2890 sql_help.c:2919 sql_help.c:3915 sql_help.c:3930 -#: sql_help.c:3932 sql_help.c:4413 sql_help.c:4414 sql_help.c:4423 -#: sql_help.c:4470 sql_help.c:4471 sql_help.c:4472 sql_help.c:4473 -#: sql_help.c:4474 sql_help.c:4475 sql_help.c:4515 sql_help.c:4516 -#: sql_help.c:4521 sql_help.c:4526 sql_help.c:4670 sql_help.c:4671 -#: sql_help.c:4680 sql_help.c:4727 sql_help.c:4728 sql_help.c:4729 -#: sql_help.c:4730 sql_help.c:4731 sql_help.c:4732 sql_help.c:4786 -#: sql_help.c:4788 sql_help.c:4848 sql_help.c:4908 sql_help.c:4909 -#: sql_help.c:4918 sql_help.c:4965 sql_help.c:4966 sql_help.c:4967 -#: sql_help.c:4968 sql_help.c:4969 sql_help.c:4970 +#: sql_help.c:243 sql_help.c:262 sql_help.c:469 sql_help.c:1320 sql_help.c:1322 +#: sql_help.c:1373 sql_help.c:1385 sql_help.c:1410 sql_help.c:1666 +#: sql_help.c:2203 sql_help.c:2207 sql_help.c:2319 sql_help.c:2324 +#: sql_help.c:2431 sql_help.c:2730 sql_help.c:2735 sql_help.c:2737 +#: sql_help.c:2854 sql_help.c:2867 sql_help.c:2881 sql_help.c:2890 +#: sql_help.c:2902 sql_help.c:2931 sql_help.c:3930 sql_help.c:3945 +#: sql_help.c:3947 sql_help.c:4428 sql_help.c:4429 sql_help.c:4438 +#: sql_help.c:4485 sql_help.c:4486 sql_help.c:4487 sql_help.c:4488 +#: sql_help.c:4489 sql_help.c:4490 sql_help.c:4530 sql_help.c:4531 +#: sql_help.c:4536 sql_help.c:4541 sql_help.c:4685 sql_help.c:4686 +#: sql_help.c:4695 sql_help.c:4742 sql_help.c:4743 sql_help.c:4744 +#: sql_help.c:4745 sql_help.c:4746 sql_help.c:4747 sql_help.c:4801 +#: sql_help.c:4803 sql_help.c:4863 sql_help.c:4923 sql_help.c:4924 +#: sql_help.c:4933 sql_help.c:4980 sql_help.c:4981 sql_help.c:4982 +#: sql_help.c:4983 sql_help.c:4984 sql_help.c:4985 msgid "expression" msgstr "вираз" -#: sql_help.c:239 +#: sql_help.c:246 msgid "domain_constraint" msgstr "обмеження_домену" -#: sql_help.c:241 sql_help.c:243 sql_help.c:246 sql_help.c:474 sql_help.c:475 -#: sql_help.c:1288 sql_help.c:1335 sql_help.c:1336 sql_help.c:1337 -#: sql_help.c:1363 sql_help.c:1375 sql_help.c:1392 sql_help.c:1822 -#: sql_help.c:1824 sql_help.c:2194 sql_help.c:2306 sql_help.c:2311 -#: sql_help.c:2877 sql_help.c:2889 sql_help.c:3927 +#: sql_help.c:248 sql_help.c:250 sql_help.c:253 sql_help.c:261 sql_help.c:484 +#: sql_help.c:485 sql_help.c:1297 sql_help.c:1344 sql_help.c:1345 +#: sql_help.c:1346 sql_help.c:1372 sql_help.c:1384 sql_help.c:1401 +#: sql_help.c:1834 sql_help.c:1836 sql_help.c:2206 sql_help.c:2318 +#: sql_help.c:2323 sql_help.c:2889 sql_help.c:2901 sql_help.c:3942 msgid "constraint_name" msgstr "ім'я_обмеження" -#: sql_help.c:244 sql_help.c:1289 +#: sql_help.c:251 sql_help.c:1298 msgid "new_constraint_name" msgstr "ім'я_нового_обмеження" -#: sql_help.c:317 sql_help.c:1082 +#: sql_help.c:260 +msgid "where domain_constraint is:" +msgstr "де обмеження_домену:" + +#: sql_help.c:327 sql_help.c:1092 msgid "new_version" msgstr "нова_версія" -#: sql_help.c:321 sql_help.c:323 +#: sql_help.c:331 sql_help.c:333 msgid "member_object" msgstr "елемент_об'єкт" -#: sql_help.c:324 +#: sql_help.c:334 msgid "where member_object is:" msgstr "де елемент_об'єкт є:" -#: sql_help.c:325 sql_help.c:330 sql_help.c:331 sql_help.c:332 sql_help.c:333 -#: sql_help.c:334 sql_help.c:335 sql_help.c:340 sql_help.c:344 sql_help.c:346 -#: sql_help.c:348 sql_help.c:357 sql_help.c:358 sql_help.c:359 sql_help.c:360 -#: sql_help.c:361 sql_help.c:362 sql_help.c:363 sql_help.c:364 sql_help.c:367 -#: sql_help.c:368 sql_help.c:1814 sql_help.c:1819 sql_help.c:1826 -#: sql_help.c:1827 sql_help.c:1828 sql_help.c:1829 sql_help.c:1830 -#: sql_help.c:1831 sql_help.c:1832 sql_help.c:1837 sql_help.c:1839 -#: sql_help.c:1843 sql_help.c:1845 sql_help.c:1849 sql_help.c:1854 -#: sql_help.c:1855 sql_help.c:1862 sql_help.c:1863 sql_help.c:1864 -#: sql_help.c:1865 sql_help.c:1866 sql_help.c:1867 sql_help.c:1868 -#: sql_help.c:1869 sql_help.c:1870 sql_help.c:1871 sql_help.c:1872 -#: sql_help.c:1877 sql_help.c:1878 sql_help.c:4316 sql_help.c:4321 -#: sql_help.c:4322 sql_help.c:4323 sql_help.c:4324 sql_help.c:4330 -#: sql_help.c:4331 sql_help.c:4336 sql_help.c:4337 sql_help.c:4342 -#: sql_help.c:4343 sql_help.c:4344 sql_help.c:4345 sql_help.c:4346 -#: sql_help.c:4347 +#: sql_help.c:335 sql_help.c:340 sql_help.c:341 sql_help.c:342 sql_help.c:343 +#: sql_help.c:344 sql_help.c:345 sql_help.c:350 sql_help.c:354 sql_help.c:356 +#: sql_help.c:358 sql_help.c:367 sql_help.c:368 sql_help.c:369 sql_help.c:370 +#: sql_help.c:371 sql_help.c:372 sql_help.c:373 sql_help.c:374 sql_help.c:377 +#: sql_help.c:378 sql_help.c:1826 sql_help.c:1831 sql_help.c:1838 +#: sql_help.c:1839 sql_help.c:1840 sql_help.c:1841 sql_help.c:1842 +#: sql_help.c:1843 sql_help.c:1844 sql_help.c:1849 sql_help.c:1851 +#: sql_help.c:1855 sql_help.c:1857 sql_help.c:1861 sql_help.c:1866 +#: sql_help.c:1867 sql_help.c:1874 sql_help.c:1875 sql_help.c:1876 +#: sql_help.c:1877 sql_help.c:1878 sql_help.c:1879 sql_help.c:1880 +#: sql_help.c:1881 sql_help.c:1882 sql_help.c:1883 sql_help.c:1884 +#: sql_help.c:1889 sql_help.c:1890 sql_help.c:4331 sql_help.c:4336 +#: sql_help.c:4337 sql_help.c:4338 sql_help.c:4339 sql_help.c:4345 +#: sql_help.c:4346 sql_help.c:4351 sql_help.c:4352 sql_help.c:4357 +#: sql_help.c:4358 sql_help.c:4359 sql_help.c:4360 sql_help.c:4361 +#: sql_help.c:4362 msgid "object_name" msgstr "ім'я_об'єкту" -#: sql_help.c:326 sql_help.c:1815 sql_help.c:4319 +#: sql_help.c:336 sql_help.c:1827 sql_help.c:4334 msgid "aggregate_name" msgstr "ім'я_агр_функції" -#: sql_help.c:328 sql_help.c:1817 sql_help.c:2101 sql_help.c:2105 -#: sql_help.c:2107 sql_help.c:3299 +#: sql_help.c:338 sql_help.c:1829 sql_help.c:2113 sql_help.c:2117 +#: sql_help.c:2119 sql_help.c:3314 msgid "source_type" msgstr "початковий_тип" -#: sql_help.c:329 sql_help.c:1818 sql_help.c:2102 sql_help.c:2106 -#: sql_help.c:2108 sql_help.c:3300 +#: sql_help.c:339 sql_help.c:1830 sql_help.c:2114 sql_help.c:2118 +#: sql_help.c:2120 sql_help.c:3315 msgid "target_type" msgstr "тип_цілі" -#: sql_help.c:336 sql_help.c:781 sql_help.c:1833 sql_help.c:2103 -#: sql_help.c:2144 sql_help.c:2210 sql_help.c:2477 sql_help.c:2508 -#: sql_help.c:3059 sql_help.c:4221 sql_help.c:4325 sql_help.c:4442 -#: sql_help.c:4446 sql_help.c:4450 sql_help.c:4453 sql_help.c:4699 -#: sql_help.c:4703 sql_help.c:4707 sql_help.c:4710 sql_help.c:4937 -#: sql_help.c:4941 sql_help.c:4945 sql_help.c:4948 +#: sql_help.c:346 sql_help.c:791 sql_help.c:1845 sql_help.c:2115 +#: sql_help.c:2156 sql_help.c:2222 sql_help.c:2489 sql_help.c:2520 +#: sql_help.c:3074 sql_help.c:4236 sql_help.c:4340 sql_help.c:4457 +#: sql_help.c:4461 sql_help.c:4465 sql_help.c:4468 sql_help.c:4714 +#: sql_help.c:4718 sql_help.c:4722 sql_help.c:4725 sql_help.c:4952 +#: sql_help.c:4956 sql_help.c:4960 sql_help.c:4963 msgid "function_name" msgstr "ім'я_функції" -#: sql_help.c:341 sql_help.c:774 sql_help.c:1840 sql_help.c:2501 +#: sql_help.c:351 sql_help.c:784 sql_help.c:1852 sql_help.c:2513 msgid "operator_name" msgstr "ім'я_оператора" -#: sql_help.c:342 sql_help.c:710 sql_help.c:714 sql_help.c:718 sql_help.c:1841 -#: sql_help.c:2478 sql_help.c:3423 +#: sql_help.c:352 sql_help.c:720 sql_help.c:724 sql_help.c:728 sql_help.c:1853 +#: sql_help.c:2490 sql_help.c:3438 msgid "left_type" msgstr "тип_ліворуч" -#: sql_help.c:343 sql_help.c:711 sql_help.c:715 sql_help.c:719 sql_help.c:1842 -#: sql_help.c:2479 sql_help.c:3424 +#: sql_help.c:353 sql_help.c:721 sql_help.c:725 sql_help.c:729 sql_help.c:1854 +#: sql_help.c:2491 sql_help.c:3439 msgid "right_type" msgstr "тип_праворуч" -#: sql_help.c:345 sql_help.c:347 sql_help.c:737 sql_help.c:740 sql_help.c:743 -#: sql_help.c:772 sql_help.c:784 sql_help.c:792 sql_help.c:795 sql_help.c:798 -#: sql_help.c:1381 sql_help.c:1844 sql_help.c:1846 sql_help.c:2498 -#: sql_help.c:2519 sql_help.c:2895 sql_help.c:3433 sql_help.c:3442 +#: sql_help.c:355 sql_help.c:357 sql_help.c:747 sql_help.c:750 sql_help.c:753 +#: sql_help.c:782 sql_help.c:794 sql_help.c:802 sql_help.c:805 sql_help.c:808 +#: sql_help.c:1390 sql_help.c:1856 sql_help.c:1858 sql_help.c:2510 +#: sql_help.c:2531 sql_help.c:2907 sql_help.c:3448 sql_help.c:3457 msgid "index_method" msgstr "метод_індексу" -#: sql_help.c:349 sql_help.c:1850 sql_help.c:4332 +#: sql_help.c:359 sql_help.c:1862 sql_help.c:4347 msgid "procedure_name" msgstr "назва_процедури" -#: sql_help.c:353 sql_help.c:1856 sql_help.c:3841 sql_help.c:4338 +#: sql_help.c:363 sql_help.c:1868 sql_help.c:3856 sql_help.c:4353 msgid "routine_name" msgstr "ім'я_підпрограми" -#: sql_help.c:365 sql_help.c:1353 sql_help.c:1873 sql_help.c:2354 -#: sql_help.c:2559 sql_help.c:2850 sql_help.c:3026 sql_help.c:3604 -#: sql_help.c:3860 sql_help.c:4240 +#: sql_help.c:375 sql_help.c:1362 sql_help.c:1885 sql_help.c:2366 +#: sql_help.c:2571 sql_help.c:2862 sql_help.c:3041 sql_help.c:3619 +#: sql_help.c:3875 sql_help.c:4255 msgid "type_name" msgstr "назва_типу" -#: sql_help.c:366 sql_help.c:1874 sql_help.c:2353 sql_help.c:2558 -#: sql_help.c:3027 sql_help.c:3257 sql_help.c:3605 sql_help.c:3848 -#: sql_help.c:4228 +#: sql_help.c:376 sql_help.c:1886 sql_help.c:2365 sql_help.c:2570 +#: sql_help.c:3042 sql_help.c:3272 sql_help.c:3620 sql_help.c:3863 +#: sql_help.c:4243 msgid "lang_name" msgstr "назва_мови" -#: sql_help.c:369 +#: sql_help.c:379 msgid "and aggregate_signature is:" msgstr "і сигнатура_агр_функції:" -#: sql_help.c:392 sql_help.c:1968 sql_help.c:2235 +#: sql_help.c:402 sql_help.c:1980 sql_help.c:2247 msgid "handler_function" msgstr "функція_обробник" -#: sql_help.c:393 sql_help.c:2236 +#: sql_help.c:403 sql_help.c:2248 msgid "validator_function" msgstr "функція_перевірки" -#: sql_help.c:441 sql_help.c:520 sql_help.c:663 sql_help.c:848 sql_help.c:988 -#: sql_help.c:1283 sql_help.c:1551 +#: sql_help.c:451 sql_help.c:530 sql_help.c:673 sql_help.c:858 sql_help.c:998 +#: sql_help.c:1292 sql_help.c:1563 msgid "action" msgstr "дія" -#: sql_help.c:443 sql_help.c:450 sql_help.c:454 sql_help.c:455 sql_help.c:458 -#: sql_help.c:460 sql_help.c:461 sql_help.c:462 sql_help.c:464 sql_help.c:467 -#: sql_help.c:469 sql_help.c:470 sql_help.c:667 sql_help.c:677 sql_help.c:679 -#: sql_help.c:682 sql_help.c:684 sql_help.c:685 sql_help.c:1064 sql_help.c:1285 -#: sql_help.c:1303 sql_help.c:1307 sql_help.c:1308 sql_help.c:1312 -#: sql_help.c:1314 sql_help.c:1315 sql_help.c:1316 sql_help.c:1317 -#: sql_help.c:1319 sql_help.c:1322 sql_help.c:1323 sql_help.c:1325 -#: sql_help.c:1328 sql_help.c:1330 sql_help.c:1331 sql_help.c:1377 -#: sql_help.c:1379 sql_help.c:1386 sql_help.c:1395 sql_help.c:1400 -#: sql_help.c:1653 sql_help.c:1656 sql_help.c:1660 sql_help.c:1696 -#: sql_help.c:1821 sql_help.c:1934 sql_help.c:1940 sql_help.c:1953 -#: sql_help.c:1954 sql_help.c:1955 sql_help.c:2285 sql_help.c:2298 -#: sql_help.c:2351 sql_help.c:2418 sql_help.c:2424 sql_help.c:2457 -#: sql_help.c:2687 sql_help.c:2722 sql_help.c:2724 sql_help.c:2832 -#: sql_help.c:2841 sql_help.c:2851 sql_help.c:2854 sql_help.c:2864 -#: sql_help.c:2868 sql_help.c:2891 sql_help.c:2893 sql_help.c:2900 -#: sql_help.c:2913 sql_help.c:2918 sql_help.c:2936 sql_help.c:3062 -#: sql_help.c:3202 sql_help.c:3820 sql_help.c:3821 sql_help.c:3914 -#: sql_help.c:3929 sql_help.c:3931 sql_help.c:3933 sql_help.c:4200 -#: sql_help.c:4201 sql_help.c:4318 sql_help.c:4479 sql_help.c:4485 -#: sql_help.c:4487 sql_help.c:4736 sql_help.c:4742 sql_help.c:4744 -#: sql_help.c:4785 sql_help.c:4787 sql_help.c:4789 sql_help.c:4836 -#: sql_help.c:4974 sql_help.c:4980 sql_help.c:4982 +#: sql_help.c:453 sql_help.c:460 sql_help.c:464 sql_help.c:465 sql_help.c:468 +#: sql_help.c:470 sql_help.c:471 sql_help.c:472 sql_help.c:474 sql_help.c:477 +#: sql_help.c:479 sql_help.c:480 sql_help.c:677 sql_help.c:687 sql_help.c:689 +#: sql_help.c:692 sql_help.c:694 sql_help.c:695 sql_help.c:1074 sql_help.c:1294 +#: sql_help.c:1312 sql_help.c:1316 sql_help.c:1317 sql_help.c:1321 +#: sql_help.c:1323 sql_help.c:1324 sql_help.c:1325 sql_help.c:1326 +#: sql_help.c:1328 sql_help.c:1331 sql_help.c:1332 sql_help.c:1334 +#: sql_help.c:1337 sql_help.c:1339 sql_help.c:1340 sql_help.c:1386 +#: sql_help.c:1388 sql_help.c:1395 sql_help.c:1404 sql_help.c:1409 +#: sql_help.c:1665 sql_help.c:1668 sql_help.c:1672 sql_help.c:1708 +#: sql_help.c:1833 sql_help.c:1946 sql_help.c:1952 sql_help.c:1965 +#: sql_help.c:1966 sql_help.c:1967 sql_help.c:2297 sql_help.c:2310 +#: sql_help.c:2363 sql_help.c:2430 sql_help.c:2436 sql_help.c:2469 +#: sql_help.c:2699 sql_help.c:2734 sql_help.c:2736 sql_help.c:2844 +#: sql_help.c:2853 sql_help.c:2863 sql_help.c:2866 sql_help.c:2876 +#: sql_help.c:2880 sql_help.c:2903 sql_help.c:2905 sql_help.c:2912 +#: sql_help.c:2925 sql_help.c:2930 sql_help.c:2951 sql_help.c:3077 +#: sql_help.c:3217 sql_help.c:3835 sql_help.c:3836 sql_help.c:3929 +#: sql_help.c:3944 sql_help.c:3946 sql_help.c:3948 sql_help.c:4215 +#: sql_help.c:4216 sql_help.c:4333 sql_help.c:4494 sql_help.c:4500 +#: sql_help.c:4502 sql_help.c:4751 sql_help.c:4757 sql_help.c:4759 +#: sql_help.c:4800 sql_help.c:4802 sql_help.c:4804 sql_help.c:4851 +#: sql_help.c:4989 sql_help.c:4995 sql_help.c:4997 msgid "column_name" msgstr "назва_стовпця" -#: sql_help.c:444 sql_help.c:668 sql_help.c:1286 sql_help.c:1661 +#: sql_help.c:454 sql_help.c:678 sql_help.c:1295 sql_help.c:1673 msgid "new_column_name" msgstr "нова_назва_стовпця" -#: sql_help.c:449 sql_help.c:541 sql_help.c:676 sql_help.c:869 sql_help.c:1009 -#: sql_help.c:1302 sql_help.c:1561 +#: sql_help.c:459 sql_help.c:551 sql_help.c:686 sql_help.c:879 sql_help.c:1019 +#: sql_help.c:1311 sql_help.c:1573 msgid "where action is one of:" msgstr "де допустима дія:" -#: sql_help.c:451 sql_help.c:456 sql_help.c:1056 sql_help.c:1304 -#: sql_help.c:1309 sql_help.c:1563 sql_help.c:1567 sql_help.c:2189 -#: sql_help.c:2286 sql_help.c:2497 sql_help.c:2680 sql_help.c:2833 -#: sql_help.c:3109 sql_help.c:4016 +#: sql_help.c:461 sql_help.c:466 sql_help.c:1066 sql_help.c:1313 +#: sql_help.c:1318 sql_help.c:1575 sql_help.c:1579 sql_help.c:2201 +#: sql_help.c:2298 sql_help.c:2509 sql_help.c:2692 sql_help.c:2845 +#: sql_help.c:3124 sql_help.c:4031 msgid "data_type" msgstr "тип_даних" -#: sql_help.c:452 sql_help.c:457 sql_help.c:1305 sql_help.c:1310 -#: sql_help.c:1564 sql_help.c:1568 sql_help.c:2190 sql_help.c:2289 -#: sql_help.c:2420 sql_help.c:2835 sql_help.c:2843 sql_help.c:2856 -#: sql_help.c:2870 sql_help.c:3110 sql_help.c:3116 sql_help.c:3924 +#: sql_help.c:462 sql_help.c:467 sql_help.c:1314 sql_help.c:1319 +#: sql_help.c:1411 sql_help.c:1576 sql_help.c:1580 sql_help.c:2202 +#: sql_help.c:2301 sql_help.c:2432 sql_help.c:2847 sql_help.c:2855 +#: sql_help.c:2868 sql_help.c:2882 sql_help.c:2932 sql_help.c:3125 +#: sql_help.c:3131 sql_help.c:3939 msgid "collation" msgstr "правила_сортування" -#: sql_help.c:453 sql_help.c:1306 sql_help.c:2290 sql_help.c:2299 -#: sql_help.c:2836 sql_help.c:2852 sql_help.c:2865 +#: sql_help.c:463 sql_help.c:1315 sql_help.c:2302 sql_help.c:2311 +#: sql_help.c:2848 sql_help.c:2864 sql_help.c:2877 msgid "column_constraint" msgstr "обмеження_стовпця" -#: sql_help.c:463 sql_help.c:605 sql_help.c:678 sql_help.c:1324 sql_help.c:4833 +#: sql_help.c:473 sql_help.c:615 sql_help.c:688 sql_help.c:1333 sql_help.c:4848 msgid "integer" msgstr "ціле" -#: sql_help.c:465 sql_help.c:468 sql_help.c:680 sql_help.c:683 sql_help.c:1326 -#: sql_help.c:1329 +#: sql_help.c:475 sql_help.c:478 sql_help.c:690 sql_help.c:693 sql_help.c:1335 +#: sql_help.c:1338 msgid "attribute_option" msgstr "параметр_атрибуту" -#: sql_help.c:473 sql_help.c:1333 sql_help.c:2291 sql_help.c:2300 -#: sql_help.c:2837 sql_help.c:2853 sql_help.c:2866 +#: sql_help.c:483 sql_help.c:1342 sql_help.c:2303 sql_help.c:2312 +#: sql_help.c:2849 sql_help.c:2865 sql_help.c:2878 msgid "table_constraint" msgstr "обмеження_таблиці" -#: sql_help.c:476 sql_help.c:477 sql_help.c:478 sql_help.c:479 sql_help.c:1338 -#: sql_help.c:1339 sql_help.c:1340 sql_help.c:1341 sql_help.c:1875 +#: sql_help.c:486 sql_help.c:487 sql_help.c:488 sql_help.c:489 sql_help.c:1347 +#: sql_help.c:1348 sql_help.c:1349 sql_help.c:1350 sql_help.c:1887 msgid "trigger_name" msgstr "ім'я_тригеру" -#: sql_help.c:480 sql_help.c:481 sql_help.c:1351 sql_help.c:1352 -#: sql_help.c:2292 sql_help.c:2297 sql_help.c:2840 sql_help.c:2863 +#: sql_help.c:490 sql_help.c:491 sql_help.c:1360 sql_help.c:1361 +#: sql_help.c:2304 sql_help.c:2309 sql_help.c:2852 sql_help.c:2875 msgid "parent_table" msgstr "батьківська_таблиця" -#: sql_help.c:540 sql_help.c:597 sql_help.c:665 sql_help.c:868 sql_help.c:1008 -#: sql_help.c:1520 sql_help.c:2221 +#: sql_help.c:550 sql_help.c:607 sql_help.c:675 sql_help.c:878 sql_help.c:1018 +#: sql_help.c:1532 sql_help.c:2233 msgid "extension_name" msgstr "ім'я_розширення" -#: sql_help.c:542 sql_help.c:1010 sql_help.c:2355 +#: sql_help.c:552 sql_help.c:1020 sql_help.c:2367 msgid "execution_cost" msgstr "вартість_виконання" -#: sql_help.c:543 sql_help.c:1011 sql_help.c:2356 +#: sql_help.c:553 sql_help.c:1021 sql_help.c:2368 msgid "result_rows" msgstr "рядки_результату" -#: sql_help.c:544 sql_help.c:2357 +#: sql_help.c:554 sql_help.c:2369 msgid "support_function" msgstr "функція_підтримки" -#: sql_help.c:566 sql_help.c:568 sql_help.c:933 sql_help.c:941 sql_help.c:945 -#: sql_help.c:948 sql_help.c:951 sql_help.c:1603 sql_help.c:1611 -#: sql_help.c:1615 sql_help.c:1618 sql_help.c:1621 sql_help.c:2658 -#: sql_help.c:2660 sql_help.c:2663 sql_help.c:2664 sql_help.c:3818 -#: sql_help.c:3819 sql_help.c:3823 sql_help.c:3824 sql_help.c:3827 -#: sql_help.c:3828 sql_help.c:3830 sql_help.c:3831 sql_help.c:3833 -#: sql_help.c:3834 sql_help.c:3836 sql_help.c:3837 sql_help.c:3839 -#: sql_help.c:3840 sql_help.c:3846 sql_help.c:3847 sql_help.c:3849 -#: sql_help.c:3850 sql_help.c:3852 sql_help.c:3853 sql_help.c:3855 -#: sql_help.c:3856 sql_help.c:3858 sql_help.c:3859 sql_help.c:3861 -#: sql_help.c:3862 sql_help.c:3864 sql_help.c:3865 sql_help.c:4198 -#: sql_help.c:4199 sql_help.c:4203 sql_help.c:4204 sql_help.c:4207 -#: sql_help.c:4208 sql_help.c:4210 sql_help.c:4211 sql_help.c:4213 -#: sql_help.c:4214 sql_help.c:4216 sql_help.c:4217 sql_help.c:4219 -#: sql_help.c:4220 sql_help.c:4226 sql_help.c:4227 sql_help.c:4229 -#: sql_help.c:4230 sql_help.c:4232 sql_help.c:4233 sql_help.c:4235 -#: sql_help.c:4236 sql_help.c:4238 sql_help.c:4239 sql_help.c:4241 -#: sql_help.c:4242 sql_help.c:4244 sql_help.c:4245 +#: sql_help.c:576 sql_help.c:578 sql_help.c:943 sql_help.c:951 sql_help.c:955 +#: sql_help.c:958 sql_help.c:961 sql_help.c:1615 sql_help.c:1623 +#: sql_help.c:1627 sql_help.c:1630 sql_help.c:1633 sql_help.c:2670 +#: sql_help.c:2672 sql_help.c:2675 sql_help.c:2676 sql_help.c:3833 +#: sql_help.c:3834 sql_help.c:3838 sql_help.c:3839 sql_help.c:3842 +#: sql_help.c:3843 sql_help.c:3845 sql_help.c:3846 sql_help.c:3848 +#: sql_help.c:3849 sql_help.c:3851 sql_help.c:3852 sql_help.c:3854 +#: sql_help.c:3855 sql_help.c:3861 sql_help.c:3862 sql_help.c:3864 +#: sql_help.c:3865 sql_help.c:3867 sql_help.c:3868 sql_help.c:3870 +#: sql_help.c:3871 sql_help.c:3873 sql_help.c:3874 sql_help.c:3876 +#: sql_help.c:3877 sql_help.c:3879 sql_help.c:3880 sql_help.c:4213 +#: sql_help.c:4214 sql_help.c:4218 sql_help.c:4219 sql_help.c:4222 +#: sql_help.c:4223 sql_help.c:4225 sql_help.c:4226 sql_help.c:4228 +#: sql_help.c:4229 sql_help.c:4231 sql_help.c:4232 sql_help.c:4234 +#: sql_help.c:4235 sql_help.c:4241 sql_help.c:4242 sql_help.c:4244 +#: sql_help.c:4245 sql_help.c:4247 sql_help.c:4248 sql_help.c:4250 +#: sql_help.c:4251 sql_help.c:4253 sql_help.c:4254 sql_help.c:4256 +#: sql_help.c:4257 sql_help.c:4259 sql_help.c:4260 msgid "role_specification" msgstr "вказання_ролі" -#: sql_help.c:567 sql_help.c:569 sql_help.c:1634 sql_help.c:2163 -#: sql_help.c:2666 sql_help.c:3187 sql_help.c:3638 sql_help.c:4572 +#: sql_help.c:577 sql_help.c:579 sql_help.c:1646 sql_help.c:2175 +#: sql_help.c:2678 sql_help.c:3202 sql_help.c:3653 sql_help.c:4587 msgid "user_name" msgstr "ім'я_користувача" -#: sql_help.c:570 sql_help.c:953 sql_help.c:1623 sql_help.c:2665 -#: sql_help.c:3866 sql_help.c:4246 +#: sql_help.c:580 sql_help.c:963 sql_help.c:1635 sql_help.c:2677 +#: sql_help.c:3881 sql_help.c:4261 msgid "where role_specification can be:" msgstr "де вказання_ролі може бути:" -#: sql_help.c:572 +#: sql_help.c:582 msgid "group_name" msgstr "ім'я_групи" -#: sql_help.c:593 sql_help.c:1398 sql_help.c:2169 sql_help.c:2427 -#: sql_help.c:2461 sql_help.c:2848 sql_help.c:2861 sql_help.c:2875 -#: sql_help.c:2916 sql_help.c:2940 sql_help.c:2952 sql_help.c:3857 -#: sql_help.c:4237 +#: sql_help.c:603 sql_help.c:1407 sql_help.c:2181 sql_help.c:2439 +#: sql_help.c:2473 sql_help.c:2860 sql_help.c:2873 sql_help.c:2887 +#: sql_help.c:2928 sql_help.c:2955 sql_help.c:2967 sql_help.c:3872 +#: sql_help.c:4252 msgid "tablespace_name" msgstr "ім'я_табличного_простору" -#: sql_help.c:595 sql_help.c:687 sql_help.c:1346 sql_help.c:1355 -#: sql_help.c:1393 sql_help.c:1750 sql_help.c:1753 +#: sql_help.c:605 sql_help.c:697 sql_help.c:1355 sql_help.c:1364 +#: sql_help.c:1402 sql_help.c:1762 sql_help.c:1765 msgid "index_name" msgstr "назва_індексу" -#: sql_help.c:599 sql_help.c:602 sql_help.c:689 sql_help.c:691 sql_help.c:1348 -#: sql_help.c:1350 sql_help.c:1396 sql_help.c:2425 sql_help.c:2459 -#: sql_help.c:2846 sql_help.c:2859 sql_help.c:2873 sql_help.c:2914 -#: sql_help.c:2938 +#: sql_help.c:609 sql_help.c:612 sql_help.c:699 sql_help.c:701 sql_help.c:1357 +#: sql_help.c:1359 sql_help.c:1405 sql_help.c:2437 sql_help.c:2471 +#: sql_help.c:2858 sql_help.c:2871 sql_help.c:2885 sql_help.c:2926 +#: sql_help.c:2953 msgid "storage_parameter" msgstr "параметр_зберігання" -#: sql_help.c:604 +#: sql_help.c:614 msgid "column_number" msgstr "номер_стовпця" -#: sql_help.c:628 sql_help.c:1838 sql_help.c:4329 +#: sql_help.c:638 sql_help.c:1850 sql_help.c:4344 msgid "large_object_oid" msgstr "oid_великого_об'єкта" -#: sql_help.c:686 sql_help.c:1332 sql_help.c:2834 +#: sql_help.c:696 sql_help.c:1341 sql_help.c:2846 msgid "compression_method" msgstr "compression_method" -#: sql_help.c:720 sql_help.c:2482 +#: sql_help.c:730 sql_help.c:2494 msgid "res_proc" msgstr "res_процедура" -#: sql_help.c:721 sql_help.c:2483 +#: sql_help.c:731 sql_help.c:2495 msgid "join_proc" msgstr "процедура_приєднання" -#: sql_help.c:773 sql_help.c:785 sql_help.c:2500 +#: sql_help.c:783 sql_help.c:795 sql_help.c:2512 msgid "strategy_number" msgstr "номер_стратегії" -#: sql_help.c:775 sql_help.c:776 sql_help.c:779 sql_help.c:780 sql_help.c:786 -#: sql_help.c:787 sql_help.c:789 sql_help.c:790 sql_help.c:2502 sql_help.c:2503 -#: sql_help.c:2506 sql_help.c:2507 +#: sql_help.c:785 sql_help.c:786 sql_help.c:789 sql_help.c:790 sql_help.c:796 +#: sql_help.c:797 sql_help.c:799 sql_help.c:800 sql_help.c:2514 sql_help.c:2515 +#: sql_help.c:2518 sql_help.c:2519 msgid "op_type" msgstr "тип_операції" -#: sql_help.c:777 sql_help.c:2504 +#: sql_help.c:787 sql_help.c:2516 msgid "sort_family_name" msgstr "ім'я_родини_сортування" -#: sql_help.c:778 sql_help.c:788 sql_help.c:2505 +#: sql_help.c:788 sql_help.c:798 sql_help.c:2517 msgid "support_number" msgstr "номер_підтримки" -#: sql_help.c:782 sql_help.c:2104 sql_help.c:2509 sql_help.c:3029 -#: sql_help.c:3031 +#: sql_help.c:792 sql_help.c:2116 sql_help.c:2521 sql_help.c:3044 +#: sql_help.c:3046 msgid "argument_type" msgstr "тип_аргументу" -#: sql_help.c:813 sql_help.c:816 sql_help.c:887 sql_help.c:889 sql_help.c:891 -#: sql_help.c:1024 sql_help.c:1063 sql_help.c:1516 sql_help.c:1519 -#: sql_help.c:1695 sql_help.c:1749 sql_help.c:1752 sql_help.c:1823 -#: sql_help.c:1848 sql_help.c:1861 sql_help.c:1876 sql_help.c:1933 -#: sql_help.c:1939 sql_help.c:2284 sql_help.c:2296 sql_help.c:2416 -#: sql_help.c:2456 sql_help.c:2533 sql_help.c:2578 sql_help.c:2634 -#: sql_help.c:2686 sql_help.c:2719 sql_help.c:2726 sql_help.c:2831 -#: sql_help.c:2849 sql_help.c:2862 sql_help.c:2935 sql_help.c:3055 -#: sql_help.c:3236 sql_help.c:3459 sql_help.c:3508 sql_help.c:3614 -#: sql_help.c:3816 sql_help.c:3822 sql_help.c:3880 sql_help.c:3912 -#: sql_help.c:4196 sql_help.c:4202 sql_help.c:4317 sql_help.c:4428 -#: sql_help.c:4430 sql_help.c:4492 sql_help.c:4531 sql_help.c:4685 -#: sql_help.c:4687 sql_help.c:4749 sql_help.c:4783 sql_help.c:4835 -#: sql_help.c:4923 sql_help.c:4925 sql_help.c:4987 +#: sql_help.c:823 sql_help.c:826 sql_help.c:897 sql_help.c:899 sql_help.c:901 +#: sql_help.c:1034 sql_help.c:1073 sql_help.c:1528 sql_help.c:1531 +#: sql_help.c:1707 sql_help.c:1761 sql_help.c:1764 sql_help.c:1835 +#: sql_help.c:1860 sql_help.c:1873 sql_help.c:1888 sql_help.c:1945 +#: sql_help.c:1951 sql_help.c:2296 sql_help.c:2308 sql_help.c:2428 +#: sql_help.c:2468 sql_help.c:2545 sql_help.c:2590 sql_help.c:2646 +#: sql_help.c:2698 sql_help.c:2731 sql_help.c:2738 sql_help.c:2843 +#: sql_help.c:2861 sql_help.c:2874 sql_help.c:2950 sql_help.c:3070 +#: sql_help.c:3251 sql_help.c:3474 sql_help.c:3523 sql_help.c:3629 +#: sql_help.c:3831 sql_help.c:3837 sql_help.c:3895 sql_help.c:3927 +#: sql_help.c:4211 sql_help.c:4217 sql_help.c:4332 sql_help.c:4443 +#: sql_help.c:4445 sql_help.c:4507 sql_help.c:4546 sql_help.c:4700 +#: sql_help.c:4702 sql_help.c:4764 sql_help.c:4798 sql_help.c:4850 +#: sql_help.c:4938 sql_help.c:4940 sql_help.c:5002 msgid "table_name" msgstr "ім'я_таблиці" -#: sql_help.c:818 sql_help.c:2535 +#: sql_help.c:828 sql_help.c:2547 msgid "using_expression" msgstr "вираз_використання" -#: sql_help.c:819 sql_help.c:2536 +#: sql_help.c:829 sql_help.c:2548 msgid "check_expression" msgstr "вираз_перевірки" -#: sql_help.c:893 sql_help.c:2579 +#: sql_help.c:903 sql_help.c:2591 msgid "publication_parameter" msgstr "параметр_публікації" -#: sql_help.c:937 sql_help.c:1607 sql_help.c:2395 sql_help.c:2611 -#: sql_help.c:3170 +#: sql_help.c:947 sql_help.c:1619 sql_help.c:2407 sql_help.c:2623 +#: sql_help.c:3185 msgid "password" msgstr "пароль" -#: sql_help.c:938 sql_help.c:1608 sql_help.c:2396 sql_help.c:2612 -#: sql_help.c:3171 +#: sql_help.c:948 sql_help.c:1620 sql_help.c:2408 sql_help.c:2624 +#: sql_help.c:3186 msgid "timestamp" msgstr "мітка часу" -#: sql_help.c:942 sql_help.c:946 sql_help.c:949 sql_help.c:952 sql_help.c:1612 -#: sql_help.c:1616 sql_help.c:1619 sql_help.c:1622 sql_help.c:3829 -#: sql_help.c:4209 +#: sql_help.c:952 sql_help.c:956 sql_help.c:959 sql_help.c:962 sql_help.c:1624 +#: sql_help.c:1628 sql_help.c:1631 sql_help.c:1634 sql_help.c:3844 +#: sql_help.c:4224 msgid "database_name" msgstr "назва_бази_даних" -#: sql_help.c:1057 sql_help.c:2681 +#: sql_help.c:1067 sql_help.c:2693 msgid "increment" msgstr "інкремент" -#: sql_help.c:1058 sql_help.c:2682 +#: sql_help.c:1068 sql_help.c:2694 msgid "minvalue" msgstr "мін_значення" -#: sql_help.c:1059 sql_help.c:2683 +#: sql_help.c:1069 sql_help.c:2695 msgid "maxvalue" msgstr "макс_значення" -#: sql_help.c:1060 sql_help.c:2684 sql_help.c:4426 sql_help.c:4529 -#: sql_help.c:4683 sql_help.c:4852 sql_help.c:4921 +#: sql_help.c:1070 sql_help.c:2696 sql_help.c:4441 sql_help.c:4544 +#: sql_help.c:4698 sql_help.c:4867 sql_help.c:4936 msgid "start" msgstr "початок" -#: sql_help.c:1061 sql_help.c:1321 +#: sql_help.c:1071 sql_help.c:1330 msgid "restart" msgstr "перезапуск" -#: sql_help.c:1062 sql_help.c:2685 +#: sql_help.c:1072 sql_help.c:2697 msgid "cache" msgstr "кеш" -#: sql_help.c:1106 +#: sql_help.c:1116 msgid "new_target" msgstr "нова_ціль" -#: sql_help.c:1124 sql_help.c:2738 +#: sql_help.c:1134 sql_help.c:2750 msgid "conninfo" msgstr "інформація_підключення" -#: sql_help.c:1126 sql_help.c:1130 sql_help.c:1134 sql_help.c:2739 +#: sql_help.c:1136 sql_help.c:1140 sql_help.c:1144 sql_help.c:2751 msgid "publication_name" msgstr "назва_публікації" -#: sql_help.c:1127 sql_help.c:1131 sql_help.c:1135 +#: sql_help.c:1137 sql_help.c:1141 sql_help.c:1145 msgid "publication_option" msgstr "publication_option" -#: sql_help.c:1138 +#: sql_help.c:1148 msgid "refresh_option" msgstr "опція_оновлення" -#: sql_help.c:1143 sql_help.c:2740 +#: sql_help.c:1153 sql_help.c:2752 msgid "subscription_parameter" msgstr "параметр_підписки" -#: sql_help.c:1298 sql_help.c:1301 +#: sql_help.c:1307 sql_help.c:1310 msgid "partition_name" msgstr "ім'я_розділу" -#: sql_help.c:1299 sql_help.c:2301 sql_help.c:2867 +#: sql_help.c:1308 sql_help.c:2313 sql_help.c:2879 msgid "partition_bound_spec" msgstr "специфікація_рамок_розділу" -#: sql_help.c:1318 sql_help.c:1367 sql_help.c:2881 +#: sql_help.c:1327 sql_help.c:1376 sql_help.c:2893 msgid "sequence_options" msgstr "опції_послідовності" -#: sql_help.c:1320 +#: sql_help.c:1329 msgid "sequence_option" msgstr "опція_послідовності" -#: sql_help.c:1334 +#: sql_help.c:1343 msgid "table_constraint_using_index" msgstr "індекс_обмеження_таблиці" -#: sql_help.c:1342 sql_help.c:1343 sql_help.c:1344 sql_help.c:1345 +#: sql_help.c:1351 sql_help.c:1352 sql_help.c:1353 sql_help.c:1354 msgid "rewrite_rule_name" msgstr "ім'я_правила_перезапису" -#: sql_help.c:1356 sql_help.c:2313 sql_help.c:2906 +#: sql_help.c:1365 sql_help.c:2325 sql_help.c:2918 msgid "and partition_bound_spec is:" msgstr "і специфікація_рамок_розділу:" -#: sql_help.c:1357 sql_help.c:1358 sql_help.c:1359 sql_help.c:2314 -#: sql_help.c:2315 sql_help.c:2316 sql_help.c:2907 sql_help.c:2908 -#: sql_help.c:2909 +#: sql_help.c:1366 sql_help.c:1367 sql_help.c:1368 sql_help.c:2326 +#: sql_help.c:2327 sql_help.c:2328 sql_help.c:2919 sql_help.c:2920 +#: sql_help.c:2921 msgid "partition_bound_expr" msgstr "код_секції" -#: sql_help.c:1360 sql_help.c:1361 sql_help.c:2317 sql_help.c:2318 -#: sql_help.c:2910 sql_help.c:2911 +#: sql_help.c:1369 sql_help.c:1370 sql_help.c:2329 sql_help.c:2330 +#: sql_help.c:2922 sql_help.c:2923 msgid "numeric_literal" msgstr "числовий_літерал" -#: sql_help.c:1362 +#: sql_help.c:1371 msgid "and column_constraint is:" msgstr "і обмеження_стовпця:" -#: sql_help.c:1365 sql_help.c:2308 sql_help.c:2349 sql_help.c:2557 -#: sql_help.c:2879 +#: sql_help.c:1374 sql_help.c:2320 sql_help.c:2361 sql_help.c:2569 +#: sql_help.c:2891 msgid "default_expr" msgstr "вираз_за_замовчуванням" -#: sql_help.c:1366 sql_help.c:2309 sql_help.c:2880 +#: sql_help.c:1375 sql_help.c:2321 sql_help.c:2892 msgid "generation_expr" msgstr "код_генерації" -#: sql_help.c:1368 sql_help.c:1369 sql_help.c:1378 sql_help.c:1380 -#: sql_help.c:1384 sql_help.c:2882 sql_help.c:2883 sql_help.c:2892 -#: sql_help.c:2894 sql_help.c:2898 +#: sql_help.c:1377 sql_help.c:1378 sql_help.c:1387 sql_help.c:1389 +#: sql_help.c:1393 sql_help.c:2894 sql_help.c:2895 sql_help.c:2904 +#: sql_help.c:2906 sql_help.c:2910 msgid "index_parameters" msgstr "параметри_індексу" -#: sql_help.c:1370 sql_help.c:1387 sql_help.c:2884 sql_help.c:2901 +#: sql_help.c:1379 sql_help.c:1396 sql_help.c:2896 sql_help.c:2913 msgid "reftable" msgstr "залежна_таблиця" -#: sql_help.c:1371 sql_help.c:1388 sql_help.c:2885 sql_help.c:2902 +#: sql_help.c:1380 sql_help.c:1397 sql_help.c:2897 sql_help.c:2914 msgid "refcolumn" msgstr "залежний_стовпець" -#: sql_help.c:1372 sql_help.c:1373 sql_help.c:1389 sql_help.c:1390 -#: sql_help.c:2886 sql_help.c:2887 sql_help.c:2903 sql_help.c:2904 +#: sql_help.c:1381 sql_help.c:1382 sql_help.c:1398 sql_help.c:1399 +#: sql_help.c:2898 sql_help.c:2899 sql_help.c:2915 sql_help.c:2916 msgid "referential_action" msgstr "дія_посилання" -#: sql_help.c:1374 sql_help.c:2310 sql_help.c:2888 +#: sql_help.c:1383 sql_help.c:2322 sql_help.c:2900 msgid "and table_constraint is:" msgstr "і обмеження_таблиці:" -#: sql_help.c:1382 sql_help.c:2896 +#: sql_help.c:1391 sql_help.c:2908 msgid "exclude_element" msgstr "об'єкт_виключення" -#: sql_help.c:1383 sql_help.c:2897 sql_help.c:4424 sql_help.c:4527 -#: sql_help.c:4681 sql_help.c:4850 sql_help.c:4919 +#: sql_help.c:1392 sql_help.c:2909 sql_help.c:4439 sql_help.c:4542 +#: sql_help.c:4696 sql_help.c:4865 sql_help.c:4934 msgid "operator" msgstr "оператор" -#: sql_help.c:1385 sql_help.c:2428 sql_help.c:2899 +#: sql_help.c:1394 sql_help.c:2440 sql_help.c:2911 msgid "predicate" msgstr "предикат" -#: sql_help.c:1391 +#: sql_help.c:1400 msgid "and table_constraint_using_index is:" msgstr "і індекс_обмеження_таблиці:" -#: sql_help.c:1394 sql_help.c:2912 +#: sql_help.c:1403 sql_help.c:2924 msgid "index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:" msgstr "параметри_індексу в обмеженнях UNIQUE, PRIMARY KEY, EXCLUDE:" -#: sql_help.c:1399 sql_help.c:2917 +#: sql_help.c:1408 sql_help.c:2929 msgid "exclude_element in an EXCLUDE constraint is:" msgstr "елемент_виключення в обмеженні EXCLUDE:" -#: sql_help.c:1402 sql_help.c:2421 sql_help.c:2844 sql_help.c:2857 -#: sql_help.c:2871 sql_help.c:2920 sql_help.c:3925 +#: sql_help.c:1412 sql_help.c:2433 sql_help.c:2856 sql_help.c:2869 +#: sql_help.c:2883 sql_help.c:2933 sql_help.c:3940 msgid "opclass" msgstr "клас_оператора" -#: sql_help.c:1418 sql_help.c:1421 sql_help.c:2955 +#: sql_help.c:1413 sql_help.c:2434 sql_help.c:2934 +msgid "opclass_parameter" +msgstr "opclass_parameter" + +#: sql_help.c:1430 sql_help.c:1433 sql_help.c:2970 msgid "tablespace_option" msgstr "опція_табличного_простору" -#: sql_help.c:1442 sql_help.c:1445 sql_help.c:1451 sql_help.c:1455 +#: sql_help.c:1454 sql_help.c:1457 sql_help.c:1463 sql_help.c:1467 msgid "token_type" msgstr "тип_токену" -#: sql_help.c:1443 sql_help.c:1446 +#: sql_help.c:1455 sql_help.c:1458 msgid "dictionary_name" msgstr "ім'я_словника" -#: sql_help.c:1448 sql_help.c:1452 +#: sql_help.c:1460 sql_help.c:1464 msgid "old_dictionary" msgstr "старий_словник" -#: sql_help.c:1449 sql_help.c:1453 +#: sql_help.c:1461 sql_help.c:1465 msgid "new_dictionary" msgstr "новий_словник" -#: sql_help.c:1548 sql_help.c:1562 sql_help.c:1565 sql_help.c:1566 -#: sql_help.c:3108 +#: sql_help.c:1560 sql_help.c:1574 sql_help.c:1577 sql_help.c:1578 +#: sql_help.c:3123 msgid "attribute_name" msgstr "ім'я_атрибута" -#: sql_help.c:1549 +#: sql_help.c:1561 msgid "new_attribute_name" msgstr "нове_ім'я_атрибута" -#: sql_help.c:1553 sql_help.c:1557 +#: sql_help.c:1565 sql_help.c:1569 msgid "new_enum_value" msgstr "нове_значення_перерахування" -#: sql_help.c:1554 +#: sql_help.c:1566 msgid "neighbor_enum_value" msgstr "сусіднє_значення_перерахування" -#: sql_help.c:1556 +#: sql_help.c:1568 msgid "existing_enum_value" msgstr "існуюче_значення_перерахування" -#: sql_help.c:1559 +#: sql_help.c:1571 msgid "property" msgstr "властивість" -#: sql_help.c:1635 sql_help.c:2293 sql_help.c:2302 sql_help.c:2697 -#: sql_help.c:3188 sql_help.c:3639 sql_help.c:3838 sql_help.c:3881 -#: sql_help.c:4218 +#: sql_help.c:1647 sql_help.c:2305 sql_help.c:2314 sql_help.c:2709 +#: sql_help.c:3203 sql_help.c:3654 sql_help.c:3853 sql_help.c:3896 +#: sql_help.c:4233 msgid "server_name" msgstr "назва_серверу" -#: sql_help.c:1667 sql_help.c:1670 sql_help.c:3203 +#: sql_help.c:1679 sql_help.c:1682 sql_help.c:3218 msgid "view_option_name" msgstr "ім'я_параметра_представлення" -#: sql_help.c:1668 sql_help.c:3204 +#: sql_help.c:1680 sql_help.c:3219 msgid "view_option_value" msgstr "значення_параметра_представлення" -#: sql_help.c:1689 sql_help.c:1690 sql_help.c:4822 sql_help.c:4823 +#: sql_help.c:1701 sql_help.c:1702 sql_help.c:4837 sql_help.c:4838 msgid "table_and_columns" msgstr "таблиця_і_стовпці" -#: sql_help.c:1691 sql_help.c:1754 sql_help.c:1945 sql_help.c:3687 -#: sql_help.c:4060 sql_help.c:4824 +#: sql_help.c:1703 sql_help.c:1766 sql_help.c:1957 sql_help.c:3702 +#: sql_help.c:4075 sql_help.c:4839 msgid "where option can be one of:" msgstr "де параметр може бути одним із:" -#: sql_help.c:1692 sql_help.c:1693 sql_help.c:1755 sql_help.c:1947 -#: sql_help.c:1950 sql_help.c:2129 sql_help.c:3688 sql_help.c:3689 -#: sql_help.c:3690 sql_help.c:3691 sql_help.c:3692 sql_help.c:3693 -#: sql_help.c:3694 sql_help.c:3695 sql_help.c:4061 sql_help.c:4063 -#: sql_help.c:4825 sql_help.c:4826 sql_help.c:4827 sql_help.c:4828 -#: sql_help.c:4829 sql_help.c:4830 sql_help.c:4831 sql_help.c:4832 +#: sql_help.c:1704 sql_help.c:1705 sql_help.c:1767 sql_help.c:1959 +#: sql_help.c:1962 sql_help.c:2141 sql_help.c:3703 sql_help.c:3704 +#: sql_help.c:3705 sql_help.c:3706 sql_help.c:3707 sql_help.c:3708 +#: sql_help.c:3709 sql_help.c:3710 sql_help.c:4076 sql_help.c:4078 +#: sql_help.c:4840 sql_help.c:4841 sql_help.c:4842 sql_help.c:4843 +#: sql_help.c:4844 sql_help.c:4845 sql_help.c:4846 sql_help.c:4847 msgid "boolean" msgstr "логічний" -#: sql_help.c:1694 sql_help.c:4834 +#: sql_help.c:1706 sql_help.c:4849 msgid "and table_and_columns is:" msgstr "і таблиця_і_стовпці:" -#: sql_help.c:1710 sql_help.c:4588 sql_help.c:4590 sql_help.c:4614 +#: sql_help.c:1722 sql_help.c:4603 sql_help.c:4605 sql_help.c:4629 msgid "transaction_mode" msgstr "режим_транзакції" -#: sql_help.c:1711 sql_help.c:4591 sql_help.c:4615 +#: sql_help.c:1723 sql_help.c:4606 sql_help.c:4630 msgid "where transaction_mode is one of:" msgstr "де режим_транзакції один з:" -#: sql_help.c:1720 sql_help.c:4434 sql_help.c:4443 sql_help.c:4447 -#: sql_help.c:4451 sql_help.c:4454 sql_help.c:4691 sql_help.c:4700 -#: sql_help.c:4704 sql_help.c:4708 sql_help.c:4711 sql_help.c:4929 -#: sql_help.c:4938 sql_help.c:4942 sql_help.c:4946 sql_help.c:4949 +#: sql_help.c:1732 sql_help.c:4449 sql_help.c:4458 sql_help.c:4462 +#: sql_help.c:4466 sql_help.c:4469 sql_help.c:4706 sql_help.c:4715 +#: sql_help.c:4719 sql_help.c:4723 sql_help.c:4726 sql_help.c:4944 +#: sql_help.c:4953 sql_help.c:4957 sql_help.c:4961 sql_help.c:4964 msgid "argument" msgstr "аргумент" -#: sql_help.c:1820 +#: sql_help.c:1832 msgid "relation_name" msgstr "назва_відношення" -#: sql_help.c:1825 sql_help.c:3832 sql_help.c:4212 +#: sql_help.c:1837 sql_help.c:3847 sql_help.c:4227 msgid "domain_name" msgstr "назва_домену" -#: sql_help.c:1847 +#: sql_help.c:1859 msgid "policy_name" msgstr "назва_політики" -#: sql_help.c:1860 +#: sql_help.c:1872 msgid "rule_name" msgstr "назва_правила" -#: sql_help.c:1879 sql_help.c:4348 +#: sql_help.c:1891 sql_help.c:4363 msgid "string_literal" msgstr "рядковий_літерал" -#: sql_help.c:1904 sql_help.c:4025 sql_help.c:4262 +#: sql_help.c:1916 sql_help.c:4040 sql_help.c:4277 msgid "transaction_id" msgstr "ідентифікатор_транзакції" -#: sql_help.c:1935 sql_help.c:1942 sql_help.c:3951 +#: sql_help.c:1947 sql_help.c:1954 sql_help.c:3966 msgid "filename" msgstr "ім'я файлу" -#: sql_help.c:1936 sql_help.c:1943 sql_help.c:2636 sql_help.c:2637 -#: sql_help.c:2638 +#: sql_help.c:1948 sql_help.c:1955 sql_help.c:2648 sql_help.c:2649 +#: sql_help.c:2650 msgid "command" msgstr "команда" -#: sql_help.c:1938 sql_help.c:2635 sql_help.c:3058 sql_help.c:3239 -#: sql_help.c:3935 sql_help.c:4417 sql_help.c:4419 sql_help.c:4520 -#: sql_help.c:4522 sql_help.c:4674 sql_help.c:4676 sql_help.c:4792 -#: sql_help.c:4912 sql_help.c:4914 +#: sql_help.c:1950 sql_help.c:2647 sql_help.c:3073 sql_help.c:3254 +#: sql_help.c:3950 sql_help.c:4432 sql_help.c:4434 sql_help.c:4535 +#: sql_help.c:4537 sql_help.c:4689 sql_help.c:4691 sql_help.c:4807 +#: sql_help.c:4927 sql_help.c:4929 msgid "condition" msgstr "умова" -#: sql_help.c:1941 sql_help.c:2462 sql_help.c:2941 sql_help.c:3205 -#: sql_help.c:3223 sql_help.c:3916 +#: sql_help.c:1953 sql_help.c:2474 sql_help.c:2956 sql_help.c:3220 +#: sql_help.c:3238 sql_help.c:3931 msgid "query" msgstr "запит" -#: sql_help.c:1946 +#: sql_help.c:1958 msgid "format_name" msgstr "назва_формату" -#: sql_help.c:1948 +#: sql_help.c:1960 msgid "delimiter_character" msgstr "символ_роздільник" -#: sql_help.c:1949 +#: sql_help.c:1961 msgid "null_string" msgstr "представлення_NULL" -#: sql_help.c:1951 +#: sql_help.c:1963 msgid "quote_character" msgstr "символ_лапок" -#: sql_help.c:1952 +#: sql_help.c:1964 msgid "escape_character" msgstr "символ_екранування" -#: sql_help.c:1956 +#: sql_help.c:1968 msgid "encoding_name" msgstr "ім'я_кодування" -#: sql_help.c:1967 +#: sql_help.c:1979 msgid "access_method_type" msgstr "тип_метода_доступа" -#: sql_help.c:2038 sql_help.c:2057 sql_help.c:2060 +#: sql_help.c:2050 sql_help.c:2069 sql_help.c:2072 msgid "arg_data_type" msgstr "тип_даних_аргумента" -#: sql_help.c:2039 sql_help.c:2061 sql_help.c:2069 +#: sql_help.c:2051 sql_help.c:2073 sql_help.c:2081 msgid "sfunc" msgstr "функція_стану" -#: sql_help.c:2040 sql_help.c:2062 sql_help.c:2070 +#: sql_help.c:2052 sql_help.c:2074 sql_help.c:2082 msgid "state_data_type" msgstr "тип_даних_стану" -#: sql_help.c:2041 sql_help.c:2063 sql_help.c:2071 +#: sql_help.c:2053 sql_help.c:2075 sql_help.c:2083 msgid "state_data_size" msgstr "розмір_даних_стану" -#: sql_help.c:2042 sql_help.c:2064 sql_help.c:2072 +#: sql_help.c:2054 sql_help.c:2076 sql_help.c:2084 msgid "ffunc" msgstr "функція_завершення" -#: sql_help.c:2043 sql_help.c:2073 +#: sql_help.c:2055 sql_help.c:2085 msgid "combinefunc" msgstr "комбінуюча_функція" -#: sql_help.c:2044 sql_help.c:2074 +#: sql_help.c:2056 sql_help.c:2086 msgid "serialfunc" msgstr "функція_серіалізації" -#: sql_help.c:2045 sql_help.c:2075 +#: sql_help.c:2057 sql_help.c:2087 msgid "deserialfunc" msgstr "функція_десеріалізації" -#: sql_help.c:2046 sql_help.c:2065 sql_help.c:2076 +#: sql_help.c:2058 sql_help.c:2077 sql_help.c:2088 msgid "initial_condition" msgstr "початкова_умова" -#: sql_help.c:2047 sql_help.c:2077 +#: sql_help.c:2059 sql_help.c:2089 msgid "msfunc" msgstr "функція_стану_рух" -#: sql_help.c:2048 sql_help.c:2078 +#: sql_help.c:2060 sql_help.c:2090 msgid "minvfunc" msgstr "зворотна_функція_рух" -#: sql_help.c:2049 sql_help.c:2079 +#: sql_help.c:2061 sql_help.c:2091 msgid "mstate_data_type" msgstr "тип_даних_стану_рух" -#: sql_help.c:2050 sql_help.c:2080 +#: sql_help.c:2062 sql_help.c:2092 msgid "mstate_data_size" msgstr "розмір_даних_стану_рух" -#: sql_help.c:2051 sql_help.c:2081 +#: sql_help.c:2063 sql_help.c:2093 msgid "mffunc" msgstr "функція_завершення_рух" -#: sql_help.c:2052 sql_help.c:2082 +#: sql_help.c:2064 sql_help.c:2094 msgid "minitial_condition" msgstr "початкова_умова_рух" -#: sql_help.c:2053 sql_help.c:2083 +#: sql_help.c:2065 sql_help.c:2095 msgid "sort_operator" msgstr "оператор_сортування" -#: sql_help.c:2066 +#: sql_help.c:2078 msgid "or the old syntax" msgstr "або старий синтаксис" -#: sql_help.c:2068 +#: sql_help.c:2080 msgid "base_type" msgstr "базовий_тип" -#: sql_help.c:2125 sql_help.c:2166 +#: sql_help.c:2137 sql_help.c:2178 msgid "locale" msgstr "локаль" -#: sql_help.c:2126 sql_help.c:2167 +#: sql_help.c:2138 sql_help.c:2179 msgid "lc_collate" msgstr "код_правила_сортування" -#: sql_help.c:2127 sql_help.c:2168 +#: sql_help.c:2139 sql_help.c:2180 msgid "lc_ctype" msgstr "код_класифікації_символів" -#: sql_help.c:2128 sql_help.c:4315 +#: sql_help.c:2140 sql_help.c:4330 msgid "provider" msgstr "постачальник" -#: sql_help.c:2130 sql_help.c:2223 +#: sql_help.c:2142 sql_help.c:2235 msgid "version" msgstr "версія" -#: sql_help.c:2132 +#: sql_help.c:2144 msgid "existing_collation" msgstr "існуюче_правило_сортування" -#: sql_help.c:2142 +#: sql_help.c:2154 msgid "source_encoding" msgstr "початкове_кодування" -#: sql_help.c:2143 +#: sql_help.c:2155 msgid "dest_encoding" msgstr "цільве_кодування" -#: sql_help.c:2164 sql_help.c:2981 +#: sql_help.c:2176 sql_help.c:2996 msgid "template" msgstr "шаблон" -#: sql_help.c:2165 +#: sql_help.c:2177 msgid "encoding" msgstr "кодування" -#: sql_help.c:2192 +#: sql_help.c:2204 msgid "constraint" msgstr "обмеження" -#: sql_help.c:2193 +#: sql_help.c:2205 msgid "where constraint is:" msgstr "де обмеження:" -#: sql_help.c:2207 sql_help.c:2633 sql_help.c:3054 +#: sql_help.c:2219 sql_help.c:2645 sql_help.c:3069 msgid "event" msgstr "подія" -#: sql_help.c:2208 +#: sql_help.c:2220 msgid "filter_variable" msgstr "змінна_фільтру" -#: sql_help.c:2209 +#: sql_help.c:2221 msgid "filter_value" msgstr "значення_фільтру" -#: sql_help.c:2305 sql_help.c:2876 +#: sql_help.c:2317 sql_help.c:2888 msgid "where column_constraint is:" msgstr "де обмеження_стовпців:" -#: sql_help.c:2350 +#: sql_help.c:2362 msgid "rettype" msgstr "тип_результату" -#: sql_help.c:2352 +#: sql_help.c:2364 msgid "column_type" msgstr "тип_стовпця" -#: sql_help.c:2361 sql_help.c:2563 +#: sql_help.c:2373 sql_help.c:2575 msgid "definition" msgstr "визначення" -#: sql_help.c:2362 sql_help.c:2564 +#: sql_help.c:2374 sql_help.c:2576 msgid "obj_file" msgstr "об'єктний_файл" -#: sql_help.c:2363 sql_help.c:2565 +#: sql_help.c:2375 sql_help.c:2577 msgid "link_symbol" msgstr "символ_експорту" -#: sql_help.c:2364 sql_help.c:2566 +#: sql_help.c:2376 sql_help.c:2578 msgid "sql_body" msgstr "sql_body" -#: sql_help.c:2402 sql_help.c:2618 sql_help.c:3177 +#: sql_help.c:2414 sql_help.c:2630 sql_help.c:3192 msgid "uid" msgstr "uid" -#: sql_help.c:2417 sql_help.c:2458 sql_help.c:2845 sql_help.c:2858 -#: sql_help.c:2872 sql_help.c:2937 +#: sql_help.c:2429 sql_help.c:2470 sql_help.c:2857 sql_help.c:2870 +#: sql_help.c:2884 sql_help.c:2952 msgid "method" msgstr "метод" -#: sql_help.c:2422 -msgid "opclass_parameter" -msgstr "opclass_parameter" - -#: sql_help.c:2439 +#: sql_help.c:2451 msgid "call_handler" msgstr "обробник_виклику" -#: sql_help.c:2440 +#: sql_help.c:2452 msgid "inline_handler" msgstr "обробник_впровадженого_коду" -#: sql_help.c:2441 +#: sql_help.c:2453 msgid "valfunction" msgstr "функція_перевірки" -#: sql_help.c:2480 +#: sql_help.c:2492 msgid "com_op" msgstr "комут_оператор" -#: sql_help.c:2481 +#: sql_help.c:2493 msgid "neg_op" msgstr "зворотній_оператор" -#: sql_help.c:2499 +#: sql_help.c:2511 msgid "family_name" msgstr "назва_сімейства" -#: sql_help.c:2510 +#: sql_help.c:2522 msgid "storage_type" msgstr "тип_зберігання" -#: sql_help.c:2639 sql_help.c:3061 +#: sql_help.c:2651 sql_help.c:3076 msgid "where event can be one of:" msgstr "де подія може бути однією з:" -#: sql_help.c:2659 sql_help.c:2661 +#: sql_help.c:2671 sql_help.c:2673 msgid "schema_element" msgstr "елемент_схеми" -#: sql_help.c:2698 +#: sql_help.c:2710 msgid "server_type" msgstr "тип_серверу" -#: sql_help.c:2699 +#: sql_help.c:2711 msgid "server_version" msgstr "версія_серверу" -#: sql_help.c:2700 sql_help.c:3835 sql_help.c:4215 +#: sql_help.c:2712 sql_help.c:3850 sql_help.c:4230 msgid "fdw_name" msgstr "назва_fdw" -#: sql_help.c:2717 sql_help.c:2720 +#: sql_help.c:2729 sql_help.c:2732 msgid "statistics_name" msgstr "назва_статистики" -#: sql_help.c:2721 +#: sql_help.c:2733 msgid "statistics_kind" msgstr "вид_статистики" -#: sql_help.c:2737 +#: sql_help.c:2749 msgid "subscription_name" msgstr "назва_підписки" -#: sql_help.c:2838 +#: sql_help.c:2850 msgid "source_table" msgstr "вихідна_таблиця" -#: sql_help.c:2839 +#: sql_help.c:2851 msgid "like_option" msgstr "параметр_породження" -#: sql_help.c:2905 +#: sql_help.c:2917 msgid "and like_option is:" msgstr "і параметр_породження:" -#: sql_help.c:2954 +#: sql_help.c:2969 msgid "directory" msgstr "каталог" -#: sql_help.c:2968 +#: sql_help.c:2983 msgid "parser_name" msgstr "назва_парсера" -#: sql_help.c:2969 +#: sql_help.c:2984 msgid "source_config" msgstr "початкова_конфігурація" -#: sql_help.c:2998 +#: sql_help.c:3013 msgid "start_function" msgstr "функція_початку" -#: sql_help.c:2999 +#: sql_help.c:3014 msgid "gettoken_function" msgstr "функція_видачі_токену" -#: sql_help.c:3000 +#: sql_help.c:3015 msgid "end_function" msgstr "функція_завершення" -#: sql_help.c:3001 +#: sql_help.c:3016 msgid "lextypes_function" msgstr "функція_лекс_типів" -#: sql_help.c:3002 +#: sql_help.c:3017 msgid "headline_function" msgstr "функція_створення_заголовків" -#: sql_help.c:3014 +#: sql_help.c:3029 msgid "init_function" msgstr "функція_ініціалізації" -#: sql_help.c:3015 +#: sql_help.c:3030 msgid "lexize_function" msgstr "функція_виділення_лексем" -#: sql_help.c:3028 +#: sql_help.c:3043 msgid "from_sql_function_name" msgstr "ім'я_функції_з_sql" -#: sql_help.c:3030 +#: sql_help.c:3045 msgid "to_sql_function_name" msgstr "ім'я_функції_в_sql" -#: sql_help.c:3056 +#: sql_help.c:3071 msgid "referenced_table_name" msgstr "ім'я_залежної_таблиці" -#: sql_help.c:3057 +#: sql_help.c:3072 msgid "transition_relation_name" msgstr "ім'я_перехідного_відношення" -#: sql_help.c:3060 +#: sql_help.c:3075 msgid "arguments" msgstr "аргументи" -#: sql_help.c:3112 +#: sql_help.c:3127 msgid "label" msgstr "мітка" -#: sql_help.c:3114 +#: sql_help.c:3129 msgid "subtype" msgstr "підтип" -#: sql_help.c:3115 +#: sql_help.c:3130 msgid "subtype_operator_class" msgstr "клас_оператора_підтипу" -#: sql_help.c:3117 +#: sql_help.c:3132 msgid "canonical_function" msgstr "канонічна_функція" -#: sql_help.c:3118 +#: sql_help.c:3133 msgid "subtype_diff_function" msgstr "функція_розбіжностей_підтипу" -#: sql_help.c:3119 +#: sql_help.c:3134 msgid "multirange_type_name" msgstr "multirange_type_name" -#: sql_help.c:3121 +#: sql_help.c:3136 msgid "input_function" msgstr "функція_вводу" -#: sql_help.c:3122 +#: sql_help.c:3137 msgid "output_function" msgstr "функція_виводу" -#: sql_help.c:3123 +#: sql_help.c:3138 msgid "receive_function" msgstr "функція_отримання" -#: sql_help.c:3124 +#: sql_help.c:3139 msgid "send_function" msgstr "функція_відправки" -#: sql_help.c:3125 +#: sql_help.c:3140 msgid "type_modifier_input_function" msgstr "функція_введення_модифікатора_типу" -#: sql_help.c:3126 +#: sql_help.c:3141 msgid "type_modifier_output_function" msgstr "функція_виводу_модифікатора_типу" -#: sql_help.c:3127 +#: sql_help.c:3142 msgid "analyze_function" msgstr "функція_аналізу" -#: sql_help.c:3128 +#: sql_help.c:3143 msgid "subscript_function" msgstr "subscript_function" -#: sql_help.c:3129 +#: sql_help.c:3144 msgid "internallength" msgstr "внутр_довжина" -#: sql_help.c:3130 +#: sql_help.c:3145 msgid "alignment" msgstr "вирівнювання" -#: sql_help.c:3131 +#: sql_help.c:3146 msgid "storage" msgstr "зберігання" -#: sql_help.c:3132 +#: sql_help.c:3147 msgid "like_type" msgstr "тип_зразок" -#: sql_help.c:3133 +#: sql_help.c:3148 msgid "category" msgstr "категорія" -#: sql_help.c:3134 +#: sql_help.c:3149 msgid "preferred" msgstr "привілейований" -#: sql_help.c:3135 +#: sql_help.c:3150 msgid "default" msgstr "за_замовчуванням" -#: sql_help.c:3136 +#: sql_help.c:3151 msgid "element" msgstr "елемент" -#: sql_help.c:3137 +#: sql_help.c:3152 msgid "delimiter" msgstr "роздільник" -#: sql_help.c:3138 +#: sql_help.c:3153 msgid "collatable" msgstr "сортувальний" -#: sql_help.c:3235 sql_help.c:3911 sql_help.c:4412 sql_help.c:4514 -#: sql_help.c:4669 sql_help.c:4782 sql_help.c:4907 +#: sql_help.c:3250 sql_help.c:3926 sql_help.c:4427 sql_help.c:4529 +#: sql_help.c:4684 sql_help.c:4797 sql_help.c:4922 msgid "with_query" msgstr "with_запит" -#: sql_help.c:3237 sql_help.c:3913 sql_help.c:4431 sql_help.c:4437 -#: sql_help.c:4440 sql_help.c:4444 sql_help.c:4448 sql_help.c:4456 -#: sql_help.c:4688 sql_help.c:4694 sql_help.c:4697 sql_help.c:4701 -#: sql_help.c:4705 sql_help.c:4713 sql_help.c:4784 sql_help.c:4926 -#: sql_help.c:4932 sql_help.c:4935 sql_help.c:4939 sql_help.c:4943 -#: sql_help.c:4951 +#: sql_help.c:3252 sql_help.c:3928 sql_help.c:4446 sql_help.c:4452 +#: sql_help.c:4455 sql_help.c:4459 sql_help.c:4463 sql_help.c:4471 +#: sql_help.c:4703 sql_help.c:4709 sql_help.c:4712 sql_help.c:4716 +#: sql_help.c:4720 sql_help.c:4728 sql_help.c:4799 sql_help.c:4941 +#: sql_help.c:4947 sql_help.c:4950 sql_help.c:4954 sql_help.c:4958 +#: sql_help.c:4966 msgid "alias" msgstr "псевдонім" -#: sql_help.c:3238 sql_help.c:4416 sql_help.c:4458 sql_help.c:4460 -#: sql_help.c:4464 sql_help.c:4466 sql_help.c:4467 sql_help.c:4468 -#: sql_help.c:4519 sql_help.c:4673 sql_help.c:4715 sql_help.c:4717 -#: sql_help.c:4721 sql_help.c:4723 sql_help.c:4724 sql_help.c:4725 -#: sql_help.c:4791 sql_help.c:4911 sql_help.c:4953 sql_help.c:4955 -#: sql_help.c:4959 sql_help.c:4961 sql_help.c:4962 sql_help.c:4963 +#: sql_help.c:3253 sql_help.c:4431 sql_help.c:4473 sql_help.c:4475 +#: sql_help.c:4479 sql_help.c:4481 sql_help.c:4482 sql_help.c:4483 +#: sql_help.c:4534 sql_help.c:4688 sql_help.c:4730 sql_help.c:4732 +#: sql_help.c:4736 sql_help.c:4738 sql_help.c:4739 sql_help.c:4740 +#: sql_help.c:4806 sql_help.c:4926 sql_help.c:4968 sql_help.c:4970 +#: sql_help.c:4974 sql_help.c:4976 sql_help.c:4977 sql_help.c:4978 msgid "from_item" msgstr "джерело_даних" -#: sql_help.c:3240 sql_help.c:3721 sql_help.c:3992 sql_help.c:4793 +#: sql_help.c:3255 sql_help.c:3736 sql_help.c:4007 sql_help.c:4808 msgid "cursor_name" msgstr "ім'я_курсору" -#: sql_help.c:3241 sql_help.c:3919 sql_help.c:4794 +#: sql_help.c:3256 sql_help.c:3934 sql_help.c:4809 msgid "output_expression" msgstr "вираз_результату" -#: sql_help.c:3242 sql_help.c:3920 sql_help.c:4415 sql_help.c:4517 -#: sql_help.c:4672 sql_help.c:4795 sql_help.c:4910 +#: sql_help.c:3257 sql_help.c:3935 sql_help.c:4430 sql_help.c:4532 +#: sql_help.c:4687 sql_help.c:4810 sql_help.c:4925 msgid "output_name" msgstr "ім'я_результату" -#: sql_help.c:3258 +#: sql_help.c:3273 msgid "code" msgstr "код" -#: sql_help.c:3663 +#: sql_help.c:3678 msgid "parameter" msgstr "параметр" -#: sql_help.c:3685 sql_help.c:3686 sql_help.c:4017 +#: sql_help.c:3700 sql_help.c:3701 sql_help.c:4032 msgid "statement" msgstr "оператор" -#: sql_help.c:3720 sql_help.c:3991 +#: sql_help.c:3735 sql_help.c:4006 msgid "direction" msgstr "напрямок" -#: sql_help.c:3722 sql_help.c:3993 +#: sql_help.c:3737 sql_help.c:4008 msgid "where direction can be one of:" msgstr "де напрямок може бути одним із:" -#: sql_help.c:3723 sql_help.c:3724 sql_help.c:3725 sql_help.c:3726 -#: sql_help.c:3727 sql_help.c:3994 sql_help.c:3995 sql_help.c:3996 -#: sql_help.c:3997 sql_help.c:3998 sql_help.c:4425 sql_help.c:4427 -#: sql_help.c:4528 sql_help.c:4530 sql_help.c:4682 sql_help.c:4684 -#: sql_help.c:4851 sql_help.c:4853 sql_help.c:4920 sql_help.c:4922 +#: sql_help.c:3738 sql_help.c:3739 sql_help.c:3740 sql_help.c:3741 +#: sql_help.c:3742 sql_help.c:4009 sql_help.c:4010 sql_help.c:4011 +#: sql_help.c:4012 sql_help.c:4013 sql_help.c:4440 sql_help.c:4442 +#: sql_help.c:4543 sql_help.c:4545 sql_help.c:4697 sql_help.c:4699 +#: sql_help.c:4866 sql_help.c:4868 sql_help.c:4935 sql_help.c:4937 msgid "count" msgstr "кількість" -#: sql_help.c:3825 sql_help.c:4205 +#: sql_help.c:3840 sql_help.c:4220 msgid "sequence_name" msgstr "ім'я_послідовності" -#: sql_help.c:3843 sql_help.c:4223 +#: sql_help.c:3858 sql_help.c:4238 msgid "arg_name" msgstr "ім'я_аргументу" -#: sql_help.c:3844 sql_help.c:4224 +#: sql_help.c:3859 sql_help.c:4239 msgid "arg_type" msgstr "тип_аргументу" -#: sql_help.c:3851 sql_help.c:4231 +#: sql_help.c:3866 sql_help.c:4246 msgid "loid" msgstr "код_вел_об'єкту" -#: sql_help.c:3879 +#: sql_help.c:3894 msgid "remote_schema" msgstr "віддалена_схема" -#: sql_help.c:3882 +#: sql_help.c:3897 msgid "local_schema" msgstr "локальна_схема" -#: sql_help.c:3917 +#: sql_help.c:3932 msgid "conflict_target" msgstr "ціль_конфлікту" -#: sql_help.c:3918 +#: sql_help.c:3933 msgid "conflict_action" msgstr "дія_при_конфлікті" -#: sql_help.c:3921 +#: sql_help.c:3936 msgid "where conflict_target can be one of:" msgstr "де ціль_конфлікту може бути одним з:" -#: sql_help.c:3922 +#: sql_help.c:3937 msgid "index_column_name" msgstr "ім'я_стовпця_індексу" -#: sql_help.c:3923 +#: sql_help.c:3938 msgid "index_expression" msgstr "вираз_індексу" -#: sql_help.c:3926 +#: sql_help.c:3941 msgid "index_predicate" msgstr "предикат_індексу" -#: sql_help.c:3928 +#: sql_help.c:3943 msgid "and conflict_action is one of:" msgstr "і дія_при_конфлікті одна з:" -#: sql_help.c:3934 sql_help.c:4790 +#: sql_help.c:3949 sql_help.c:4805 msgid "sub-SELECT" msgstr "вкладений-SELECT" -#: sql_help.c:3943 sql_help.c:4006 sql_help.c:4766 +#: sql_help.c:3958 sql_help.c:4021 sql_help.c:4781 msgid "channel" msgstr "канал" -#: sql_help.c:3965 +#: sql_help.c:3980 msgid "lockmode" msgstr "режим_блокування" -#: sql_help.c:3966 +#: sql_help.c:3981 msgid "where lockmode is one of:" msgstr "де режим_блокування один з:" -#: sql_help.c:4007 +#: sql_help.c:4022 msgid "payload" msgstr "зміст" -#: sql_help.c:4034 +#: sql_help.c:4049 msgid "old_role" msgstr "стара_роль" -#: sql_help.c:4035 +#: sql_help.c:4050 msgid "new_role" msgstr "нова_роль" -#: sql_help.c:4071 sql_help.c:4270 sql_help.c:4278 +#: sql_help.c:4086 sql_help.c:4285 sql_help.c:4293 msgid "savepoint_name" msgstr "ім'я_точки_збереження" -#: sql_help.c:4418 sql_help.c:4476 sql_help.c:4675 sql_help.c:4733 -#: sql_help.c:4913 sql_help.c:4971 +#: sql_help.c:4433 sql_help.c:4491 sql_help.c:4690 sql_help.c:4748 +#: sql_help.c:4928 sql_help.c:4986 msgid "grouping_element" msgstr "елемент_групування" -#: sql_help.c:4420 sql_help.c:4523 sql_help.c:4677 sql_help.c:4915 +#: sql_help.c:4435 sql_help.c:4538 sql_help.c:4692 sql_help.c:4930 msgid "window_name" msgstr "назва_вікна" -#: sql_help.c:4421 sql_help.c:4524 sql_help.c:4678 sql_help.c:4916 +#: sql_help.c:4436 sql_help.c:4539 sql_help.c:4693 sql_help.c:4931 msgid "window_definition" msgstr "визначення_вікна" -#: sql_help.c:4422 sql_help.c:4436 sql_help.c:4480 sql_help.c:4525 -#: sql_help.c:4679 sql_help.c:4693 sql_help.c:4737 sql_help.c:4917 -#: sql_help.c:4931 sql_help.c:4975 +#: sql_help.c:4437 sql_help.c:4451 sql_help.c:4495 sql_help.c:4540 +#: sql_help.c:4694 sql_help.c:4708 sql_help.c:4752 sql_help.c:4932 +#: sql_help.c:4946 sql_help.c:4990 msgid "select" msgstr "виберіть" -#: sql_help.c:4429 sql_help.c:4686 sql_help.c:4924 +#: sql_help.c:4444 sql_help.c:4701 sql_help.c:4939 msgid "where from_item can be one of:" msgstr "де джерело_даних може бути одним з:" -#: sql_help.c:4432 sql_help.c:4438 sql_help.c:4441 sql_help.c:4445 -#: sql_help.c:4457 sql_help.c:4689 sql_help.c:4695 sql_help.c:4698 -#: sql_help.c:4702 sql_help.c:4714 sql_help.c:4927 sql_help.c:4933 -#: sql_help.c:4936 sql_help.c:4940 sql_help.c:4952 +#: sql_help.c:4447 sql_help.c:4453 sql_help.c:4456 sql_help.c:4460 +#: sql_help.c:4472 sql_help.c:4704 sql_help.c:4710 sql_help.c:4713 +#: sql_help.c:4717 sql_help.c:4729 sql_help.c:4942 sql_help.c:4948 +#: sql_help.c:4951 sql_help.c:4955 sql_help.c:4967 msgid "column_alias" msgstr "псевдонім_стовпця" -#: sql_help.c:4433 sql_help.c:4690 sql_help.c:4928 +#: sql_help.c:4448 sql_help.c:4705 sql_help.c:4943 msgid "sampling_method" msgstr "метод_вибірки" -#: sql_help.c:4435 sql_help.c:4692 sql_help.c:4930 +#: sql_help.c:4450 sql_help.c:4707 sql_help.c:4945 msgid "seed" msgstr "початкове_число" -#: sql_help.c:4439 sql_help.c:4478 sql_help.c:4696 sql_help.c:4735 -#: sql_help.c:4934 sql_help.c:4973 +#: sql_help.c:4454 sql_help.c:4493 sql_help.c:4711 sql_help.c:4750 +#: sql_help.c:4949 sql_help.c:4988 msgid "with_query_name" msgstr "ім'я_запиту_WITH" -#: sql_help.c:4449 sql_help.c:4452 sql_help.c:4455 sql_help.c:4706 -#: sql_help.c:4709 sql_help.c:4712 sql_help.c:4944 sql_help.c:4947 -#: sql_help.c:4950 +#: sql_help.c:4464 sql_help.c:4467 sql_help.c:4470 sql_help.c:4721 +#: sql_help.c:4724 sql_help.c:4727 sql_help.c:4959 sql_help.c:4962 +#: sql_help.c:4965 msgid "column_definition" msgstr "визначення_стовпця" -#: sql_help.c:4459 sql_help.c:4465 sql_help.c:4716 sql_help.c:4722 -#: sql_help.c:4954 sql_help.c:4960 +#: sql_help.c:4474 sql_help.c:4480 sql_help.c:4731 sql_help.c:4737 +#: sql_help.c:4969 sql_help.c:4975 msgid "join_type" msgstr "тип_поєднання" -#: sql_help.c:4461 sql_help.c:4718 sql_help.c:4956 +#: sql_help.c:4476 sql_help.c:4733 sql_help.c:4971 msgid "join_condition" msgstr "умова_поєднання" -#: sql_help.c:4462 sql_help.c:4719 sql_help.c:4957 +#: sql_help.c:4477 sql_help.c:4734 sql_help.c:4972 msgid "join_column" msgstr "стовпець_поєднання" -#: sql_help.c:4463 sql_help.c:4720 sql_help.c:4958 +#: sql_help.c:4478 sql_help.c:4735 sql_help.c:4973 msgid "join_using_alias" msgstr "join_using_alias" -#: sql_help.c:4469 sql_help.c:4726 sql_help.c:4964 +#: sql_help.c:4484 sql_help.c:4741 sql_help.c:4979 msgid "and grouping_element can be one of:" msgstr "і елемент_групування може бути одним з:" -#: sql_help.c:4477 sql_help.c:4734 sql_help.c:4972 +#: sql_help.c:4492 sql_help.c:4749 sql_help.c:4987 msgid "and with_query is:" msgstr "і запит_WITH:" -#: sql_help.c:4481 sql_help.c:4738 sql_help.c:4976 +#: sql_help.c:4496 sql_help.c:4753 sql_help.c:4991 msgid "values" msgstr "значення" -#: sql_help.c:4482 sql_help.c:4739 sql_help.c:4977 +#: sql_help.c:4497 sql_help.c:4754 sql_help.c:4992 msgid "insert" msgstr "вставка" -#: sql_help.c:4483 sql_help.c:4740 sql_help.c:4978 +#: sql_help.c:4498 sql_help.c:4755 sql_help.c:4993 msgid "update" msgstr "оновлення" -#: sql_help.c:4484 sql_help.c:4741 sql_help.c:4979 +#: sql_help.c:4499 sql_help.c:4756 sql_help.c:4994 msgid "delete" msgstr "видалення" -#: sql_help.c:4486 sql_help.c:4743 sql_help.c:4981 +#: sql_help.c:4501 sql_help.c:4758 sql_help.c:4996 msgid "search_seq_col_name" msgstr "search_seq_col_name" -#: sql_help.c:4488 sql_help.c:4745 sql_help.c:4983 +#: sql_help.c:4503 sql_help.c:4760 sql_help.c:4998 msgid "cycle_mark_col_name" msgstr "cycle_mark_col_name" -#: sql_help.c:4489 sql_help.c:4746 sql_help.c:4984 +#: sql_help.c:4504 sql_help.c:4761 sql_help.c:4999 msgid "cycle_mark_value" msgstr "cycle_mark_value" -#: sql_help.c:4490 sql_help.c:4747 sql_help.c:4985 +#: sql_help.c:4505 sql_help.c:4762 sql_help.c:5000 msgid "cycle_mark_default" msgstr "cycle_mark_default" -#: sql_help.c:4491 sql_help.c:4748 sql_help.c:4986 +#: sql_help.c:4506 sql_help.c:4763 sql_help.c:5001 msgid "cycle_path_col_name" msgstr "cycle_path_col_name" -#: sql_help.c:4518 +#: sql_help.c:4533 msgid "new_table" msgstr "нова_таблиця" -#: sql_help.c:4589 +#: sql_help.c:4604 msgid "snapshot_id" msgstr "код_знімку" -#: sql_help.c:4849 +#: sql_help.c:4864 msgid "sort_expression" msgstr "вираз_сортування" -#: sql_help.c:4993 sql_help.c:5971 +#: sql_help.c:5008 sql_help.c:5986 msgid "abort the current transaction" msgstr "перервати поточну транзакцію" -#: sql_help.c:4999 +#: sql_help.c:5014 msgid "change the definition of an aggregate function" msgstr "змінити визначення агрегатної функції" -#: sql_help.c:5005 +#: sql_help.c:5020 msgid "change the definition of a collation" msgstr "змінити визначення правила сортування" -#: sql_help.c:5011 +#: sql_help.c:5026 msgid "change the definition of a conversion" msgstr "змінити визначення перетворення" -#: sql_help.c:5017 +#: sql_help.c:5032 msgid "change a database" msgstr "змінити базу даних" -#: sql_help.c:5023 +#: sql_help.c:5038 msgid "define default access privileges" msgstr "визначити права доступу за замовчуванням" -#: sql_help.c:5029 +#: sql_help.c:5044 msgid "change the definition of a domain" msgstr "змінити визначення домену" -#: sql_help.c:5035 +#: sql_help.c:5050 msgid "change the definition of an event trigger" msgstr "змінити визначення тригеру події" -#: sql_help.c:5041 +#: sql_help.c:5056 msgid "change the definition of an extension" msgstr "змінити визначення розширення" -#: sql_help.c:5047 +#: sql_help.c:5062 msgid "change the definition of a foreign-data wrapper" msgstr "змінити визначення джерела сторонніх даних" -#: sql_help.c:5053 +#: sql_help.c:5068 msgid "change the definition of a foreign table" msgstr "змінити визначення сторонньої таблиці" -#: sql_help.c:5059 +#: sql_help.c:5074 msgid "change the definition of a function" msgstr "змінити визначення функції" -#: sql_help.c:5065 +#: sql_help.c:5080 msgid "change role name or membership" msgstr "змінити назву ролі або членства" -#: sql_help.c:5071 +#: sql_help.c:5086 msgid "change the definition of an index" msgstr "змінити визначення індексу" -#: sql_help.c:5077 +#: sql_help.c:5092 msgid "change the definition of a procedural language" msgstr "змінити визначення процедурної мови" -#: sql_help.c:5083 +#: sql_help.c:5098 msgid "change the definition of a large object" msgstr "змінити визначення великого об'єкту" -#: sql_help.c:5089 +#: sql_help.c:5104 msgid "change the definition of a materialized view" msgstr "змінити визначення матеріалізованого подання" -#: sql_help.c:5095 +#: sql_help.c:5110 msgid "change the definition of an operator" msgstr "змінити визначення оператора" -#: sql_help.c:5101 +#: sql_help.c:5116 msgid "change the definition of an operator class" msgstr "змінити визначення класа операторів" -#: sql_help.c:5107 +#: sql_help.c:5122 msgid "change the definition of an operator family" msgstr "змінити визначення сімейства операторів" -#: sql_help.c:5113 +#: sql_help.c:5128 msgid "change the definition of a row-level security policy" msgstr "змінити визначення політики безпеки на рівні рядків" -#: sql_help.c:5119 +#: sql_help.c:5134 msgid "change the definition of a procedure" msgstr "змінити визначення процедури" -#: sql_help.c:5125 +#: sql_help.c:5140 msgid "change the definition of a publication" msgstr "змінити визначення публікації" -#: sql_help.c:5131 sql_help.c:5233 +#: sql_help.c:5146 sql_help.c:5248 msgid "change a database role" msgstr "змінити роль бази даних" -#: sql_help.c:5137 +#: sql_help.c:5152 msgid "change the definition of a routine" msgstr "змінити визначення підпрограми" -#: sql_help.c:5143 +#: sql_help.c:5158 msgid "change the definition of a rule" msgstr "змінити визначення правила" -#: sql_help.c:5149 +#: sql_help.c:5164 msgid "change the definition of a schema" msgstr "змінити визначення схеми" -#: sql_help.c:5155 +#: sql_help.c:5170 msgid "change the definition of a sequence generator" msgstr "змінити визначення генератору послідовності" -#: sql_help.c:5161 +#: sql_help.c:5176 msgid "change the definition of a foreign server" msgstr "змінити визначення стороннього серверу" -#: sql_help.c:5167 +#: sql_help.c:5182 msgid "change the definition of an extended statistics object" msgstr "змінити визначення об'єкту розширеної статистики" -#: sql_help.c:5173 +#: sql_help.c:5188 msgid "change the definition of a subscription" msgstr "змінити визначення підписки" -#: sql_help.c:5179 +#: sql_help.c:5194 msgid "change a server configuration parameter" msgstr "змінити параметр конфігурації сервера" -#: sql_help.c:5185 +#: sql_help.c:5200 msgid "change the definition of a table" msgstr "змінити визначення таблиці" -#: sql_help.c:5191 +#: sql_help.c:5206 msgid "change the definition of a tablespace" msgstr "змінити визначення табличного простору" -#: sql_help.c:5197 +#: sql_help.c:5212 msgid "change the definition of a text search configuration" msgstr "змінити визначення конфігурації текстового пошуку" -#: sql_help.c:5203 +#: sql_help.c:5218 msgid "change the definition of a text search dictionary" msgstr "змінити визначення словника текстового пошуку" -#: sql_help.c:5209 +#: sql_help.c:5224 msgid "change the definition of a text search parser" msgstr "змінити визначення парсера текстового пошуку" -#: sql_help.c:5215 +#: sql_help.c:5230 msgid "change the definition of a text search template" msgstr "змінити визначення шаблона текстового пошуку" -#: sql_help.c:5221 +#: sql_help.c:5236 msgid "change the definition of a trigger" msgstr "змінити визначення тригеру" -#: sql_help.c:5227 +#: sql_help.c:5242 msgid "change the definition of a type" msgstr "змінити визначення типу" -#: sql_help.c:5239 +#: sql_help.c:5254 msgid "change the definition of a user mapping" msgstr "змінити визначення зіставлень користувачів" -#: sql_help.c:5245 +#: sql_help.c:5260 msgid "change the definition of a view" msgstr "змінити визначення подання" -#: sql_help.c:5251 +#: sql_help.c:5266 msgid "collect statistics about a database" msgstr "зібрати статистику про базу даних" -#: sql_help.c:5257 sql_help.c:6049 +#: sql_help.c:5272 sql_help.c:6064 msgid "start a transaction block" msgstr "розпочати транзакцію" -#: sql_help.c:5263 +#: sql_help.c:5278 msgid "invoke a procedure" msgstr "викликати процедуру" -#: sql_help.c:5269 +#: sql_help.c:5284 msgid "force a write-ahead log checkpoint" msgstr "провести контрольну точку в журналі попереднього запису" -#: sql_help.c:5275 +#: sql_help.c:5290 msgid "close a cursor" msgstr "закрити курсор" -#: sql_help.c:5281 +#: sql_help.c:5296 msgid "cluster a table according to an index" msgstr "перегрупувати таблицю за індексом" -#: sql_help.c:5287 +#: sql_help.c:5302 msgid "define or change the comment of an object" msgstr "задати або змінити коментар об'єкта" -#: sql_help.c:5293 sql_help.c:5851 +#: sql_help.c:5308 sql_help.c:5866 msgid "commit the current transaction" msgstr "затвердити поточну транзакцію" -#: sql_help.c:5299 +#: sql_help.c:5314 msgid "commit a transaction that was earlier prepared for two-phase commit" msgstr "затвердити транзакцію, раніше підготовлену до двохфазного затвердження" -#: sql_help.c:5305 +#: sql_help.c:5320 msgid "copy data between a file and a table" msgstr "копіювати дані між файлом та таблицею" -#: sql_help.c:5311 +#: sql_help.c:5326 msgid "define a new access method" msgstr "визначити новий метод доступу" -#: sql_help.c:5317 +#: sql_help.c:5332 msgid "define a new aggregate function" msgstr "визначити нову агрегатну функцію" -#: sql_help.c:5323 +#: sql_help.c:5338 msgid "define a new cast" msgstr "визначити приведення типів" -#: sql_help.c:5329 +#: sql_help.c:5344 msgid "define a new collation" msgstr "визначити нове правило сортування" -#: sql_help.c:5335 +#: sql_help.c:5350 msgid "define a new encoding conversion" msgstr "визначити нове перетворення кодування" -#: sql_help.c:5341 +#: sql_help.c:5356 msgid "create a new database" msgstr "створити нову базу даних" -#: sql_help.c:5347 +#: sql_help.c:5362 msgid "define a new domain" msgstr "визначити новий домен" -#: sql_help.c:5353 +#: sql_help.c:5368 msgid "define a new event trigger" msgstr "визначити новий тригер події" -#: sql_help.c:5359 +#: sql_help.c:5374 msgid "install an extension" msgstr "встановити розширення" -#: sql_help.c:5365 +#: sql_help.c:5380 msgid "define a new foreign-data wrapper" msgstr "визначити нове джерело сторонніх даних" -#: sql_help.c:5371 +#: sql_help.c:5386 msgid "define a new foreign table" msgstr "визначити нову сторонню таблицю" -#: sql_help.c:5377 +#: sql_help.c:5392 msgid "define a new function" msgstr "визначити нову функцію" -#: sql_help.c:5383 sql_help.c:5443 sql_help.c:5545 +#: sql_help.c:5398 sql_help.c:5458 sql_help.c:5560 msgid "define a new database role" msgstr "визначити нову роль бази даних" -#: sql_help.c:5389 +#: sql_help.c:5404 msgid "define a new index" msgstr "визначити новий індекс" -#: sql_help.c:5395 +#: sql_help.c:5410 msgid "define a new procedural language" msgstr "визначити нову процедурну мову" -#: sql_help.c:5401 +#: sql_help.c:5416 msgid "define a new materialized view" msgstr "визначити нове матеріалізоване подання" -#: sql_help.c:5407 +#: sql_help.c:5422 msgid "define a new operator" msgstr "визначити новий оператор" -#: sql_help.c:5413 +#: sql_help.c:5428 msgid "define a new operator class" msgstr "визначити новий клас оператора" -#: sql_help.c:5419 +#: sql_help.c:5434 msgid "define a new operator family" msgstr "визначити нове сімейство операторів" -#: sql_help.c:5425 +#: sql_help.c:5440 msgid "define a new row-level security policy for a table" msgstr "визначити нову політику безпеки на рівні рядків для таблиці" -#: sql_help.c:5431 +#: sql_help.c:5446 msgid "define a new procedure" msgstr "визначити нову процедуру" -#: sql_help.c:5437 +#: sql_help.c:5452 msgid "define a new publication" msgstr "визначити нову публікацію" -#: sql_help.c:5449 +#: sql_help.c:5464 msgid "define a new rewrite rule" msgstr "визначити нове правило перезапису" -#: sql_help.c:5455 +#: sql_help.c:5470 msgid "define a new schema" msgstr "визначити нову схему" -#: sql_help.c:5461 +#: sql_help.c:5476 msgid "define a new sequence generator" msgstr "визначити новий генератор послідовностей" -#: sql_help.c:5467 +#: sql_help.c:5482 msgid "define a new foreign server" msgstr "визначити новий сторонній сервер" -#: sql_help.c:5473 +#: sql_help.c:5488 msgid "define extended statistics" msgstr "визначити розширену статистику" -#: sql_help.c:5479 +#: sql_help.c:5494 msgid "define a new subscription" msgstr "визначити нову підписку" -#: sql_help.c:5485 +#: sql_help.c:5500 msgid "define a new table" msgstr "визначити нову таблицю" -#: sql_help.c:5491 sql_help.c:6007 +#: sql_help.c:5506 sql_help.c:6022 msgid "define a new table from the results of a query" msgstr "визначити нову таблицю з результатів запиту" -#: sql_help.c:5497 +#: sql_help.c:5512 msgid "define a new tablespace" msgstr "визначити новий табличний простір" -#: sql_help.c:5503 +#: sql_help.c:5518 msgid "define a new text search configuration" msgstr "визначити нову конфігурацію текстового пошуку" -#: sql_help.c:5509 +#: sql_help.c:5524 msgid "define a new text search dictionary" msgstr "визначити новий словник текстового пошуку" -#: sql_help.c:5515 +#: sql_help.c:5530 msgid "define a new text search parser" msgstr "визначити новий аналізатор текстового пошуку" -#: sql_help.c:5521 +#: sql_help.c:5536 msgid "define a new text search template" msgstr "визначити новий шаблон текстового пошуку" -#: sql_help.c:5527 +#: sql_help.c:5542 msgid "define a new transform" msgstr "визначити нове перетворення" -#: sql_help.c:5533 +#: sql_help.c:5548 msgid "define a new trigger" msgstr "визначити новий тригер" -#: sql_help.c:5539 +#: sql_help.c:5554 msgid "define a new data type" msgstr "визначити новий тип даних" -#: sql_help.c:5551 +#: sql_help.c:5566 msgid "define a new mapping of a user to a foreign server" msgstr "визначити нове зіставлення користувача для стороннього сервера" -#: sql_help.c:5557 +#: sql_help.c:5572 msgid "define a new view" msgstr "визначити нове подання" -#: sql_help.c:5563 +#: sql_help.c:5578 msgid "deallocate a prepared statement" msgstr "звільнити підготовлену команду" -#: sql_help.c:5569 +#: sql_help.c:5584 msgid "define a cursor" msgstr "визначити курсор" -#: sql_help.c:5575 +#: sql_help.c:5590 msgid "delete rows of a table" msgstr "видалити рядки таблиці" -#: sql_help.c:5581 +#: sql_help.c:5596 msgid "discard session state" msgstr "очистити стан сесії" -#: sql_help.c:5587 +#: sql_help.c:5602 msgid "execute an anonymous code block" msgstr "виконати анонімний блок коду" -#: sql_help.c:5593 +#: sql_help.c:5608 msgid "remove an access method" msgstr "видалити метод доступу" -#: sql_help.c:5599 +#: sql_help.c:5614 msgid "remove an aggregate function" msgstr "видалити агрегатну функцію" -#: sql_help.c:5605 +#: sql_help.c:5620 msgid "remove a cast" msgstr "видалити приведення типів" -#: sql_help.c:5611 +#: sql_help.c:5626 msgid "remove a collation" msgstr "видалити правило сортування" -#: sql_help.c:5617 +#: sql_help.c:5632 msgid "remove a conversion" msgstr "видалити перетворення" -#: sql_help.c:5623 +#: sql_help.c:5638 msgid "remove a database" msgstr "видалити базу даних" -#: sql_help.c:5629 +#: sql_help.c:5644 msgid "remove a domain" msgstr "видалити домен" -#: sql_help.c:5635 +#: sql_help.c:5650 msgid "remove an event trigger" msgstr "видалити тригер події" -#: sql_help.c:5641 +#: sql_help.c:5656 msgid "remove an extension" msgstr "видалити розширення" -#: sql_help.c:5647 +#: sql_help.c:5662 msgid "remove a foreign-data wrapper" msgstr "видалити джерело сторонніх даних" -#: sql_help.c:5653 +#: sql_help.c:5668 msgid "remove a foreign table" msgstr "видалити сторонню таблицю" -#: sql_help.c:5659 +#: sql_help.c:5674 msgid "remove a function" msgstr "видалити функцію" -#: sql_help.c:5665 sql_help.c:5731 sql_help.c:5833 +#: sql_help.c:5680 sql_help.c:5746 sql_help.c:5848 msgid "remove a database role" msgstr "видалити роль бази даних" -#: sql_help.c:5671 +#: sql_help.c:5686 msgid "remove an index" msgstr "видалити індекс" -#: sql_help.c:5677 +#: sql_help.c:5692 msgid "remove a procedural language" msgstr "видалити процедурну мову" -#: sql_help.c:5683 +#: sql_help.c:5698 msgid "remove a materialized view" msgstr "видалити матеріалізоване подання" -#: sql_help.c:5689 +#: sql_help.c:5704 msgid "remove an operator" msgstr "видалити оператор" -#: sql_help.c:5695 +#: sql_help.c:5710 msgid "remove an operator class" msgstr "видалити клас операторів" -#: sql_help.c:5701 +#: sql_help.c:5716 msgid "remove an operator family" msgstr "видалити сімейство операторів" -#: sql_help.c:5707 +#: sql_help.c:5722 msgid "remove database objects owned by a database role" msgstr "видалити об'єкти бази даних, що належать ролі" -#: sql_help.c:5713 +#: sql_help.c:5728 msgid "remove a row-level security policy from a table" msgstr "видалити політику безпеки на рівні рядків з таблиці" -#: sql_help.c:5719 +#: sql_help.c:5734 msgid "remove a procedure" msgstr "видалити процедуру" -#: sql_help.c:5725 +#: sql_help.c:5740 msgid "remove a publication" msgstr "видалити публікацію" -#: sql_help.c:5737 +#: sql_help.c:5752 msgid "remove a routine" msgstr "видалити підпрограму" -#: sql_help.c:5743 +#: sql_help.c:5758 msgid "remove a rewrite rule" msgstr "видалити правило перезапису" -#: sql_help.c:5749 +#: sql_help.c:5764 msgid "remove a schema" msgstr "видалити схему" -#: sql_help.c:5755 +#: sql_help.c:5770 msgid "remove a sequence" msgstr "видалити послідовність" -#: sql_help.c:5761 +#: sql_help.c:5776 msgid "remove a foreign server descriptor" msgstr "видалити опис стороннього серверу" -#: sql_help.c:5767 +#: sql_help.c:5782 msgid "remove extended statistics" msgstr "видалити розширену статистику" -#: sql_help.c:5773 +#: sql_help.c:5788 msgid "remove a subscription" msgstr "видалити підписку" -#: sql_help.c:5779 +#: sql_help.c:5794 msgid "remove a table" msgstr "видалити таблицю" -#: sql_help.c:5785 +#: sql_help.c:5800 msgid "remove a tablespace" msgstr "видалити табличний простір" -#: sql_help.c:5791 +#: sql_help.c:5806 msgid "remove a text search configuration" msgstr "видалити конфігурацію тектового пошуку" -#: sql_help.c:5797 +#: sql_help.c:5812 msgid "remove a text search dictionary" msgstr "видалити словник тектового пошуку" -#: sql_help.c:5803 +#: sql_help.c:5818 msgid "remove a text search parser" msgstr "видалити парсер тектового пошуку" -#: sql_help.c:5809 +#: sql_help.c:5824 msgid "remove a text search template" msgstr "видалити шаблон тектового пошуку" -#: sql_help.c:5815 +#: sql_help.c:5830 msgid "remove a transform" msgstr "видалити перетворення" -#: sql_help.c:5821 +#: sql_help.c:5836 msgid "remove a trigger" msgstr "видалити тригер" -#: sql_help.c:5827 +#: sql_help.c:5842 msgid "remove a data type" msgstr "видалити тип даних" -#: sql_help.c:5839 +#: sql_help.c:5854 msgid "remove a user mapping for a foreign server" msgstr "видалити зіставлення користувача для стороннього серверу" -#: sql_help.c:5845 +#: sql_help.c:5860 msgid "remove a view" msgstr "видалити подання" -#: sql_help.c:5857 +#: sql_help.c:5872 msgid "execute a prepared statement" msgstr "виконати підготовлену команду" -#: sql_help.c:5863 +#: sql_help.c:5878 msgid "show the execution plan of a statement" msgstr "показати план виконання команди" -#: sql_help.c:5869 +#: sql_help.c:5884 msgid "retrieve rows from a query using a cursor" msgstr "отримати рядки запиту з курсору" -#: sql_help.c:5875 +#: sql_help.c:5890 msgid "define access privileges" msgstr "визначити права доступу" -#: sql_help.c:5881 +#: sql_help.c:5896 msgid "import table definitions from a foreign server" msgstr "імпортувати визначення таблиць зі стороннього серверу" -#: sql_help.c:5887 +#: sql_help.c:5902 msgid "create new rows in a table" msgstr "створити нові рядки в таблиці" -#: sql_help.c:5893 +#: sql_help.c:5908 msgid "listen for a notification" msgstr "очікувати на повідомлення" -#: sql_help.c:5899 +#: sql_help.c:5914 msgid "load a shared library file" msgstr "завантажити файл спільної бібліотеки" -#: sql_help.c:5905 +#: sql_help.c:5920 msgid "lock a table" msgstr "заблокувати таблицю" -#: sql_help.c:5911 +#: sql_help.c:5926 msgid "position a cursor" msgstr "розташувати курсор" -#: sql_help.c:5917 +#: sql_help.c:5932 msgid "generate a notification" msgstr "згенерувати повідомлення" -#: sql_help.c:5923 +#: sql_help.c:5938 msgid "prepare a statement for execution" msgstr "підготувати команду для виконання" -#: sql_help.c:5929 +#: sql_help.c:5944 msgid "prepare the current transaction for two-phase commit" msgstr "підготувати поточну транзакцію для двохфазного затвердження" -#: sql_help.c:5935 +#: sql_help.c:5950 msgid "change the ownership of database objects owned by a database role" msgstr "змінити власника об'єктів БД, що належать заданій ролі" -#: sql_help.c:5941 +#: sql_help.c:5956 msgid "replace the contents of a materialized view" msgstr "замінити вміст матеріалізованого подання" -#: sql_help.c:5947 +#: sql_help.c:5962 msgid "rebuild indexes" msgstr "перебудувати індекси" -#: sql_help.c:5953 +#: sql_help.c:5968 msgid "destroy a previously defined savepoint" msgstr "видалити раніше визначену точку збереження" -#: sql_help.c:5959 +#: sql_help.c:5974 msgid "restore the value of a run-time parameter to the default value" msgstr "відновити початкове значення параметру виконання" -#: sql_help.c:5965 +#: sql_help.c:5980 msgid "remove access privileges" msgstr "видалити права доступу" -#: sql_help.c:5977 +#: sql_help.c:5992 msgid "cancel a transaction that was earlier prepared for two-phase commit" msgstr "скасувати транзакцію, раніше підготовлену до двохфазного затвердження" -#: sql_help.c:5983 +#: sql_help.c:5998 msgid "roll back to a savepoint" msgstr "відкотитися до точки збереження" -#: sql_help.c:5989 +#: sql_help.c:6004 msgid "define a new savepoint within the current transaction" msgstr "визначити нову точку збереження в рамках поточної транзакції" -#: sql_help.c:5995 +#: sql_help.c:6010 msgid "define or change a security label applied to an object" msgstr "визначити або змінити мітку безпеки, застосовану до об'єкта" -#: sql_help.c:6001 sql_help.c:6055 sql_help.c:6091 +#: sql_help.c:6016 sql_help.c:6070 sql_help.c:6106 msgid "retrieve rows from a table or view" msgstr "отримати рядки з таблиці або подання" -#: sql_help.c:6013 +#: sql_help.c:6028 msgid "change a run-time parameter" msgstr "змінити параметр виконання" -#: sql_help.c:6019 +#: sql_help.c:6034 msgid "set constraint check timing for the current transaction" msgstr "встановити час перевірки обмеження для поточної транзакції" -#: sql_help.c:6025 +#: sql_help.c:6040 msgid "set the current user identifier of the current session" msgstr "встановити ідентифікатор поточного користувача в поточній сесії" -#: sql_help.c:6031 +#: sql_help.c:6046 msgid "set the session user identifier and the current user identifier of the current session" msgstr "встановити ідентифікатор користувача сесії й ідентифікатор поточного користувача в поточній сесії" -#: sql_help.c:6037 +#: sql_help.c:6052 msgid "set the characteristics of the current transaction" msgstr "встановити характеристики поточної транзакції" -#: sql_help.c:6043 +#: sql_help.c:6058 msgid "show the value of a run-time parameter" msgstr "показати значення параметра виконання" -#: sql_help.c:6061 +#: sql_help.c:6076 msgid "empty a table or set of tables" msgstr "очистити таблицю або декілька таблиць" -#: sql_help.c:6067 +#: sql_help.c:6082 msgid "stop listening for a notification" msgstr "припинити очікування повідомлень" -#: sql_help.c:6073 +#: sql_help.c:6088 msgid "update rows of a table" msgstr "змінити рядки таблиці" -#: sql_help.c:6079 +#: sql_help.c:6094 msgid "garbage-collect and optionally analyze a database" msgstr "виконати збір сміття і проаналізувати базу даних" -#: sql_help.c:6085 +#: sql_help.c:6100 msgid "compute a set of rows" msgstr "отримати набір рядків" @@ -6253,7 +6294,7 @@ msgstr "зайвий аргумент \"%s\" проігнорований" msgid "could not find own program executable" msgstr "не вдалося знайти ехе файл власної програми" -#: tab-complete.c:4940 +#: tab-complete.c:4954 #, c-format msgid "tab completion query failed: %s\n" "Query was:\n" diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index fce545988f2..9cbeb46c112 100755 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1033,6 +1033,18 @@ static const SchemaQuery Query_for_list_of_collations = { " FROM pg_catalog.pg_cursors "\ " WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'" +/* COPY options shared between FROM and TO */ +#define Copy_common_options \ +"DELIMITER", "ENCODING", "ESCAPE", "FORMAT", "HEADER", "NULL", "QUOTE" + +/* COPY FROM options */ +#define Copy_from_options \ +Copy_common_options, "FORCE_NOT_NULL", "FORCE_NULL", "FREEZE" + +/* COPY TO options */ +#define Copy_to_options \ +Copy_common_options, "FORCE_QUOTE" + /* * These object types were introduced later than our support cutoff of * server version 7.4. We use the VersionedQuery infrastructure so that @@ -1568,10 +1580,10 @@ psql_completion(const char *text, int start, int end) "\\o", "\\p", "\\password", "\\prompt", "\\pset", "\\q", "\\qecho", - "\\r", + "\\r", "\\restrict", "\\s", "\\set", "\\setenv", "\\sf", "\\sv", "\\t", "\\T", "\\timing", - "\\unset", + "\\unrestrict", "\\unset", "\\x", "\\w", "\\warn", "\\watch", "\\z", @@ -2458,11 +2470,13 @@ psql_completion(const char *text, int start, int end) else if (Matches("COPY|\\copy", MatchAny, "FROM", MatchAny)) COMPLETE_WITH("WITH (", "WHERE"); - /* Complete COPY FROM|TO filename WITH ( */ - else if (Matches("COPY|\\copy", MatchAny, "FROM|TO", MatchAny, "WITH", "(")) - COMPLETE_WITH("FORMAT", "FREEZE", "DELIMITER", "NULL", - "HEADER", "QUOTE", "ESCAPE", "FORCE_QUOTE", - "FORCE_NOT_NULL", "FORCE_NULL", "ENCODING"); + /* Complete COPY FROM filename WITH ( */ + else if (Matches("COPY|\\copy", MatchAny, "FROM", MatchAny, "WITH", "(")) + COMPLETE_WITH(Copy_from_options); + + /* Complete COPY TO filename WITH ( */ + else if (Matches("COPY|\\copy", MatchAny, "TO", MatchAny, "WITH", "(")) + COMPLETE_WITH(Copy_to_options); /* Complete COPY FROM|TO filename WITH (FORMAT */ else if (Matches("COPY|\\copy", MatchAny, "FROM|TO", MatchAny, "WITH", "(", "FORMAT")) diff --git a/src/bin/scripts/po/es.po b/src/bin/scripts/po/es.po index aa0e046ad54..7c2193aa4ba 100644 --- a/src/bin/scripts/po/es.po +++ b/src/bin/scripts/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:37+0000\n" +"POT-Creation-Date: 2026-02-06 21:33+0000\n" "PO-Revision-Date: 2022-01-12 17:38-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/bin/scripts/po/ru.po b/src/bin/scripts/po/ru.po index b6ebaa0ab9a..8c8cb4011fe 100644 --- a/src/bin/scripts/po/ru.po +++ b/src/bin/scripts/po/ru.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the PostgreSQL package. # Serguei A. Mokhov, , 2003-2004. # Oleg Bartunov , 2004. -# Alexander Lakhin , 2012-2017, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pgscripts (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-08 07:45+0200\n" +"POT-Creation-Date: 2025-05-03 16:01+0300\n" "PO-Revision-Date: 2024-09-05 08:25+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -184,19 +184,19 @@ msgstr "" "%s упорядочивает данные всех кластеризованных таблиц в базе данных.\n" "\n" -#: clusterdb.c:270 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169 -#: pg_isready.c:225 reindexdb.c:798 vacuumdb.c:1035 +#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:170 dropuser.c:170 +#: pg_isready.c:225 reindexdb.c:801 vacuumdb.c:1036 #, c-format msgid "Usage:\n" msgstr "Использование:\n" -#: clusterdb.c:271 reindexdb.c:799 vacuumdb.c:1036 +#: clusterdb.c:271 reindexdb.c:802 vacuumdb.c:1037 #, c-format msgid " %s [OPTION]... [DBNAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n" -#: clusterdb.c:272 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171 -#: pg_isready.c:228 reindexdb.c:800 vacuumdb.c:1037 +#: clusterdb.c:272 createdb.c:271 createuser.c:355 dropdb.c:172 dropuser.c:172 +#: pg_isready.c:228 reindexdb.c:803 vacuumdb.c:1038 #, c-format msgid "" "\n" @@ -215,7 +215,7 @@ msgstr " -a, --all кластеризовать все базы msgid " -d, --dbname=DBNAME database to cluster\n" msgstr " -d, --dbname=ИМЯ_БД имя базы данных для кластеризации\n" -#: clusterdb.c:275 createuser.c:357 dropdb.c:174 dropuser.c:172 +#: clusterdb.c:275 createuser.c:359 dropdb.c:173 dropuser.c:173 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" @@ -237,18 +237,18 @@ msgstr "" msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: clusterdb.c:279 createuser.c:369 dropdb.c:177 dropuser.c:175 +#: clusterdb.c:279 createuser.c:371 dropdb.c:176 dropuser.c:176 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: clusterdb.c:280 createuser.c:374 dropdb.c:179 dropuser.c:177 +#: clusterdb.c:280 createuser.c:376 dropdb.c:178 dropuser.c:178 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: clusterdb.c:281 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178 -#: pg_isready.c:234 reindexdb.c:815 vacuumdb.c:1062 +#: clusterdb.c:281 createdb.c:282 createuser.c:377 dropdb.c:179 dropuser.c:179 +#: pg_isready.c:234 reindexdb.c:818 vacuumdb.c:1063 #, c-format msgid "" "\n" @@ -257,35 +257,35 @@ msgstr "" "\n" "Параметры подключения:\n" -#: clusterdb.c:282 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1063 +#: clusterdb.c:282 createuser.c:378 dropdb.c:180 dropuser.c:180 vacuumdb.c:1064 #, c-format msgid " -h, --host=HOSTNAME database server host or socket directory\n" msgstr "" " -h, --host=ИМЯ компьютер с сервером баз данных или каталог " "сокетов\n" -#: clusterdb.c:283 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1064 +#: clusterdb.c:283 createuser.c:379 dropdb.c:181 dropuser.c:181 vacuumdb.c:1065 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" -#: clusterdb.c:284 dropdb.c:183 vacuumdb.c:1065 +#: clusterdb.c:284 dropdb.c:182 vacuumdb.c:1066 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: clusterdb.c:285 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1066 +#: clusterdb.c:285 createuser.c:381 dropdb.c:183 dropuser.c:183 vacuumdb.c:1067 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: clusterdb.c:286 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1067 +#: clusterdb.c:286 createuser.c:382 dropdb.c:184 dropuser.c:184 vacuumdb.c:1068 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: clusterdb.c:287 dropdb.c:186 vacuumdb.c:1068 +#: clusterdb.c:287 dropdb.c:185 vacuumdb.c:1069 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=ИМЯ_БД сменить опорную базу данных\n" @@ -299,8 +299,8 @@ msgstr "" "\n" "Подробнее о кластеризации вы можете узнать в описании SQL-команды CLUSTER.\n" -#: clusterdb.c:289 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184 -#: pg_isready.c:239 reindexdb.c:823 vacuumdb.c:1070 +#: clusterdb.c:289 createdb.c:290 createuser.c:383 dropdb.c:186 dropuser.c:185 +#: pg_isready.c:239 reindexdb.c:826 vacuumdb.c:1071 #, c-format msgid "" "\n" @@ -309,8 +309,8 @@ msgstr "" "\n" "Об ошибках сообщайте по адресу <%s>.\n" -#: clusterdb.c:290 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185 -#: pg_isready.c:240 reindexdb.c:824 vacuumdb.c:1071 +#: clusterdb.c:290 createdb.c:291 createuser.c:384 dropdb.c:187 dropuser.c:186 +#: pg_isready.c:240 reindexdb.c:827 vacuumdb.c:1072 #, c-format msgid "%s home page: <%s>\n" msgstr "Домашняя страница %s: <%s>\n" @@ -324,23 +324,23 @@ msgstr[1] "запрос вернул %d строки вместо одной: %s msgstr[2] "запрос вернул %d строк вместо одной: %s" #. translator: abbreviation for "yes" -#: common.c:131 +#: common.c:132 msgid "y" msgstr "y" #. translator: abbreviation for "no" -#: common.c:133 +#: common.c:134 msgid "n" msgstr "n" #. translator: This is a question followed by the translated options for #. "yes" and "no". -#: common.c:143 +#: common.c:144 #, c-format msgid "%s (%s/%s) " msgstr "%s (%s - да/%s - нет) " -#: common.c:164 +#: common.c:165 #, c-format msgid "Please answer \"%s\" or \"%s\".\n" msgstr "Пожалуйста, введите \"%s\" или \"%s\".\n" @@ -360,17 +360,17 @@ msgstr "можно указать только --locale и --lc-collate" msgid "\"%s\" is not a valid encoding name" msgstr "\"%s\" не является верным названием кодировки" -#: createdb.c:229 +#: createdb.c:231 #, c-format msgid "database creation failed: %s" msgstr "создать базу данных не удалось: %s" -#: createdb.c:248 +#: createdb.c:250 #, c-format msgid "comment creation failed (database was created): %s" msgstr "создать комментарий не удалось (база данных была создана): %s" -#: createdb.c:266 +#: createdb.c:268 #, c-format msgid "" "%s creates a PostgreSQL database.\n" @@ -379,68 +379,68 @@ msgstr "" "%s создаёт базу данных PostgreSQL.\n" "\n" -#: createdb.c:268 +#: createdb.c:270 #, c-format msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД] [ОПИСАНИЕ]\n" # well-spelled: ПРОСТР -#: createdb.c:270 +#: createdb.c:272 #, c-format msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n" msgstr "" " -D, --tablespace=ТАБЛ_ПРОСТР табличное пространство по умолчанию для базы " "данных\n" -#: createdb.c:271 reindexdb.c:804 +#: createdb.c:273 reindexdb.c:807 #, c-format msgid "" " -e, --echo show the commands being sent to the server\n" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: createdb.c:272 +#: createdb.c:274 #, c-format msgid " -E, --encoding=ENCODING encoding for the database\n" msgstr " -E, --encoding=КОДИРОВКА кодировка базы данных\n" -#: createdb.c:273 +#: createdb.c:275 #, c-format msgid " -l, --locale=LOCALE locale settings for the database\n" msgstr " -l, --locale=ЛОКАЛЬ локаль для базы данных\n" -#: createdb.c:274 +#: createdb.c:276 #, c-format msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n" msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для базы данных\n" -#: createdb.c:275 +#: createdb.c:277 #, c-format msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n" msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для базы данных\n" -#: createdb.c:276 +#: createdb.c:278 #, c-format msgid " -O, --owner=OWNER database user to own the new database\n" msgstr "" " -O, --owner=ВЛАДЕЛЕЦ пользователь-владелец новой базы данных\n" -#: createdb.c:277 +#: createdb.c:279 #, c-format msgid " -T, --template=TEMPLATE template database to copy\n" msgstr " -T, --template=ШАБЛОН исходная база данных для копирования\n" -#: createdb.c:278 reindexdb.c:813 +#: createdb.c:280 reindexdb.c:816 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: createdb.c:279 reindexdb.c:814 +#: createdb.c:281 reindexdb.c:817 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: createdb.c:281 reindexdb.c:816 +#: createdb.c:283 reindexdb.c:819 #, c-format msgid "" " -h, --host=HOSTNAME database server host or socket directory\n" @@ -448,33 +448,33 @@ msgstr "" " -h, --host=ИМЯ компьютер с сервером баз данных или каталог " "сокетов\n" -#: createdb.c:282 reindexdb.c:817 +#: createdb.c:284 reindexdb.c:820 #, c-format msgid " -p, --port=PORT database server port\n" msgstr " -p, --port=ПОРТ порт сервера баз данных\n" -#: createdb.c:283 reindexdb.c:818 +#: createdb.c:285 reindexdb.c:821 #, c-format msgid " -U, --username=USERNAME user name to connect as\n" msgstr "" " -U, --username=ИМЯ имя пользователя для подключения к серверу\n" -#: createdb.c:284 reindexdb.c:819 +#: createdb.c:286 reindexdb.c:822 #, c-format msgid " -w, --no-password never prompt for password\n" msgstr " -w, --no-password не запрашивать пароль\n" -#: createdb.c:285 reindexdb.c:820 +#: createdb.c:287 reindexdb.c:823 #, c-format msgid " -W, --password force password prompt\n" msgstr " -W, --password запросить пароль\n" -#: createdb.c:286 reindexdb.c:821 +#: createdb.c:288 reindexdb.c:824 #, c-format msgid " --maintenance-db=DBNAME alternate maintenance database\n" msgstr " --maintenance-db=ИМЯ_БД сменить опорную базу данных\n" -#: createdb.c:287 +#: createdb.c:289 #, c-format msgid "" "\n" @@ -517,17 +517,17 @@ msgstr "Новая роль должна иметь право создават msgid "Shall the new role be allowed to create more new roles?" msgstr "Новая роль должна иметь право создавать другие роли?" -#: createuser.c:281 +#: createuser.c:283 #, c-format msgid "password encryption failed: %s" msgstr "ошибка при шифровании пароля: %s" -#: createuser.c:336 +#: createuser.c:338 #, c-format msgid "creation of new role failed: %s" msgstr "создать роль не удалось: %s" -#: createuser.c:350 +#: createuser.c:352 #, c-format msgid "" "%s creates a new PostgreSQL role.\n" @@ -536,12 +536,12 @@ msgstr "" "%s создаёт роль пользователя PostgreSQL.\n" "\n" -#: createuser.c:352 dropuser.c:170 +#: createuser.c:354 dropuser.c:171 #, c-format msgid " %s [OPTION]... [ROLENAME]\n" msgstr " %s [ПАРАМЕТР]... [ИМЯ_РОЛИ]\n" -#: createuser.c:354 +#: createuser.c:356 #, c-format msgid "" " -c, --connection-limit=N connection limit for role (default: no limit)\n" @@ -549,24 +549,24 @@ msgstr "" " -c, --connection-limit=N предел подключений для роли\n" " (по умолчанию предела нет)\n" -#: createuser.c:355 +#: createuser.c:357 #, c-format msgid " -d, --createdb role can create new databases\n" msgstr " -d, --createdb роль с правом создания баз данных\n" -#: createuser.c:356 +#: createuser.c:358 #, c-format msgid " -D, --no-createdb role cannot create databases (default)\n" msgstr "" " -D, --no-createdb роль без права создания баз данных (по " "умолчанию)\n" -#: createuser.c:358 +#: createuser.c:360 #, c-format msgid " -g, --role=ROLE new role will be a member of this role\n" msgstr " -g, --role=РОЛЬ новая роль будет включена в эту роль\n" -#: createuser.c:359 +#: createuser.c:361 #, c-format msgid "" " -i, --inherit role inherits privileges of roles it is a\n" @@ -576,52 +576,52 @@ msgstr "" "она\n" " включена (по умолчанию)\n" -#: createuser.c:361 +#: createuser.c:363 #, c-format msgid " -I, --no-inherit role does not inherit privileges\n" msgstr " -I, --no-inherit роль не наследует права\n" -#: createuser.c:362 +#: createuser.c:364 #, c-format msgid " -l, --login role can login (default)\n" msgstr "" " -l, --login роль с правом подключения к серверу (по " "умолчанию)\n" -#: createuser.c:363 +#: createuser.c:365 #, c-format msgid " -L, --no-login role cannot login\n" msgstr " -L, --no-login роль без права подключения\n" -#: createuser.c:364 +#: createuser.c:366 #, c-format msgid " -P, --pwprompt assign a password to new role\n" msgstr " -P, --pwprompt назначить пароль новой роли\n" -#: createuser.c:365 +#: createuser.c:367 #, c-format msgid " -r, --createrole role can create new roles\n" msgstr " -r, --createrole роль с правом создания других ролей\n" -#: createuser.c:366 +#: createuser.c:368 #, c-format msgid " -R, --no-createrole role cannot create roles (default)\n" msgstr "" " -R, --no-createrole роль без права создания ролей (по умолчанию)\n" -#: createuser.c:367 +#: createuser.c:369 #, c-format msgid " -s, --superuser role will be superuser\n" msgstr " -s, --superuser роль с полномочиями суперпользователя\n" -#: createuser.c:368 +#: createuser.c:370 #, c-format msgid " -S, --no-superuser role will not be superuser (default)\n" msgstr "" " -S, --no-superuser роль без полномочий суперпользователя (по " "умолчанию)\n" -#: createuser.c:370 +#: createuser.c:372 #, c-format msgid "" " --interactive prompt for missing role name and attributes " @@ -631,17 +631,17 @@ msgstr "" " --interactive запрашивать отсутствующие атрибуты и имя роли,\n" " а не использовать значения по умолчанию\n" -#: createuser.c:372 +#: createuser.c:374 #, c-format msgid " --replication role can initiate replication\n" msgstr " --replication роль может инициировать репликацию\n" -#: createuser.c:373 +#: createuser.c:375 #, c-format msgid " --no-replication role cannot initiate replication\n" msgstr " --no-replication роль не может инициировать репликацию\n" -#: createuser.c:378 +#: createuser.c:380 #, c-format msgid "" " -U, --username=USERNAME user name to connect as (not the one to create)\n" @@ -663,12 +663,12 @@ msgstr "База данных \"%s\" будет удалена безвозвр msgid "Are you sure?" msgstr "Вы уверены? (y/n)" -#: dropdb.c:156 +#: dropdb.c:155 #, c-format msgid "database removal failed: %s" msgstr "ошибка при удалении базы данных: %s" -#: dropdb.c:170 +#: dropdb.c:169 #, c-format msgid "" "%s removes a PostgreSQL database.\n" @@ -677,12 +677,12 @@ msgstr "" "%s удаляет базу данных PostgreSQL.\n" "\n" -#: dropdb.c:172 +#: dropdb.c:171 #, c-format msgid " %s [OPTION]... DBNAME\n" msgstr " %s [ПАРАМЕТР]... БД\n" -#: dropdb.c:175 +#: dropdb.c:174 #, c-format msgid "" " -f, --force try to terminate other connections before " @@ -691,12 +691,12 @@ msgstr "" " -f, --force пытаться закрыть другие подключения перед " "удалением\n" -#: dropdb.c:176 +#: dropdb.c:175 #, c-format msgid " -i, --interactive prompt before deleting anything\n" msgstr " -i, --interactive подтвердить операцию удаления\n" -#: dropdb.c:178 +#: dropdb.c:177 #, c-format msgid "" " --if-exists don't report error if database doesn't exist\n" @@ -717,12 +717,12 @@ msgstr "отсутствует необходимый аргумент: имя msgid "Role \"%s\" will be permanently removed.\n" msgstr "Роль \"%s\" будет удалена безвозвратно.\n" -#: dropuser.c:153 +#: dropuser.c:154 #, c-format msgid "removal of role \"%s\" failed: %s" msgstr "ошибка при удалении роли \"%s\": %s" -#: dropuser.c:168 +#: dropuser.c:169 #, c-format msgid "" "%s removes a PostgreSQL role.\n" @@ -731,7 +731,7 @@ msgstr "" "%s удаляет роль PostgreSQL.\n" "\n" -#: dropuser.c:173 +#: dropuser.c:174 #, c-format msgid "" " -i, --interactive prompt before deleting anything, and prompt for\n" @@ -740,13 +740,13 @@ msgstr "" " -i, --interactive подтверждать операцию удаления и запрашивать\n" " имя роли, если оно не указано\n" -#: dropuser.c:176 +#: dropuser.c:177 #, c-format msgid " --if-exists don't report error if user doesn't exist\n" msgstr "" " --if-exists не считать ошибкой отсутствие пользователя\n" -#: dropuser.c:181 +#: dropuser.c:182 #, c-format msgid "" " -U, --username=USERNAME user name to connect as (not the one to drop)\n" @@ -925,37 +925,37 @@ msgstr "" "все системные каталоги пропускаются, так как их нельзя переиндексировать " "неблокирующим способом" -#: reindexdb.c:605 +#: reindexdb.c:607 #, c-format msgid "reindexing of database \"%s\" failed: %s" msgstr "переиндексировать базу данных \"%s\" не удалось: %s" -#: reindexdb.c:609 +#: reindexdb.c:611 #, c-format msgid "reindexing of index \"%s\" in database \"%s\" failed: %s" msgstr "перестроить индекс \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:613 +#: reindexdb.c:615 #, c-format msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s" msgstr "переиндексировать схему \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:617 +#: reindexdb.c:619 #, c-format msgid "reindexing of system catalogs in database \"%s\" failed: %s" msgstr "переиндексировать системные каталоги в базе \"%s\" не удалось: %s" -#: reindexdb.c:621 +#: reindexdb.c:623 #, c-format msgid "reindexing of table \"%s\" in database \"%s\" failed: %s" msgstr "переиндексировать таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: reindexdb.c:780 +#: reindexdb.c:783 #, c-format msgid "%s: reindexing database \"%s\"\n" msgstr "%s: переиндексация базы данных \"%s\"\n" -#: reindexdb.c:797 +#: reindexdb.c:800 #, c-format msgid "" "%s reindexes a PostgreSQL database.\n" @@ -964,29 +964,29 @@ msgstr "" "%s переиндексирует базу данных PostgreSQL.\n" "\n" -#: reindexdb.c:801 +#: reindexdb.c:804 #, c-format msgid " -a, --all reindex all databases\n" msgstr " -a, --all переиндексировать все базы данных\n" -#: reindexdb.c:802 +#: reindexdb.c:805 #, c-format msgid " --concurrently reindex concurrently\n" msgstr "" " --concurrently переиндексировать в неблокирующем режиме\n" -#: reindexdb.c:803 +#: reindexdb.c:806 #, c-format msgid " -d, --dbname=DBNAME database to reindex\n" msgstr " -d, --dbname=БД имя базы для переиндексации\n" -#: reindexdb.c:805 +#: reindexdb.c:808 #, c-format msgid " -i, --index=INDEX recreate specific index(es) only\n" msgstr "" " -i, --index=ИНДЕКС пересоздать только указанный индекс(ы)\n" -#: reindexdb.c:806 +#: reindexdb.c:809 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " @@ -995,24 +995,24 @@ msgstr "" " -j, --jobs=ЧИСЛО запускать для переиндексации заданное число\n" " заданий\n" -#: reindexdb.c:807 +#: reindexdb.c:810 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить сообщения\n" -#: reindexdb.c:808 +#: reindexdb.c:811 #, c-format msgid " -s, --system reindex system catalogs only\n" msgstr "" " -s, --system переиндексировать только системные каталоги\n" -#: reindexdb.c:809 +#: reindexdb.c:812 #, c-format msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n" msgstr "" " -S, --schema=СХЕМА переиндексировать только указанную схему(ы)\n" -#: reindexdb.c:810 +#: reindexdb.c:813 #, c-format msgid " -t, --table=TABLE reindex specific table(s) only\n" msgstr "" @@ -1020,19 +1020,19 @@ msgstr "" "таблицу(ы)\n" # well-spelled: ПРОСТР -#: reindexdb.c:811 +#: reindexdb.c:814 #, c-format msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n" msgstr "" " --tablespace=ТАБЛ_ПРОСТР табличное пространство, в котором будут\n" " перестраиваться индексы\n" -#: reindexdb.c:812 +#: reindexdb.c:815 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: reindexdb.c:822 +#: reindexdb.c:825 #, c-format msgid "" "\n" @@ -1106,17 +1106,17 @@ msgstr "%s: обработка базы данных \"%s\": %s\n" msgid "%s: vacuuming database \"%s\"\n" msgstr "%s: очистка базы данных \"%s\"\n" -#: vacuumdb.c:1023 +#: vacuumdb.c:1024 #, c-format msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s" msgstr "очистить таблицу \"%s\" в базе \"%s\" не удалось: %s" -#: vacuumdb.c:1026 +#: vacuumdb.c:1027 #, c-format msgid "vacuuming of database \"%s\" failed: %s" msgstr "очистить базу данных \"%s\" не удалось: %s" -#: vacuumdb.c:1034 +#: vacuumdb.c:1035 #, c-format msgid "" "%s cleans and analyzes a PostgreSQL database.\n" @@ -1125,23 +1125,23 @@ msgstr "" "%s очищает и анализирует базу данных PostgreSQL.\n" "\n" -#: vacuumdb.c:1038 +#: vacuumdb.c:1039 #, c-format msgid " -a, --all vacuum all databases\n" msgstr " -a, --all очистить все базы данных\n" -#: vacuumdb.c:1039 +#: vacuumdb.c:1040 #, c-format msgid " -d, --dbname=DBNAME database to vacuum\n" msgstr " -d, --dbname=ИМЯ_БД очистить указанную базу данных\n" -#: vacuumdb.c:1040 +#: vacuumdb.c:1041 #, c-format msgid " --disable-page-skipping disable all page-skipping behavior\n" msgstr "" " --disable-page-skipping исключить все варианты пропуска страниц\n" -#: vacuumdb.c:1041 +#: vacuumdb.c:1042 #, c-format msgid "" " -e, --echo show the commands being sent to the " @@ -1149,19 +1149,19 @@ msgid "" msgstr "" " -e, --echo отображать команды, отправляемые серверу\n" -#: vacuumdb.c:1042 +#: vacuumdb.c:1043 #, c-format msgid " -f, --full do full vacuuming\n" msgstr " -f, --full произвести полную очистку\n" -#: vacuumdb.c:1043 +#: vacuumdb.c:1044 #, c-format msgid " -F, --freeze freeze row transaction information\n" msgstr "" " -F, --freeze заморозить информацию о транзакциях в " "строках\n" -#: vacuumdb.c:1044 +#: vacuumdb.c:1045 #, c-format msgid "" " --force-index-cleanup always remove index entries that point to " @@ -1171,7 +1171,7 @@ msgstr "" "указывающие\n" " на мёртвые кортежи\n" -#: vacuumdb.c:1045 +#: vacuumdb.c:1046 #, c-format msgid "" " -j, --jobs=NUM use this many concurrent connections to " @@ -1180,7 +1180,7 @@ msgstr "" " -j, --jobs=ЧИСЛО запускать для очистки заданное число " "заданий\n" -#: vacuumdb.c:1046 +#: vacuumdb.c:1047 #, c-format msgid "" " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to " @@ -1189,7 +1189,7 @@ msgstr "" " --min-mxid-age=ВОЗРАСТ минимальный возраст мультитранзакций для\n" " таблиц, подлежащих очистке\n" -#: vacuumdb.c:1047 +#: vacuumdb.c:1048 #, c-format msgid "" " --min-xid-age=XID_AGE minimum transaction ID age of tables to " @@ -1199,7 +1199,7 @@ msgstr "" "таблиц,\n" " подлежащих очистке\n" -#: vacuumdb.c:1048 +#: vacuumdb.c:1049 #, c-format msgid "" " --no-index-cleanup don't remove index entries that point to " @@ -1208,7 +1208,7 @@ msgstr "" " --no-index-cleanup не удалять элементы индекса, указывающие\n" " на мёртвые кортежи\n" -#: vacuumdb.c:1049 +#: vacuumdb.c:1050 #, c-format msgid "" " --no-process-toast skip the TOAST table associated with the " @@ -1217,7 +1217,7 @@ msgstr "" " --no-process-toast пропускать TOAST-таблицу, связанную\n" " с очищаемой таблицей\n" -#: vacuumdb.c:1050 +#: vacuumdb.c:1051 #, c-format msgid "" " --no-truncate don't truncate empty pages at the end of " @@ -1226,7 +1226,7 @@ msgstr "" " --no-truncate не отсекать пустые страницы в конце " "таблицы\n" -#: vacuumdb.c:1051 +#: vacuumdb.c:1052 #, c-format msgid "" " -P, --parallel=PARALLEL_WORKERS use this many background workers for " @@ -1236,12 +1236,12 @@ msgstr "" " по возможности использовать для очистки\n" " заданное число фоновых процессов\n" -#: vacuumdb.c:1052 +#: vacuumdb.c:1053 #, c-format msgid " -q, --quiet don't write any messages\n" msgstr " -q, --quiet не выводить сообщения\n" -#: vacuumdb.c:1053 +#: vacuumdb.c:1054 #, c-format msgid "" " --skip-locked skip relations that cannot be immediately " @@ -1250,29 +1250,29 @@ msgstr "" " --skip-locked пропускать отношения, которые не удаётся\n" " заблокировать немедленно\n" -#: vacuumdb.c:1054 +#: vacuumdb.c:1055 #, c-format msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n" msgstr "" " -t, --table='ТАБЛ[(СТОЛБЦЫ)]' очистить только указанную таблицу(ы)\n" -#: vacuumdb.c:1055 +#: vacuumdb.c:1056 #, c-format msgid " -v, --verbose write a lot of output\n" msgstr " -v, --verbose выводить исчерпывающие сообщения\n" -#: vacuumdb.c:1056 +#: vacuumdb.c:1057 #, c-format msgid "" " -V, --version output version information, then exit\n" msgstr " -V, --version показать версию и выйти\n" -#: vacuumdb.c:1057 +#: vacuumdb.c:1058 #, c-format msgid " -z, --analyze update optimizer statistics\n" msgstr " -z, --analyze обновить статистику оптимизатора\n" -#: vacuumdb.c:1058 +#: vacuumdb.c:1059 #, c-format msgid "" " -Z, --analyze-only only update optimizer statistics; no " @@ -1281,7 +1281,7 @@ msgstr "" " -Z, --analyze-only только обновить статистику оптимизатора,\n" " не очищать БД\n" -#: vacuumdb.c:1059 +#: vacuumdb.c:1060 #, c-format msgid "" " --analyze-in-stages only update optimizer statistics, in " @@ -1293,12 +1293,12 @@ msgstr "" " (в несколько проходов для большей " "скорости), без очистки\n" -#: vacuumdb.c:1061 +#: vacuumdb.c:1062 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help показать эту справку и выйти\n" -#: vacuumdb.c:1069 +#: vacuumdb.c:1070 #, c-format msgid "" "\n" diff --git a/src/common/jsonapi.c b/src/common/jsonapi.c index 8da2bdb271b..573375618d7 100644 --- a/src/common/jsonapi.c +++ b/src/common/jsonapi.c @@ -700,8 +700,11 @@ json_lex_string(JsonLexContext *lex) } while (0) #define FAIL_AT_CHAR_END(code) \ do { \ - char *term = s + pg_encoding_mblen(lex->input_encoding, s); \ - lex->token_terminator = (term <= end) ? term : end; \ + ptrdiff_t remaining = end - s; \ + int charlen; \ + charlen = pg_encoding_mblen_or_incomplete(lex->input_encoding, \ + s, remaining); \ + lex->token_terminator = (charlen <= remaining) ? s + charlen : end; \ return code; \ } while (0) diff --git a/src/common/saslprep.c b/src/common/saslprep.c index 0f224508d3f..7558b888edb 100644 --- a/src/common/saslprep.c +++ b/src/common/saslprep.c @@ -1009,15 +1009,17 @@ pg_utf8_string_len(const char *source) const unsigned char *p = (const unsigned char *) source; int l; int num_chars = 0; + size_t len = strlen(source); - while (*p) + while (len) { l = pg_utf_mblen(p); - if (!pg_utf8_islegal(p, l)) + if (len < l || !pg_utf8_islegal(p, l)) return -1; p += l; + len -= l; num_chars++; } diff --git a/src/common/wchar.c b/src/common/wchar.c index 35885fb6de7..a19570fd9ec 100644 --- a/src/common/wchar.c +++ b/src/common/wchar.c @@ -12,6 +12,8 @@ */ #include "c.h" +#include + #include "mb/pg_wchar.h" @@ -60,6 +62,9 @@ * subset to the ASCII routines to ensure consistency. */ +/* No error-reporting facility. Ignore incomplete trailing byte sequence. */ +#define MB2CHAR_NEED_AT_LEAST(len, need) if ((len) < (need)) break + /* * SQL/ASCII */ @@ -105,22 +110,24 @@ pg_euc2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) while (len > 0 && *from) { - if (*from == SS2 && len >= 2) /* JIS X 0201 (so called "1 byte - * KANA") */ + if (*from == SS2) /* JIS X 0201 (so called "1 byte KANA") */ { + MB2CHAR_NEED_AT_LEAST(len, 2); from++; *to = (SS2 << 8) | *from++; len -= 2; } - else if (*from == SS3 && len >= 3) /* JIS X 0212 KANJI */ + else if (*from == SS3) /* JIS X 0212 KANJI */ { + MB2CHAR_NEED_AT_LEAST(len, 3); from++; *to = (SS3 << 16) | (*from++ << 8); *to |= *from++; len -= 3; } - else if (IS_HIGHBIT_SET(*from) && len >= 2) /* JIS X 0208 KANJI */ + else if (IS_HIGHBIT_SET(*from)) /* JIS X 0208 KANJI */ { + MB2CHAR_NEED_AT_LEAST(len, 2); *to = *from++ << 8; *to |= *from++; len -= 2; @@ -232,22 +239,25 @@ pg_euccn2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) while (len > 0 && *from) { - if (*from == SS2 && len >= 3) /* code set 2 (unused?) */ + if (*from == SS2) /* code set 2 (unused?) */ { + MB2CHAR_NEED_AT_LEAST(len, 3); from++; *to = (SS2 << 16) | (*from++ << 8); *to |= *from++; len -= 3; } - else if (*from == SS3 && len >= 3) /* code set 3 (unused ?) */ + else if (*from == SS3) /* code set 3 (unused ?) */ { + MB2CHAR_NEED_AT_LEAST(len, 3); from++; *to = (SS3 << 16) | (*from++ << 8); *to |= *from++; len -= 3; } - else if (IS_HIGHBIT_SET(*from) && len >= 2) /* code set 1 */ + else if (IS_HIGHBIT_SET(*from)) /* code set 1 */ { + MB2CHAR_NEED_AT_LEAST(len, 2); *to = *from++ << 8; *to |= *from++; len -= 2; @@ -264,12 +274,22 @@ pg_euccn2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) return cnt; } +/* + * mbverifychar does not accept SS2 or SS3 (CS2 and CS3 are not defined for + * EUC_CN), but mb2wchar_with_len does. Tell a coherent story for code that + * relies on agreement between mb2wchar_with_len and mblen. Invalid text + * datums (e.g. from shared catalogs) reach this. + */ static int pg_euccn_mblen(const unsigned char *s) { int len; - if (IS_HIGHBIT_SET(*s)) + if (*s == SS2) + len = 3; + else if (*s == SS3) + len = 3; + else if (IS_HIGHBIT_SET(*s)) len = 2; else len = 1; @@ -299,23 +319,26 @@ pg_euctw2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) while (len > 0 && *from) { - if (*from == SS2 && len >= 4) /* code set 2 */ + if (*from == SS2) /* code set 2 */ { + MB2CHAR_NEED_AT_LEAST(len, 4); from++; *to = (((uint32) SS2) << 24) | (*from++ << 16); *to |= *from++ << 8; *to |= *from++; len -= 4; } - else if (*from == SS3 && len >= 3) /* code set 3 (unused?) */ + else if (*from == SS3) /* code set 3 (unused?) */ { + MB2CHAR_NEED_AT_LEAST(len, 3); from++; *to = (SS3 << 16) | (*from++ << 8); *to |= *from++; len -= 3; } - else if (IS_HIGHBIT_SET(*from) && len >= 2) /* code set 2 */ + else if (IS_HIGHBIT_SET(*from)) /* code set 2 */ { + MB2CHAR_NEED_AT_LEAST(len, 2); *to = *from++ << 8; *to |= *from++; len -= 2; @@ -452,8 +475,7 @@ pg_utf2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) } else if ((*from & 0xe0) == 0xc0) { - if (len < 2) - break; /* drop trailing incomplete char */ + MB2CHAR_NEED_AT_LEAST(len, 2); c1 = *from++ & 0x1f; c2 = *from++ & 0x3f; *to = (c1 << 6) | c2; @@ -461,8 +483,7 @@ pg_utf2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) } else if ((*from & 0xf0) == 0xe0) { - if (len < 3) - break; /* drop trailing incomplete char */ + MB2CHAR_NEED_AT_LEAST(len, 3); c1 = *from++ & 0x0f; c2 = *from++ & 0x3f; c3 = *from++ & 0x3f; @@ -471,8 +492,7 @@ pg_utf2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) } else if ((*from & 0xf8) == 0xf0) { - if (len < 4) - break; /* drop trailing incomplete char */ + MB2CHAR_NEED_AT_LEAST(len, 4); c1 = *from++ & 0x07; c2 = *from++ & 0x3f; c3 = *from++ & 0x3f; @@ -742,28 +762,32 @@ pg_mule2wchar_with_len(const unsigned char *from, pg_wchar *to, int len) while (len > 0 && *from) { - if (IS_LC1(*from) && len >= 2) + if (IS_LC1(*from)) { + MB2CHAR_NEED_AT_LEAST(len, 2); *to = *from++ << 16; *to |= *from++; len -= 2; } - else if (IS_LCPRV1(*from) && len >= 3) + else if (IS_LCPRV1(*from)) { + MB2CHAR_NEED_AT_LEAST(len, 3); from++; *to = *from++ << 16; *to |= *from++; len -= 3; } - else if (IS_LC2(*from) && len >= 3) + else if (IS_LC2(*from)) { + MB2CHAR_NEED_AT_LEAST(len, 3); *to = *from++ << 16; *to |= *from++ << 8; *to |= *from++; len -= 3; } - else if (IS_LCPRV2(*from) && len >= 4) + else if (IS_LCPRV2(*from)) { + MB2CHAR_NEED_AT_LEAST(len, 4); from++; *to = *from++ << 16; *to |= *from++ << 8; @@ -1914,7 +1938,7 @@ pg_encoding_set_invalid(int encoding, char *dst) const pg_wchar_tbl pg_wchar_table[] = { {pg_ascii2wchar_with_len, pg_wchar2single_with_len, pg_ascii_mblen, pg_ascii_dsplen, pg_ascii_verifychar, pg_ascii_verifystr, 1}, /* PG_SQL_ASCII */ {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifychar, pg_eucjp_verifystr, 3}, /* PG_EUC_JP */ - {pg_euccn2wchar_with_len, pg_wchar2euc_with_len, pg_euccn_mblen, pg_euccn_dsplen, pg_euccn_verifychar, pg_euccn_verifystr, 2}, /* PG_EUC_CN */ + {pg_euccn2wchar_with_len, pg_wchar2euc_with_len, pg_euccn_mblen, pg_euccn_dsplen, pg_euccn_verifychar, pg_euccn_verifystr, 3}, /* PG_EUC_CN */ {pg_euckr2wchar_with_len, pg_wchar2euc_with_len, pg_euckr_mblen, pg_euckr_dsplen, pg_euckr_verifychar, pg_euckr_verifystr, 3}, /* PG_EUC_KR */ {pg_euctw2wchar_with_len, pg_wchar2euc_with_len, pg_euctw_mblen, pg_euctw_dsplen, pg_euctw_verifychar, pg_euctw_verifystr, 4}, /* PG_EUC_TW */ {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifychar, pg_eucjp_verifystr, 3}, /* PG_EUC_JIS_2004 */ @@ -1959,10 +1983,27 @@ const pg_wchar_tbl pg_wchar_table[] = { /* * Returns the byte length of a multibyte character. * - * Caution: when dealing with text that is not certainly valid in the - * specified encoding, the result may exceed the actual remaining - * string length. Callers that are not prepared to deal with that - * should use pg_encoding_mblen_bounded() instead. + * Choose "mblen" functions based on the input string characteristics. + * pg_encoding_mblen() can be used when ANY of these conditions are met: + * + * - The input string is zero-terminated + * + * - The input string is known to be valid in the encoding (e.g., string + * converted from database encoding) + * + * - The encoding is not GB18030 (e.g., when only database encodings are + * passed to 'encoding' parameter) + * + * encoding==GB18030 requires examining up to two bytes to determine character + * length. Therefore, callers satisfying none of those conditions must use + * pg_encoding_mblen_or_incomplete() instead, as access to mbstr[1] cannot be + * guaranteed to be within allocation bounds. + * + * When dealing with text that is not certainly valid in the specified + * encoding, the result may exceed the actual remaining string length. + * Callers that are not prepared to deal with that should use Min(remaining, + * pg_encoding_mblen_or_incomplete()). For zero-terminated strings, that and + * pg_encoding_mblen_bounded() are interchangeable. */ int pg_encoding_mblen(int encoding, const char *mbstr) @@ -1973,8 +2014,28 @@ pg_encoding_mblen(int encoding, const char *mbstr) } /* - * Returns the byte length of a multibyte character; but not more than - * the distance to end of string. + * Returns the byte length of a multibyte character (possibly not + * zero-terminated), or INT_MAX if too few bytes remain to determine a length. + */ +int +pg_encoding_mblen_or_incomplete(int encoding, const char *mbstr, + size_t remaining) +{ + /* + * Define zero remaining as too few, even for single-byte encodings. + * pg_gb18030_mblen() reads one or two bytes; single-byte encodings read + * zero; others read one. + */ + if (remaining < 1 || + (encoding == PG_GB18030 && IS_HIGHBIT_SET(*mbstr) && remaining < 2)) + return INT_MAX; + return pg_encoding_mblen(encoding, mbstr); +} + +/* + * Returns the byte length of a multibyte character; but not more than the + * distance to the terminating zero byte. For input that might lack a + * terminating zero, use Min(remaining, pg_encoding_mblen_or_incomplete()). */ int pg_encoding_mblen_bounded(int encoding, const char *mbstr) diff --git a/src/include/access/hash_xlog.h b/src/include/access/hash_xlog.h index 4353a32dbba..3a17d6c06ab 100644 --- a/src/include/access/hash_xlog.h +++ b/src/include/access/hash_xlog.h @@ -129,7 +129,7 @@ typedef struct xl_hash_split_complete * * This data record is used for XLOG_HASH_MOVE_PAGE_CONTENTS * - * Backup Blk 0: bucket page + * Backup Blk 0: primary bucket page * Backup Blk 1: page containing moved tuples * Backup Blk 2: page from which tuples will be removed */ @@ -149,12 +149,13 @@ typedef struct xl_hash_move_page_contents * * This data record is used for XLOG_HASH_SQUEEZE_PAGE * - * Backup Blk 0: page containing tuples moved from freed overflow page - * Backup Blk 1: freed overflow page - * Backup Blk 2: page previous to the freed overflow page - * Backup Blk 3: page next to the freed overflow page - * Backup Blk 4: bitmap page containing info of freed overflow page - * Backup Blk 5: meta page + * Backup Blk 0: primary bucket page + * Backup Blk 1: page containing tuples moved from freed overflow page + * Backup Blk 2: freed overflow page + * Backup Blk 3: page previous to the freed overflow page + * Backup Blk 4: page next to the freed overflow page + * Backup Blk 5: bitmap page containing info of freed overflow page + * Backup Blk 6: meta page */ typedef struct xl_hash_squeeze_page { @@ -245,7 +246,7 @@ typedef struct xl_hash_init_bitmap_page * * This data record is used for XLOG_HASH_VACUUM_ONE_PAGE * - * Backup Blk 0: bucket page + * Backup Blk 0: primary bucket page * Backup Blk 1: meta page */ typedef struct xl_hash_vacuum_one_page diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 3d9192fbff1..d2a6d65e04e 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -1093,7 +1093,8 @@ typedef struct BTOptions } BTOptions; #define BTGetFillFactor(relation) \ - (AssertMacro(relation->rd_rel->relkind == RELKIND_INDEX && \ + (AssertMacro((relation->rd_rel->relkind == RELKIND_INDEX || \ + relation->rd_rel->relkind == RELKIND_GLOBAL_INDEX) && \ relation->rd_rel->relam == BTREE_AM_OID), \ (relation)->rd_options ? \ ((BTOptions *) (relation)->rd_options)->fillfactor : \ @@ -1101,7 +1102,8 @@ typedef struct BTOptions #define BTGetTargetPageFreeSpace(relation) \ (BLCKSZ * (100 - BTGetFillFactor(relation)) / 100) #define BTGetDeduplicateItems(relation) \ - (AssertMacro(relation->rd_rel->relkind == RELKIND_INDEX && \ + (AssertMacro((relation->rd_rel->relkind == RELKIND_INDEX || \ + relation->rd_rel->relkind == RELKIND_GLOBAL_INDEX) && \ relation->rd_rel->relam == BTREE_AM_OID), \ ((relation)->rd_options ? \ ((BTOptions *) (relation)->rd_options)->deduplicate_items : true)) @@ -1285,4 +1287,9 @@ extern IndexBuildResult *btbuild(Relation heap, Relation index, struct IndexInfo *indexInfo); extern void _bt_parallel_build_main(dsm_segment *seg, shm_toc *toc); +extern TransactionId _bt_check_unique_gi(Relation rel, BTInsertState insertstate, + Relation heapRel, + IndexUniqueCheck checkUnique, bool *is_unique, + uint32 *speculativeToken, Relation origHeapRel); + #endif /* NBTREE_H */ diff --git a/src/include/access/slru.h b/src/include/access/slru.h index dd52e8cec7e..558f7d9abb2 100644 --- a/src/include/access/slru.h +++ b/src/include/access/slru.h @@ -93,7 +93,9 @@ typedef struct SlruSharedData /* * latest_page_number is the page number of the current end of the log; * this is not critical data, since we use it only to avoid swapping out - * the latest page. + * the latest page. (An exception: an accurate latest_page_number is + * needed on pg_multixact/offsets to replay WAL generated with older minor + * versions correctly. See RecordNewMultiXact().) */ int latest_page_number; diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 2b463a49d69..6d483fb0e00 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -296,7 +296,7 @@ extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata, extern void XLogFlush(XLogRecPtr RecPtr); extern bool XLogBackgroundFlush(void); extern bool XLogNeedsFlush(XLogRecPtr RecPtr); -extern int XLogFileInit(XLogSegNo segno, bool *use_existent, bool use_lock); +extern int XLogFileInit(XLogSegNo segno); extern int XLogFileOpen(XLogSegNo segno); extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli); diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h index 0940b64ca6b..aeb4a317324 100644 --- a/src/include/access/xlogdefs.h +++ b/src/include/access/xlogdefs.h @@ -25,7 +25,8 @@ typedef uint64 XLogRecPtr; * WAL segment, initializing the first WAL page at WAL segment size, so no XLOG * record can begin at zero. */ -#define InvalidXLogRecPtr 0 +#define InvalidXLogRecPtr 0 +#define XLogRecPtrIsValid(r) ((r) != InvalidXLogRecPtr) #define XLogRecPtrIsInvalid(r) ((r) == InvalidXLogRecPtr) /* diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index 242026bda76..1a9252cb13a 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -226,6 +226,8 @@ extern long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, extern Oid getExtensionOfObject(Oid classId, Oid objectId); extern List *getAutoExtensionsOfObject(Oid classId, Oid objectId); +extern Oid getExtensionType(Oid extensionOid, const char *typname); + extern bool sequenceIsOwned(Oid seqId, char deptype, Oid *tableId, int32 *colId); extern List *getOwnedSequences(Oid relid); extern Oid getIdentitySequence(Oid relid, AttrNumber attnum, bool missing_ok); diff --git a/src/include/catalog/heap.h b/src/include/catalog/heap.h index 6ce480b49c1..51b6a68a64e 100644 --- a/src/include/catalog/heap.h +++ b/src/include/catalog/heap.h @@ -28,7 +28,7 @@ typedef struct RawColumnDefault { AttrNumber attnum; /* attribute to attach default to */ Node *raw_default; /* default value (untransformed parse tree) */ - bool missingMode; /* true if part of add column processing */ + bool missingMode; /* obsolete, no longer used */ char generated; /* attgenerated setting */ } RawColumnDefault; @@ -114,6 +114,9 @@ extern List *AddRelationNewConstraints(Relation rel, const char *queryString); extern void RelationClearMissing(Relation rel); + +extern void StoreAttrMissingVal(Relation rel, AttrNumber attnum, + Datum missingval); extern void SetAttrMissing(Oid relid, char *attname, char *value); extern Oid StoreAttrDefault(Relation rel, AttrNumber attnum, diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index 7532ef1662c..b6c9af296a8 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -65,6 +65,7 @@ extern void index_check_primary_key(Relation heapRel, #define INDEX_CREATE_IF_NOT_EXISTS (1 << 4) #define INDEX_CREATE_PARTITIONED (1 << 5) #define INDEX_CREATE_INVALID (1 << 6) +#define INDEX_CREATE_GLOBAL (1 << 7) extern Oid index_create(Relation heapRelation, const char *indexRelationName, diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h index e99d1cf92a2..f8a1cd01e56 100755 --- a/src/include/catalog/pg_class.h +++ b/src/include/catalog/pg_class.h @@ -171,6 +171,7 @@ DECLARE_INDEX(pg_class_tblspc_relfilenode_index, 3455, on pg_class using btree(r #define RELKIND_FOREIGN_TABLE 'f' /* foreign table */ #define RELKIND_PARTITIONED_TABLE 'p' /* partitioned table */ #define RELKIND_PARTITIONED_INDEX 'I' /* partitioned index */ +#define RELKIND_GLOBAL_INDEX 'g' /* global index */ #define RELPERSISTENCE_PERMANENT 'p' /* regular table */ #define RELPERSISTENCE_UNLOGGED 'u' /* unlogged permanent table */ @@ -197,6 +198,7 @@ DECLARE_INDEX(pg_class_tblspc_relfilenode_index, 3455, on pg_class using btree(r #define RELKIND_HAS_STORAGE(relkind) \ ((relkind) == RELKIND_RELATION || \ (relkind) == RELKIND_INDEX || \ + (relkind) == RELKIND_GLOBAL_INDEX || \ (relkind) == RELKIND_SEQUENCE || \ (relkind) == RELKIND_TOASTVALUE || \ (relkind) == RELKIND_MATVIEW) diff --git a/src/include/catalog/pg_subscription_rel.h b/src/include/catalog/pg_subscription_rel.h index ed94f57baa1..e0a1a4b8b4a 100644 --- a/src/include/catalog/pg_subscription_rel.h +++ b/src/include/catalog/pg_subscription_rel.h @@ -85,6 +85,8 @@ extern void AddSubscriptionRelState(Oid subid, Oid relid, char state, XLogRecPtr sublsn); extern void UpdateSubscriptionRelState(Oid subid, Oid relid, char state, XLogRecPtr sublsn); +extern void UpdateSubscriptionRelStateEx(Oid subid, Oid relid, char state, + XLogRecPtr sublsn, bool already_locked); extern char GetSubscriptionRelState(Oid subid, Oid relid, XLogRecPtr *sublsn); extern void RemoveSubscriptionRel(Oid subid, Oid relid); diff --git a/src/include/commands/async.h b/src/include/commands/async.h index 85bfb247682..e80fe3bad19 100644 --- a/src/include/commands/async.h +++ b/src/include/commands/async.h @@ -51,4 +51,7 @@ extern void HandleNotifyInterrupt(void); /* process interrupts */ extern void ProcessNotifyInterrupt(bool flush); +/* freeze old transaction IDs in notify queue (called by VACUUM) */ +extern void AsyncNotifyFreezeXids(TransactionId newFrozenXid); + #endif /* ASYNC_H */ diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 387d2a04d2f..cda03d06a58 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -47,6 +47,8 @@ extern bool CheckIndexCompatible(Oid oldId, extern Oid GetDefaultOpClass(Oid type_id, Oid am_id); extern Oid ResolveOpClass(List *opclass, Oid attrType, const char *accessMethodName, Oid accessMethodId); +extern bool PopulateGlobalSpool(Relation ixsRel, Relation heapRel, IndexStmt *stmt); +extern void ChangeRelKind(Relation idxRel, char kind); /* commands/functioncmds.c */ extern ObjectAddress CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt); @@ -83,7 +85,7 @@ extern void RemoveOperatorById(Oid operOid); extern ObjectAddress AlterOperator(AlterOperatorStmt *stmt); /* commands/statscmds.c */ -extern ObjectAddress CreateStatistics(CreateStatsStmt *stmt); +extern ObjectAddress CreateStatistics(CreateStatsStmt *stmt, bool check_rights); extern ObjectAddress AlterStatistics(AlterStatsStmt *stmt); extern void RemoveStatisticsById(Oid statsOid); extern Oid StatisticsGetRelation(Oid statId, bool missing_ok); diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h index 24dbf86e970..aa8386b1f6f 100644 --- a/src/include/commands/extension.h +++ b/src/include/commands/extension.h @@ -49,6 +49,8 @@ extern Oid get_extension_oid(const char *extname, bool missing_ok); extern char *get_extension_name(Oid ext_oid); extern bool extension_file_exists(const char *extensionName); +extern Oid get_function_sibling_type(Oid funcoid, const char *typname); + extern ObjectAddress AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *oldschema); diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index f71c09f761c..244ff082b1d 100755 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -197,6 +197,9 @@ extern void ExecutorEnd(QueryDesc *queryDesc); extern void standard_ExecutorEnd(QueryDesc *queryDesc); extern void ExecutorRewind(QueryDesc *queryDesc); extern bool ExecCheckRTPerms(List *rangeTable, bool ereport_on_violation); +extern bool ExecCheckRTEPerms(RangeTblEntry *rte); +extern void CheckValidResultRelNew(ResultRelInfo *resultRelInfo, CmdType operation, + OnConflictAction onConflictAction); extern void CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation); extern void InitResultRelInfo(ResultRelInfo *resultRelInfo, Relation resultRelationDesc, diff --git a/src/include/libpq/libpq-be-fe-helpers.h b/src/include/libpq/libpq-be-fe-helpers.h new file mode 100644 index 00000000000..a4b3e805b9d --- /dev/null +++ b/src/include/libpq/libpq-be-fe-helpers.h @@ -0,0 +1,369 @@ +/*------------------------------------------------------------------------- + * + * libpq-be-fe-helpers.h + * Helper functions for using libpq in extensions + * + * Code built directly into the backend is not allowed to link to libpq + * directly. Extension code is allowed to use libpq however. However, libpq + * used in extensions has to be careful to block inside libpq, otherwise + * interrupts will not be processed, leading to issues like unresolvable + * deadlocks. Backend code also needs to take care to acquire/release an + * external fd for the connection, otherwise fd.c's accounting of fd's is + * broken. + * + * This file provides helper functions to make it easier to comply with these + * rules. It is a header only library as it needs to be linked into each + * extension using libpq, and it seems too small to be worth adding a + * dedicated static library for. + * + * TODO: For historical reasons the connections established here are not put + * into non-blocking mode. That can lead to blocking even when only the async + * libpq functions are used. This should be fixed. + * + * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/libpq/libpq-be-fe-helpers.h + * + *------------------------------------------------------------------------- + */ +#ifndef LIBPQ_BE_FE_HELPERS_H +#define LIBPQ_BE_FE_HELPERS_H + +/* + * Despite the name, BUILDING_DLL is set only when building code directly part + * of the backend. Which also is where libpq isn't allowed to be + * used. Obviously this doesn't protect against libpq-fe.h getting included + * otherwise, but perhaps still protects against a few mistakes... + */ +#ifdef BUILDING_DLL +#error "libpq may not be used code directly built into the backend" +#endif + +#include "libpq-fe.h" +#include "miscadmin.h" +#include "storage/fd.h" +#include "storage/latch.h" +#include "utils/wait_event.h" + + +static inline void libpqsrv_connect_prepare(void); +static inline void libpqsrv_connect_internal(PGconn *conn, uint32 wait_event_info); +static inline PGresult *libpqsrv_get_result_last(PGconn *conn, uint32 wait_event_info); +static inline PGresult *libpqsrv_get_result(PGconn *conn, uint32 wait_event_info); + + +/* + * PQconnectdb() wrapper that reserves a file descriptor and processes + * interrupts during connection establishment. + * + * Throws an error if AcquireExternalFD() fails, but does not throw if + * connection establishment itself fails. Callers need to use PQstatus() to + * check if connection establishment succeeded. + */ +static inline PGconn * +libpqsrv_connect(const char *conninfo, uint32 wait_event_info) +{ + PGconn *conn = NULL; + + libpqsrv_connect_prepare(); + + conn = PQconnectStart(conninfo); + + libpqsrv_connect_internal(conn, wait_event_info); + + return conn; +} + +/* + * Like libpqsrv_connect(), except that this is a wrapper for + * PQconnectdbParams(). + */ +static inline PGconn * +libpqsrv_connect_params(const char *const *keywords, + const char *const *values, + int expand_dbname, + uint32 wait_event_info) +{ + PGconn *conn = NULL; + + libpqsrv_connect_prepare(); + + conn = PQconnectStartParams(keywords, values, expand_dbname); + + libpqsrv_connect_internal(conn, wait_event_info); + + return conn; +} + +/* + * PQfinish() wrapper that additionally releases the reserved file descriptor. + * + * It is allowed to call this with a NULL pgconn iff NULL was returned by + * libpqsrv_connect*. + */ +static inline void +libpqsrv_disconnect(PGconn *conn) +{ + /* + * If no connection was established, we haven't reserved an FD for it (or + * already released it). This rule makes it easier to write PG_CATCH() + * handlers for this facility's users. + * + * See also libpqsrv_connect_internal(). + */ + if (conn == NULL) + return; + + ReleaseExternalFD(); + PQfinish(conn); +} + + +/* internal helper functions follow */ + + +/* + * Helper function for all connection establishment functions. + */ +static inline void +libpqsrv_connect_prepare(void) +{ + /* + * We must obey fd.c's limit on non-virtual file descriptors. Assume that + * a PGconn represents one long-lived FD. (Doing this here also ensures + * that VFDs are closed if needed to make room.) + */ + if (!AcquireExternalFD()) + { +#ifndef WIN32 /* can't write #if within ereport() macro */ + ereport(ERROR, + (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), + errmsg("could not establish connection"), + errdetail("There are too many open files on the local server."), + errhint("Raise the server's max_files_per_process and/or \"ulimit -n\" limits."))); +#else + ereport(ERROR, + (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), + errmsg("could not establish connection"), + errdetail("There are too many open files on the local server."), + errhint("Raise the server's max_files_per_process setting."))); +#endif + } +} + +/* + * Helper function for all connection establishment functions. + */ +static inline void +libpqsrv_connect_internal(PGconn *conn, uint32 wait_event_info) +{ + /* + * With conn == NULL libpqsrv_disconnect() wouldn't release the FD. So do + * that here. + */ + if (conn == NULL) + { + ReleaseExternalFD(); + return; + } + + /* + * Can't wait without a socket. Note that we don't want to close the libpq + * connection yet, so callers can emit a useful error. + */ + if (PQstatus(conn) == CONNECTION_BAD) + return; + + /* + * WaitLatchOrSocket() can conceivably fail, handle that case here instead + * of requiring all callers to do so. + */ + PG_TRY(); + { + PostgresPollingStatusType status; + + /* + * Poll connection until we have OK or FAILED status. + * + * Per spec for PQconnectPoll, first wait till socket is write-ready. + */ + status = PGRES_POLLING_WRITING; + while (status != PGRES_POLLING_OK && status != PGRES_POLLING_FAILED) + { + 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) == 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), + 0, + wait_event_info); + + /* Interrupted? */ + if (rc & WL_LATCH_SET) + { + ResetLatch(MyLatch); + CHECK_FOR_INTERRUPTS(); + } + + /* If socket is ready, advance the libpq state machine */ + if (rc & io_flag) + status = PQconnectPoll(conn); + } + } + PG_CATCH(); + { + /* + * If an error is thrown here, the callers won't call + * libpqsrv_disconnect() with a conn, so release resources + * immediately. + */ + ReleaseExternalFD(); + PQfinish(conn); + + PG_RE_THROW(); + } + PG_END_TRY(); +} + +/* + * PQexec() wrapper that processes interrupts. + * + * Unless PQsetnonblocking(conn, 1) is in effect, this can't process + * interrupts while pushing the query text to the server. Consider that + * setting if query strings can be long relative to TCP buffer size. + * + * This has the preconditions of PQsendQuery(), not those of PQexec(). Most + * notably, PQexec() would silently discard any prior query results. + */ +static inline PGresult * +libpqsrv_exec(PGconn *conn, const char *query, uint32 wait_event_info) +{ + if (!PQsendQuery(conn, query)) + return NULL; + return libpqsrv_get_result_last(conn, wait_event_info); +} + +/* + * PQexecParams() wrapper that processes interrupts. + * + * See notes at libpqsrv_exec(). + */ +static inline PGresult * +libpqsrv_exec_params(PGconn *conn, + const char *command, + int nParams, + const Oid *paramTypes, + const char *const *paramValues, + const int *paramLengths, + const int *paramFormats, + int resultFormat, + uint32 wait_event_info) +{ + if (!PQsendQueryParams(conn, command, nParams, paramTypes, paramValues, + paramLengths, paramFormats, resultFormat)) + return NULL; + return libpqsrv_get_result_last(conn, wait_event_info); +} + +/* + * Like PQexec(), loop over PQgetResult() until it returns NULL or another + * terminal state. Return the last non-NULL result or the terminal state. + */ +static inline PGresult * +libpqsrv_get_result_last(PGconn *conn, uint32 wait_event_info) +{ + PGresult *volatile lastResult = NULL; + + /* In what follows, do not leak any PGresults on an error. */ + PG_TRY(); + { + for (;;) + { + /* Wait for, and collect, the next PGresult. */ + PGresult *result; + + result = libpqsrv_get_result(conn, wait_event_info); + if (result == NULL) + break; /* query is complete, or failure */ + + /* + * Emulate PQexec()'s behavior of returning the last result when + * there are many. + */ + PQclear(lastResult); + lastResult = result; + + if (PQresultStatus(lastResult) == PGRES_COPY_IN || + PQresultStatus(lastResult) == PGRES_COPY_OUT || + PQresultStatus(lastResult) == PGRES_COPY_BOTH || + PQstatus(conn) == CONNECTION_BAD) + break; + } + } + PG_CATCH(); + { + PQclear(lastResult); + PG_RE_THROW(); + } + PG_END_TRY(); + + return lastResult; +} + +/* + * Perform the equivalent of PQgetResult(), but watch for interrupts. + */ +static inline PGresult * +libpqsrv_get_result(PGconn *conn, uint32 wait_event_info) +{ + /* + * Collect data until PQgetResult is ready to get the result without + * blocking. + */ + while (PQisBusy(conn)) + { + int rc; + + rc = WaitLatchOrSocket(MyLatch, + WL_EXIT_ON_PM_DEATH | WL_LATCH_SET | + WL_SOCKET_READABLE, + PQsocket(conn), + 0, + wait_event_info); + + /* Interrupted? */ + if (rc & WL_LATCH_SET) + { + ResetLatch(MyLatch); + CHECK_FOR_INTERRUPTS(); + } + + /* Consume whatever data is available from the socket */ + if (PQconsumeInput(conn) == 0) + { + /* trouble; expect PQgetResult() to return NULL */ + break; + } + } + + /* Now we can collect and return the next PGresult */ + return PQgetResult(conn); +} + +#endif /* LIBPQ_BE_FE_HELPERS_H */ diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index abd65eb9f7d..ff832f6d50b 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -575,6 +575,8 @@ extern int pg_valid_server_encoding_id(int encoding); */ extern void pg_encoding_set_invalid(int encoding, char *dst); extern int pg_encoding_mblen(int encoding, const char *mbstr); +extern int pg_encoding_mblen_or_incomplete(int encoding, const char *mbstr, + size_t remaining); extern int pg_encoding_mblen_bounded(int encoding, const char *mbstr); extern int pg_encoding_dsplen(int encoding, const char *mbstr); extern int pg_encoding_verifymbchar(int encoding, const char *mbstr, int len); @@ -606,7 +608,14 @@ extern int pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2); extern int pg_wchar_strncmp(const pg_wchar *s1, const pg_wchar *s2, size_t n); extern int pg_char_and_wchar_strncmp(const char *s1, const pg_wchar *s2, size_t n); extern size_t pg_wchar_strlen(const pg_wchar *wstr); +extern int pg_mblen_cstr(const char *mbstr); +extern int pg_mblen_range(const char *mbstr, const char *end); +extern int pg_mblen_with_len(const char *mbstr, int limit); +extern int pg_mblen_unbounded(const char *mbstr); + +/* deprecated */ extern int pg_mblen(const char *mbstr); + extern int pg_dsplen(const char *mbstr); extern int pg_mbstrlen(const char *mbstr); extern int pg_mbstrlen_with_len(const char *mbstr, int len); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 6c5d84891fe..a039b0faf12 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -112,7 +112,8 @@ extern void ProcessInterrupts(void); (unlikely(InterruptPending)) #else #define INTERRUPTS_PENDING_CONDITION() \ - (unlikely(UNBLOCKED_SIGNAL_QUEUE()) ? pgwin32_dispatch_queued_signals() : 0, \ + (unlikely(UNBLOCKED_SIGNAL_QUEUE()) ? \ + pgwin32_dispatch_queued_signals() : (void) 0, \ unlikely(InterruptPending)) #endif diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 3f3fdec0d4d..08da2879831 100755 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -176,6 +176,11 @@ typedef struct IndexInfo int ii_ParallelWorkers; Oid ii_Am; void *ii_AmCache; + bool ii_Global_index; /* true if index is global */ + int ii_GlobalIndexPart; /* partition number indication */ + bool ii_BuildGlobalSpool; /* indicate to build global spool only */ + int ii_Nparts; /* num partitions for global index build in + * parallel */ MemoryContext ii_Context; } IndexInfo; @@ -521,16 +526,14 @@ typedef struct ResultRelInfo ExprState *ri_PartitionCheckExpr; /* - * Information needed by tuple routing target relations + * Information needed by child result relations * - * RootResultRelInfo gives the target relation mentioned in the query, if - * it's a partitioned table. It is not set if the target relation - * mentioned in the query is an inherited table, nor when tuple routing is - * not needed. + * ri_RootResultRelInfo gives the target relation mentioned in the query. + * Used as the root for tuple routing and/or transition capture. * - * RootToPartitionMap and PartitionTupleSlot, initialized by - * ExecInitRoutingInfo, are non-NULL if partition has a different tuple - * format than the root table. + * ri_RootToPartitionMap and ri_PartitionTupleSlot, initialized by + * ExecInitRoutingInfo, are non-NULL if the relation is a partition to + * route tuples into and has a different tuple format than the root table. */ struct ResultRelInfo *ri_RootResultRelInfo; TupleConversionMap *ri_RootToPartitionMap; diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 4156ba0245c..d0e0cab97ef 100755 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1000,6 +1000,12 @@ typedef struct RangeTblEntry /* * Fields valid for a plain relation RTE (else zero): * + * As a special case, relid can also be set in RTE_SUBQUERY RTEs. This + * happens when an RTE_RELATION RTE for a view is transformed to an + * RTE_SUBQUERY during rewriting. We keep the relid because it is useful + * during planning, cf makeWholeRowVar. (It will not be passed on to the + * executor, however.) + * * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate * that the tuple format of the tuplestore is the same as the referenced * relation. This allows plans referencing AFTER trigger transition @@ -2949,6 +2955,11 @@ typedef struct IndexStmt bool if_not_exists; /* just do nothing if index already exists? */ bool reset_default_tblspc; /* reset default_tablespace prior to * executing */ + bool global_index; /* true if index is global */ + int globalIndexPart; /* partition number indication */ + int nparts; /* num partitions for global index build in + * parallel */ + } IndexStmt; /* ---------------------- diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index 4d21020857f..d78f91eac2f 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -796,9 +796,10 @@ typedef struct RelOptInfo * IndexOptInfo * Per-index information for planning/optimization * - * indexkeys[], indexcollations[] each have ncolumns entries. - * opfamily[], and opcintype[] each have nkeycolumns entries. They do - * not contain any information about included attributes. + * indexkeys[] and canreturn[] each have ncolumns entries. + * + * indexcollations[], opfamily[], and opcintype[] each have nkeycolumns + * entries. These don't contain any information about INCLUDE columns. * * sortopfamily[], reverse_sort[], and nulls_first[] have * nkeycolumns entries, if the index is ordered; but if it is unordered, diff --git a/src/include/optimizer/plancat.h b/src/include/optimizer/plancat.h index cb0f6740eec..75ef759c42d 100644 --- a/src/include/optimizer/plancat.h +++ b/src/include/optimizer/plancat.h @@ -72,6 +72,8 @@ extern double get_function_rows(PlannerInfo *root, Oid funcid, Node *node); extern bool has_row_triggers(PlannerInfo *root, Index rti, CmdType event); +extern bool has_transition_tables(PlannerInfo *root, Index rti, CmdType event); + extern bool has_stored_generated_columns(PlannerInfo *root, Index rti); extern Bitmapset *get_dependent_generated_columns(PlannerInfo *root, Index rti, diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 6eedfaacb5c..463dfddae75 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -144,6 +144,10 @@ to 0 if you don't. */ #undef HAVE_DECL_LLVMORCGETSYMBOLADDRESSIN +/* Define to 1 if you have the declaration of `memset_s', and to 0 if you + don't. */ +#undef HAVE_DECL_MEMSET_S + /* Define to 1 if you have the declaration of `posix_fadvise', and to 0 if you don't. */ #undef HAVE_DECL_POSIX_FADVISE @@ -164,6 +168,10 @@ don't. */ #undef HAVE_DECL_RTLD_NOW +/* Define to 1 if you have the declaration of `strchrnul', and to 0 if you + don't. */ +#undef HAVE_DECL_STRCHRNUL + /* Define to 1 if you have the declaration of `strlcat', and to 0 if you don't. */ #undef HAVE_DECL_STRLCAT @@ -390,9 +398,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H -/* Define to 1 if you have the `memset_s' function. */ -#undef HAVE_MEMSET_S - /* Define to 1 if the system has the type `MINIDUMP_TYPE'. */ #undef HAVE_MINIDUMP_TYPE @@ -532,9 +537,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strchrnul' function. */ -#undef HAVE_STRCHRNUL - /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R diff --git a/src/include/port/atomics/generic-gcc.h b/src/include/port/atomics/generic-gcc.h index 99fda188c46..aab47b03ca8 100644 --- a/src/include/port/atomics/generic-gcc.h +++ b/src/include/port/atomics/generic-gcc.h @@ -44,12 +44,20 @@ #if !defined(pg_read_barrier_impl) && defined(HAVE_GCC__ATOMIC_INT32_CAS) /* acquire semantics include read barrier semantics */ -# define pg_read_barrier_impl() __atomic_thread_fence(__ATOMIC_ACQUIRE) +# define pg_read_barrier_impl() do \ +{ \ + pg_compiler_barrier_impl(); \ + __atomic_thread_fence(__ATOMIC_ACQUIRE); \ +} while (0) #endif #if !defined(pg_write_barrier_impl) && defined(HAVE_GCC__ATOMIC_INT32_CAS) /* release semantics include write barrier semantics */ -# define pg_write_barrier_impl() __atomic_thread_fence(__ATOMIC_RELEASE) +# define pg_write_barrier_impl() do \ +{ \ + pg_compiler_barrier_impl(); \ + __atomic_thread_fence(__ATOMIC_RELEASE); \ +} while (0) #endif diff --git a/src/include/port/solaris.h b/src/include/port/solaris.h index e63a3bd824d..8ff40007c7f 100644 --- a/src/include/port/solaris.h +++ b/src/include/port/solaris.h @@ -24,3 +24,12 @@ #if defined(__i386__) #include #endif + +/* + * On original Solaris, PAM conversation procs lack a "const" in their + * declaration; but recent OpenIndiana versions put it there by default. + * The least messy way to deal with this is to define _PAM_LEGACY_NONCONST, + * which causes OpenIndiana to declare pam_conv per the Solaris tradition, + * and also use that symbol to control omitting the "const" in our own code. + */ +#define _PAM_LEGACY_NONCONST 1 diff --git a/src/include/replication/logicalrelation.h b/src/include/replication/logicalrelation.h index 10f91490b5c..6b1d130ea75 100644 --- a/src/include/replication/logicalrelation.h +++ b/src/include/replication/logicalrelation.h @@ -13,8 +13,12 @@ #define LOGICALRELATION_H #include "access/attmap.h" +#include "catalog/index.h" #include "replication/logicalproto.h" +/* GUC variables */ +extern PGDLLIMPORT bool logical_replication_fallback_to_full_identity; + typedef struct LogicalRepRelMapEntry { LogicalRepRelation remoterel; /* key is remoterel.remoteid */ @@ -46,5 +50,6 @@ extern LogicalRepRelMapEntry *logicalrep_partition_open(LogicalRepRelMapEntry *r Relation partrel, AttrMap *map); extern void logicalrep_rel_close(LogicalRepRelMapEntry *rel, LOCKMODE lockmode); +extern bool logicalrep_identity_is_full(Relation relation); #endif /* LOGICALRELATION_H */ diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index ba257d81b51..cb633315d04 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -168,14 +168,15 @@ typedef struct ReorderBufferChange } ReorderBufferChange; /* ReorderBufferTXN txn_flags */ -#define RBTXN_HAS_CATALOG_CHANGES 0x0001 -#define RBTXN_IS_SUBXACT 0x0002 -#define RBTXN_IS_SERIALIZED 0x0004 -#define RBTXN_IS_SERIALIZED_CLEAR 0x0008 -#define RBTXN_IS_STREAMED 0x0010 -#define RBTXN_HAS_PARTIAL_CHANGE 0x0020 -#define RBTXN_PREPARE 0x0040 -#define RBTXN_SKIPPED_PREPARE 0x0080 +#define RBTXN_HAS_CATALOG_CHANGES 0x0001 +#define RBTXN_IS_SUBXACT 0x0002 +#define RBTXN_IS_SERIALIZED 0x0004 +#define RBTXN_IS_SERIALIZED_CLEAR 0x0008 +#define RBTXN_IS_STREAMED 0x0010 +#define RBTXN_HAS_PARTIAL_CHANGE 0x0020 +#define RBTXN_PREPARE 0x0040 +#define RBTXN_SKIPPED_PREPARE 0x0080 +#define RBTXN_DISTR_INVAL_OVERFLOWED 0x0100 /* Does the transaction have catalog changes? */ #define rbtxn_has_catalog_changes(txn) \ @@ -233,6 +234,12 @@ typedef struct ReorderBufferChange ((txn)->txn_flags & RBTXN_SKIPPED_PREPARE) != 0 \ ) +/* Is the array of distributed inval messages overflowed? */ +#define rbtxn_distr_inval_overflowed(txn) \ +( \ + ((txn)->txn_flags & RBTXN_DISTR_INVAL_OVERFLOWED) != 0 \ +) + typedef struct ReorderBufferTXN { /* See above */ @@ -391,6 +398,12 @@ typedef struct ReorderBufferTXN * Private data pointer of the output plugin. */ void *output_plugin_private; + + /* + * Stores cache invalidation messages distributed by other transactions. + */ + uint32 ninvalidations_distributed; + SharedInvalidationMessage *invalidations_distributed; } ReorderBufferTXN; /* so we can define the callbacks used inside struct ReorderBuffer itself */ @@ -657,6 +670,9 @@ void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr ls CommandId cmin, CommandId cmax, CommandId combocid); void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn, Size nmsgs, SharedInvalidationMessage *msgs); +void ReorderBufferAddDistributedInvalidations(ReorderBuffer *rb, TransactionId xid, + XLogRecPtr lsn, Size nmsgs, + SharedInvalidationMessage *msgs); void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations, SharedInvalidationMessage *invalidations); void ReorderBufferProcessXid(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn); @@ -676,6 +692,10 @@ TransactionId ReorderBufferGetOldestXmin(ReorderBuffer *rb); void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr); +uint32 ReorderBufferGetInvalidations(ReorderBuffer *rb, + TransactionId xid, + SharedInvalidationMessage **msgs); + void StartupReorderBuffer(void); #endif diff --git a/src/include/replication/slot.h b/src/include/replication/slot.h index c0fca56bee5..30b0a03caee 100644 --- a/src/include/replication/slot.h +++ b/src/include/replication/slot.h @@ -208,6 +208,8 @@ extern void ReplicationSlotMarkDirty(void); /* misc stuff */ extern bool ReplicationSlotValidateName(const char *name, int elevel); +extern bool ReplicationSlotValidateNameInternal(const char *name, + int *err_code, char **err_msg, char **err_hint); extern void ReplicationSlotReserveWal(void); extern void ReplicationSlotsComputeRequiredXmin(bool already_locked); extern void ReplicationSlotsComputeRequiredLSN(void); diff --git a/src/include/replication/walsender_private.h b/src/include/replication/walsender_private.h index 07abf26ff3f..6609303e3c0 100644 --- a/src/include/replication/walsender_private.h +++ b/src/include/replication/walsender_private.h @@ -98,15 +98,30 @@ typedef struct XLogRecPtr lsn[NUM_SYNC_REP_WAIT_MODE]; /* - * Are any sync standbys defined? Waiting backends can't reload the - * config file safely, so checkpointer updates this value as needed. - * Protected by SyncRepLock. + * Status of data related to the synchronous standbys. Waiting backends + * can't reload the config file safely, so checkpointer updates this value + * as needed. Protected by SyncRepLock. */ - bool sync_standbys_defined; + bits8 sync_standbys_status; WalSnd walsnds[FLEXIBLE_ARRAY_MEMBER]; } WalSndCtlData; +/* Flags for WalSndCtlData->sync_standbys_status */ + +/* + * Is the synchronous standby data initialized from the GUC? This is set the + * first time synchronous_standby_names is processed by the checkpointer. + */ +#define SYNC_STANDBY_INIT (1 << 0) + +/* + * Is the synchronous standby data defined? This is set when + * synchronous_standby_names has some data, after being processed by the + * checkpointer. + */ +#define SYNC_STANDBY_DEFINED (1 << 1) + extern WalSndCtlData *WalSndCtl; diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index aa64fb42ec4..85caac3253d 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -196,6 +196,9 @@ extern void InitBufferPool(void); extern void InitBufferPoolAccess(void); extern void InitBufferPoolBackend(void); extern void AtEOXact_Buffers(bool isCommit); +#ifdef USE_ASSERT_CHECKING +extern void AssertBufferLocksPermitCatalogRead(void); +#endif extern void PrintBufferLeakWarning(Buffer buffer); extern void CheckPointBuffers(int flags); extern BlockNumber BufferGetBlockNumber(Buffer buffer); diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index b2c9a9dbbcc..6ef1bee18a2 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -127,6 +127,8 @@ extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode); extern void LWLockRelease(LWLock *lock); extern void LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val); extern void LWLockReleaseAll(void); +extern void ForEachLWLockHeldByMe(void (*callback) (LWLock *, LWLockMode, void *), + void *context); extern bool LWLockHeldByMe(LWLock *lock); extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride); extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode); diff --git a/src/include/storage/sharedfileset.h b/src/include/storage/sharedfileset.h index 09ba121aafa..a01258063c8 100644 --- a/src/include/storage/sharedfileset.h +++ b/src/include/storage/sharedfileset.h @@ -43,5 +43,6 @@ extern bool SharedFileSetDelete(SharedFileSet *fileset, const char *name, bool error_on_failure); extern void SharedFileSetDeleteAll(SharedFileSet *fileset); extern void SharedFileSetUnregister(SharedFileSet *input_fileset); +extern void SharedFileSetRegisterCleanupCallback(SharedFileSet *fileset, dsm_segment *seg); #endif diff --git a/src/include/tsearch/ts_locale.h b/src/include/tsearch/ts_locale.h index cfd34b32443..5d5c240b492 100644 --- a/src/include/tsearch/ts_locale.h +++ b/src/include/tsearch/ts_locale.h @@ -45,12 +45,36 @@ typedef struct /* The second argument of t_iseq() must be a plain ASCII character */ #define t_iseq(x,c) (TOUCHAR(x) == (unsigned char) (c)) -#define COPYCHAR(d,s) memcpy(d, s, pg_mblen(s)) +/* Copy multibyte character of known byte length, return byte length. */ +static inline int +ts_copychar_with_len(void *dest, const void *src, int length) +{ + memcpy(dest, src, length); + return length; +} + +/* Copy multibyte character from null-terminated string, return byte length. */ +static inline int +ts_copychar_cstr(void *dest, const void *src) +{ + return ts_copychar_with_len(dest, src, pg_mblen_cstr((const char *) src)); +} + +/* Historical macro for the above. */ +#define COPYCHAR ts_copychar_cstr + +#define GENERATE_T_ISCLASS_DECL(character_class) \ +extern int t_is##character_class##_with_len(const char *ptr, int len); \ +extern int t_is##character_class##_cstr(const char *ptr); \ +extern int t_is##character_class##_unbounded(const char *ptr); \ +\ +/* deprecated */ \ +extern int t_is##character_class(const char *ptr); -extern int t_isdigit(const char *ptr); -extern int t_isspace(const char *ptr); -extern int t_isalpha(const char *ptr); -extern int t_isprint(const char *ptr); +GENERATE_T_ISCLASS_DECL(alpha); +GENERATE_T_ISCLASS_DECL(digit); +GENERATE_T_ISCLASS_DECL(print); +GENERATE_T_ISCLASS_DECL(space); extern char *lowerstr(const char *str); extern char *lowerstr_with_len(const char *str, int len); diff --git a/src/include/tsearch/ts_utils.h b/src/include/tsearch/ts_utils.h index 4266560151f..ef3d67aeb1a 100644 --- a/src/include/tsearch/ts_utils.h +++ b/src/include/tsearch/ts_utils.h @@ -38,14 +38,12 @@ extern bool gettoken_tsvector(TSVectorParseState state, extern void close_tsvector_parser(TSVectorParseState state); /* phrase operator begins with '<' */ -#define ISOPERATOR(x) \ - ( pg_mblen(x) == 1 && ( *(x) == '!' || \ - *(x) == '&' || \ - *(x) == '|' || \ - *(x) == '(' || \ - *(x) == ')' || \ - *(x) == '<' \ - ) ) +#define ISOPERATOR(x) (*(x) == '!' || \ + *(x) == '&' || \ + *(x) == '|' || \ + *(x) == '(' || \ + *(x) == ')' || \ + *(x) == '<') /* parse_tsquery */ diff --git a/src/include/utils/array.h b/src/include/utils/array.h index 4fa27986d41..c56f68e8971 100644 --- a/src/include/utils/array.h +++ b/src/include/utils/array.h @@ -394,6 +394,7 @@ extern void array_bitmap_copy(bits8 *destbitmap, int destoffset, extern ArrayType *construct_array(Datum *elems, int nelems, Oid elmtype, int elmlen, bool elmbyval, char elmalign); +extern ArrayType *construct_array_builtin(Datum *elems, int nelems, Oid elmtype); extern ArrayType *construct_md_array(Datum *elems, bool *nulls, int ndims, @@ -408,6 +409,9 @@ extern void deconstruct_array(ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp); +extern void deconstruct_array_builtin(ArrayType *array, + Oid elmtype, + Datum **elemsp, bool **nullsp, int *nelemsp); extern bool array_contains_nulls(ArrayType *array); extern ArrayBuildState *initArrayResult(Oid element_type, diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index e5b14acae4e..9c27658eb2d 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -57,6 +57,7 @@ extern uint64 pg_strtouint64(const char *str, char **endptr, int base); /* oid.c */ extern oidvector *buildoidvector(const Oid *oids, int n); +extern void check_valid_oidvector(const oidvector *oidArray); extern Oid oidparse(Node *node); extern int oid_cmp(const void *p1, const void *p2); diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h index a468bdc4496..7c03e8e4c17 100644 --- a/src/include/utils/catcache.h +++ b/src/include/utils/catcache.h @@ -224,7 +224,8 @@ extern void CatCacheInvalidate(CatCache *cache, uint32 hashValue); extern void PrepareToInvalidateCacheTuple(Relation relation, HeapTuple tuple, HeapTuple newtuple, - void (*function) (int, uint32, Oid)); + void (*function) (int, uint32, Oid, void *), + void *context); extern void PrintCatCacheLeakWarning(HeapTuple tuple); extern void PrintCatCacheListLeakWarning(CatCList *list); diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index f98a1e8b629..cde7942b1eb 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -452,6 +452,7 @@ extern void set_syslog_parameters(const char *ident, int facility); * safely (memory context, GUC load etc) */ extern void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2); +extern void vwrite_stderr(const char *fmt, va_list ap) pg_attribute_printf(1, 0); /* * Write a message to STDERR using only async-signal-safe functions. This can diff --git a/src/include/utils/inval.h b/src/include/utils/inval.h index 877e66c63c8..8299badefc1 100644 --- a/src/include/utils/inval.h +++ b/src/include/utils/inval.h @@ -28,6 +28,10 @@ extern void AcceptInvalidationMessages(void); extern void AtEOXact_Inval(bool isCommit); +extern void PreInplace_Inval(void); +extern void AtInplace_Inval(void); +extern void ForgetInplace_Inval(void); + extern void AtEOSubXact_Inval(bool isCommit); extern void PostPrepare_Inval(void); @@ -37,6 +41,8 @@ extern void CommandEndInvalidationMessages(void); extern void CacheInvalidateHeapTuple(Relation relation, HeapTuple tuple, HeapTuple newtuple); +extern void CacheInvalidateHeapTupleInplace(Relation relation, + HeapTuple key_equivalent_tuple); extern void CacheInvalidateCatalog(Oid catalogId); diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 2946f46c76f..a0e8d6cecaa 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -16,6 +16,11 @@ #include #endif #ifdef USE_ICU +/* only include the C APIs, to avoid errors in cpluspluscheck */ +#undef U_SHOW_CPLUSPLUS_API +#define U_SHOW_CPLUSPLUS_API 0 +#undef U_SHOW_CPLUSPLUS_HEADER_API +#define U_SHOW_CPLUSPLUS_HEADER_API 0 #include #endif diff --git a/src/include/utils/relcache.h b/src/include/utils/relcache.h index aa060ef115b..08fb6120579 100644 --- a/src/include/utils/relcache.h +++ b/src/include/utils/relcache.h @@ -36,6 +36,14 @@ typedef Relation *RelationPtr; /* * Routines to open (lookup) and close a relcache entry */ +#ifdef USE_ASSERT_CHECKING +extern void AssertCouldGetRelation(void); +#else +static inline void +AssertCouldGetRelation(void) +{ +} +#endif extern Relation RelationIdGetRelation(Oid relationId); extern void RelationClose(Relation relation); diff --git a/src/include/utils/ruleutils.h b/src/include/utils/ruleutils.h index 030c996808c..ee689d8510d 100644 --- a/src/include/utils/ruleutils.h +++ b/src/include/utils/ruleutils.h @@ -48,4 +48,6 @@ extern char *get_range_partbound_string(List *bound_datums); extern char *pg_get_statisticsobjdef_string(Oid statextid); +extern char *pg_get_view_createcommand(Oid viewoid); + #endif /* RULEUTILS_H */ diff --git a/src/include/utils/selfuncs.h b/src/include/utils/selfuncs.h index 9dd444e1ff5..7950b3b68c5 100644 --- a/src/include/utils/selfuncs.h +++ b/src/include/utils/selfuncs.h @@ -95,7 +95,8 @@ typedef struct VariableStatData Oid atttype; /* actual type (after stripping relabel) */ int32 atttypmod; /* actual typmod (after stripping relabel) */ bool isunique; /* matches unique index or DISTINCT clause */ - bool acl_ok; /* result of ACL check on table or column */ + bool acl_ok; /* true if user has SELECT privilege on all + * rows from the table or column */ } VariableStatData; #define ReleaseVariableStats(vardata) \ @@ -149,6 +150,7 @@ extern PGDLLIMPORT get_index_stats_hook_type get_index_stats_hook; extern void examine_variable(PlannerInfo *root, Node *node, int varRelid, VariableStatData *vardata); +extern bool all_rows_selectable(PlannerInfo *root, Index varno, Bitmapset *varattnos); extern bool statistic_proc_security_check(VariableStatData *vardata, Oid func_oid); extern bool get_restriction_variable(PlannerInfo *root, List *args, int varRelid, diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h index 27c892d24c5..bffa8c45b5e 100644 --- a/src/include/utils/syscache.h +++ b/src/include/utils/syscache.h @@ -109,9 +109,11 @@ enum SysCacheIdentifier TYPENAMENSP, TYPEOID, USERMAPPINGOID, - USERMAPPINGUSERSERVER + USERMAPPINGUSERSERVER, + /* intentionally out of alphabetical order, to avoid an ABI break: */ + EXTENSIONOID -#define SysCacheSize (USERMAPPINGUSERSERVER + 1) +#define SysCacheSize (EXTENSIONOID + 1) }; extern void InitCatalogCache(void); diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h index f94949370b4..29aa9cdfb02 100644 --- a/src/include/utils/tuplesort.h +++ b/src/include/utils/tuplesort.h @@ -267,6 +267,16 @@ extern void tuplesort_initialize_shared(Sharedsort *shared, int nWorkers, dsm_segment *seg); extern void tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg); +extern void tuplesort_mark_global_sort(Tuplesortstate *state); + +extern void tuplesort_copy_sharedsort(Sharedsort *shared1, Sharedsort *shared2); + +extern void tuplesort_copy_sharedsort2(Sharedsort *shared1, Tuplesortstate *state); + +extern int tuplesort_get_curr_workers(Sharedsort *shared); + +extern void tuplesort_register_cleanup_callback(Sharedsort *shared, dsm_segment *seg); + /* * These routines may only be called if randomAccess was specified 'true'. * Likewise, backwards scan in gettuple/getdatum is only allowed if diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index 056940cb252..3b498b11e69 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -66,7 +66,12 @@ ecpg_get_connection_nr(const char *connection_name) for (con = all_connections; con != NULL; con = con->next) { - if (strcmp(connection_name, con->name) == 0) + /* + * Check for the case of a NULL connection name, stored as such in + * the connection information by ECPGconnect() when the database + * name is not specified by its caller. + */ + if (con->name != NULL && strcmp(connection_name, con->name) == 0) break; } ret = con; diff --git a/src/interfaces/ecpg/ecpglib/po/es.po b/src/interfaces/ecpg/ecpglib/po/es.po index 91adaa72a82..2abe9fde255 100644 --- a/src/interfaces/ecpg/ecpglib/po/es.po +++ b/src/interfaces/ecpg/ecpglib/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpglib (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:28+0000\n" +"POT-Creation-Date: 2026-02-06 21:25+0000\n" "PO-Revision-Date: 2019-06-06 17:20-0400\n" "Last-Translator: Emanuel Calvo Franco \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -18,11 +18,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: connect.c:243 +#: connect.c:248 msgid "empty message text" msgstr "mensaje de texto vacío" -#: connect.c:411 connect.c:676 +#: connect.c:416 connect.c:681 msgid "" msgstr "" diff --git a/src/interfaces/ecpg/ecpglib/po/ru.po b/src/interfaces/ecpg/ecpglib/po/ru.po index 3ff70d1942d..137f10726d1 100644 --- a/src/interfaces/ecpg/ecpglib/po/ru.po +++ b/src/interfaces/ecpg/ecpglib/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpglib (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2022-08-10 11:56+0300\n" +"POT-Creation-Date: 2025-08-02 11:38+0300\n" "PO-Revision-Date: 2019-09-09 13:30+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -17,11 +17,11 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: connect.c:243 +#: connect.c:248 msgid "empty message text" msgstr "пустое сообщение" -#: connect.c:411 connect.c:676 +#: connect.c:416 connect.c:681 msgid "" msgstr "<ПО_УМОЛЧАНИЮ>" diff --git a/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.c b/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.c index d474bd38bf6..ff881e10c1a 100644 --- a/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.c +++ b/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.c @@ -155,13 +155,8 @@ dump_sqlda(sqlda_t *sqlda) printf("name sqlda descriptor: '%s' value %ld\n", sqlda->sqlvar[i].sqlname.data, *(long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_long_long: - printf( -#ifdef _WIN32 - "name sqlda descriptor: '%s' value %I64d\n", -#else - "name sqlda descriptor: '%s' value %lld\n", -#endif - sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); + printf("name sqlda descriptor: '%s' value %lld\n", + sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_double: printf("name sqlda descriptor: '%s' value %f\n", sqlda->sqlvar[i].sqlname.data, *(double *)sqlda->sqlvar[i].sqldata); @@ -188,19 +183,19 @@ main (void) -#line 71 "sqlda.pgc" +#line 66 "sqlda.pgc" char * stmt1 = "SELECT * FROM t1" ; -#line 72 "sqlda.pgc" +#line 67 "sqlda.pgc" char * stmt2 = "SELECT * FROM t1 WHERE id = ?" ; -#line 73 "sqlda.pgc" +#line 68 "sqlda.pgc" int rec ; -#line 74 "sqlda.pgc" +#line 69 "sqlda.pgc" int id ; /* exec sql end declare section */ -#line 75 "sqlda.pgc" +#line 70 "sqlda.pgc" char msg[128]; @@ -209,42 +204,42 @@ main (void) strcpy(msg, "connect"); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "regress1", 0); -#line 82 "sqlda.pgc" +#line 77 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 82 "sqlda.pgc" +#line 77 "sqlda.pgc" strcpy(msg, "set"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT); -#line 85 "sqlda.pgc" +#line 80 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 85 "sqlda.pgc" +#line 80 "sqlda.pgc" strcpy(msg, "create"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) , big bigint )", ECPGt_EOIT, ECPGt_EORT); -#line 95 "sqlda.pgc" +#line 90 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 95 "sqlda.pgc" +#line 90 "sqlda.pgc" strcpy(msg, "insert"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 'NaN' , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 )", ECPGt_EOIT, ECPGt_EORT); -#line 103 "sqlda.pgc" +#line 98 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 103 "sqlda.pgc" +#line 98 "sqlda.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 106 "sqlda.pgc" +#line 101 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 106 "sqlda.pgc" +#line 101 "sqlda.pgc" /* SQLDA test for getting all records from a table */ @@ -253,29 +248,29 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1); -#line 113 "sqlda.pgc" +#line 108 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 113 "sqlda.pgc" +#line 108 "sqlda.pgc" strcpy(msg, "declare"); /* declare mycur1 cursor for $1 */ -#line 116 "sqlda.pgc" +#line 111 "sqlda.pgc" strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur1 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 119 "sqlda.pgc" +#line 114 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 119 "sqlda.pgc" +#line 114 "sqlda.pgc" /* exec sql whenever not found break ; */ -#line 121 "sqlda.pgc" +#line 116 "sqlda.pgc" rec = 0; @@ -285,13 +280,13 @@ if (sqlca.sqlcode < 0) exit (1);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from mycur1", ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 127 "sqlda.pgc" +#line 122 "sqlda.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 127 "sqlda.pgc" +#line 122 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 127 "sqlda.pgc" +#line 122 "sqlda.pgc" printf("FETCH RECORD %d\n", ++rec); @@ -299,23 +294,23 @@ if (sqlca.sqlcode < 0) exit (1);} } /* exec sql whenever not found continue ; */ -#line 133 "sqlda.pgc" +#line 128 "sqlda.pgc" strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur1", ECPGt_EOIT, ECPGt_EORT); -#line 136 "sqlda.pgc" +#line 131 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 136 "sqlda.pgc" +#line 131 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id1"); -#line 139 "sqlda.pgc" +#line 134 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 139 "sqlda.pgc" +#line 134 "sqlda.pgc" free(outp_sqlda); @@ -326,35 +321,35 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt1); -#line 148 "sqlda.pgc" +#line 143 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 148 "sqlda.pgc" +#line 143 "sqlda.pgc" strcpy(msg, "declare"); /* declare mycur2 cursor for $1 */ -#line 151 "sqlda.pgc" +#line 146 "sqlda.pgc" strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur2 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 154 "sqlda.pgc" +#line 149 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 154 "sqlda.pgc" +#line 149 "sqlda.pgc" strcpy(msg, "fetch"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch all from mycur2", ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 157 "sqlda.pgc" +#line 152 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 157 "sqlda.pgc" +#line 152 "sqlda.pgc" outp_sqlda1 = outp_sqlda; @@ -372,18 +367,18 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur2", ECPGt_EOIT, ECPGt_EORT); -#line 173 "sqlda.pgc" +#line 168 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 173 "sqlda.pgc" +#line 168 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id2"); -#line 176 "sqlda.pgc" +#line 171 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 176 "sqlda.pgc" +#line 171 "sqlda.pgc" /* SQLDA test for getting one record using an input descriptor */ @@ -407,10 +402,10 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id3", stmt2); -#line 198 "sqlda.pgc" +#line 193 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 198 "sqlda.pgc" +#line 193 "sqlda.pgc" strcpy(msg, "execute"); @@ -419,20 +414,20 @@ if (sqlca.sqlcode < 0) exit (1);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 201 "sqlda.pgc" +#line 196 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 201 "sqlda.pgc" +#line 196 "sqlda.pgc" dump_sqlda(outp_sqlda); strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id3"); -#line 206 "sqlda.pgc" +#line 201 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 206 "sqlda.pgc" +#line 201 "sqlda.pgc" free(inp_sqlda); @@ -443,10 +438,10 @@ if (sqlca.sqlcode < 0) exit (1);} */ { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "con2", 0); -#line 215 "sqlda.pgc" +#line 210 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 215 "sqlda.pgc" +#line 210 "sqlda.pgc" /* @@ -468,10 +463,10 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, "con2", 0, "st_id4", stmt2); -#line 235 "sqlda.pgc" +#line 230 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 235 "sqlda.pgc" +#line 230 "sqlda.pgc" strcpy(msg, "execute"); @@ -480,28 +475,28 @@ if (sqlca.sqlcode < 0) exit (1);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 238 "sqlda.pgc" +#line 233 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 238 "sqlda.pgc" +#line 233 "sqlda.pgc" dump_sqlda(outp_sqlda); strcpy(msg, "commit"); { ECPGtrans(__LINE__, "con2", "commit"); -#line 243 "sqlda.pgc" +#line 238 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 243 "sqlda.pgc" +#line 238 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id4"); -#line 246 "sqlda.pgc" +#line 241 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 246 "sqlda.pgc" +#line 241 "sqlda.pgc" free(inp_sqlda); @@ -509,36 +504,36 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "con2"); -#line 252 "sqlda.pgc" +#line 247 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 252 "sqlda.pgc" +#line 247 "sqlda.pgc" /* End test */ strcpy(msg, "drop"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT); -#line 257 "sqlda.pgc" +#line 252 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 257 "sqlda.pgc" +#line 252 "sqlda.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 260 "sqlda.pgc" +#line 255 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 260 "sqlda.pgc" +#line 255 "sqlda.pgc" strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "CURRENT"); -#line 263 "sqlda.pgc" +#line 258 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 263 "sqlda.pgc" +#line 258 "sqlda.pgc" return 0; diff --git a/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.stderr b/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.stderr index dfe6b13055f..51ef236a50e 100644 --- a/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.stderr +++ b/src/interfaces/ecpg/oracle_test/expected/sql-sqlda.stderr @@ -2,459 +2,459 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: opening database ecpg1_regression on port [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 85: query: set datestyle to iso; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 80: query: set datestyle to iso; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 85: using PQexec +[NO_PID]: ecpg_execute on line 80: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 85: OK: SET +[NO_PID]: ecpg_process_output on line 80: OK: SET [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 88: query: create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) , big bigint ); with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 83: query: create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) , big bigint ); with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 88: using PQexec +[NO_PID]: ecpg_execute on line 83: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 88: OK: CREATE TABLE +[NO_PID]: ecpg_process_output on line 83: OK: CREATE TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 98: query: insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 'NaN' , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 ); with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 93: query: insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 'NaN' , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 ); with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 98: using PQexec +[NO_PID]: ecpg_execute on line 93: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 98: OK: INSERT 0 5 +[NO_PID]: ecpg_process_output on line 93: OK: INSERT 0 5 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 106: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 101: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 113: name st_id1; query: "SELECT * FROM t1" +[NO_PID]: prepare_common on line 108: name st_id1; query: "SELECT * FROM t1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 119: query: declare mycur1 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 114: query: declare mycur1 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 119: using PQexec +[NO_PID]: ecpg_execute on line 114: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 119: OK: DECLARE CURSOR +[NO_PID]: ecpg_process_output on line 114: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 1111111111111111111 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 1111111111111111111 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 3333333333333333333 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 3333333333333333333 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 5555555555555555555 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 5555555555555555555 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 0 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 0 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 127: no data found on line 127 +[NO_PID]: raising sqlcode 100 on line 122: no data found on line 122 [NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 136: query: close mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 131: query: close mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 136: using PQexec +[NO_PID]: ecpg_execute on line 131: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 136: OK: CLOSE CURSOR +[NO_PID]: ecpg_process_output on line 131: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 139: name st_id1 +[NO_PID]: deallocate_one on line 134: name st_id1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 148: name st_id2; query: "SELECT * FROM t1" +[NO_PID]: prepare_common on line 143: name st_id2; query: "SELECT * FROM t1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 154: query: declare mycur2 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 149: query: declare mycur2 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 154: using PQexec +[NO_PID]: ecpg_execute on line 149: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 154: OK: DECLARE CURSOR +[NO_PID]: ecpg_process_output on line 149: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 157: query: fetch all from mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 152: query: fetch all from mycur2; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 157: using PQexec +[NO_PID]: ecpg_execute on line 152: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: correctly got 5 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 152: correctly got 5 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 5555555555555555555 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 5555555555555555555 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 3333333333333333333 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 3333333333333333333 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 1 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 1 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 2 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 2 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 3 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 3 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 4 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 4 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 5 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 5 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 1111111111111111111 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 1111111111111111111 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 173: query: close mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 168: query: close mycur2; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 173: using PQexec +[NO_PID]: ecpg_execute on line 168: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 173: OK: CLOSE CURSOR +[NO_PID]: ecpg_process_output on line 168: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 176: name st_id2 +[NO_PID]: deallocate_one on line 171: name st_id2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 198: name st_id3; query: "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: prepare_common on line 193: name st_id3; query: "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 201: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 196: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 201: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: ecpg_execute on line 196: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_free_params on line 201: parameter 1 = 4 +[NO_PID]: ecpg_free_params on line 196: parameter 1 = 4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 201: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 196: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 201 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 196 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 201: new sqlda was built +[NO_PID]: ecpg_process_output on line 196: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 201: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 196: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 206: name st_id3 +[NO_PID]: deallocate_one on line 201: name st_id3 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: opening database ecpg1_regression on port [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 235: name st_id4; query: "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: prepare_common on line 230: name st_id4; query: "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 238: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 233: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 238: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: ecpg_execute on line 233: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_free_params on line 238: parameter 1 = 4 +[NO_PID]: ecpg_free_params on line 233: parameter 1 = 4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 238: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 233: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 238 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 233 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 238: new sqlda was built +[NO_PID]: ecpg_process_output on line 233: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 238: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 233: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 243: action "commit"; connection "con2" +[NO_PID]: ECPGtrans on line 238: action "commit"; connection "con2" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 246: name st_id4 +[NO_PID]: deallocate_one on line 241: name st_id4 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection con2 closed [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 257: query: drop table t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 252: query: drop table t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 257: using PQexec +[NO_PID]: ecpg_execute on line 252: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 257: OK: DROP TABLE +[NO_PID]: ecpg_process_output on line 252: OK: DROP TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 260: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 255: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection regress1 closed [NO_PID]: sqlca: code: 0, state: 00000 diff --git a/src/interfaces/ecpg/oracle_test/sql/sqlda.pgc b/src/interfaces/ecpg/oracle_test/sql/sqlda.pgc index e551385eaa4..f7aa296ebf9 100644 --- a/src/interfaces/ecpg/oracle_test/sql/sqlda.pgc +++ b/src/interfaces/ecpg/oracle_test/sql/sqlda.pgc @@ -40,13 +40,8 @@ dump_sqlda(sqlda_t *sqlda) printf("name sqlda descriptor: '%s' value %ld\n", sqlda->sqlvar[i].sqlname.data, *(long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_long_long: - printf( -#ifdef _WIN32 - "name sqlda descriptor: '%s' value %I64d\n", -#else - "name sqlda descriptor: '%s' value %lld\n", -#endif - sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); + printf("name sqlda descriptor: '%s' value %lld\n", + sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_double: printf("name sqlda descriptor: '%s' value %f\n", sqlda->sqlvar[i].sqlname.data, *(double *)sqlda->sqlvar[i].sqldata); diff --git a/src/interfaces/ecpg/preproc/po/es.po b/src/interfaces/ecpg/preproc/po/es.po index 0d9449ea1ee..add33cf387a 100644 --- a/src/interfaces/ecpg/preproc/po/es.po +++ b/src/interfaces/ecpg/preproc/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:29+0000\n" +"POT-Creation-Date: 2026-02-06 21:25+0000\n" "PO-Revision-Date: 2021-10-13 23:43-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/interfaces/ecpg/preproc/po/pl.po b/src/interfaces/ecpg/preproc/po/pl.po index c3a2fe257ca..e3f9efc3956 100644 --- a/src/interfaces/ecpg/preproc/po/pl.po +++ b/src/interfaces/ecpg/preproc/po/pl.po @@ -1,329 +1,331 @@ -# Polish message translation file for ecpg -# Copyright (C) 2011 PostgreSQL Global Development Group -# This file is distributed under the same license as the PostgreSQL package. -# Begina Felicysym , 2011, 2012. -# grzegorz , 2014, 2017. msgid "" msgstr "" -"Project-Id-Version: ecpg (PostgreSQL 9.1)\n" -"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" -"POT-Creation-Date: 2017-03-14 17:38+0000\n" -"PO-Revision-Date: 2017-03-14 19:42+0200\n" -"Last-Translator: grzegorz \n" -"Language-Team: begina.felicysym@wp.eu\n" -"Language: pl\n" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2025-03-27 18:46+0000\n" +"PO-Revision-Date: 2026-01-03 14:10\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"Language: pl_PL\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Virtaal 0.7.1\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /REL_14_STABLE/ecpg.pot\n" +"X-Crowdin-File-ID: 782\n" #: descriptor.c:64 #, c-format msgid "variable \"%s\" must have a numeric type" msgstr "zmienna \"%s\" musi mieć typ numeryczny" -#: descriptor.c:124 descriptor.c:146 +#: descriptor.c:125 descriptor.c:156 #, c-format -msgid "descriptor \"%s\" does not exist" -msgstr "deskryptor \"%s\" nie istnieje" +msgid "descriptor %s bound to connection %s does not exist" +msgstr "deskryptor %s związany z połączeniem %s nie istnieje" -#: descriptor.c:161 descriptor.c:213 +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "deskryptor %s związany z domyślnym połączeniem nie istnieje" + +#: descriptor.c:173 descriptor.c:225 #, c-format msgid "descriptor header item \"%d\" does not exist" msgstr "element nagłówka deskryptora \"%d\" nie istnieje" -#: descriptor.c:183 +#: descriptor.c:195 #, c-format msgid "nullable is always 1" msgstr "nullable jest zawsze 1" -#: descriptor.c:186 +#: descriptor.c:198 #, c-format msgid "key_member is always 0" msgstr "key_member jest zawsze 0" -#: descriptor.c:280 +#: descriptor.c:292 #, c-format msgid "descriptor item \"%s\" is not implemented" msgstr "element deskryptora \"%s\" nie jest zaimplementowany" -#: descriptor.c:290 +#: descriptor.c:302 #, c-format msgid "descriptor item \"%s\" cannot be set" msgstr "element deskryptora \"%s\" nie może zostać ustawiony" -#: ecpg.c:35 +#: ecpg.c:36 #, c-format -msgid "" -"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" -"\n" -msgstr "" -"%s jest osadzonym w PostgreSQL preprocesorem SQL dla programów C.\n" -"\n" +msgid "%s is the PostgreSQL embedded SQL preprocessor for C programs.\n\n" +msgstr "%s jest osadzonym w PostgreSQL preprocesorem SQL dla programów C.\n\n" -#: ecpg.c:37 +#: ecpg.c:38 #, c-format -msgid "" -"Usage:\n" -" %s [OPTION]... FILE...\n" -"\n" -msgstr "" -"Sposób użycia:\n" -" %s [OPCJE]... PLIK...\n" -"\n" +msgid "Usage:\n" +" %s [OPTION]... FILE...\n\n" +msgstr "Sposób użycia:\n" +" %s [OPCJE]... PLIK...\n\n" -#: ecpg.c:40 +#: ecpg.c:41 #, c-format msgid "Options:\n" msgstr "Opcje:\n" -#: ecpg.c:41 +#: ecpg.c:42 #, c-format -msgid "" -" -c automatically generate C code from embedded SQL code;\n" +msgid " -c automatically generate C code from embedded SQL code;\n" " this affects EXEC SQL TYPE\n" -msgstr "" -" -c automatycznie generuje kod w C z osadzonego kodu SQL;\n" +msgstr " -c automatycznie generuje kod w C z osadzonego kodu SQL;\n" " dotyczy to EXEC SQL TYPE\n" -#: ecpg.c:43 +#: ecpg.c:44 #, c-format -msgid "" -" -C MODE set compatibility mode; MODE can be one of\n" -" \"INFORMIX\", \"INFORMIX_SE\"\n" +msgid " -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" msgstr "" -" -C TRYB ustala tryb kompatybilności; TRYB może być jednym z\n" -" \"INFORMIX\", \"INFORMIX_SE\"\n" -#: ecpg.c:46 +#: ecpg.c:47 #, c-format msgid " -d generate parser debug output\n" msgstr " -d generuje wyjście debugowania parsera\n" -#: ecpg.c:48 +#: ecpg.c:49 #, c-format msgid " -D SYMBOL define SYMBOL\n" msgstr " -D SYMBOL definiuje SYMBOL\n" -#: ecpg.c:49 +#: ecpg.c:50 #, c-format msgid " -h parse a header file, this option includes option \"-c\"\n" msgstr " -h parsuje plik nagłówkowy, opcja ta zawiera opcję \"-c\"\n" -#: ecpg.c:50 +#: ecpg.c:51 #, c-format msgid " -i parse system include files as well\n" msgstr " -i parsuje również systemowe pliki nagłówkowe\n" -#: ecpg.c:51 +#: ecpg.c:52 #, c-format msgid " -I DIRECTORY search DIRECTORY for include files\n" msgstr " -I FOLDER przeszukuje FOLDER w poszukiwaniu plików nagłówkowych\n" -#: ecpg.c:52 +#: ecpg.c:53 #, c-format msgid " -o OUTFILE write result to OUTFILE\n" msgstr " -o PLIKOUT zapisuje wynik do PLIKOUT\n" -#: ecpg.c:53 +#: ecpg.c:54 #, c-format -msgid "" -" -r OPTION specify run-time behavior; OPTION can be:\n" +msgid " -r OPTION specify run-time behavior; OPTION can be:\n" " \"no_indicator\", \"prepare\", \"questionmarks\"\n" -msgstr "" -" -r OPCJA określa zachowanie uruchomienia; OPTCJA może być:\n" +msgstr " -r OPCJA określa zachowanie uruchomienia; OPTCJA może być:\n" " \"no_indicator\", \"prepare\", \"questionmarks\"\n" -#: ecpg.c:55 +#: ecpg.c:56 #, c-format msgid " --regression run in regression testing mode\n" msgstr " --regression wykonanie w trybie testów regresyjnych\n" -#: ecpg.c:56 +#: ecpg.c:57 #, c-format msgid " -t turn on autocommit of transactions\n" msgstr " -t włącza automatyczne zatwierdzanie transakcji\n" -#: ecpg.c:57 +#: ecpg.c:58 #, c-format msgid " -V, --version output version information, then exit\n" msgstr " -V, --version wypisuje informacje o wersji i kończy\n" -#: ecpg.c:58 +#: ecpg.c:59 #, c-format msgid " -?, --help show this help, then exit\n" msgstr " -?, --help pokazuje ten ekran pomocy i kończy\n" -#: ecpg.c:59 +#: ecpg.c:60 #, c-format -msgid "" -"\n" +msgid "\n" "If no output file is specified, the name is formed by adding .c to the\n" "input file name, after stripping off .pgc if present.\n" -msgstr "" -"\n" +msgstr "\n" "Jeżeli nie wskazano pliku wyjścia, nazwa jest tworzona przez dodanie .c\n" "do nazwy pliku wejścia, po usunięciu .pgc jeśli obecne.\n" -#: ecpg.c:61 +#: ecpg.c:62 #, c-format -msgid "" -"\n" -"Report bugs to .\n" -msgstr "" -"\n" -"Błędy proszę przesyłać na adres .\n" +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Zgłoś błędy do <%s>.\n" -#: ecpg.c:139 +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s strona główna: <%s>\n" + +#: ecpg.c:152 #, c-format msgid "%s: could not locate my own executable path\n" msgstr "%s: nie można odnaleźć własnej ścieżki programu wykonywalnego\n" -#: ecpg.c:174 ecpg.c:327 ecpg.c:337 +#: ecpg.c:187 ecpg.c:344 ecpg.c:355 #, c-format msgid "%s: could not open file \"%s\": %s\n" msgstr "%s: nie można otworzyć pliku \"%s\": %s\n" -#: ecpg.c:213 ecpg.c:226 ecpg.c:242 ecpg.c:268 +#: ecpg.c:230 ecpg.c:243 ecpg.c:259 ecpg.c:285 #, c-format msgid "Try \"%s --help\" for more information.\n" -msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" +msgstr "Użyj \"%s --help\" aby uzyskać więcej informacji.\n" -#: ecpg.c:237 +#: ecpg.c:254 #, c-format msgid "%s: parser debug support (-d) not available\n" msgstr "%s: wsparcie debugu analizatora (-d) niedostępne\n" -#: ecpg.c:256 +#: ecpg.c:273 #, c-format msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" msgstr "%s, preprocesor C osadzony w PostgreSQL, wersja %s\n" -#: ecpg.c:258 +#: ecpg.c:275 #, c-format msgid "EXEC SQL INCLUDE ... search starts here:\n" msgstr "EXEC SQL INCLUDE ... wyszukiwanie zaczyna się tutaj:\n" -#: ecpg.c:261 +#: ecpg.c:278 #, c-format msgid "end of search list\n" msgstr "koniec listy wyszukiwania\n" -#: ecpg.c:267 +#: ecpg.c:284 #, c-format msgid "%s: no input files specified\n" msgstr "%s: nie wskazano pliku wejściowego\n" -#: ecpg.c:460 +#: ecpg.c:490 #, c-format msgid "cursor \"%s\" has been declared but not opened" msgstr "kursor \"%s\" został zadeklarowany, ale nie otwarty" -#: ecpg.c:473 preproc.y:127 +#: ecpg.c:503 preproc.y:130 #, c-format msgid "could not remove output file \"%s\"\n" msgstr "nie można usunąć pliku wyjścia \"%s\"\n" -#: pgc.l:431 +#: pgc.l:509 #, c-format msgid "unterminated /* comment" msgstr "nie zakończony komentarz /*" -#: pgc.l:444 -#, c-format -msgid "invalid bit string literal" -msgstr "nieprawidłowa stała łańcucha bitów" - -#: pgc.l:453 +#: pgc.l:526 #, c-format msgid "unterminated bit string literal" msgstr "niezakończona stała łańcucha bitów" -#: pgc.l:469 +#: pgc.l:534 #, c-format msgid "unterminated hexadecimal string literal" msgstr "niezakończona stała łańcucha szesnastkowego" -#: pgc.l:547 +#: pgc.l:609 +#, c-format +msgid "invalid bit string literal" +msgstr "nieprawidłowa stała łańcucha bitów" + +#: pgc.l:614 +#, c-format +msgid "invalid hex string literal" +msgstr "" + +#: pgc.l:632 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "" + +#: pgc.l:658 pgc.l:767 #, c-format msgid "unterminated quoted string" msgstr "niezakończona stała łańcuchowa" -#: pgc.l:605 pgc.l:618 +#: pgc.l:709 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "niezakończona stała łańcuchowa cytowana znakiem dolara" + +#: pgc.l:727 pgc.l:747 #, c-format msgid "zero-length delimited identifier" -msgstr "ograniczony identyfikator o długości zero" +msgstr "identyfikator ogranicznika o długości zero" -#: pgc.l:626 +#: pgc.l:758 #, c-format msgid "unterminated quoted identifier" -msgstr "niezakończony łańcuch identyfikatora" +msgstr "niezakończony identyfikator cytowany" -#: pgc.l:881 +#: pgc.l:1090 #, c-format msgid "nested /* ... */ comments" msgstr "zagnieżdżone komentarze /* ... */" -#: pgc.l:974 +#: pgc.l:1189 #, c-format msgid "missing identifier in EXEC SQL UNDEF command" msgstr "brakujący identyfikator w poleceniu EXEC SQL UNDEF" -#: pgc.l:1020 pgc.l:1034 +#: pgc.l:1207 pgc.l:1220 pgc.l:1236 pgc.l:1249 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "zbyt wiele zagłębień warunków EXEC SQL IFDEF" + +#: pgc.l:1265 pgc.l:1276 pgc.l:1291 pgc.l:1313 #, c-format msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" msgstr "brak pasującego \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" -#: pgc.l:1023 pgc.l:1036 pgc.l:1212 +#: pgc.l:1267 pgc.l:1278 pgc.l:1471 #, c-format msgid "missing \"EXEC SQL ENDIF;\"" msgstr "brak \"EXEC SQL ENDIF;\"" -#: pgc.l:1052 pgc.l:1071 +#: pgc.l:1293 pgc.l:1315 #, c-format msgid "more than one EXEC SQL ELSE" msgstr "więcej niż jeden EXEC SQL ELSE" -#: pgc.l:1093 pgc.l:1107 +#: pgc.l:1338 pgc.l:1352 #, c-format msgid "unmatched EXEC SQL ENDIF" msgstr "niedopasowany EXEC SQL ENDIF" -#: pgc.l:1127 -#, c-format -msgid "too many nested EXEC SQL IFDEF conditions" -msgstr "zbyt wiele zagłębień warunków EXEC SQL IFDEF" - -#: pgc.l:1160 +#: pgc.l:1413 #, c-format msgid "missing identifier in EXEC SQL IFDEF command" msgstr "brakujący identyfikator w poleceniu EXEC SQL IFDEF" -#: pgc.l:1169 +#: pgc.l:1422 #, c-format msgid "missing identifier in EXEC SQL DEFINE command" msgstr "brakujący identyfikator w poleceniu EXEC SQL DEFINE" -#: pgc.l:1202 +#: pgc.l:1460 #, c-format msgid "syntax error in EXEC SQL INCLUDE command" msgstr "błąd składni w poleceniu EXEC SQL INCLUDE" -#: pgc.l:1251 +#: pgc.l:1515 #, c-format -msgid "internal error: unreachable state; please report this to " +msgid "internal error: unreachable state; please report this to <%s>" msgstr "" -"błąd wewnętrzny: nieosiągalny stan; proszę przesłać go na adres " -#: pgc.l:1375 +#: pgc.l:1667 #, c-format msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" msgstr "Błąd: załączona ścieżka \"%s/%s\" jest zbyt długa w linii %d, pominięto\n" -#: pgc.l:1398 +#: pgc.l:1690 #, c-format msgid "could not open include file \"%s\" on line %d" msgstr "nie można otworzyć załączonego pliku \"%s\" w linii %d" @@ -332,343 +334,349 @@ msgstr "nie można otworzyć załączonego pliku \"%s\" w linii %d" msgid "syntax error" msgstr "błąd składni" -#: preproc.y:81 +#: preproc.y:84 #, c-format msgid "WARNING: " msgstr "OSTRZEŻENIE: " -#: preproc.y:84 +#: preproc.y:87 #, c-format msgid "ERROR: " msgstr "BŁĄD: " -#: preproc.y:508 +#: preproc.y:514 #, c-format msgid "cursor \"%s\" does not exist" msgstr "kursor \"%s\" nie istnieje" -#: preproc.y:537 +#: preproc.y:543 #, c-format msgid "initializer not allowed in type definition" msgstr "inicjator niedozwolony w definicji typu" -#: preproc.y:539 +#: preproc.y:545 #, c-format msgid "type name \"string\" is reserved in Informix mode" msgstr "nazwa typu \"string\" jest zarezerwowana w trybie Informix" -#: preproc.y:546 preproc.y:15234 +#: preproc.y:552 preproc.y:17671 #, c-format msgid "type \"%s\" is already defined" msgstr "typ \"%s\" już istnieje" -#: preproc.y:570 preproc.y:15892 preproc.y:16212 variable.c:620 +#: preproc.y:577 preproc.y:18306 preproc.y:18631 variable.c:619 #, c-format msgid "multidimensional arrays for simple data types are not supported" msgstr "wielowymiarowe tablice dla prostych typów danych nie są wspierane" -#: preproc.y:1675 +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "połączenie %s jest nadpisane przez %s wyrażeniem DECLARE %s" + +#: preproc.y:1753 #, c-format msgid "AT option not allowed in CLOSE DATABASE statement" msgstr "opcja AT niedozwolona w wyrażeniu CLOSE DATABASE" -#: preproc.y:1886 +#: preproc.y:2001 #, c-format msgid "AT option not allowed in CONNECT statement" msgstr "opcja AT niedozwolona w wyrażeniu CONNECT" -#: preproc.y:1920 +#: preproc.y:2041 #, c-format msgid "AT option not allowed in DISCONNECT statement" msgstr "opcja AT niedozwolona w wyrażeniu DISCONNECT" -#: preproc.y:1975 +#: preproc.y:2096 #, c-format msgid "AT option not allowed in SET CONNECTION statement" msgstr "opcja AT niedozwolona w wyrażeniu SET CONNECTION" -#: preproc.y:1997 +#: preproc.y:2118 #, c-format msgid "AT option not allowed in TYPE statement" msgstr "opcja AT niedozwolona w wyrażeniu TYPE" -#: preproc.y:2006 +#: preproc.y:2127 #, c-format msgid "AT option not allowed in VAR statement" msgstr "opcja AT niedozwolona w wyrażeniu VAR" -#: preproc.y:2013 +#: preproc.y:2134 #, c-format msgid "AT option not allowed in WHENEVER statement" msgstr "opcja AT niedozwolona w wyrażeniu WHENEVER" -#: preproc.y:2265 preproc.y:2270 preproc.y:2386 preproc.y:3923 preproc.y:5434 -#: preproc.y:5443 preproc.y:5751 preproc.y:7247 preproc.y:8659 preproc.y:8664 -#: preproc.y:11368 preproc.y:11989 +#: preproc.y:2211 preproc.y:2509 preproc.y:4141 preproc.y:4805 preproc.y:5675 +#: preproc.y:5975 preproc.y:11909 #, c-format msgid "unsupported feature will be passed to server" msgstr "niewspierana cecha zostanie przekazana na serwer" -#: preproc.y:2644 +#: preproc.y:2767 #, c-format msgid "SHOW ALL is not implemented" msgstr "SHOW ALL nie jest zaimplementowane" -#: preproc.y:3268 +#: preproc.y:3462 #, c-format msgid "COPY FROM STDIN is not implemented" msgstr "COPY FROM STDIN nie zostało zaimplementowane" -#: preproc.y:9534 preproc.y:14823 +#: preproc.y:10008 preproc.y:17244 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "\"database\" nie może być użyte jako nazwa kursora w trybie INFORMIX" + +#: preproc.y:10015 preproc.y:17254 #, c-format msgid "using variable \"%s\" in different declare statements is not supported" msgstr "użycie zmiennej \"%s\" w innych wyrażeniach deklaracji nie jest wspierane" -#: preproc.y:9536 preproc.y:14825 +#: preproc.y:10017 preproc.y:17256 #, c-format msgid "cursor \"%s\" is already defined" msgstr "kursor \"%s\" już istnieje" -#: preproc.y:9966 +#: preproc.y:10491 #, c-format msgid "no longer supported LIMIT #,# syntax passed to server" msgstr "już nie wspierana składnia LIMIT #,# przesłana na serwer" -#: preproc.y:10282 preproc.y:10289 +#: preproc.y:10824 preproc.y:10831 #, c-format msgid "subquery in FROM must have an alias" msgstr "podzapytanie z FROM musi mieć alias" -#: preproc.y:14553 +#: preproc.y:16936 preproc.y:16943 #, c-format msgid "CREATE TABLE AS cannot specify INTO" msgstr "CREATE TABLE AS nie może zawierać INTO" -#: preproc.y:14589 +#: preproc.y:16979 #, c-format msgid "expected \"@\", found \"%s\"" msgstr "oczekiwano \"@\", znaleziono \"%s\"" -#: preproc.y:14601 +#: preproc.y:16991 #, c-format msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" -msgstr "" -"tylko protokoły \"tcp\" i \"unix\" oraz typ bazy danych \"postgresql\" są " -"wspierane" +msgstr "tylko protokoły \"tcp\" i \"unix\" oraz typ bazy danych \"postgresql\" są wspierane" -#: preproc.y:14604 +#: preproc.y:16994 #, c-format msgid "expected \"://\", found \"%s\"" msgstr "oczekiwano \"://\", znaleziono \"%s\"" -#: preproc.y:14609 +#: preproc.y:16999 #, c-format msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" msgstr "Gniazda dziedziny Uniksa działają tylko na \"localhost\" a nie na \"%s\"" -#: preproc.y:14635 +#: preproc.y:17025 #, c-format msgid "expected \"postgresql\", found \"%s\"" msgstr "oczekiwano \"postgresql\", znaleziono \"%s\"" -#: preproc.y:14638 +#: preproc.y:17028 #, c-format msgid "invalid connection type: %s" msgstr "niepoprawny typ połączenia: %s" -#: preproc.y:14647 +#: preproc.y:17037 #, c-format msgid "expected \"@\" or \"://\", found \"%s\"" msgstr "oczekiwano \"@\" lub \"://\", znaleziono \"%s\"" -#: preproc.y:14722 preproc.y:14740 +#: preproc.y:17112 preproc.y:17130 #, c-format msgid "invalid data type" msgstr "niepoprawny typ danych" -#: preproc.y:14751 preproc.y:14768 +#: preproc.y:17141 preproc.y:17158 #, c-format msgid "incomplete statement" msgstr "niepełne wyrażenie" -#: preproc.y:14754 preproc.y:14771 +#: preproc.y:17144 preproc.y:17161 #, c-format msgid "unrecognized token \"%s\"" msgstr "niezrozumiały token \"%s\"" -#: preproc.y:15045 +#: preproc.y:17206 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "nazwa \"%s\" jest już zadeklarowana" + +#: preproc.y:17474 #, c-format msgid "only data types numeric and decimal have precision/scale argument" msgstr "tylko typy danych numeric i decimal mają argument precyzji/skali" -#: preproc.y:15057 +#: preproc.y:17486 #, c-format msgid "interval specification not allowed here" msgstr "specyfikacja interwału niedozwolona tutaj" -#: preproc.y:15209 preproc.y:15261 +#: preproc.y:17646 preproc.y:17698 #, c-format msgid "too many levels in nested structure/union definition" msgstr "zbyt wiele poziomów w zagnieżdżonej definicji structure/union" -#: preproc.y:15400 +#: preproc.y:17821 #, c-format msgid "pointers to varchar are not implemented" msgstr "wskazania na varchar nie są zaimplementowane" -#: preproc.y:15587 preproc.y:15612 -#, c-format -msgid "using unsupported DESCRIBE statement" -msgstr "użycie niewspieranego wyrażenia DESCRIBE" - -#: preproc.y:15859 +#: preproc.y:18272 #, c-format msgid "initializer not allowed in EXEC SQL VAR command" msgstr "inicjator niedopuszczalny w poleceniu EXEC SQL VAR" -#: preproc.y:16170 +#: preproc.y:18589 #, c-format msgid "arrays of indicators are not allowed on input" msgstr "tabele wskazań nie są dozwolone w wejściu" -#: preproc.y:16391 +#: preproc.y:18776 #, c-format msgid "operator not allowed in variable definition" msgstr "operator niedozwolony w definicji zmiennej" #. translator: %s is typically the translation of "syntax error" -#: preproc.y:16429 +#: preproc.y:18817 #, c-format msgid "%s at or near \"%s\"" -msgstr "%s w lub pobliżu \"%s\"" +msgstr "%s w lub blisko \"%s\"" #: type.c:18 type.c:30 #, c-format msgid "out of memory" msgstr "brak pamięci" -#: type.c:212 type.c:664 +#: type.c:214 type.c:685 #, c-format msgid "unrecognized variable type code %d" msgstr "niezrozumiały kod typu zmiennej %d" -#: type.c:261 +#: type.c:263 #, c-format msgid "variable \"%s\" is hidden by a local variable of a different type" msgstr "zmienna \"%s\" została przykryta przez zmienną lokalną innego typu" -#: type.c:263 +#: type.c:265 #, c-format msgid "variable \"%s\" is hidden by a local variable" msgstr "zmienna \"%s\" została przykryta przez zmienną lokalną" -#: type.c:275 +#: type.c:277 #, c-format msgid "indicator variable \"%s\" is hidden by a local variable of a different type" -msgstr "" -"zmienna wskaźnikowa \"%s\" została przykryta przez zmienną lokalną innego typu" +msgstr "zmienna wskaźnikowa \"%s\" została przykryta przez zmienną lokalną innego typu" -#: type.c:277 +#: type.c:279 #, c-format msgid "indicator variable \"%s\" is hidden by a local variable" msgstr "zmienna wskaźnikowa \"%s\" została przykryta przez zmienną lokalną" -#: type.c:285 +#: type.c:287 #, c-format msgid "indicator for array/pointer has to be array/pointer" msgstr "wskaźnik do array/pointer musi być array/pointer" -#: type.c:289 +#: type.c:291 #, c-format msgid "nested arrays are not supported (except strings)" msgstr "tabele zagnieżdżone nie są wspierane (poza ciągami znaków)" -#: type.c:331 +#: type.c:333 #, c-format msgid "indicator for struct has to be a struct" msgstr "wskaźnik do struct musi być struct" -#: type.c:351 type.c:372 type.c:392 +#: type.c:353 type.c:374 type.c:394 #, c-format msgid "indicator for simple data type has to be simple" msgstr "wskaźnik do prostego typu danych musi być prosty" -#: type.c:723 +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "" + +#: type.c:744 #, c-format msgid "unrecognized descriptor item code %d" msgstr "niezrozumiały kod deskryptora elementu %d" -#: variable.c:89 variable.c:116 +#: variable.c:89 variable.c:115 #, c-format msgid "incorrectly formed variable \"%s\"" msgstr "niepoprawnie utworzona zmienna \"%s\"" -#: variable.c:139 +#: variable.c:138 #, c-format msgid "variable \"%s\" is not a pointer" msgstr "zmienna \"%s\" nie jest wskaźnikiem" -#: variable.c:142 variable.c:167 +#: variable.c:141 variable.c:166 #, c-format msgid "variable \"%s\" is not a pointer to a structure or a union" msgstr "zmienna \"%s\" nie jest wskazaniem na structure ani union" -#: variable.c:154 +#: variable.c:153 #, c-format msgid "variable \"%s\" is neither a structure nor a union" msgstr "zmienna \"%s\" nie jest ani structure ani union" -#: variable.c:164 +#: variable.c:163 #, c-format msgid "variable \"%s\" is not an array" msgstr "zmienna \"%s\" nie jest tablicą" -#: variable.c:233 variable.c:255 +#: variable.c:232 variable.c:254 #, c-format msgid "variable \"%s\" is not declared" msgstr "zmienna \"%s\" nie została zadeklarowana" -#: variable.c:494 +#: variable.c:492 #, c-format msgid "indicator variable must have an integer type" msgstr "zmienna wskaźnikowa musi mieć typ integer" -#: variable.c:506 +#: variable.c:504 #, c-format msgid "unrecognized data type name \"%s\"" msgstr "niezrozumiała nazwa typu danych \"%s\"" -#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#: variable.c:515 variable.c:523 variable.c:540 variable.c:543 #, c-format msgid "multidimensional arrays are not supported" msgstr "wielowymiarowe tablice nie są wspierane" -#: variable.c:534 +#: variable.c:532 #, c-format msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" -msgstr[0] "" -"wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono " -"%d poziom" -msgstr[1] "" -"wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono " -"%d poziomy" -msgstr[2] "" -"wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono " -"%d poziomów" - -#: variable.c:539 +msgstr[0] "wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono %d poziom" +msgstr[1] "wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono %d poziomy" +msgstr[2] "wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono %d poziomów" +msgstr[3] "" + +#: variable.c:537 #, c-format msgid "pointer to pointer is not supported for this data type" msgstr "wskazanie na wskaźnik nie jest wspierane dla tego typu danych" -#: variable.c:559 +#: variable.c:557 #, c-format msgid "multidimensional arrays for structures are not supported" msgstr "wielowymiarowe tablice dla struktur nie są wspierane" -#~ msgid "COPY FROM STDOUT is not possible" -#~ msgstr "COPY FROM STDOUT nie jest możliwe" - -#~ msgid "COPY TO STDIN is not possible" -#~ msgstr "COPY TO STDIN nie jest możliwe" diff --git a/src/interfaces/ecpg/preproc/po/ru.po b/src/interfaces/ecpg/preproc/po/ru.po index 6bf72146288..713be6ad4b0 100644 --- a/src/interfaces/ecpg/preproc/po/ru.po +++ b/src/interfaces/ecpg/preproc/po/ru.po @@ -1,7 +1,7 @@ # Russian message translation file for ecpg # Copyright (C) 2012-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: ecpg (PostgreSQL current)\n" diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.c b/src/interfaces/ecpg/test/expected/sql-sqlda.c index d474bd38bf6..ff881e10c1a 100644 --- a/src/interfaces/ecpg/test/expected/sql-sqlda.c +++ b/src/interfaces/ecpg/test/expected/sql-sqlda.c @@ -155,13 +155,8 @@ dump_sqlda(sqlda_t *sqlda) printf("name sqlda descriptor: '%s' value %ld\n", sqlda->sqlvar[i].sqlname.data, *(long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_long_long: - printf( -#ifdef _WIN32 - "name sqlda descriptor: '%s' value %I64d\n", -#else - "name sqlda descriptor: '%s' value %lld\n", -#endif - sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); + printf("name sqlda descriptor: '%s' value %lld\n", + sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_double: printf("name sqlda descriptor: '%s' value %f\n", sqlda->sqlvar[i].sqlname.data, *(double *)sqlda->sqlvar[i].sqldata); @@ -188,19 +183,19 @@ main (void) -#line 71 "sqlda.pgc" +#line 66 "sqlda.pgc" char * stmt1 = "SELECT * FROM t1" ; -#line 72 "sqlda.pgc" +#line 67 "sqlda.pgc" char * stmt2 = "SELECT * FROM t1 WHERE id = ?" ; -#line 73 "sqlda.pgc" +#line 68 "sqlda.pgc" int rec ; -#line 74 "sqlda.pgc" +#line 69 "sqlda.pgc" int id ; /* exec sql end declare section */ -#line 75 "sqlda.pgc" +#line 70 "sqlda.pgc" char msg[128]; @@ -209,42 +204,42 @@ main (void) strcpy(msg, "connect"); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "regress1", 0); -#line 82 "sqlda.pgc" +#line 77 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 82 "sqlda.pgc" +#line 77 "sqlda.pgc" strcpy(msg, "set"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT); -#line 85 "sqlda.pgc" +#line 80 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 85 "sqlda.pgc" +#line 80 "sqlda.pgc" strcpy(msg, "create"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) , big bigint )", ECPGt_EOIT, ECPGt_EORT); -#line 95 "sqlda.pgc" +#line 90 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 95 "sqlda.pgc" +#line 90 "sqlda.pgc" strcpy(msg, "insert"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 'NaN' , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 )", ECPGt_EOIT, ECPGt_EORT); -#line 103 "sqlda.pgc" +#line 98 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 103 "sqlda.pgc" +#line 98 "sqlda.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 106 "sqlda.pgc" +#line 101 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 106 "sqlda.pgc" +#line 101 "sqlda.pgc" /* SQLDA test for getting all records from a table */ @@ -253,29 +248,29 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1); -#line 113 "sqlda.pgc" +#line 108 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 113 "sqlda.pgc" +#line 108 "sqlda.pgc" strcpy(msg, "declare"); /* declare mycur1 cursor for $1 */ -#line 116 "sqlda.pgc" +#line 111 "sqlda.pgc" strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur1 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 119 "sqlda.pgc" +#line 114 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 119 "sqlda.pgc" +#line 114 "sqlda.pgc" /* exec sql whenever not found break ; */ -#line 121 "sqlda.pgc" +#line 116 "sqlda.pgc" rec = 0; @@ -285,13 +280,13 @@ if (sqlca.sqlcode < 0) exit (1);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from mycur1", ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 127 "sqlda.pgc" +#line 122 "sqlda.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 127 "sqlda.pgc" +#line 122 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 127 "sqlda.pgc" +#line 122 "sqlda.pgc" printf("FETCH RECORD %d\n", ++rec); @@ -299,23 +294,23 @@ if (sqlca.sqlcode < 0) exit (1);} } /* exec sql whenever not found continue ; */ -#line 133 "sqlda.pgc" +#line 128 "sqlda.pgc" strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur1", ECPGt_EOIT, ECPGt_EORT); -#line 136 "sqlda.pgc" +#line 131 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 136 "sqlda.pgc" +#line 131 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id1"); -#line 139 "sqlda.pgc" +#line 134 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 139 "sqlda.pgc" +#line 134 "sqlda.pgc" free(outp_sqlda); @@ -326,35 +321,35 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt1); -#line 148 "sqlda.pgc" +#line 143 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 148 "sqlda.pgc" +#line 143 "sqlda.pgc" strcpy(msg, "declare"); /* declare mycur2 cursor for $1 */ -#line 151 "sqlda.pgc" +#line 146 "sqlda.pgc" strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur2 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 154 "sqlda.pgc" +#line 149 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 154 "sqlda.pgc" +#line 149 "sqlda.pgc" strcpy(msg, "fetch"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch all from mycur2", ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 157 "sqlda.pgc" +#line 152 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 157 "sqlda.pgc" +#line 152 "sqlda.pgc" outp_sqlda1 = outp_sqlda; @@ -372,18 +367,18 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur2", ECPGt_EOIT, ECPGt_EORT); -#line 173 "sqlda.pgc" +#line 168 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 173 "sqlda.pgc" +#line 168 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id2"); -#line 176 "sqlda.pgc" +#line 171 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 176 "sqlda.pgc" +#line 171 "sqlda.pgc" /* SQLDA test for getting one record using an input descriptor */ @@ -407,10 +402,10 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id3", stmt2); -#line 198 "sqlda.pgc" +#line 193 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 198 "sqlda.pgc" +#line 193 "sqlda.pgc" strcpy(msg, "execute"); @@ -419,20 +414,20 @@ if (sqlca.sqlcode < 0) exit (1);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 201 "sqlda.pgc" +#line 196 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 201 "sqlda.pgc" +#line 196 "sqlda.pgc" dump_sqlda(outp_sqlda); strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id3"); -#line 206 "sqlda.pgc" +#line 201 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 206 "sqlda.pgc" +#line 201 "sqlda.pgc" free(inp_sqlda); @@ -443,10 +438,10 @@ if (sqlca.sqlcode < 0) exit (1);} */ { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "con2", 0); -#line 215 "sqlda.pgc" +#line 210 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 215 "sqlda.pgc" +#line 210 "sqlda.pgc" /* @@ -468,10 +463,10 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, "con2", 0, "st_id4", stmt2); -#line 235 "sqlda.pgc" +#line 230 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 235 "sqlda.pgc" +#line 230 "sqlda.pgc" strcpy(msg, "execute"); @@ -480,28 +475,28 @@ if (sqlca.sqlcode < 0) exit (1);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 238 "sqlda.pgc" +#line 233 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 238 "sqlda.pgc" +#line 233 "sqlda.pgc" dump_sqlda(outp_sqlda); strcpy(msg, "commit"); { ECPGtrans(__LINE__, "con2", "commit"); -#line 243 "sqlda.pgc" +#line 238 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 243 "sqlda.pgc" +#line 238 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id4"); -#line 246 "sqlda.pgc" +#line 241 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 246 "sqlda.pgc" +#line 241 "sqlda.pgc" free(inp_sqlda); @@ -509,36 +504,36 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "con2"); -#line 252 "sqlda.pgc" +#line 247 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 252 "sqlda.pgc" +#line 247 "sqlda.pgc" /* End test */ strcpy(msg, "drop"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT); -#line 257 "sqlda.pgc" +#line 252 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 257 "sqlda.pgc" +#line 252 "sqlda.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 260 "sqlda.pgc" +#line 255 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 260 "sqlda.pgc" +#line 255 "sqlda.pgc" strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "CURRENT"); -#line 263 "sqlda.pgc" +#line 258 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 263 "sqlda.pgc" +#line 258 "sqlda.pgc" return 0; diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.stderr b/src/interfaces/ecpg/test/expected/sql-sqlda.stderr index dfe6b13055f..51ef236a50e 100644 --- a/src/interfaces/ecpg/test/expected/sql-sqlda.stderr +++ b/src/interfaces/ecpg/test/expected/sql-sqlda.stderr @@ -2,459 +2,459 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: opening database ecpg1_regression on port [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 85: query: set datestyle to iso; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 80: query: set datestyle to iso; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 85: using PQexec +[NO_PID]: ecpg_execute on line 80: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 85: OK: SET +[NO_PID]: ecpg_process_output on line 80: OK: SET [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 88: query: create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) , big bigint ); with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 83: query: create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) , big bigint ); with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 88: using PQexec +[NO_PID]: ecpg_execute on line 83: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 88: OK: CREATE TABLE +[NO_PID]: ecpg_process_output on line 83: OK: CREATE TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 98: query: insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 'NaN' , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 ); with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 93: query: insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 'NaN' , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 ); with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 98: using PQexec +[NO_PID]: ecpg_execute on line 93: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 98: OK: INSERT 0 5 +[NO_PID]: ecpg_process_output on line 93: OK: INSERT 0 5 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 106: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 101: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 113: name st_id1; query: "SELECT * FROM t1" +[NO_PID]: prepare_common on line 108: name st_id1; query: "SELECT * FROM t1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 119: query: declare mycur1 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 114: query: declare mycur1 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 119: using PQexec +[NO_PID]: ecpg_execute on line 114: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 119: OK: DECLARE CURSOR +[NO_PID]: ecpg_process_output on line 114: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 1111111111111111111 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 1111111111111111111 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 3333333333333333333 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 3333333333333333333 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 127 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 122 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: new sqlda was built +[NO_PID]: ecpg_process_output on line 122: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 127 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 122 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 127: RESULT: 5555555555555555555 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 122: RESULT: 5555555555555555555 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 122: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 122: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 127: using PQexec +[NO_PID]: ecpg_execute on line 122: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 127: correctly got 0 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 122: correctly got 0 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 127: no data found on line 127 +[NO_PID]: raising sqlcode 100 on line 122: no data found on line 122 [NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 136: query: close mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 131: query: close mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 136: using PQexec +[NO_PID]: ecpg_execute on line 131: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 136: OK: CLOSE CURSOR +[NO_PID]: ecpg_process_output on line 131: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 139: name st_id1 +[NO_PID]: deallocate_one on line 134: name st_id1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 148: name st_id2; query: "SELECT * FROM t1" +[NO_PID]: prepare_common on line 143: name st_id2; query: "SELECT * FROM t1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 154: query: declare mycur2 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 149: query: declare mycur2 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 154: using PQexec +[NO_PID]: ecpg_execute on line 149: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 154: OK: DECLARE CURSOR +[NO_PID]: ecpg_process_output on line 149: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 157: query: fetch all from mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 152: query: fetch all from mycur2; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 157: using PQexec +[NO_PID]: ecpg_execute on line 152: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: correctly got 5 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 152: correctly got 5 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 5 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 5 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: e offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: e offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 4 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 4 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 5555555555555555555 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 5555555555555555555 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 3 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 3 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 3 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: c offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 2 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 2 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 3333333333333333333 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 3333333333333333333 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 1 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 1 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 2 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 2 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 3 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 3 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 4 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 4 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 1 col 5 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 1 col 5 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 157 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 152 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: new sqlda was built +[NO_PID]: ecpg_process_output on line 152: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 157 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 152 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 157: RESULT: 1111111111111111111 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 152: RESULT: 1111111111111111111 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 157: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 152: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 173: query: close mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 168: query: close mycur2; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 173: using PQexec +[NO_PID]: ecpg_execute on line 168: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 173: OK: CLOSE CURSOR +[NO_PID]: ecpg_process_output on line 168: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 176: name st_id2 +[NO_PID]: deallocate_one on line 171: name st_id2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 198: name st_id3; query: "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: prepare_common on line 193: name st_id3; query: "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 201: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 196: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 201: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: ecpg_execute on line 196: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_free_params on line 201: parameter 1 = 4 +[NO_PID]: ecpg_free_params on line 196: parameter 1 = 4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 201: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 196: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 201 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 196 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 201: new sqlda was built +[NO_PID]: ecpg_process_output on line 196: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 201 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 196 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 201: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 196: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 201: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 196: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 206: name st_id3 +[NO_PID]: deallocate_one on line 201: name st_id3 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: opening database ecpg1_regression on port [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 235: name st_id4; query: "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: prepare_common on line 230: name st_id4; query: "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 238: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 233: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 238: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: ecpg_execute on line 233: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_free_params on line 238: parameter 1 = 4 +[NO_PID]: ecpg_free_params on line 233: parameter 1 = 4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 238: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 233: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 238 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 233 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 238: new sqlda was built +[NO_PID]: ecpg_process_output on line 233: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 238 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 233 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 238: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 233: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 238: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 233: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 243: action "commit"; connection "con2" +[NO_PID]: ECPGtrans on line 238: action "commit"; connection "con2" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 246: name st_id4 +[NO_PID]: deallocate_one on line 241: name st_id4 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection con2 closed [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 257: query: drop table t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 252: query: drop table t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 257: using PQexec +[NO_PID]: ecpg_execute on line 252: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 257: OK: DROP TABLE +[NO_PID]: ecpg_process_output on line 252: OK: DROP TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 260: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 255: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection regress1 closed [NO_PID]: sqlca: code: 0, state: 00000 diff --git a/src/interfaces/ecpg/test/sql/sqlda.pgc b/src/interfaces/ecpg/test/sql/sqlda.pgc index e551385eaa4..f7aa296ebf9 100644 --- a/src/interfaces/ecpg/test/sql/sqlda.pgc +++ b/src/interfaces/ecpg/test/sql/sqlda.pgc @@ -40,13 +40,8 @@ dump_sqlda(sqlda_t *sqlda) printf("name sqlda descriptor: '%s' value %ld\n", sqlda->sqlvar[i].sqlname.data, *(long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_long_long: - printf( -#ifdef _WIN32 - "name sqlda descriptor: '%s' value %I64d\n", -#else - "name sqlda descriptor: '%s' value %lld\n", -#endif - sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); + printf("name sqlda descriptor: '%s' value %lld\n", + sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata); break; case ECPGt_double: printf("name sqlda descriptor: '%s' value %f\n", sqlda->sqlvar[i].sqlname.data, *(double *)sqlda->sqlvar[i].sqldata); diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index 095c4f3d061..acfc8359708 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -21,7 +21,7 @@ NAME= pq SO_MAJOR_VERSION= 5 SO_MINOR_VERSION= $(MAJORVERSION) -override CPPFLAGS := -DFRONTEND -DUNSAFE_STAT_OK -I$(srcdir) $(CPPFLAGS) -I$(top_builddir)/src/port -I$(top_srcdir)/src/port +override CPPFLAGS := -DFRONTEND -DUNSAFE_STAT_OK -I$(srcdir) -I$(top_builddir)/src/port -I$(top_srcdir)/src/port $(CPPFLAGS) ifneq ($(PORTNAME), win32) override CFLAGS += $(PTHREAD_CFLAGS) endif diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index d33138e293d..508e43259ed 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -1008,7 +1009,7 @@ parse_comma_separated_list(char **startptr, bool *more) char *p; char *s = *startptr; char *e; - int len; + size_t len; /* * Search for the end of the current element; a comma or end-of-string @@ -4978,7 +4979,21 @@ ldapServiceLookup(const char *purl, PQconninfoOption *options, /* concatenate values into a single string with newline terminators */ size = 1; /* for the trailing null */ for (i = 0; values[i] != NULL; i++) + { + if (values[i]->bv_len >= INT_MAX || + size > (INT_MAX - (values[i]->bv_len + 1))) + { + appendPQExpBuffer(errorMessage, + libpq_gettext("connection info string size exceeds the maximum allowed (%d)\n"), + INT_MAX); + ldap_value_free_len(values); + ldap_unbind(ld); + return 3; + } + size += values[i]->bv_len + 1; + } + if ((result = malloc(size)) == NULL) { appendPQExpBufferStr(errorMessage, @@ -6725,7 +6740,9 @@ PQport(const PGconn *conn) if (!conn) return NULL; - if (conn->connhost != NULL) + if (conn->connhost != NULL && + conn->connhost[conn->whichhost].port != NULL && + conn->connhost[conn->whichhost].port[0] != '\0') return conn->connhost[conn->whichhost].port; return ""; diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 30a32522956..6bc2426a5b1 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -491,7 +491,7 @@ PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len) } else { - attval->value = (char *) pqResultAlloc(res, len + 1, true); + attval->value = (char *) pqResultAlloc(res, (size_t) len + 1, true); if (!attval->value) goto fail; attval->len = len; @@ -579,8 +579,13 @@ pqResultAlloc(PGresult *res, size_t nBytes, bool isBinary) */ if (nBytes >= PGRESULT_SEP_ALLOC_THRESHOLD) { - size_t alloc_size = nBytes + PGRESULT_BLOCK_OVERHEAD; + size_t alloc_size; + /* Don't wrap around with overly large requests. */ + if (nBytes > SIZE_MAX - PGRESULT_BLOCK_OVERHEAD) + return NULL; + + alloc_size = nBytes + PGRESULT_BLOCK_OVERHEAD; block = (PGresult_data *) malloc(alloc_size); if (!block) return NULL; @@ -1156,7 +1161,7 @@ pqRowProcessor(PGconn *conn, const char **errmsgp) bool isbinary = (res->attDescs[i].format != 0); char *val; - val = (char *) pqResultAlloc(res, clen + 1, isbinary); + val = (char *) pqResultAlloc(res, (size_t) clen + 1, isbinary); if (val == NULL) goto fail; @@ -3981,7 +3986,8 @@ PQescapeStringInternal(PGconn *conn, } /* Slow path for possible multibyte characters */ - charlen = pg_encoding_mblen(encoding, source); + charlen = pg_encoding_mblen_or_incomplete(encoding, + source, remaining); if (remaining < charlen || pg_encoding_verifymbchar(encoding, source, charlen) == -1) @@ -4018,10 +4024,10 @@ PQescapeStringInternal(PGconn *conn, { if (remaining < charlen) appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("incomplete multibyte character")); + libpq_gettext("incomplete multibyte character\n")); else appendPQExpBufferStr(&conn->errorMessage, - libpq_gettext("invalid multibyte character")); + libpq_gettext("invalid multibyte character\n")); /* Issue a complaint only once per string */ already_complained = true; } @@ -4084,6 +4090,27 @@ PQescapeString(char *to, const char *from, size_t length) } +/* + * Frontend version of the backend's add_size(), intended to be API-compatible + * with the pg_add_*_overflow() helpers. Stores the result into *dst on success. + * Returns true instead if the addition overflows. + * + * TODO: move to common/int.h + */ +static bool +add_size_overflow(size_t s1, size_t s2, size_t *dst) +{ + size_t result; + + result = s1 + s2; + if (result < s1 || result < s2) + return true; + + *dst = result; + return false; +} + + /* * Escape arbitrary strings. If as_ident is true, we escape the result * as an identifier; if false, as a literal. The result is returned in @@ -4096,8 +4123,8 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) const char *s; char *result; char *rp; - int num_quotes = 0; /* single or double, depending on as_ident */ - int num_backslashes = 0; + size_t num_quotes = 0; /* single or double, depending on as_ident */ + size_t num_backslashes = 0; size_t input_len = strnlen(str, len); size_t result_size; char quote_char = as_ident ? '"' : '\''; @@ -4125,7 +4152,8 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) int charlen; /* Slow path for possible multibyte characters */ - charlen = pg_encoding_mblen(conn->client_encoding, s); + charlen = pg_encoding_mblen_or_incomplete(conn->client_encoding, + s, remaining); if (charlen > remaining) { @@ -4162,10 +4190,21 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) } } - /* Allocate output buffer. */ - result_size = input_len + num_quotes + 3; /* two quotes, plus a NUL */ + /* + * Allocate output buffer. Protect against overflow, in case the caller + * has allocated a large fraction of the available size_t. + */ + if (add_size_overflow(input_len, num_quotes, &result_size) || + add_size_overflow(result_size, 3, &result_size)) /* two quotes plus a NUL */ + goto overflow; + if (!as_ident && num_backslashes > 0) - result_size += num_backslashes + 2; + { + if (add_size_overflow(result_size, num_backslashes, &result_size) || + add_size_overflow(result_size, 2, &result_size)) /* for " E" prefix */ + goto overflow; + } + result = rp = (char *) malloc(result_size); if (rp == NULL) { @@ -4239,6 +4278,12 @@ PQescapeInternal(PGconn *conn, const char *str, size_t len, bool as_ident) *rp = '\0'; return result; + +overflow: + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("escaped string size exceeds the maximum allowed (%zu)\n"), + SIZE_MAX); + return NULL; } char * @@ -4304,16 +4349,25 @@ PQescapeByteaInternal(PGconn *conn, unsigned char *result; size_t i; size_t len; - size_t bslash_len = (std_strings ? 1 : 2); + const size_t bslash_len = (std_strings ? 1 : 2); /* - * empty string has 1 char ('\0') + * Calculate the escaped length, watching for overflow as we do with + * PQescapeInternal(). The following code relies on a small constant + * bslash_len so that small additions and multiplications don't need their + * own overflow checks. + * + * Start with the empty string, which has 1 char ('\0'). */ len = 1; if (use_hex) { - len += bslash_len + 1 + 2 * from_length; + /* We prepend "\x" and double each input character. */ + if (add_size_overflow(len, bslash_len + 1, &len) || + add_size_overflow(len, from_length, &len) || + add_size_overflow(len, from_length, &len)) + goto overflow; } else { @@ -4321,13 +4375,25 @@ PQescapeByteaInternal(PGconn *conn, for (i = from_length; i > 0; i--, vp++) { if (*vp < 0x20 || *vp > 0x7e) - len += bslash_len + 3; + { + if (add_size_overflow(len, bslash_len + 3, &len)) /* octal "\ooo" */ + goto overflow; + } else if (*vp == '\'') - len += 2; + { + if (add_size_overflow(len, 2, &len)) /* double each quote */ + goto overflow; + } else if (*vp == '\\') - len += bslash_len + bslash_len; + { + if (add_size_overflow(len, bslash_len * 2, &len)) /* double each backslash */ + goto overflow; + } else - len++; + { + if (add_size_overflow(len, 1, &len)) + goto overflow; + } } } @@ -4389,6 +4455,13 @@ PQescapeByteaInternal(PGconn *conn, *rp = '\0'; return result; + +overflow: + if (conn) + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("escaped bytea size exceeds the maximum allowed (%zu)\n"), + SIZE_MAX); + return NULL; } unsigned char * diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c index 487cbecd364..117e455229e 100644 --- a/src/interfaces/libpq/fe-misc.c +++ b/src/interfaces/libpq/fe-misc.c @@ -541,9 +541,35 @@ pqPutMsgEnd(PGconn *conn) /* Make message eligible to send */ conn->outCount = conn->outMsgEnd; + /* If appropriate, try to push out some data */ if (conn->outCount >= 8192) { - int toSend = conn->outCount - (conn->outCount % 8192); + int toSend = conn->outCount; + + /* + * On Unix-pipe connections, it seems profitable to prefer sending + * pipe-buffer-sized packets not randomly-sized ones, so retain the + * last partial-8K chunk in our buffer for now. On TCP connections, + * the advantage of that is far less clear. Moreover, it flat out + * isn't safe when using SSL or GSSAPI, because those code paths have + * API stipulations that if they fail to send all the data that was + * offered in the previous write attempt, we mustn't offer less data + * in this write attempt. The previous write attempt might've been + * pqFlush attempting to send everything in the buffer, so we mustn't + * offer less now. (Presently, we won't try to use SSL or GSSAPI on + * Unix connections, so those checks are just Asserts. They'll have + * to become part of the regular if-test if we ever change that.) + */ + if (conn->raddr.addr.ss_family == AF_UNIX) + { +#ifdef USE_SSL + Assert(!conn->ssl_in_use); +#endif +#ifdef ENABLE_GSS + Assert(!conn->gssenc); +#endif + toSend -= toSend % 8192; + } if (pqSendSome(conn, toSend) < 0) return EOF; @@ -1180,13 +1206,9 @@ pqSocketPoll(int sock, int forRead, int forWrite, time_t end_time) */ /* - * Returns the byte length of the character beginning at s, using the - * specified encoding. - * - * Caution: when dealing with text that is not certainly valid in the - * specified encoding, the result may exceed the actual remaining - * string length. Callers that are not prepared to deal with that - * should use PQmblenBounded() instead. + * Like pg_encoding_mblen(). Use this in callers that want the + * dynamically-linked libpq's stance on encodings, even if that means + * different behavior in different startups of the executable. */ int PQmblen(const char *s, int encoding) @@ -1195,8 +1217,9 @@ PQmblen(const char *s, int encoding) } /* - * Returns the byte length of the character beginning at s, using the - * specified encoding; but not more than the distance to end of string. + * Like pg_encoding_mblen_bounded(). Use this in callers that want the + * dynamically-linked libpq's stance on encodings, even if that means + * different behavior in different startups of the executable. */ int PQmblenBounded(const char *s, int encoding) diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index 09bbc668843..cfe34483d3e 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -107,6 +107,16 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) } screen_size; #endif + /* + * Quick sanity check on po->fieldSep, since we make heavy use of int + * math throughout. + */ + if (fs_len < strlen(po->fieldSep)) + { + fprintf(stderr, libpq_gettext("overlong field separator\n")); + goto exit; + } + nTups = PQntuples(res); fieldNames = (const char **) calloc(nFields, sizeof(char *)); fieldNotNum = (unsigned char *) calloc(nFields, 1); @@ -408,7 +418,7 @@ do_field(const PQprintOpt *po, const PGresult *res, { if (plen > fieldMax[j]) fieldMax[j] = plen; - if (!(fields[i * nFields + j] = (char *) malloc(plen + 1))) + if (!(fields[i * nFields + j] = (char *) malloc((size_t) plen + 1))) { fprintf(stderr, libpq_gettext("out of memory\n")); return false; @@ -458,6 +468,27 @@ do_field(const PQprintOpt *po, const PGresult *res, } +/* + * Frontend version of the backend's add_size(), intended to be API-compatible + * with the pg_add_*_overflow() helpers. Stores the result into *dst on success. + * Returns true instead if the addition overflows. + * + * TODO: move to common/int.h + */ +static bool +add_size_overflow(size_t s1, size_t s2, size_t *dst) +{ + size_t result; + + result = s1 + s2; + if (result < s1 || result < s2) + return true; + + *dst = result; + return false; +} + + static char * do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax, const char **fieldNames, unsigned char *fieldNotNum, @@ -470,15 +501,31 @@ do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax, fputs("", fout); else { - int tot = 0; + size_t tot = 0; int n = 0; char *p = NULL; + /* Calculate the border size, checking for overflow. */ for (; n < nFields; n++) - tot += fieldMax[n] + fs_len + (po->standard ? 2 : 0); + { + /* Field plus separator, plus 2 extra '-' in standard format. */ + if (add_size_overflow(tot, fieldMax[n], &tot) || + add_size_overflow(tot, fs_len, &tot) || + (po->standard && add_size_overflow(tot, 2, &tot))) + goto overflow; + } if (po->standard) - tot += fs_len * 2 + 2; - border = malloc(tot + 1); + { + /* An extra separator at the front and back. */ + if (add_size_overflow(tot, fs_len, &tot) || + add_size_overflow(tot, fs_len, &tot) || + add_size_overflow(tot, 2, &tot)) + goto overflow; + } + if (add_size_overflow(tot, 1, &tot)) /* terminator */ + goto overflow; + + border = malloc(tot); if (!border) { fprintf(stderr, libpq_gettext("out of memory\n")); @@ -541,6 +588,10 @@ do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax, else fprintf(fout, "\n%s\n", border); return border; + +overflow: + fprintf(stderr, libpq_gettext("header size exceeds the maximum allowed\n")); + return NULL; } diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index 0c1903336a8..874bf569252 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -16,6 +16,7 @@ #include #include +#include #ifdef WIN32 #include "win32.h" @@ -50,8 +51,8 @@ static int getCopyStart(PGconn *conn, ExecStatusType copytype); static int getReadyForQuery(PGconn *conn); static void reportErrorPosition(PQExpBuffer msg, const char *query, int loc, int encoding); -static int build_startup_packet(const PGconn *conn, char *packet, - const PQEnvironmentOption *options); +static size_t build_startup_packet(const PGconn *conn, char *packet, + const PQEnvironmentOption *options); /* @@ -1219,8 +1220,21 @@ reportErrorPosition(PQExpBuffer msg, const char *query, int loc, int encoding) * scridx[] respectively. */ - /* we need a safe allocation size... */ + /* + * We need a safe allocation size. + * + * The only caller of reportErrorPosition() is pqBuildErrorMessage3(); it + * gets its query from either a PQresultErrorField() or a PGcmdQueueEntry, + * both of which must have fit into conn->inBuffer/outBuffer. So slen fits + * inside an int, but we can't assume that (slen * sizeof(int)) fits + * inside a size_t. + */ slen = strlen(wquery) + 1; + if (slen > SIZE_MAX / sizeof(int)) + { + free(wquery); + return; + } qidx = (int *) malloc(slen * sizeof(int)); if (qidx == NULL) @@ -2165,15 +2179,43 @@ pqBuildStartupPacket3(PGconn *conn, int *packetlen, const PQEnvironmentOption *options) { char *startpacket; + size_t len; + + len = build_startup_packet(conn, NULL, options); + if (len == 0 || len > INT_MAX) + return NULL; - *packetlen = build_startup_packet(conn, NULL, options); + *packetlen = len; startpacket = (char *) malloc(*packetlen); if (!startpacket) return NULL; - *packetlen = build_startup_packet(conn, startpacket, options); + + len = build_startup_packet(conn, startpacket, options); + Assert(*packetlen == len); + return startpacket; } +/* + * Frontend version of the backend's add_size(), intended to be API-compatible + * with the pg_add_*_overflow() helpers. Stores the result into *dst on success. + * Returns true instead if the addition overflows. + * + * TODO: move to common/int.h + */ +static bool +add_size_overflow(size_t s1, size_t s2, size_t *dst) +{ + size_t result; + + result = s1 + s2; + if (result < s1 || result < s2) + return true; + + *dst = result; + return false; +} + /* * Build a startup packet given a filled-in PGconn structure. * @@ -2181,13 +2223,13 @@ pqBuildStartupPacket3(PGconn *conn, int *packetlen, * To avoid duplicate logic, this routine is called twice: the first time * (with packet == NULL) just counts the space needed, the second time * (with packet == allocated space) fills it in. Return value is the number - * of bytes used. + * of bytes used, or zero in the unlikely event of size_t overflow. */ -static int +static size_t build_startup_packet(const PGconn *conn, char *packet, const PQEnvironmentOption *options) { - int packet_len = 0; + size_t packet_len = 0; const PQEnvironmentOption *next_eo; const char *val; @@ -2206,10 +2248,12 @@ build_startup_packet(const PGconn *conn, char *packet, do { \ if (packet) \ strcpy(packet + packet_len, optname); \ - packet_len += strlen(optname) + 1; \ + if (add_size_overflow(packet_len, strlen(optname) + 1, &packet_len)) \ + return 0; \ if (packet) \ strcpy(packet + packet_len, optval); \ - packet_len += strlen(optval) + 1; \ + if (add_size_overflow(packet_len, strlen(optval) + 1, &packet_len)) \ + return 0; \ } while(0) if (conn->pguser && conn->pguser[0]) @@ -2244,7 +2288,8 @@ build_startup_packet(const PGconn *conn, char *packet, /* Add trailing terminator */ if (packet) packet[packet_len] = '\0'; - packet_len++; + if (add_size_overflow(packet_len, 1, &packet_len)) + return 0; return packet_len; } diff --git a/src/interfaces/libpq/fe-secure-gssapi.c b/src/interfaces/libpq/fe-secure-gssapi.c index 4a7ee013a17..9508a1a8b27 100644 --- a/src/interfaces/libpq/fe-secure-gssapi.c +++ b/src/interfaces/libpq/fe-secure-gssapi.c @@ -47,11 +47,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 */ /* * We need these state variables per-connection. To allow the functions @@ -105,16 +112,16 @@ pg_GSS_write(PGconn *conn, 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) { appendPQExpBufferStr(&conn->errorMessage, "GSSAPI caller failed to retransmit all data needing to be retried\n"); - errno = EINVAL; + SOCK_ERRNO_SET(EINVAL); return -1; } @@ -192,7 +199,7 @@ pg_GSS_write(PGconn *conn, const void *ptr, size_t len) if (major != GSS_S_COMPLETE) { pg_GSS_error(libpq_gettext("GSSAPI wrap error"), conn, major, minor); - errno = EIO; /* for lack of a better idea */ + SOCK_ERRNO_SET(EIO); /* for lack of a better idea */ goto cleanup; } @@ -200,17 +207,17 @@ pg_GSS_write(PGconn *conn, const void *ptr, size_t len) { appendPQExpBufferStr(&conn->errorMessage, libpq_gettext("outgoing GSSAPI message would not use confidentiality\n")); - errno = EIO; /* for lack of a better idea */ + SOCK_ERRNO_SET(EIO); /* for lack of a better idea */ goto cleanup; } - if (output.length > PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)) + if (output.length > PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)) { appendPQExpBuffer(&conn->errorMessage, libpq_gettext("client tried to send oversize GSSAPI packet (%zu > %zu)\n"), (size_t) output.length, - PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)); - errno = EIO; /* for lack of a better idea */ + PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)); + SOCK_ERRNO_SET(EIO); /* for lack of a better idea */ goto cleanup; } @@ -336,7 +343,7 @@ pg_GSS_read(PGconn *conn, void *ptr, size_t len) /* If we still haven't got the length, return to the caller */ if (PqGSSRecvLength < sizeof(uint32)) { - errno = EWOULDBLOCK; + SOCK_ERRNO_SET(EWOULDBLOCK); return -1; } } @@ -344,13 +351,13 @@ pg_GSS_read(PGconn *conn, 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)) { appendPQExpBuffer(&conn->errorMessage, libpq_gettext("oversize GSSAPI packet sent by the server (%zu > %zu)\n"), (size_t) input.length, - PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32)); - errno = EIO; /* for lack of a better idea */ + PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32)); + SOCK_ERRNO_SET(EIO); /* for lack of a better idea */ return -1; } @@ -369,7 +376,7 @@ pg_GSS_read(PGconn *conn, void *ptr, size_t len) /* If we don't yet have the whole packet, return to the caller */ if (PqGSSRecvLength - sizeof(uint32) < input.length) { - errno = EWOULDBLOCK; + SOCK_ERRNO_SET(EWOULDBLOCK); return -1; } @@ -389,7 +396,7 @@ pg_GSS_read(PGconn *conn, void *ptr, size_t len) pg_GSS_error(libpq_gettext("GSSAPI unwrap error"), conn, major, minor); ret = -1; - errno = EIO; /* for lack of a better idea */ + SOCK_ERRNO_SET(EIO); /* for lack of a better idea */ goto cleanup; } @@ -398,7 +405,7 @@ pg_GSS_read(PGconn *conn, void *ptr, size_t len) appendPQExpBufferStr(&conn->errorMessage, libpq_gettext("incoming GSSAPI message did not use confidentiality\n")); ret = -1; - errno = EIO; /* for lack of a better idea */ + SOCK_ERRNO_SET(EIO); /* for lack of a better idea */ goto cleanup; } @@ -434,7 +441,8 @@ gss_read(PGconn *conn, void *recv_buffer, size_t length, ssize_t *ret) *ret = pqsecure_raw_read(conn, recv_buffer, length); if (*ret < 0) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) + if (SOCK_ERRNO == EAGAIN || SOCK_ERRNO == EWOULDBLOCK || + SOCK_ERRNO == EINTR) return PGRES_POLLING_READING; else return PGRES_POLLING_FAILED; @@ -454,7 +462,8 @@ gss_read(PGconn *conn, void *recv_buffer, size_t length, ssize_t *ret) *ret = pqsecure_raw_read(conn, recv_buffer, length); if (*ret < 0) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) + if (SOCK_ERRNO == EAGAIN || SOCK_ERRNO == EWOULDBLOCK || + SOCK_ERRNO == EINTR) return PGRES_POLLING_READING; else return PGRES_POLLING_FAILED; @@ -488,12 +497,15 @@ pqsecure_open_gss(PGconn *conn) * initialize state variables. By malloc'ing the buffers separately, we * ensure that they 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. */ if (PqGSSSendBuffer == NULL) { - 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) { appendPQExpBufferStr(&conn->errorMessage, @@ -514,7 +526,8 @@ pqsecure_open_gss(PGconn *conn) ret = pqsecure_raw_write(conn, PqGSSSendBuffer + PqGSSSendNext, amount); if (ret < 0) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) + if (SOCK_ERRNO == EAGAIN || SOCK_ERRNO == EWOULDBLOCK || + SOCK_ERRNO == EINTR) return PGRES_POLLING_WRITING; else return PGRES_POLLING_FAILED; @@ -568,13 +581,13 @@ pqsecure_open_gss(PGconn *conn) * so leave a spot at the end for a NULL byte too) and report that * back to the caller. */ - result = gss_read(conn, PqGSSRecvBuffer + PqGSSRecvLength, PQ_GSS_RECV_BUFFER_SIZE - PqGSSRecvLength - 1, &ret); + result = gss_read(conn, PqGSSRecvBuffer + PqGSSRecvLength, PQ_GSS_AUTH_BUFFER_SIZE - PqGSSRecvLength - 1, &ret); if (result != PGRES_POLLING_OK) return result; PqGSSRecvLength += ret; - Assert(PqGSSRecvLength < PQ_GSS_RECV_BUFFER_SIZE); + Assert(PqGSSRecvLength < PQ_GSS_AUTH_BUFFER_SIZE); PqGSSRecvBuffer[PqGSSRecvLength] = '\0'; appendPQExpBuffer(&conn->errorMessage, "%s\n", PqGSSRecvBuffer + 1); @@ -588,12 +601,12 @@ pqsecure_open_gss(PGconn *conn) /* Get the length and check for over-length packet */ input.length = pg_ntoh32(*(uint32 *) PqGSSRecvBuffer); - if (input.length > PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32)) + if (input.length > PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)) { appendPQExpBuffer(&conn->errorMessage, libpq_gettext("oversize GSSAPI packet sent by the server (%zu > %zu)\n"), (size_t) input.length, - PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32)); + PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)); return PGRES_POLLING_FAILED; } @@ -655,12 +668,34 @@ pqsecure_open_gss(PGconn *conn) conn->gcred = GSS_C_NO_CREDENTIAL; gss_release_buffer(&minor, &output); + /* + * Release the large authentication buffers and allocate the ones we + * want for normal operation. (This maneuver is safe only because + * pqDropConnection will drop the buffers; otherwise, during a + * reconnection we'd be at risk of using undersized buffers during + * negotiation.) + */ + 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) + { + appendPQExpBufferStr(&conn->errorMessage, + libpq_gettext("out of memory\n")); + return PGRES_POLLING_FAILED; + } + PqGSSSendLength = PqGSSSendNext = PqGSSSendConsumed = 0; + PqGSSRecvLength = PqGSSResultLength = PqGSSResultNext = 0; + /* * Determine the max packet size which will fit in our buffer, after * accounting for the length. pg_GSS_write will need this. */ major = gss_wrap_size_limit(&minor, conn->gctx, 1, GSS_C_QOP_DEFAULT, - PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32), + PQ_GSS_MAX_PACKET_SIZE - sizeof(uint32), &PqGSSMaxPktSize); if (GSS_ERROR(major)) @@ -674,10 +709,12 @@ pqsecure_open_gss(PGconn *conn) } /* Must have output.length > 0 */ - if (output.length > PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32)) + if (output.length > PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)) { - pg_GSS_error(libpq_gettext("GSSAPI context establishment error"), - conn, major, minor); + appendPQExpBuffer(&conn->errorMessage, + libpq_gettext("client tried to send oversize GSSAPI packet (%zu > %zu)\n"), + (size_t) output.length, + PQ_GSS_AUTH_BUFFER_SIZE - sizeof(uint32)); gss_release_buffer(&minor, &output); return PGRES_POLLING_FAILED; } diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index 8660d27926e..27baec78730 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -112,7 +112,7 @@ pqTraceOutputByte1(FILE *pfdebug, const char *data, int *cursor) * that completes ErrorResponse and NoticeResponse messages. */ if (!isprint((unsigned char) *v)) - fprintf(pfdebug, " \\x%02x", *v); + fprintf(pfdebug, " \\x%02x", (unsigned char) *v); else fprintf(pfdebug, " %c", *v); *cursor += 1; @@ -200,7 +200,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor) else { fwrite(v + next, 1, i - next, pfdebug); - fprintf(pfdebug, "\\x%02x", v[i]); + fprintf(pfdebug, "\\x%02x", (unsigned char) v[i]); next = i + 1; } } diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 9e9e074d774..a5bf129f67a 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -335,7 +335,8 @@ typedef struct pg_conn_host pg_conn_host_type type; /* type of host address */ char *host; /* host name or socket path */ char *hostaddr; /* host numeric IP address */ - char *port; /* port number (always provided) */ + char *port; /* port number (if NULL or empty, use + * DEF_PGPORT[_STR]) */ char *password; /* password for this host, read from the * password file; NULL if not sought or not * found in password file. */ @@ -478,7 +479,16 @@ struct pg_conn PGContextVisibility show_context; /* whether to show CONTEXT field */ PGlobjfuncs *lobjfuncs; /* private state for large-object access fns */ - /* Buffer for data received from backend and not yet processed */ + /* + * Buffer for data received from backend and not yet processed. + * + * NB: We rely on a maximum inBufSize/outBufSize of INT_MAX (and therefore + * an INT_MAX upper bound on the size of any and all packet contents) to + * avoid overflow; for example in reportErrorPosition(). Changing the type + * would require not only an adjustment to the overflow protection in + * pqCheck{In,Out}BufferSpace(), but also a careful audit of all libpq + * code that uses ints during size calculations. + */ char *inBuffer; /* currently allocated buffer */ int inBufSize; /* allocated size of buffer */ int inStart; /* offset to first unconsumed data in buffer */ diff --git a/src/interfaces/libpq/po/de.po b/src/interfaces/libpq/po/de.po index 7042387b55e..927ae8249f0 100644 --- a/src/interfaces/libpq/po/de.po +++ b/src/interfaces/libpq/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-05 14:30+0000\n" +"POT-Creation-Date: 2026-02-07 09:16+0000\n" "PO-Revision-Date: 2022-04-01 11:08+0200\n" "Last-Translator: Peter Eisentraut \n" "Language-Team: German \n" @@ -54,16 +54,16 @@ msgstr "konnte Nonce nicht erzeugen\n" #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 -#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 -#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 -#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 -#: fe-exec.c:4114 fe-exec.c:4279 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 -#: fe-protocol3.c:1731 fe-secure-common.c:110 fe-secure-gssapi.c:500 -#: fe-secure-openssl.c:446 fe-secure-openssl.c:1124 +#: fe-connect.c:914 fe-connect.c:1463 fe-connect.c:1632 fe-connect.c:2983 +#: fe-connect.c:4715 fe-connect.c:4990 fe-connect.c:5109 fe-connect.c:5361 +#: fe-connect.c:5442 fe-connect.c:5541 fe-connect.c:5797 fe-connect.c:5826 +#: fe-connect.c:5898 fe-connect.c:5922 fe-connect.c:5940 fe-connect.c:6041 +#: fe-connect.c:6050 fe-connect.c:6408 fe-connect.c:6558 fe-connect.c:6826 +#: fe-exec.c:691 fe-exec.c:881 fe-exec.c:1228 fe-exec.c:3150 fe-exec.c:3342 +#: fe-exec.c:4211 fe-exec.c:4405 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:976 fe-protocol3.c:991 fe-protocol3.c:1024 +#: fe-protocol3.c:1745 fe-secure-common.c:110 fe-secure-gssapi.c:512 +#: fe-secure-gssapi.c:687 fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "Speicher aufgebraucht\n" @@ -217,12 +217,12 @@ msgstr "Authentifizierungsmethode %u nicht unterstützt\n" msgid "user name lookup failure: error code %lu\n" msgstr "Fehler beim Nachschlagen des Benutzernamens: Fehlercode %lu\n" -#: fe-auth.c:1117 fe-connect.c:2857 +#: fe-auth.c:1117 fe-connect.c:2858 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "konnte lokale Benutzer-ID %d nicht nachschlagen: %s\n" -#: fe-auth.c:1122 fe-connect.c:2862 +#: fe-auth.c:1122 fe-connect.c:2863 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokaler Benutzer mit ID %d existiert nicht\n" @@ -240,532 +240,551 @@ msgstr "Wert von password_encryption ist zu lang\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "unbekannter Passwortverschlüsselungsalgorithmus »%s«\n" -#: fe-connect.c:1096 +#: fe-connect.c:1097 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "fehlerhafte Angabe: %d Hostnamen und %d hostaddr-Angaben\n" -#: fe-connect.c:1182 +#: fe-connect.c:1183 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "fehlerhafte Angabe: %d Portnummern und %d Hosts\n" -#: fe-connect.c:1275 fe-connect.c:1301 fe-connect.c:1343 fe-connect.c:1352 -#: fe-connect.c:1385 fe-connect.c:1429 +#: fe-connect.c:1276 fe-connect.c:1302 fe-connect.c:1344 fe-connect.c:1353 +#: fe-connect.c:1386 fe-connect.c:1430 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "ungültiger %s-Wert: »%s«\n" -#: fe-connect.c:1322 +#: fe-connect.c:1323 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "sslmode-Wert »%s« ist ungültig, wenn SSL-Unterstützung nicht einkompiliert worden ist\n" -#: fe-connect.c:1370 +#: fe-connect.c:1371 msgid "invalid SSL protocol version range\n" msgstr "ungültiges SSL-Protokollsintervall\n" -#: fe-connect.c:1395 +#: fe-connect.c:1396 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "gssencmode-Wert »%s« ist ungültig, wenn GSSAPI-Unterstützung nicht einkompiliert worden ist\n" -#: fe-connect.c:1655 +#: fe-connect.c:1656 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "konnte Socket nicht auf TCP »No Delay«-Modus umstellen: %s\n" -#: fe-connect.c:1717 +#: fe-connect.c:1718 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "Verbindung zum Server auf Socket »%s« fehlgeschlagen: " -#: fe-connect.c:1744 +#: fe-connect.c:1745 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "Verbindung zum Server auf »%s« (%s), Port %s fehlgeschlagen: " -#: fe-connect.c:1749 +#: fe-connect.c:1750 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "Verbindung zum Server auf »%s«, Port %s fehlgeschlagen: " -#: fe-connect.c:1774 +#: fe-connect.c:1775 msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "\tLäuft der Server lokal und akzeptiert er Verbindungen auf diesem Socket?\n" -#: fe-connect.c:1778 +#: fe-connect.c:1779 msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "\tLäuft der Server auf diesem Host und akzeptiert er TCP/IP-Verbindungen?\n" -#: fe-connect.c:1842 +#: fe-connect.c:1843 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "ungültiger Zahlenwert »%s« für Verbindungsoption »%s«\n" -#: fe-connect.c:1872 fe-connect.c:1907 fe-connect.c:1943 fe-connect.c:2032 -#: fe-connect.c:2645 +#: fe-connect.c:1873 fe-connect.c:1908 fe-connect.c:1944 fe-connect.c:2033 +#: fe-connect.c:2646 #, c-format msgid "%s(%s) failed: %s\n" msgstr "%s(%s) fehlgeschlagen: %s\n" -#: fe-connect.c:1997 +#: fe-connect.c:1998 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "%s(%s) fehlgeschlagen: Fehlercode %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:2391 +#: fe-connect.c:2392 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "ungültige Portnummer: »%s«\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "konnte Hostnamen »%s« nicht in Adresse übersetzen: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "konnte Netzwerkadresse »%s« nicht interpretieren: %s\n" -#: fe-connect.c:2433 +#: fe-connect.c:2434 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Unix-Domain-Socket-Pfad »%s« ist zu lang (maximal %d Bytes)\n" -#: fe-connect.c:2448 +#: fe-connect.c:2449 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "konnte Unix-Domain-Socket-Pfad »%s« nicht in Adresse übersetzen: %s\n" -#: fe-connect.c:2574 +#: fe-connect.c:2575 #, c-format msgid "could not create socket: %s\n" msgstr "konnte Socket nicht erzeugen: %s\n" -#: fe-connect.c:2605 +#: fe-connect.c:2606 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "konnte Socket nicht auf nicht-blockierenden Modus umstellen: %s\n" -#: fe-connect.c:2615 +#: fe-connect.c:2616 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "konnte Socket nicht auf »Close on exec«-Modus umstellen: %s\n" -#: fe-connect.c:2773 +#: fe-connect.c:2774 #, c-format msgid "could not get socket error status: %s\n" msgstr "konnte Socket-Fehlerstatus nicht ermitteln: %s\n" -#: fe-connect.c:2801 +#: fe-connect.c:2802 #, c-format msgid "could not get client address from socket: %s\n" msgstr "konnte Client-Adresse vom Socket nicht ermitteln: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2844 msgid "requirepeer parameter is not supported on this platform\n" msgstr "Parameter »requirepeer« wird auf dieser Plattform nicht unterstützt\n" -#: fe-connect.c:2846 +#: fe-connect.c:2847 #, c-format msgid "could not get peer credentials: %s\n" msgstr "konnte Credentials von Gegenstelle nicht ermitteln: %s\n" -#: fe-connect.c:2870 +#: fe-connect.c:2871 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer gibt »%s« an, aber tatsächlicher Benutzername der Gegenstelle ist »%s«\n" -#: fe-connect.c:2910 +#: fe-connect.c:2911 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "konnte Paket zur GSSAPI-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2922 +#: fe-connect.c:2923 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "GSSAPI-Verschlüsselung war gefordert aber war nicht möglich (möglicherweise kein Credential-Cache, keine Serverunterstützung oder lokales Socket wird verwendet)\n" -#: fe-connect.c:2964 +#: fe-connect.c:2965 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "konnte Paket zur SSL-Verhandlung nicht senden: %s\n" -#: fe-connect.c:2995 +#: fe-connect.c:2996 #, c-format msgid "could not send startup packet: %s\n" msgstr "konnte Startpaket nicht senden: %s\n" -#: fe-connect.c:3071 +#: fe-connect.c:3072 msgid "server does not support SSL, but SSL was required\n" msgstr "Server unterstützt kein SSL, aber SSL wurde verlangt\n" -#: fe-connect.c:3089 +#: fe-connect.c:3090 msgid "server sent an error response during SSL exchange\n" msgstr "Server hat während des SSL-Austauschs eine Fehlermeldung gesendet\n" -#: fe-connect.c:3095 +#: fe-connect.c:3096 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "ungültige Antwort auf SSL-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:3116 +#: fe-connect.c:3117 msgid "received unencrypted data after SSL response\n" msgstr "unverschlüsselte Daten nach SSL-Antwort empfangen\n" -#: fe-connect.c:3197 +#: fe-connect.c:3198 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "Server unterstützt keine GSSAPI-Verschlüsselung, sie wurde aber verlangt\n" -#: fe-connect.c:3209 +#: fe-connect.c:3210 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "ungültige Antwort auf GSSAPI-Verhandlungspaket empfangen: %c\n" -#: fe-connect.c:3228 +#: fe-connect.c:3229 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "unverschlüsselte Daten nach GSSAPI-Verschlüsselungsantwort empfangen\n" -#: fe-connect.c:3293 fe-connect.c:3318 +#: fe-connect.c:3294 fe-connect.c:3319 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "Authentifizierungsanfrage wurde vom Server erwartet, aber %c wurde empfangen\n" -#: fe-connect.c:3525 +#: fe-connect.c:3526 msgid "unexpected message from server during startup\n" msgstr "unerwartete Nachricht vom Server beim Start\n" -#: fe-connect.c:3617 +#: fe-connect.c:3618 msgid "session is read-only\n" msgstr "Sitzung ist read-only\n" -#: fe-connect.c:3620 +#: fe-connect.c:3621 msgid "session is not read-only\n" msgstr "Sitzung ist nicht read-only\n" -#: fe-connect.c:3674 +#: fe-connect.c:3675 msgid "server is in hot standby mode\n" msgstr "Server ist im Hot-Standby-Modus\n" -#: fe-connect.c:3677 +#: fe-connect.c:3678 msgid "server is not in hot standby mode\n" msgstr "Server ist nicht im Hot-Standby-Modus\n" -#: fe-connect.c:3795 fe-connect.c:3847 +#: fe-connect.c:3796 fe-connect.c:3848 #, c-format msgid "\"%s\" failed\n" msgstr "»%s« fehlgeschlagen\n" -#: fe-connect.c:3861 +#: fe-connect.c:3862 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "ungültiger Verbindungszustand %d, möglicherweise ein Speicherproblem\n" -#: fe-connect.c:4307 fe-connect.c:4367 +#: fe-connect.c:4308 fe-connect.c:4368 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc »%s« während PGEVT_CONNRESET-Ereignis fehlgeschlagen\n" -#: fe-connect.c:4727 +#: fe-connect.c:4728 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "ungültige LDAP-URL »%s«: Schema muss ldap:// sein\n" -#: fe-connect.c:4742 +#: fe-connect.c:4743 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "ungültige LDAP-URL »%s«: Distinguished Name fehlt\n" -#: fe-connect.c:4754 fe-connect.c:4812 +#: fe-connect.c:4755 fe-connect.c:4813 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "ungültige LDAP-URL »%s«: muss genau ein Attribut haben\n" -#: fe-connect.c:4766 fe-connect.c:4828 +#: fe-connect.c:4767 fe-connect.c:4829 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "ungültige LDAP-URL »%s«: Suchbereich fehlt (base/one/sub)\n" -#: fe-connect.c:4778 +#: fe-connect.c:4779 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "ungültige LDAP-URL »%s«: kein Filter\n" -#: fe-connect.c:4800 +#: fe-connect.c:4801 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "ungültige LDAP-URL »%s«: ungültige Portnummer\n" -#: fe-connect.c:4838 +#: fe-connect.c:4839 msgid "could not create LDAP structure\n" msgstr "konnte LDAP-Struktur nicht erzeugen\n" -#: fe-connect.c:4914 +#: fe-connect.c:4915 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "Suche auf LDAP-Server fehlgeschlagen: %s\n" -#: fe-connect.c:4925 +#: fe-connect.c:4926 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP-Suche ergab mehr als einen Eintrag\n" -#: fe-connect.c:4926 fe-connect.c:4938 +#: fe-connect.c:4927 fe-connect.c:4939 msgid "no entry found on LDAP lookup\n" msgstr "kein Eintrag gefunden bei LDAP-Suche\n" -#: fe-connect.c:4949 fe-connect.c:4962 +#: fe-connect.c:4950 fe-connect.c:4963 msgid "attribute has no values on LDAP lookup\n" msgstr "Attribut hat keine Werte bei LDAP-Suche\n" -#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 +#: fe-connect.c:4977 +#, c-format +msgid "connection info string size exceeds the maximum allowed (%d)\n" +msgstr "Größe der Verbindungsinfo-Zeichenkette überschreitet erlaubtes Maximum (%d)\n" + +#: fe-connect.c:5029 fe-connect.c:5048 fe-connect.c:5580 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "fehlendes »=« nach »%s« in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 +#: fe-connect.c:5121 fe-connect.c:5765 fe-connect.c:6541 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ungültige Verbindungsoption »%s«\n" -#: fe-connect.c:5122 fe-connect.c:5614 +#: fe-connect.c:5137 fe-connect.c:5629 msgid "unterminated quoted string in connection info string\n" msgstr "fehlendes schließendes Anführungszeichen (\") in der Zeichenkette der Verbindungsdaten\n" -#: fe-connect.c:5203 +#: fe-connect.c:5218 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "Definition von Service »%s« nicht gefunden\n" -#: fe-connect.c:5229 +#: fe-connect.c:5244 #, c-format msgid "service file \"%s\" not found\n" msgstr "Servicedatei »%s« nicht gefunden\n" -#: fe-connect.c:5243 +#: fe-connect.c:5258 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "Zeile %d zu lang in Servicedatei »%s«\n" -#: fe-connect.c:5314 fe-connect.c:5358 +#: fe-connect.c:5329 fe-connect.c:5373 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "Syntaxfehler in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:5325 +#: fe-connect.c:5340 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "geschachtelte »service«-Definitionen werden nicht unterstützt in Servicedatei »%s«, Zeile %d\n" -#: fe-connect.c:6046 +#: fe-connect.c:6061 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "ungültige URI an interne Parserroutine weitergeleitet: »%s«\n" -#: fe-connect.c:6123 +#: fe-connect.c:6138 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "Ende der Eingabezeichenkette gefunden beim Suchen nach passendem »]« in IPv6-Hostadresse in URI: »%s«\n" -#: fe-connect.c:6130 +#: fe-connect.c:6145 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6-Hostadresse darf nicht leer sein in URI: »%s«\n" -#: fe-connect.c:6145 +#: fe-connect.c:6160 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "unerwartetes Zeichen »%c« an Position %d in URI (»:« oder »/« erwartet): »%s«\n" -#: fe-connect.c:6275 +#: fe-connect.c:6290 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "zusätzliches Schlüssel/Wert-Trennzeichen »=« in URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6295 +#: fe-connect.c:6310 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "fehlendes Schlüssel/Wert-Trennzeichen »=« in URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6347 +#: fe-connect.c:6362 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ungültiger URI-Query-Parameter: »%s«\n" -#: fe-connect.c:6421 +#: fe-connect.c:6436 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ungültiges Prozent-kodiertes Token: »%s«\n" -#: fe-connect.c:6431 +#: fe-connect.c:6446 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "verbotener Wert %%00 in Prozent-kodiertem Wert: »%s«\n" -#: fe-connect.c:6801 +#: fe-connect.c:6818 msgid "connection pointer is NULL\n" msgstr "Verbindung ist ein NULL-Zeiger\n" -#: fe-connect.c:7089 +#: fe-connect.c:7106 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "WARNUNG: Passwortdatei »%s« ist keine normale Datei\n" -#: fe-connect.c:7098 +#: fe-connect.c:7115 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "WARNUNG: Passwortdatei »%s« erlaubt Lesezugriff für Gruppe oder Andere; Rechte sollten u=rw (0600) oder weniger sein\n" -#: fe-connect.c:7206 +#: fe-connect.c:7223 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "Passwort wurde aus Datei »%s« gelesen\n" -#: fe-exec.c:449 fe-exec.c:3411 +#: fe-exec.c:449 fe-exec.c:3416 #, c-format msgid "row number %d is out of range 0..%d" msgstr "Zeilennummer %d ist außerhalb des zulässigen Bereichs 0..%d" -#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:256 -#: fe-protocol3.c:274 fe-protocol3.c:371 fe-protocol3.c:743 +#: fe-exec.c:510 fe-protocol3.c:208 fe-protocol3.c:233 fe-protocol3.c:257 +#: fe-protocol3.c:275 fe-protocol3.c:372 fe-protocol3.c:744 msgid "out of memory" msgstr "Speicher aufgebraucht" -#: fe-exec.c:511 fe-protocol3.c:1939 +#: fe-exec.c:511 fe-protocol3.c:1953 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:792 +#: fe-exec.c:797 msgid "write to server failed\n" msgstr "Schreiben zum Server fehlgeschlagen\n" -#: fe-exec.c:864 +#: fe-exec.c:869 msgid "NOTICE" msgstr "HINWEIS" -#: fe-exec.c:922 +#: fe-exec.c:927 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult kann nicht mehr als INT_MAX Tupel enthalten" -#: fe-exec.c:934 +#: fe-exec.c:939 msgid "size_t overflow" msgstr "Überlauf von size_t" -#: fe-exec.c:1351 fe-exec.c:1477 fe-exec.c:1526 +#: fe-exec.c:1356 fe-exec.c:1482 fe-exec.c:1531 msgid "command string is a null pointer\n" msgstr "Befehlszeichenkette ist ein NULL-Zeiger\n" -#: fe-exec.c:1483 fe-exec.c:1532 fe-exec.c:1628 +#: fe-exec.c:1488 fe-exec.c:1537 fe-exec.c:1633 #, c-format msgid "number of parameters must be between 0 and %d\n" msgstr "Anzahl der Parameter muss zwischen 0 und %d sein\n" -#: fe-exec.c:1520 fe-exec.c:1622 +#: fe-exec.c:1525 fe-exec.c:1627 msgid "statement name is a null pointer\n" msgstr "Anweisungsname ist ein NULL-Zeiger\n" -#: fe-exec.c:1664 fe-exec.c:3256 +#: fe-exec.c:1669 fe-exec.c:3261 msgid "no connection to the server\n" msgstr "keine Verbindung mit dem Server\n" -#: fe-exec.c:1673 fe-exec.c:3265 +#: fe-exec.c:1678 fe-exec.c:3270 msgid "another command is already in progress\n" msgstr "ein anderer Befehl ist bereits in Ausführung\n" -#: fe-exec.c:1704 +#: fe-exec.c:1709 msgid "cannot queue commands during COPY\n" msgstr "während COPY können keine Befehle aufgereiht werden\n" -#: fe-exec.c:1822 +#: fe-exec.c:1827 msgid "length must be given for binary parameter\n" msgstr "für binäre Parameter muss eine Länge angegeben werden\n" -#: fe-exec.c:2142 +#: fe-exec.c:2147 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "unerwarteter asyncStatus: %d\n" -#: fe-exec.c:2178 +#: fe-exec.c:2183 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc »%s« während PGEVT_RESULTCREATE-Ereignis fehlgeschlagen\n" -#: fe-exec.c:2326 +#: fe-exec.c:2331 msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "synchrone Befehlsausführungsfunktionen sind im Pipeline-Modus nicht erlaubt\n" -#: fe-exec.c:2348 +#: fe-exec.c:2353 msgid "COPY terminated by new PQexec" msgstr "COPY von neuem PQexec beendet" -#: fe-exec.c:2365 +#: fe-exec.c:2370 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec ist während COPY BOTH nicht erlaubt\n" -#: fe-exec.c:2593 fe-exec.c:2649 fe-exec.c:2718 fe-protocol3.c:1870 +#: fe-exec.c:2598 fe-exec.c:2654 fe-exec.c:2723 fe-protocol3.c:1884 msgid "no COPY in progress\n" msgstr "keine COPY in Ausführung\n" -#: fe-exec.c:2895 +#: fe-exec.c:2900 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfn im Pipeline-Modus nicht erlaubt\n" -#: fe-exec.c:2903 +#: fe-exec.c:2908 msgid "connection in wrong state\n" msgstr "Verbindung im falschen Zustand\n" -#: fe-exec.c:2947 +#: fe-exec.c:2952 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "kann Pipeline-Modus nicht einschalten, Verbindung ist nicht inaktiv\n" -#: fe-exec.c:2984 fe-exec.c:3008 +#: fe-exec.c:2989 fe-exec.c:3013 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "kann Pipeline-Modus nicht beenden, wegen nicht eingesammelter Ergebnisse\n" -#: fe-exec.c:2989 +#: fe-exec.c:2994 msgid "cannot exit pipeline mode while busy\n" msgstr "kann Pipeline-Modus nicht beenden während die Verbindung beschäftigt ist\n" -#: fe-exec.c:3001 +#: fe-exec.c:3006 msgid "cannot exit pipeline mode while in COPY\n" msgstr "kann Pipeline-Modus nicht beenden während COPY aktiv ist\n" -#: fe-exec.c:3189 +#: fe-exec.c:3194 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "Pipeline kann nicht gesendet werden, wenn der Pipeline-Modus aus ist\n" -#: fe-exec.c:3300 +#: fe-exec.c:3305 msgid "invalid ExecStatusType code" msgstr "ungültiger ExecStatusType-Kode" -#: fe-exec.c:3327 +#: fe-exec.c:3332 msgid "PGresult is not an error result\n" msgstr "PGresult ist kein Fehlerresultat\n" -#: fe-exec.c:3395 fe-exec.c:3418 +#: fe-exec.c:3400 fe-exec.c:3423 #, c-format msgid "column number %d is out of range 0..%d" msgstr "Spaltennummer %d ist außerhalb des zulässigen Bereichs 0..%d" -#: fe-exec.c:3433 +#: fe-exec.c:3438 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "Parameternummer %d ist außerhalb des zulässigen Bereichs 0..%d" -#: fe-exec.c:3743 +#: fe-exec.c:3748 #, c-format msgid "could not interpret result from server: %s" msgstr "konnte Ergebnis vom Server nicht interpretieren: %s" -#: fe-exec.c:4007 fe-exec.c:4096 +#: fe-exec.c:4026 fe-exec.c:4160 msgid "incomplete multibyte character\n" msgstr "unvollständiges Mehrbyte-Zeichen\n" +#: fe-exec.c:4029 fe-exec.c:4180 +msgid "invalid multibyte character\n" +msgstr "ungültiges Mehrbytezeichen\n" + +#: fe-exec.c:4283 +#, c-format +msgid "escaped string size exceeds the maximum allowed (%zu)\n" +msgstr "Größe der escapten Zeichenkette überschreitet erlaubtes Maximum (%zu)\n" + +#: fe-exec.c:4461 +#, c-format +msgid "escaped bytea size exceeds the maximum allowed (%zu)\n" +msgstr "Größe des escapten bytea-Wertes überschreitet erlaubtes Maximum (%zu)\n" + #: fe-gssapi-common.c:124 msgid "GSSAPI name import error" msgstr "GSSAPI-Namensimportfehler" @@ -818,11 +837,11 @@ msgstr "Integer der Größe %lu wird von pqGetInt nicht unterstützt" msgid "integer of size %lu not supported by pqPutInt" msgstr "Integer der Größe %lu wird von pqPutInt nicht unterstützt" -#: fe-misc.c:576 fe-misc.c:822 +#: fe-misc.c:602 fe-misc.c:848 msgid "connection not open\n" msgstr "Verbindung nicht offen\n" -#: fe-misc.c:755 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-misc.c:781 fe-secure-openssl.c:204 fe-secure-openssl.c:317 #: fe-secure.c:262 fe-secure.c:380 msgid "" "server closed the connection unexpectedly\n" @@ -833,142 +852,142 @@ msgstr "" "\tDas heißt wahrscheinlich, dass der Server abnormal beendete\n" "\tbevor oder während die Anweisung bearbeitet wurde.\n" -#: fe-misc.c:1015 +#: fe-misc.c:1041 msgid "timeout expired\n" msgstr "Timeout abgelaufen\n" -#: fe-misc.c:1060 +#: fe-misc.c:1086 msgid "invalid socket\n" msgstr "ungültiges Socket\n" -#: fe-misc.c:1083 +#: fe-misc.c:1109 #, c-format msgid "%s() failed: %s\n" msgstr "%s() fehlgeschlagen: %s\n" -#: fe-protocol3.c:184 +#: fe-protocol3.c:185 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "Nachricht vom Typ 0x%02x kam vom Server im Ruhezustand" -#: fe-protocol3.c:403 +#: fe-protocol3.c:404 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "Server sendete Daten (»D«-Nachricht) ohne vorherige Zeilenbeschreibung (»T«-Nachricht)\n" -#: fe-protocol3.c:446 +#: fe-protocol3.c:447 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "unerwartete Antwort vom Server; erstes empfangenes Zeichen war »%c«\n" -#: fe-protocol3.c:471 +#: fe-protocol3.c:472 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "Nachrichteninhalt stimmt nicht mit Länge in Nachrichtentyp »%c« überein\n" -#: fe-protocol3.c:491 +#: fe-protocol3.c:492 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "Synchronisation mit Server verloren: Nachrichtentyp »%c« empfangen, Länge %d\n" -#: fe-protocol3.c:543 fe-protocol3.c:583 +#: fe-protocol3.c:544 fe-protocol3.c:584 msgid "insufficient data in \"T\" message" msgstr "nicht genug Daten in »T«-Nachricht" -#: fe-protocol3.c:654 fe-protocol3.c:860 +#: fe-protocol3.c:655 fe-protocol3.c:861 msgid "out of memory for query result" msgstr "Speicher für Anfrageergebnis aufgebraucht" -#: fe-protocol3.c:723 +#: fe-protocol3.c:724 msgid "insufficient data in \"t\" message" msgstr "nicht genug Daten in »t«-Nachricht" -#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 +#: fe-protocol3.c:783 fe-protocol3.c:815 fe-protocol3.c:833 msgid "insufficient data in \"D\" message" msgstr "nicht genug Daten in »D«-Nachricht" -#: fe-protocol3.c:788 +#: fe-protocol3.c:789 msgid "unexpected field count in \"D\" message" msgstr "unerwartete Feldzahl in »D«-Nachricht" -#: fe-protocol3.c:1036 +#: fe-protocol3.c:1037 msgid "no error message available\n" msgstr "keine Fehlermeldung verfügbar\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1084 fe-protocol3.c:1103 +#: fe-protocol3.c:1085 fe-protocol3.c:1104 #, c-format msgid " at character %s" msgstr " bei Zeichen %s" -#: fe-protocol3.c:1116 +#: fe-protocol3.c:1117 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1119 +#: fe-protocol3.c:1120 #, c-format msgid "HINT: %s\n" msgstr "TIP: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1123 #, c-format msgid "QUERY: %s\n" msgstr "ANFRAGE: %s\n" -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1130 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1139 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMANAME: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1143 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABELLENNAME: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1147 #, c-format msgid "COLUMN NAME: %s\n" msgstr "SPALTENNAME: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1151 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATENTYPNAME: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1155 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT-NAME: %s\n" -#: fe-protocol3.c:1166 +#: fe-protocol3.c:1167 msgid "LOCATION: " msgstr "ORT: " -#: fe-protocol3.c:1168 +#: fe-protocol3.c:1169 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1171 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1365 +#: fe-protocol3.c:1379 #, c-format msgid "LINE %d: " msgstr "ZEILE %d: " -#: fe-protocol3.c:1764 +#: fe-protocol3.c:1778 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: Text COPY OUT nicht ausgeführt\n" -#: fe-protocol3.c:2130 +#: fe-protocol3.c:2144 #, c-format msgid "protocol error: id=0x%x\n" msgstr "Protokollfehler: id=0x%x\n" @@ -990,44 +1009,40 @@ msgstr "Server-Zertifikat für »%s« stimmt nicht mit dem Hostnamen »%s« übe msgid "could not get server's host name from server certificate\n" msgstr "konnte Hostnamen des Servers nicht aus dem Serverzertifikat ermitteln\n" -#: fe-secure-gssapi.c:194 +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "GSSAPI-Wrap-Fehler" -#: fe-secure-gssapi.c:202 +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "ausgehende GSSAPI-Nachricht würde keine Vertraulichkeit verwenden\n" -#: fe-secure-gssapi.c:210 +#: fe-secure-gssapi.c:217 fe-secure-gssapi.c:715 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "Client versuchte übergroßes GSSAPI-Paket zu senden (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:594 +#: fe-secure-gssapi.c:357 fe-secure-gssapi.c:607 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "übergroßes GSSAPI-Paket vom Server gesendet (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "GSSAPI-Unwrap-Fehler" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:406 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "eingehende GSSAPI-Nachricht verwendete keine Vertraulichkeit\n" -#: fe-secure-gssapi.c:640 +#: fe-secure-gssapi.c:653 msgid "could not initiate GSSAPI security context" msgstr "konnte GSSAPI-Sicherheitskontext nicht initiieren" -#: fe-secure-gssapi.c:668 +#: fe-secure-gssapi.c:703 msgid "GSSAPI size check error" msgstr "GSSAPI-Fehler bei der Größenprüfung" -#: fe-secure-gssapi.c:679 -msgid "GSSAPI context establishment error" -msgstr "GSSAPI-Fehler beim Einrichten des Kontexts" - #: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, c-format msgid "SSL SYSCALL error: %s\n" diff --git a/src/interfaces/libpq/po/es.po b/src/interfaces/libpq/po/es.po index 791cd10542d..b04021da2b2 100644 --- a/src/interfaces/libpq/po/es.po +++ b/src/interfaces/libpq/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:29+0000\n" +"POT-Creation-Date: 2026-02-06 21:25+0000\n" "PO-Revision-Date: 2025-02-15 12:12+0100\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -60,16 +60,16 @@ msgstr "no se pude generar nonce\n" #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 -#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 -#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 -#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 -#: fe-exec.c:4172 fe-exec.c:4339 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 -#: fe-protocol3.c:1731 fe-secure-common.c:110 fe-secure-gssapi.c:500 -#: fe-secure-openssl.c:446 fe-secure-openssl.c:1124 +#: fe-connect.c:914 fe-connect.c:1463 fe-connect.c:1632 fe-connect.c:2983 +#: fe-connect.c:4715 fe-connect.c:4990 fe-connect.c:5109 fe-connect.c:5361 +#: fe-connect.c:5442 fe-connect.c:5541 fe-connect.c:5797 fe-connect.c:5826 +#: fe-connect.c:5898 fe-connect.c:5922 fe-connect.c:5940 fe-connect.c:6041 +#: fe-connect.c:6050 fe-connect.c:6408 fe-connect.c:6558 fe-connect.c:6826 +#: fe-exec.c:691 fe-exec.c:881 fe-exec.c:1228 fe-exec.c:3150 fe-exec.c:3342 +#: fe-exec.c:4211 fe-exec.c:4405 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:976 fe-protocol3.c:991 fe-protocol3.c:1024 +#: fe-protocol3.c:1745 fe-secure-common.c:110 fe-secure-gssapi.c:512 +#: fe-secure-gssapi.c:687 fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "memoria agotada\n" @@ -223,12 +223,12 @@ msgstr "el método de autentificación %u no está soportado\n" msgid "user name lookup failure: error code %lu\n" msgstr "fallo en la búsqueda del nombre de usuario: código de error %lu\n" -#: fe-auth.c:1117 fe-connect.c:2857 +#: fe-auth.c:1117 fe-connect.c:2858 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "no se pudo buscar el usuario local de ID %d: %s\n" -#: fe-auth.c:1122 fe-connect.c:2862 +#: fe-auth.c:1122 fe-connect.c:2863 #, c-format msgid "local user with ID %d does not exist\n" msgstr "no existe un usuario local con ID %d\n" @@ -246,544 +246,551 @@ msgstr "el valor para password_encryption es demasiado largo\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "algoritmo para cifrado de contraseña «%s» desconocido\n" -#: fe-connect.c:1096 +#: fe-connect.c:1097 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "no se pudo emparejar %d nombres de host a %d direcciones de host\n" -#: fe-connect.c:1182 +#: fe-connect.c:1183 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "no se pudo emparejar %d números de puertos a %d hosts\n" -#: fe-connect.c:1275 fe-connect.c:1301 fe-connect.c:1343 fe-connect.c:1352 -#: fe-connect.c:1385 fe-connect.c:1429 +#: fe-connect.c:1276 fe-connect.c:1302 fe-connect.c:1344 fe-connect.c:1353 +#: fe-connect.c:1386 fe-connect.c:1430 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "valor %s no válido: «%s»\n" -#: fe-connect.c:1322 +#: fe-connect.c:1323 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "el valor sslmode «%s» no es válido cuando no se ha compilado con soporte SSL\n" -#: fe-connect.c:1370 +#: fe-connect.c:1371 msgid "invalid SSL protocol version range\n" msgstr "rango de protocolo SSL no válido \n" -#: fe-connect.c:1395 +#: fe-connect.c:1396 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "el valor gssencmode «%s» no es válido cuando no se ha compilado con soporte GSSAPI\n" -#: fe-connect.c:1655 +#: fe-connect.c:1656 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "no se pudo establecer el socket en modo TCP sin retardo: %s\n" -#: fe-connect.c:1717 +#: fe-connect.c:1718 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "falló la conexión al servidor en el socket «%s»: " -#: fe-connect.c:1744 +#: fe-connect.c:1745 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "falló la conexión al servidor en «%s» (%s), puerto %s: " -#: fe-connect.c:1749 +#: fe-connect.c:1750 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "falló la conexión al servidor en «%s», puerto %s: " -#: fe-connect.c:1774 +#: fe-connect.c:1775 msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "\t¿Está el servidor en ejecución localmente y aceptando conexiones en ese socket?\n" -#: fe-connect.c:1778 +#: fe-connect.c:1779 msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "\t¿Está el servidor en ejecución en ese host y aceptando conexiones TCP/IP?\n" -#: fe-connect.c:1842 +#: fe-connect.c:1843 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "valor entero «%s» no válido para la opción de conexión «%s»\n" -#: fe-connect.c:1872 fe-connect.c:1907 fe-connect.c:1943 fe-connect.c:2032 -#: fe-connect.c:2645 +#: fe-connect.c:1873 fe-connect.c:1908 fe-connect.c:1944 fe-connect.c:2033 +#: fe-connect.c:2646 #, c-format msgid "%s(%s) failed: %s\n" msgstr "%s(%s) falló: %s\n" -#: fe-connect.c:1997 +#: fe-connect.c:1998 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "%s(%s) falló: código de error %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "el estado de conexión no es válido, probablemente por corrupción de memoria\n" -#: fe-connect.c:2391 +#: fe-connect.c:2392 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "número de puerto no válido: «%s»\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "no se pudo traducir el nombre «%s» a una dirección: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "no se pudo interpretar la dirección de red «%s»: %s\n" -#: fe-connect.c:2433 +#: fe-connect.c:2434 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "la ruta del socket de dominio Unix «%s» es demasiado larga (máximo %d bytes)\n" -#: fe-connect.c:2448 +#: fe-connect.c:2449 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "no se pudo traducir la ruta del socket Unix «%s» a una dirección: %s\n" -#: fe-connect.c:2574 +#: fe-connect.c:2575 #, c-format msgid "could not create socket: %s\n" msgstr "no se pudo crear el socket: %s\n" -#: fe-connect.c:2605 +#: fe-connect.c:2606 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "no se pudo establecer el socket en modo no bloqueante: %s\n" -#: fe-connect.c:2615 +#: fe-connect.c:2616 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "no se pudo poner el socket en modo close-on-exec: %s\n" -#: fe-connect.c:2773 +#: fe-connect.c:2774 #, c-format msgid "could not get socket error status: %s\n" msgstr "no se pudo determinar el estado de error del socket: %s\n" -#: fe-connect.c:2801 +#: fe-connect.c:2802 #, c-format msgid "could not get client address from socket: %s\n" msgstr "no se pudo obtener la dirección del cliente desde el socket: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2844 msgid "requirepeer parameter is not supported on this platform\n" msgstr "el parámetro requirepeer no está soportado en esta plataforma\n" -#: fe-connect.c:2846 +#: fe-connect.c:2847 #, c-format msgid "could not get peer credentials: %s\n" msgstr "no se pudo obtener credenciales de la contraparte: %s\n" -#: fe-connect.c:2870 +#: fe-connect.c:2871 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer especifica «%s», pero el nombre de usuario de la contraparte es «%s»\n" -#: fe-connect.c:2910 +#: fe-connect.c:2911 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "no se pudo enviar el paquete de negociación GSSAPI: %s\n" -#: fe-connect.c:2922 +#: fe-connect.c:2923 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "cifrado GSSAPI requerido, pero fue imposible (posiblemente no hay cache de credenciales, no hay soporte de servidor, o se está usando un socket local)\n" -#: fe-connect.c:2964 +#: fe-connect.c:2965 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "no se pudo enviar el paquete de negociación SSL: %s\n" -#: fe-connect.c:2995 +#: fe-connect.c:2996 #, c-format msgid "could not send startup packet: %s\n" msgstr "no se pudo enviar el paquete de inicio: %s\n" -#: fe-connect.c:3071 +#: fe-connect.c:3072 msgid "server does not support SSL, but SSL was required\n" msgstr "el servidor no soporta SSL, pero SSL es requerida\n" -#: fe-connect.c:3089 +#: fe-connect.c:3090 msgid "server sent an error response during SSL exchange\n" msgstr "el servidor envió una respuesta de error durante un intercambio SSL\n" -#: fe-connect.c:3095 +#: fe-connect.c:3096 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "se ha recibido una respuesta no válida en la negociación SSL: %c\n" -#: fe-connect.c:3116 +#: fe-connect.c:3117 msgid "received unencrypted data after SSL response\n" msgstr "se recibieron datos no cifrados después de la respuesta SSL\n" -#: fe-connect.c:3197 +#: fe-connect.c:3198 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "el servidor no soporta cifrado GSSAPI, pero es requerida\n" -#: fe-connect.c:3209 +#: fe-connect.c:3210 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "se ha recibido una respuesta no válida en la negociación GSSAPI: %c\n" -#: fe-connect.c:3228 +#: fe-connect.c:3229 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "se recibieron datos no cifrados después de la respuesta de cifrado GSSAPI\n" -#: fe-connect.c:3293 fe-connect.c:3318 +#: fe-connect.c:3294 fe-connect.c:3319 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "se esperaba una petición de autentificación desde el servidor, pero se ha recibido %c\n" -#: fe-connect.c:3525 +#: fe-connect.c:3526 msgid "unexpected message from server during startup\n" msgstr "se ha recibido un mensaje inesperado del servidor durante el inicio\n" -#: fe-connect.c:3617 +#: fe-connect.c:3618 msgid "session is read-only\n" msgstr "la sesión es de solo lectura\n" -#: fe-connect.c:3620 +#: fe-connect.c:3621 msgid "session is not read-only\n" msgstr "la sesión no es de solo lectura\n" -#: fe-connect.c:3674 +#: fe-connect.c:3675 msgid "server is in hot standby mode\n" msgstr "el servidor está en modo hot standby\n" -#: fe-connect.c:3677 +#: fe-connect.c:3678 msgid "server is not in hot standby mode\n" msgstr "el servidor no está en modo hot standby\n" -#: fe-connect.c:3795 fe-connect.c:3847 +#: fe-connect.c:3796 fe-connect.c:3848 #, c-format msgid "\"%s\" failed\n" msgstr "«%s» falló\n" -#: fe-connect.c:3861 +#: fe-connect.c:3862 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "estado de conexión no válido %d, probablemente por corrupción de memoria\n" -#: fe-connect.c:4307 fe-connect.c:4367 +#: fe-connect.c:4308 fe-connect.c:4368 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_CONNRESET\n" -#: fe-connect.c:4727 +#: fe-connect.c:4728 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "URL LDAP no válida «%s»: el esquema debe ser ldap://\n" -#: fe-connect.c:4742 +#: fe-connect.c:4743 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "URL LDAP no válida «%s»: distinguished name faltante\n" -#: fe-connect.c:4754 fe-connect.c:4812 +#: fe-connect.c:4755 fe-connect.c:4813 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "URL LDAP no válida «%s»: debe tener exactamente un atributo\n" -#: fe-connect.c:4766 fe-connect.c:4828 +#: fe-connect.c:4767 fe-connect.c:4829 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "URL LDAP no válida «%s»: debe tener ámbito de búsqueda (base/one/sub)\n" -#: fe-connect.c:4778 +#: fe-connect.c:4779 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "URL LDAP no válida «%s»: no tiene filtro\n" -#: fe-connect.c:4800 +#: fe-connect.c:4801 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "URL LDAP no válida «%s»: número de puerto no válido\n" -#: fe-connect.c:4838 +#: fe-connect.c:4839 msgid "could not create LDAP structure\n" msgstr "no se pudo crear estructura LDAP\n" -#: fe-connect.c:4914 +#: fe-connect.c:4915 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "búsqueda en servidor LDAP falló: %s\n" -#: fe-connect.c:4925 +#: fe-connect.c:4926 msgid "more than one entry found on LDAP lookup\n" msgstr "se encontro más de una entrada en búsqueda LDAP\n" -#: fe-connect.c:4926 fe-connect.c:4938 +#: fe-connect.c:4927 fe-connect.c:4939 msgid "no entry found on LDAP lookup\n" msgstr "no se encontró ninguna entrada en búsqueda LDAP\n" -#: fe-connect.c:4949 fe-connect.c:4962 +#: fe-connect.c:4950 fe-connect.c:4963 msgid "attribute has no values on LDAP lookup\n" msgstr "la búsqueda LDAP entregó atributo sin valores\n" -#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 +#: fe-connect.c:4977 +#, c-format +msgid "connection info string size exceeds the maximum allowed (%d)\n" +msgstr "el tamaño de la cadena de conexión excede el máximo permitido (%d)\n" + +#: fe-connect.c:5029 fe-connect.c:5048 fe-connect.c:5580 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "falta «=» después de «%s» en la cadena de información de la conexión\n" -#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 +#: fe-connect.c:5121 fe-connect.c:5765 fe-connect.c:6541 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "opción de conexión no válida «%s»\n" -#: fe-connect.c:5122 fe-connect.c:5614 +#: fe-connect.c:5137 fe-connect.c:5629 msgid "unterminated quoted string in connection info string\n" msgstr "cadena de caracteres entre comillas sin terminar en la cadena de información de conexión\n" -#: fe-connect.c:5203 +#: fe-connect.c:5218 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "la definición de servicio «%s» no fue encontrada\n" -#: fe-connect.c:5229 +#: fe-connect.c:5244 #, c-format msgid "service file \"%s\" not found\n" msgstr "el archivo de servicio «%s» no fue encontrado\n" -#: fe-connect.c:5243 +#: fe-connect.c:5258 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "la línea %d es demasiado larga en archivo de servicio «%s»\n" -#: fe-connect.c:5314 fe-connect.c:5358 +#: fe-connect.c:5329 fe-connect.c:5373 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "error de sintaxis en archivo de servicio «%s», línea %d\n" -#: fe-connect.c:5325 +#: fe-connect.c:5340 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "especificaciones de servicio anidadas no soportadas en archivo de servicio «%s», línea %d\n" -#: fe-connect.c:6046 +#: fe-connect.c:6061 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "URI no válida propagada a rutina interna de procesamiento: «%s»\n" -#: fe-connect.c:6123 +#: fe-connect.c:6138 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "se encontró el fin de la cadena mientras se buscaba el «]» correspondiente en dirección IPv6 en URI: «%s»\n" -#: fe-connect.c:6130 +#: fe-connect.c:6145 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "la dirección IPv6 no puede ser vacía en la URI: «%s»\n" -#: fe-connect.c:6145 +#: fe-connect.c:6160 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "carácter «%c» inesperado en la posición %d en URI (se esperaba «:» o «/»): «%s»\n" -#: fe-connect.c:6275 +#: fe-connect.c:6290 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador llave/valor «=» extra en parámetro de la URI: «%s»\n" -#: fe-connect.c:6295 +#: fe-connect.c:6310 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "separador llave/valor «=» faltante en parámetro de la URI: «%s»\n" -#: fe-connect.c:6347 +#: fe-connect.c:6362 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "parámetro de URI no válido: «%s»\n" -#: fe-connect.c:6421 +#: fe-connect.c:6436 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "elemento escapado con %% no válido: «%s»\n" -#: fe-connect.c:6431 +#: fe-connect.c:6446 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "valor no permitido %%00 en valor escapado con %%: «%s»\n" -#: fe-connect.c:6801 +#: fe-connect.c:6818 msgid "connection pointer is NULL\n" msgstr "el puntero de conexión es NULL\n" -#: fe-connect.c:7089 +#: fe-connect.c:7106 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ADVERTENCIA: El archivo de claves «%s» no es un archivo plano\n" -#: fe-connect.c:7098 +#: fe-connect.c:7115 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "ADVERTENCIA: El archivo de claves «%s» tiene permiso de lectura para el grupo u otros; los permisos deberían ser u=rw (0600) o menos\n" -#: fe-connect.c:7206 +#: fe-connect.c:7223 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "contraseña obtenida desde el archivo «%s»\n" -#: fe-exec.c:449 fe-exec.c:3411 +#: fe-exec.c:449 fe-exec.c:3416 #, c-format msgid "row number %d is out of range 0..%d" msgstr "el número de fila %d está fuera del rango 0..%d" -#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:256 -#: fe-protocol3.c:274 fe-protocol3.c:371 fe-protocol3.c:743 +#: fe-exec.c:510 fe-protocol3.c:208 fe-protocol3.c:233 fe-protocol3.c:257 +#: fe-protocol3.c:275 fe-protocol3.c:372 fe-protocol3.c:744 msgid "out of memory" msgstr "memoria agotada" -#: fe-exec.c:511 fe-protocol3.c:1939 +#: fe-exec.c:511 fe-protocol3.c:1953 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:792 +#: fe-exec.c:797 msgid "write to server failed\n" msgstr "falló escritura al servidor\n" -#: fe-exec.c:864 +#: fe-exec.c:869 msgid "NOTICE" msgstr "AVISO" -#: fe-exec.c:922 +#: fe-exec.c:927 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult no puede soportar un número de tuplas mayor que INT_MAX" -#: fe-exec.c:934 +#: fe-exec.c:939 msgid "size_t overflow" msgstr "desbordamiento de size_t" -#: fe-exec.c:1351 fe-exec.c:1477 fe-exec.c:1526 +#: fe-exec.c:1356 fe-exec.c:1482 fe-exec.c:1531 msgid "command string is a null pointer\n" msgstr "la cadena de orden es un puntero nulo\n" -#: fe-exec.c:1483 fe-exec.c:1532 fe-exec.c:1628 +#: fe-exec.c:1488 fe-exec.c:1537 fe-exec.c:1633 #, c-format msgid "number of parameters must be between 0 and %d\n" msgstr "el número de parámetros debe estar entre 0 y %d\n" -#: fe-exec.c:1520 fe-exec.c:1622 +#: fe-exec.c:1525 fe-exec.c:1627 msgid "statement name is a null pointer\n" msgstr "el nombre de sentencia es un puntero nulo\n" -#: fe-exec.c:1664 fe-exec.c:3256 +#: fe-exec.c:1669 fe-exec.c:3261 msgid "no connection to the server\n" msgstr "no hay conexión con el servidor\n" -#: fe-exec.c:1673 fe-exec.c:3265 +#: fe-exec.c:1678 fe-exec.c:3270 msgid "another command is already in progress\n" msgstr "hay otra orden en ejecución\n" -#: fe-exec.c:1704 +#: fe-exec.c:1709 msgid "cannot queue commands during COPY\n" msgstr "no se puede agregar órdenes a la cola mientras se hace COPY\n" -#: fe-exec.c:1822 +#: fe-exec.c:1827 msgid "length must be given for binary parameter\n" msgstr "el largo debe ser especificado para un parámetro binario\n" -#: fe-exec.c:2142 +#: fe-exec.c:2147 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "asyncStatus no esperado: %d\n" -#: fe-exec.c:2178 +#: fe-exec.c:2183 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc «%s» falló durante el evento PGEVT_RESULTCREATE\n" -#: fe-exec.c:2326 +#: fe-exec.c:2331 msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "no se permiten funciones que ejecuten órdenes sincrónicas en modo pipeline\n" -#: fe-exec.c:2348 +#: fe-exec.c:2353 msgid "COPY terminated by new PQexec" msgstr "COPY terminado por un nuevo PQexec" -#: fe-exec.c:2365 +#: fe-exec.c:2370 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec no está permitido durante COPY BOTH\n" -#: fe-exec.c:2593 fe-exec.c:2649 fe-exec.c:2718 fe-protocol3.c:1870 +#: fe-exec.c:2598 fe-exec.c:2654 fe-exec.c:2723 fe-protocol3.c:1884 msgid "no COPY in progress\n" msgstr "no hay COPY alguno en ejecución\n" -#: fe-exec.c:2895 +#: fe-exec.c:2900 msgid "PQfn not allowed in pipeline mode\n" msgstr "no se permite PQfn en modo pipeline\n" -#: fe-exec.c:2903 +#: fe-exec.c:2908 msgid "connection in wrong state\n" msgstr "la conexión está en un estado incorrecto\n" -#: fe-exec.c:2947 +#: fe-exec.c:2952 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "no se puede entrar en modo pipeline, la conexión no está inactiva\n" -#: fe-exec.c:2984 fe-exec.c:3008 +#: fe-exec.c:2989 fe-exec.c:3013 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "no se puede salir de modo pipeline al tener resultados sin recolectar\n" -#: fe-exec.c:2989 +#: fe-exec.c:2994 msgid "cannot exit pipeline mode while busy\n" msgstr "no se puede salir de modo pipeline mientras haya actividad\n" -#: fe-exec.c:3001 +#: fe-exec.c:3006 msgid "cannot exit pipeline mode while in COPY\n" msgstr "no se puede salir de modo pipeline mientras se está en COPY\n" -#: fe-exec.c:3189 +#: fe-exec.c:3194 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "no se puede enviar pipeline cuando no se está en modo pipeline\n" -#: fe-exec.c:3300 +#: fe-exec.c:3305 msgid "invalid ExecStatusType code" msgstr "el código de ExecStatusType no es válido" -#: fe-exec.c:3327 +#: fe-exec.c:3332 msgid "PGresult is not an error result\n" msgstr "PGresult no es un resultado de error\n" -#: fe-exec.c:3395 fe-exec.c:3418 +#: fe-exec.c:3400 fe-exec.c:3423 #, c-format msgid "column number %d is out of range 0..%d" msgstr "el número de columna %d está fuera del rango 0..%d" -#: fe-exec.c:3433 +#: fe-exec.c:3438 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "el número de parámetro %d está fuera del rango 0..%d" -#: fe-exec.c:3743 +#: fe-exec.c:3748 #, c-format msgid "could not interpret result from server: %s" msgstr "no se pudo interpretar el resultado del servidor: %s" -#: fe-exec.c:4020 -msgid "incomplete multibyte character" -msgstr "carácter multibyte incompleto" - -#: fe-exec.c:4023 -msgid "invalid multibyte character" -msgstr "carácter multibyte no válido" - -#: fe-exec.c:4132 +#: fe-exec.c:4026 fe-exec.c:4160 msgid "incomplete multibyte character\n" msgstr "carácter multibyte incompleto\n" -#: fe-exec.c:4152 +#: fe-exec.c:4029 fe-exec.c:4180 msgid "invalid multibyte character\n" msgstr "carácter multibyte no válido\n" +#: fe-exec.c:4283 +#, c-format +msgid "escaped string size exceeds the maximum allowed (%zu)\n" +msgstr "el tamaño de la cadena escapada excede el máximo permitido (%zu)\n" + +#: fe-exec.c:4461 +#, c-format +msgid "escaped bytea size exceeds the maximum allowed (%zu)\n" +msgstr "el tamaño del bytea escapado excede el máximo permitido (%zu)\n" + #: fe-gssapi-common.c:124 msgid "GSSAPI name import error" msgstr "error de importación de nombre de GSSAPI" @@ -836,11 +843,11 @@ msgstr "el entero de tamaño %lu no está soportado por pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "el entero de tamaño %lu no está soportado por pqPutInt" -#: fe-misc.c:576 fe-misc.c:822 +#: fe-misc.c:602 fe-misc.c:848 msgid "connection not open\n" msgstr "la conexión no está abierta\n" -#: fe-misc.c:755 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-misc.c:781 fe-secure-openssl.c:204 fe-secure-openssl.c:317 #: fe-secure.c:262 fe-secure.c:380 msgid "" "server closed the connection unexpectedly\n" @@ -851,142 +858,142 @@ msgstr "" "\tProbablemente se debe a que el servidor terminó de manera anormal\n" "\tantes o durante el procesamiento de la petición.\n" -#: fe-misc.c:1015 +#: fe-misc.c:1041 msgid "timeout expired\n" msgstr "tiempo de espera agotado\n" -#: fe-misc.c:1060 +#: fe-misc.c:1086 msgid "invalid socket\n" msgstr "socket no válido\n" -#: fe-misc.c:1083 +#: fe-misc.c:1109 #, c-format msgid "%s() failed: %s\n" msgstr "%s() falló: %s\n" -#: fe-protocol3.c:184 +#: fe-protocol3.c:185 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "un mensaje de tipo 0x%02x llegó del servidor estando inactivo" -#: fe-protocol3.c:403 +#: fe-protocol3.c:404 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "el servidor envió datos (mensaje «D») sin precederlos con una descripción de fila (mensaje «T»)\n" -#: fe-protocol3.c:446 +#: fe-protocol3.c:447 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "se ha recibido una respuesta inesperada del servidor; el primer carácter recibido fue «%c»\n" -#: fe-protocol3.c:471 +#: fe-protocol3.c:472 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "el contenido del mensaje no concuerda con el largo, en el mensaje tipo «%c»\n" -#: fe-protocol3.c:491 +#: fe-protocol3.c:492 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "se perdió la sincronía con el servidor: se recibió un mensaje de tipo «%c», largo %d\n" -#: fe-protocol3.c:543 fe-protocol3.c:583 +#: fe-protocol3.c:544 fe-protocol3.c:584 msgid "insufficient data in \"T\" message" msgstr "datos insuficientes en el mensaje «T»" -#: fe-protocol3.c:654 fe-protocol3.c:860 +#: fe-protocol3.c:655 fe-protocol3.c:861 msgid "out of memory for query result" msgstr "no hay suficiente memoria para el resultado de la consulta" -#: fe-protocol3.c:723 +#: fe-protocol3.c:724 msgid "insufficient data in \"t\" message" msgstr "datos insuficientes en el mensaje «t»" -#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 +#: fe-protocol3.c:783 fe-protocol3.c:815 fe-protocol3.c:833 msgid "insufficient data in \"D\" message" msgstr "datos insuficientes en el mensaje «D»" -#: fe-protocol3.c:788 +#: fe-protocol3.c:789 msgid "unexpected field count in \"D\" message" msgstr "cantidad de campos inesperada en mensaje «D»" -#: fe-protocol3.c:1036 +#: fe-protocol3.c:1037 msgid "no error message available\n" msgstr "no hay mensaje de error disponible\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1084 fe-protocol3.c:1103 +#: fe-protocol3.c:1085 fe-protocol3.c:1104 #, c-format msgid " at character %s" msgstr " en el carácter %s" -#: fe-protocol3.c:1116 +#: fe-protocol3.c:1117 #, c-format msgid "DETAIL: %s\n" msgstr "DETALLE: %s\n" -#: fe-protocol3.c:1119 +#: fe-protocol3.c:1120 #, c-format msgid "HINT: %s\n" msgstr "SUGERENCIA: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1123 #, c-format msgid "QUERY: %s\n" msgstr "CONSULTA: %s\n" -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1130 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXTO: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1139 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "NOMBRE DE ESQUEMA: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1143 #, c-format msgid "TABLE NAME: %s\n" msgstr "NOMBRE DE TABLA: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1147 #, c-format msgid "COLUMN NAME: %s\n" msgstr "NOMBRE DE COLUMNA: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1151 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "NOMBRE TIPO DE DATO: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1155 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "NOMBRE DE RESTRICCIÓN: %s\n" -#: fe-protocol3.c:1166 +#: fe-protocol3.c:1167 msgid "LOCATION: " msgstr "UBICACIÓN: " -#: fe-protocol3.c:1168 +#: fe-protocol3.c:1169 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1171 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1365 +#: fe-protocol3.c:1379 #, c-format msgid "LINE %d: " msgstr "LÍNEA %d: " -#: fe-protocol3.c:1764 +#: fe-protocol3.c:1778 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: no se está haciendo COPY OUT de texto\n" -#: fe-protocol3.c:2130 +#: fe-protocol3.c:2144 #, c-format msgid "protocol error: id=0x%x\n" msgstr "error de protocolo: id=0x%x\n" @@ -1008,44 +1015,40 @@ msgstr "el certificado de servidor para «%s» no coincide con el nombre de serv msgid "could not get server's host name from server certificate\n" msgstr "no se pudo obtener el nombre de servidor desde el certificado del servidor\n" -#: fe-secure-gssapi.c:194 +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "error de «wrap» de GSSAPI" -#: fe-secure-gssapi.c:202 +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "mensaje GSSAPI de saluda no proveería confidencialidad\n" -#: fe-secure-gssapi.c:210 +#: fe-secure-gssapi.c:217 fe-secure-gssapi.c:715 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "el cliente intentó enviar un paquete GSSAPI demasiado grande (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:594 +#: fe-secure-gssapi.c:357 fe-secure-gssapi.c:607 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "paquete GSSAPI demasiado grande enviado por el servidor (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "error de «unwrap» de GSSAPI" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:406 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "mensaje GSSAPI entrante no usó confidencialidad\n" -#: fe-secure-gssapi.c:640 +#: fe-secure-gssapi.c:653 msgid "could not initiate GSSAPI security context" msgstr "no se pudo iniciar un contexto de seguridad GSSAPI" -#: fe-secure-gssapi.c:668 +#: fe-secure-gssapi.c:703 msgid "GSSAPI size check error" msgstr "error de verificación de tamaño GSSAPI" -#: fe-secure-gssapi.c:679 -msgid "GSSAPI context establishment error" -msgstr "error de establecimiento de contexto de GSSAPI" - #: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, c-format msgid "SSL SYSCALL error: %s\n" diff --git a/src/interfaces/libpq/po/fr.po b/src/interfaces/libpq/po/fr.po index ab53c766aa4..64332c2c824 100644 --- a/src/interfaces/libpq/po/fr.po +++ b/src/interfaces/libpq/po/fr.po @@ -1083,7 +1083,7 @@ msgstr "erreur SSL : %s\n" #: fe-secure-openssl.c:242 fe-secure-openssl.c:355 msgid "SSL connection has been closed unexpectedly\n" -msgstr "la connexion SSL a été fermée de façon inattendu\n" +msgstr "la connexion SSL a été fermée de façon inattendue\n" #: fe-secure-openssl.c:248 fe-secure-openssl.c:361 fe-secure-openssl.c:1423 #, c-format diff --git a/src/interfaces/libpq/po/ja.po b/src/interfaces/libpq/po/ja.po index 7c1efbfccad..37dfaa668c0 100644 --- a/src/interfaces/libpq/po/ja.po +++ b/src/interfaces/libpq/po/ja.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL 14)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-11 14:38+0900\n" -"PO-Revision-Date: 2024-11-11 14:49+0900\n" +"POT-Creation-Date: 2025-11-11 13:53+0900\n" +"PO-Revision-Date: 2025-11-11 15:44+0900\n" "Last-Translator: Kyotaro Horiguchi \n" "Language-Team: Japan PostgreSQL Users Group \n" "Language: ja\n" @@ -58,16 +58,16 @@ msgstr "nonce を生成できませんでした\n" #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 -#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 -#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 -#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 -#: fe-exec.c:4114 fe-exec.c:4279 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 -#: fe-protocol3.c:1731 fe-secure-common.c:110 fe-secure-gssapi.c:500 -#: fe-secure-openssl.c:446 fe-secure-openssl.c:1124 +#: fe-connect.c:914 fe-connect.c:1463 fe-connect.c:1632 fe-connect.c:2983 +#: fe-connect.c:4715 fe-connect.c:4990 fe-connect.c:5109 fe-connect.c:5361 +#: fe-connect.c:5442 fe-connect.c:5541 fe-connect.c:5797 fe-connect.c:5826 +#: fe-connect.c:5898 fe-connect.c:5922 fe-connect.c:5940 fe-connect.c:6041 +#: fe-connect.c:6050 fe-connect.c:6408 fe-connect.c:6558 fe-connect.c:6826 +#: fe-exec.c:691 fe-exec.c:881 fe-exec.c:1228 fe-exec.c:3150 fe-exec.c:3342 +#: fe-exec.c:4211 fe-exec.c:4405 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:976 fe-protocol3.c:991 fe-protocol3.c:1024 +#: fe-protocol3.c:1745 fe-secure-common.c:110 fe-secure-gssapi.c:512 +#: fe-secure-gssapi.c:687 fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "メモリ不足\n" @@ -221,12 +221,12 @@ msgstr "認証方式%uはサポートされていません\n" msgid "user name lookup failure: error code %lu\n" msgstr "ユーザー名の参照に失敗: エラーコード %lu\n" -#: fe-auth.c:1117 fe-connect.c:2857 +#: fe-auth.c:1117 fe-connect.c:2858 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "ローカルユーザID%dが見つかりませんでした: %s\n" -#: fe-auth.c:1122 fe-connect.c:2862 +#: fe-auth.c:1122 fe-connect.c:2863 #, c-format msgid "local user with ID %d does not exist\n" msgstr "ID %d を持つローカルユーザは存在しません\n" @@ -244,532 +244,551 @@ msgstr "password_encryptionの値が長すぎます\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "認識できないパスワード暗号化アルゴリズム \"%s\"\n" -#: fe-connect.c:1096 +#: fe-connect.c:1097 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "%d個のホスト名と%d個のhostaddrの値との突き合せはできません\n" -#: fe-connect.c:1182 +#: fe-connect.c:1183 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "%d個のポート番号と%d個のホストとの突き合せはできません\n" -#: fe-connect.c:1275 fe-connect.c:1301 fe-connect.c:1343 fe-connect.c:1352 -#: fe-connect.c:1385 fe-connect.c:1429 +#: fe-connect.c:1276 fe-connect.c:1302 fe-connect.c:1344 fe-connect.c:1353 +#: fe-connect.c:1386 fe-connect.c:1430 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "%s の値が不正: \"%s\"\n" -#: fe-connect.c:1322 +#: fe-connect.c:1323 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "SSLサポートが組み込まれていない場合sslmodeの値\"%s\"は不正です\n" -#: fe-connect.c:1370 +#: fe-connect.c:1371 msgid "invalid SSL protocol version range\n" msgstr "不正なSSLプロトコルバージョン範囲\n" -#: fe-connect.c:1395 +#: fe-connect.c:1396 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "gssencmodeの値\"%s\"はGSSAPIサポートがコンパイルされていない場合は不正\n" -#: fe-connect.c:1655 +#: fe-connect.c:1656 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "TCPソケットを非遅延モードに設定できませんでした: %s\n" -#: fe-connect.c:1717 +#: fe-connect.c:1718 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "ソケット\"%s\"上でのサーバーへの接続に失敗しました: " -#: fe-connect.c:1744 +#: fe-connect.c:1745 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "\"%s\" (%s)、ポート %sでのサーバーへの接続に失敗しました: " -#: fe-connect.c:1749 +#: fe-connect.c:1750 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "\"%s\"、ポート%sでのサーバーへの接続に失敗しました: " -#: fe-connect.c:1774 +#: fe-connect.c:1775 msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "\tサーバーは同一マシン上で動作していて、そのソケットで接続の待ち受けをしていますか?\n" -#: fe-connect.c:1778 +#: fe-connect.c:1779 msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "\tサーバーはそのホストで動作していて、TCP/IP接続を受け付けていますか?\n" -#: fe-connect.c:1842 +#: fe-connect.c:1843 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "接続オプション\"%2$s\"に対する不正な整数値\"%1$s\"\n" -#: fe-connect.c:1872 fe-connect.c:1907 fe-connect.c:1943 fe-connect.c:2032 -#: fe-connect.c:2645 +#: fe-connect.c:1873 fe-connect.c:1908 fe-connect.c:1944 fe-connect.c:2033 +#: fe-connect.c:2646 #, c-format msgid "%s(%s) failed: %s\n" msgstr "%s(%s)が失敗しました: %s\n" -#: fe-connect.c:1997 +#: fe-connect.c:1998 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "%s(%s)が失敗しました: エラーコード %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "接続状態が不正です。メモリ障害の可能性があります\n" -#: fe-connect.c:2391 +#: fe-connect.c:2392 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "不正なポート番号です: \"%s\"\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "ホスト名\"%s\"をアドレスに変換できませんでした: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "ネットワークアドレス\"%s\"をパースできませんでした: %s\n" -#: fe-connect.c:2433 +#: fe-connect.c:2434 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Unixドメインソケットのパス\"%s\"が長すぎます(最大 %d バイト)\n" -#: fe-connect.c:2448 +#: fe-connect.c:2449 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "Unixドメインソケットのパス\"%s\"をアドレスに変換できませんでした: %s\n" -#: fe-connect.c:2574 +#: fe-connect.c:2575 #, c-format msgid "could not create socket: %s\n" msgstr "ソケットを作成できませんでした: %s\n" -#: fe-connect.c:2605 +#: fe-connect.c:2606 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "ソケットを非ブロッキングモードに設定できませんでした: %s\n" -#: fe-connect.c:2615 +#: fe-connect.c:2616 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "ソケットをclose-on-execモードに設定できませんでした: %s\n" -#: fe-connect.c:2773 +#: fe-connect.c:2774 #, c-format msgid "could not get socket error status: %s\n" msgstr "ソケットのエラー状態を入手できませんでした: %s\n" -#: fe-connect.c:2801 +#: fe-connect.c:2802 #, c-format msgid "could not get client address from socket: %s\n" msgstr "ソケットからクライアントアドレスを入手できませんでした: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2844 msgid "requirepeer parameter is not supported on this platform\n" msgstr "このプラットフォームでは requirepeer パラメータはサポートされていません\n" -#: fe-connect.c:2846 +#: fe-connect.c:2847 #, c-format msgid "could not get peer credentials: %s\n" msgstr "ピアの資格証明を入手できませんでした: %s\n" -#: fe-connect.c:2870 +#: fe-connect.c:2871 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeerは\"%s\"を指定していますが、実際のピア名は\"%s\"です\n" -#: fe-connect.c:2910 +#: fe-connect.c:2911 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "GSSAPIネゴシエーションパケットを送信できませんでした: %s\n" -#: fe-connect.c:2922 +#: fe-connect.c:2923 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "GSSAPI暗号化が要求されていますが、実行できませんでした(おそらく資格キャッシュがない、サーバーがサポートしていないあるいはローカルソケットで接続しています)\n" -#: fe-connect.c:2964 +#: fe-connect.c:2965 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "SSLネゴシエーションパケットを送信できませんでした: %s\n" -#: fe-connect.c:2995 +#: fe-connect.c:2996 #, c-format msgid "could not send startup packet: %s\n" msgstr "開始パケットを送信できませんでした: %s\n" -#: fe-connect.c:3071 +#: fe-connect.c:3072 msgid "server does not support SSL, but SSL was required\n" msgstr "サーバーはSSLをサポートしていませんが、SSLが要求されました\n" -#: fe-connect.c:3089 +#: fe-connect.c:3090 msgid "server sent an error response during SSL exchange\n" msgstr "SSLハンドシェイク中にサーバーからエラー応答が返されました\n" -#: fe-connect.c:3095 +#: fe-connect.c:3096 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "SSLネゴシエーションに対して不正な応答を受信しました: %c\n" -#: fe-connect.c:3116 +#: fe-connect.c:3117 msgid "received unencrypted data after SSL response\n" msgstr "SSL応答の後に非暗号化データを受信しました\n" -#: fe-connect.c:3197 +#: fe-connect.c:3198 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "サーバーはGSSAPI暗号化をサポートしていませんが、要求されました\n" -#: fe-connect.c:3209 +#: fe-connect.c:3210 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "GSSAPIネゴシエーションに対して不正な応答を受信しました: %c\n" -#: fe-connect.c:3228 +#: fe-connect.c:3229 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "GSSAPI暗号化応答の後に非暗号化データを受信しました\n" -#: fe-connect.c:3293 fe-connect.c:3318 +#: fe-connect.c:3294 fe-connect.c:3319 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "サーバーからの認証要求を想定していましたが、%cを受信しました\n" -#: fe-connect.c:3525 +#: fe-connect.c:3526 msgid "unexpected message from server during startup\n" msgstr "起動時にサーバーから想定外のメッセージがありました\n" -#: fe-connect.c:3617 +#: fe-connect.c:3618 msgid "session is read-only\n" msgstr "セッションは読み取り専用です\n" -#: fe-connect.c:3620 +#: fe-connect.c:3621 msgid "session is not read-only\n" msgstr "セッションは読み取り専用ではありません\n" -#: fe-connect.c:3674 +#: fe-connect.c:3675 msgid "server is in hot standby mode\n" msgstr "サーバーはホットスタンバイモードです\n" -#: fe-connect.c:3677 +#: fe-connect.c:3678 msgid "server is not in hot standby mode\n" msgstr "サーバーはホットスタンバイモードではありません\n" -#: fe-connect.c:3795 fe-connect.c:3847 +#: fe-connect.c:3796 fe-connect.c:3848 #, c-format msgid "\"%s\" failed\n" msgstr "\"%s\"が失敗しました\n" -#: fe-connect.c:3861 +#: fe-connect.c:3862 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "接続状態%dが不正です。メモリ障害の可能性があります\n" -#: fe-connect.c:4307 fe-connect.c:4367 +#: fe-connect.c:4308 fe-connect.c:4368 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEVT_CONNRESETイベント中にPGEventProc \"%s\"に失敗しました\n" -#: fe-connect.c:4727 +#: fe-connect.c:4728 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "不正なLDAP URL\"%s\":スキーマはldap://でなければなりません\n" -#: fe-connect.c:4742 +#: fe-connect.c:4743 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "不正なLDAP URL \"%s\": 区別名がありません\n" -#: fe-connect.c:4754 fe-connect.c:4812 +#: fe-connect.c:4755 fe-connect.c:4813 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "不正なLDAP URL \"%s\": 正確に1つの属性を持たなければなりません\n" -#: fe-connect.c:4766 fe-connect.c:4828 +#: fe-connect.c:4767 fe-connect.c:4829 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "不正なLDAP URL \"%s\": 検索スコープ(base/one/sub)を持たなければなりません\n" -#: fe-connect.c:4778 +#: fe-connect.c:4779 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "不正なLDAP URL \"%s\": フィルタがありません\n" -#: fe-connect.c:4800 +#: fe-connect.c:4801 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "不正なLDAP URL \"%s\": ポート番号が不正です\n" -#: fe-connect.c:4838 +#: fe-connect.c:4839 msgid "could not create LDAP structure\n" msgstr "LDAP構造体を作成できませんでした\n" -#: fe-connect.c:4914 +#: fe-connect.c:4915 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "LDAPサーバーで検索に失敗しました: %s\n" -#: fe-connect.c:4925 +#: fe-connect.c:4926 msgid "more than one entry found on LDAP lookup\n" msgstr "LDAP検索結果が複数ありました\n" -#: fe-connect.c:4926 fe-connect.c:4938 +#: fe-connect.c:4927 fe-connect.c:4939 msgid "no entry found on LDAP lookup\n" msgstr "LDAP検索結果が空でした\n" -#: fe-connect.c:4949 fe-connect.c:4962 +#: fe-connect.c:4950 fe-connect.c:4963 msgid "attribute has no values on LDAP lookup\n" msgstr "LDAP検索で属性に値がありませんでした\n" -#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 +#: fe-connect.c:4977 +#, c-format +msgid "connection info string size exceeds the maximum allowed (%d)\n" +msgstr "接続情報文字列の長さが上限値(%d)を超えています\n" + +#: fe-connect.c:5029 fe-connect.c:5048 fe-connect.c:5580 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "接続情報文字列において\"%s\"の後に\"=\"がありませんでした\n" -#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 +#: fe-connect.c:5121 fe-connect.c:5765 fe-connect.c:6541 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "接続オプション\"%s\"は不正です\n" -#: fe-connect.c:5122 fe-connect.c:5614 +#: fe-connect.c:5137 fe-connect.c:5629 msgid "unterminated quoted string in connection info string\n" msgstr "接続情報文字列において閉じていない引用符がありました\n" -#: fe-connect.c:5203 +#: fe-connect.c:5218 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "サービス定義\"%s\"がみつかりません\n" -#: fe-connect.c:5229 +#: fe-connect.c:5244 #, c-format msgid "service file \"%s\" not found\n" msgstr "サービスファイル\"%s\"がみつかりません\n" -#: fe-connect.c:5243 +#: fe-connect.c:5258 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "サービスファイル\"%2$s\"の行%1$dが長すぎます\n" -#: fe-connect.c:5314 fe-connect.c:5358 +#: fe-connect.c:5329 fe-connect.c:5373 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "サービスファイル\"%s\"の行%dに構文エラーがあります\n" -#: fe-connect.c:5325 +#: fe-connect.c:5340 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "サービスファイル\"%s\"ではネストしたサービス指定はサポートされていません、行%d\n" -#: fe-connect.c:6046 +#: fe-connect.c:6061 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "内部パーサ処理へ伝わった不正なURI: \"%s\"\n" -#: fe-connect.c:6123 +#: fe-connect.c:6138 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "URI \"%s\"内のIPv6ホストアドレスにおいて対応する\"]\"を探している間に文字列が終わりました\n" -#: fe-connect.c:6130 +#: fe-connect.c:6145 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "URI内ではIPv6ホストアドレスは空であってはなりません: \"%s\"\n" -#: fe-connect.c:6145 +#: fe-connect.c:6160 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "URI内の位置%2$dに想定外の文字\"%1$c\"があります(\":\"または\"/\"を期待していました): \"%3$s\"\n" -#: fe-connect.c:6275 +#: fe-connect.c:6290 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "URI問い合わせパラメータ内に余分なキーと値を分ける\"=\"があります: \"%s\"\n" -#: fe-connect.c:6295 +#: fe-connect.c:6310 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "URI問い合わせパラメータ内にキーと値を分ける\\\"=\\\"がありません: \"%s\"\n" -#: fe-connect.c:6347 +#: fe-connect.c:6362 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "不正なURI問い合わせパラメータ:\"%s\"\n" -#: fe-connect.c:6421 +#: fe-connect.c:6436 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "不正なパーセント符号化トークン: \"%s\"\n" -#: fe-connect.c:6431 +#: fe-connect.c:6446 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "パーセント符号化された値では%%00値は許されません: \"%s\"\n" -#: fe-connect.c:6801 +#: fe-connect.c:6818 msgid "connection pointer is NULL\n" msgstr "接続ポインタはNULLです\n" -#: fe-connect.c:7089 +#: fe-connect.c:7106 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "警告: パスワードファイル\"%s\"がテキストファイルではありません\n" -#: fe-connect.c:7098 +#: fe-connect.c:7115 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "警告: パスワードファイル\"%s\"がグループメンバもしくは他のユーザから読める状態になっています。この権限はu=rw (0600)以下にすべきです\n" -#: fe-connect.c:7206 +#: fe-connect.c:7223 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "ファイル\"%s\"からパスワードを読み込みました\n" -#: fe-exec.c:449 fe-exec.c:3411 +#: fe-exec.c:449 fe-exec.c:3416 #, c-format msgid "row number %d is out of range 0..%d" msgstr "行番号%dは0..%dの範囲を超えています" -#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:256 -#: fe-protocol3.c:274 fe-protocol3.c:371 fe-protocol3.c:743 +#: fe-exec.c:510 fe-protocol3.c:208 fe-protocol3.c:233 fe-protocol3.c:257 +#: fe-protocol3.c:275 fe-protocol3.c:372 fe-protocol3.c:744 msgid "out of memory" msgstr "メモリ不足" -#: fe-exec.c:511 fe-protocol3.c:1939 +#: fe-exec.c:511 fe-protocol3.c:1953 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:792 +#: fe-exec.c:797 msgid "write to server failed\n" msgstr "サーバーへの書き込みに失敗\n" -#: fe-exec.c:864 +#: fe-exec.c:869 msgid "NOTICE" msgstr "NOTICE" -#: fe-exec.c:922 +#: fe-exec.c:927 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresultはINT_MAX個以上のタプルを扱えません" -#: fe-exec.c:934 +#: fe-exec.c:939 msgid "size_t overflow" msgstr "size_t オーバーフロー" -#: fe-exec.c:1351 fe-exec.c:1477 fe-exec.c:1526 +#: fe-exec.c:1356 fe-exec.c:1482 fe-exec.c:1531 msgid "command string is a null pointer\n" msgstr "コマンド文字列がヌルポインタです\n" -#: fe-exec.c:1483 fe-exec.c:1532 fe-exec.c:1628 +#: fe-exec.c:1488 fe-exec.c:1537 fe-exec.c:1633 #, c-format msgid "number of parameters must be between 0 and %d\n" msgstr "パラメータ数は0から%dまでの間でなければなりません\n" -#: fe-exec.c:1520 fe-exec.c:1622 +#: fe-exec.c:1525 fe-exec.c:1627 msgid "statement name is a null pointer\n" msgstr "文の名前がヌルポインタです\n" -#: fe-exec.c:1664 fe-exec.c:3256 +#: fe-exec.c:1669 fe-exec.c:3261 msgid "no connection to the server\n" msgstr "サーバーへの接続がありません\n" -#: fe-exec.c:1673 fe-exec.c:3265 +#: fe-exec.c:1678 fe-exec.c:3270 msgid "another command is already in progress\n" msgstr "他のコマンドを処理しています\n" -#: fe-exec.c:1704 +#: fe-exec.c:1709 msgid "cannot queue commands during COPY\n" msgstr "COPYの実行中はコマンドの先行積み込みはできません\n" -#: fe-exec.c:1822 +#: fe-exec.c:1827 msgid "length must be given for binary parameter\n" msgstr "バイナリパラメータには長さを指定しなければなりません\n" -#: fe-exec.c:2142 +#: fe-exec.c:2147 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "想定外のasyncStatus: %d\n" -#: fe-exec.c:2178 +#: fe-exec.c:2183 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEVT_RESULTCREATEイベント中にPGEventProc \"%s\"に失敗しました\n" -#: fe-exec.c:2326 +#: fe-exec.c:2331 msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "同期コマンド実行関数はパイプラインモードでは使用できません\n" -#: fe-exec.c:2348 +#: fe-exec.c:2353 msgid "COPY terminated by new PQexec" msgstr "新たなPQexec\"によりCOPYが終了しました" -#: fe-exec.c:2365 +#: fe-exec.c:2370 msgid "PQexec not allowed during COPY BOTH\n" msgstr "COPY BOTH 実行中の PQexec は許可されていません\n" -#: fe-exec.c:2593 fe-exec.c:2649 fe-exec.c:2718 fe-protocol3.c:1870 +#: fe-exec.c:2598 fe-exec.c:2654 fe-exec.c:2723 fe-protocol3.c:1884 msgid "no COPY in progress\n" msgstr "実行中のCOPYはありません\n" -#: fe-exec.c:2895 +#: fe-exec.c:2900 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfnはパイプラインモードでは実行できません\n" -#: fe-exec.c:2903 +#: fe-exec.c:2908 msgid "connection in wrong state\n" msgstr "接続状態が異常です\n" -#: fe-exec.c:2947 +#: fe-exec.c:2952 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "パイプラインモードに移行できません、接続はアイドル状態です\n" -#: fe-exec.c:2984 fe-exec.c:3008 +#: fe-exec.c:2989 fe-exec.c:3013 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "未受信の結果がある状態でパイプラインモードを終了することはできません\n" -#: fe-exec.c:2989 +#: fe-exec.c:2994 msgid "cannot exit pipeline mode while busy\n" msgstr "ビジー状態でパイプラインモードを終了することはできません\n" -#: fe-exec.c:3001 +#: fe-exec.c:3006 msgid "cannot exit pipeline mode while in COPY\n" msgstr "COPY実行中にパイプラインモードを抜けることはできません\n" -#: fe-exec.c:3189 +#: fe-exec.c:3194 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "パイプラインモード中ではないためパイプラインの送出はできません\n" -#: fe-exec.c:3300 +#: fe-exec.c:3305 msgid "invalid ExecStatusType code" msgstr "ExecStatusTypeコードが不正です" -#: fe-exec.c:3327 +#: fe-exec.c:3332 msgid "PGresult is not an error result\n" msgstr "PGresutがエラー結果ではありません\n" -#: fe-exec.c:3395 fe-exec.c:3418 +#: fe-exec.c:3400 fe-exec.c:3423 #, c-format msgid "column number %d is out of range 0..%d" msgstr "列番号%dは0..%dの範囲を超えています" -#: fe-exec.c:3433 +#: fe-exec.c:3438 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "パラメータ%dは0..%dの範囲を超えています" -#: fe-exec.c:3743 +#: fe-exec.c:3748 #, c-format msgid "could not interpret result from server: %s" msgstr "サーバーからの結果を解釈できませんでした: %s" -#: fe-exec.c:4007 fe-exec.c:4096 +#: fe-exec.c:4026 fe-exec.c:4160 msgid "incomplete multibyte character\n" msgstr "不完全なマルチバイト文字\n" +#: fe-exec.c:4029 fe-exec.c:4180 +msgid "invalid multibyte character\n" +msgstr "不正なマルチバイト文字\n" + +#: fe-exec.c:4283 +#, c-format +msgid "escaped string size exceeds the maximum allowed (%zu)\n" +msgstr "エスケープされた文字列のサイズが上限(%zu)を超えています\n" + +#: fe-exec.c:4461 +#, c-format +msgid "escaped bytea size exceeds the maximum allowed (%zu)\n" +msgstr "エスケープされたbyteaのサイズが上限(%zu)を超えています\n" + #: fe-gssapi-common.c:124 msgid "GSSAPI name import error" msgstr "GSSAPI名のインポートエラー" @@ -822,11 +841,11 @@ msgstr "サイズ%luの整数はpqGetIntでサポートされていません" msgid "integer of size %lu not supported by pqPutInt" msgstr "サイズ%luの整数はpqPutIntでサポートされていません" -#: fe-misc.c:576 fe-misc.c:822 +#: fe-misc.c:602 fe-misc.c:848 msgid "connection not open\n" msgstr "接続はオープンされていません\n" -#: fe-misc.c:755 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-misc.c:781 fe-secure-openssl.c:204 fe-secure-openssl.c:317 #: fe-secure.c:262 fe-secure.c:380 msgid "" "server closed the connection unexpectedly\n" @@ -837,142 +856,142 @@ msgstr "" " おそらく要求の処理前または処理中にサーバが異常終了\n" " したことを意味しています。\n" -#: fe-misc.c:1015 +#: fe-misc.c:1041 msgid "timeout expired\n" msgstr "タイムアウト期間が過ぎました\n" -#: fe-misc.c:1060 +#: fe-misc.c:1086 msgid "invalid socket\n" msgstr "不正なソケットです\n" -#: fe-misc.c:1083 +#: fe-misc.c:1109 #, c-format msgid "%s() failed: %s\n" msgstr "%s()が失敗しました: %s\n" -#: fe-protocol3.c:184 +#: fe-protocol3.c:185 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "待機中にサーバーからメッセージ種類0x%02xが届きました" -#: fe-protocol3.c:403 +#: fe-protocol3.c:404 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "サーバーが事前の行記述(\"T\"メッセージ)なしにデータ(\"D\"メッセージ)を送信しました\"\n" -#: fe-protocol3.c:446 +#: fe-protocol3.c:447 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "サーバーから想定外の応答がありました。受け付けた先頭文字は\"%c\"です\n" -#: fe-protocol3.c:471 +#: fe-protocol3.c:472 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "メッセージの内容がメッセージ種類\"%c\"の長さに合いません\n" -#: fe-protocol3.c:491 +#: fe-protocol3.c:492 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "サーバーとの同期が失われました。受信したメッセージ種類は\"%c\"、長さは%d\n" -#: fe-protocol3.c:543 fe-protocol3.c:583 +#: fe-protocol3.c:544 fe-protocol3.c:584 msgid "insufficient data in \"T\" message" msgstr "\"T\"メッセージ内のデータが不十分です" -#: fe-protocol3.c:654 fe-protocol3.c:860 +#: fe-protocol3.c:655 fe-protocol3.c:861 msgid "out of memory for query result" msgstr "問い合わせ結果用のメモリが不足しています" -#: fe-protocol3.c:723 +#: fe-protocol3.c:724 msgid "insufficient data in \"t\" message" msgstr "\"t\"メッセージ内のデータが不十分です" -#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 +#: fe-protocol3.c:783 fe-protocol3.c:815 fe-protocol3.c:833 msgid "insufficient data in \"D\" message" msgstr "\"D\"\"メッセージ内のデータが不十分です" -#: fe-protocol3.c:788 +#: fe-protocol3.c:789 msgid "unexpected field count in \"D\" message" msgstr "\"D\"メッセージ内のフィールド数が想定外です。" -#: fe-protocol3.c:1036 +#: fe-protocol3.c:1037 msgid "no error message available\n" msgstr "エラーメッセージがありません\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1084 fe-protocol3.c:1103 +#: fe-protocol3.c:1085 fe-protocol3.c:1104 #, c-format msgid " at character %s" msgstr "(文字位置: %s)" -#: fe-protocol3.c:1116 +#: fe-protocol3.c:1117 #, c-format msgid "DETAIL: %s\n" msgstr "DETAIL: %s\n" -#: fe-protocol3.c:1119 +#: fe-protocol3.c:1120 #, c-format msgid "HINT: %s\n" msgstr "HINT: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1123 #, c-format msgid "QUERY: %s\n" msgstr "QUERY: %s\n" -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1130 #, c-format msgid "CONTEXT: %s\n" msgstr "CONTEXT: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1139 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMA NAME: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1143 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABLE NAME: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1147 #, c-format msgid "COLUMN NAME: %s\n" msgstr "COLUMN NAME: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1151 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATATYPE NAME: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1155 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "CONSTRAINT NAME: %s\n" -#: fe-protocol3.c:1166 +#: fe-protocol3.c:1167 msgid "LOCATION: " msgstr "LOCATION: " -#: fe-protocol3.c:1168 +#: fe-protocol3.c:1169 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1171 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1365 +#: fe-protocol3.c:1379 #, c-format msgid "LINE %d: " msgstr "行 %d: " -#: fe-protocol3.c:1764 +#: fe-protocol3.c:1778 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: テキストのCOPY OUTを行っていません\n" -#: fe-protocol3.c:2130 +#: fe-protocol3.c:2144 #, c-format msgid "protocol error: id=0x%x\n" msgstr "プロトコルエラー: id=0x%x\n" @@ -994,44 +1013,40 @@ msgstr "\"%s\"のサーバー証明書がホスト名\"%s\"とマッチしませ msgid "could not get server's host name from server certificate\n" msgstr "サーバー証明書からサーバのホスト名を取り出すことができませんでした。\n" -#: fe-secure-gssapi.c:194 +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "GSSAPIラップエラー" -#: fe-secure-gssapi.c:202 +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "送出されるGSSAPIメッセージは機密性を使用しません\n" -#: fe-secure-gssapi.c:210 +#: fe-secure-gssapi.c:217 fe-secure-gssapi.c:715 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "クライアントは過大なGSSAPIパケットを送信しようとしました: (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:594 +#: fe-secure-gssapi.c:357 fe-secure-gssapi.c:607 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "過大なGSSAPIパケットがサーバーから送出されました: (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "GSSAPIアンラップエラー" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:406 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "受信したGSSAPIメッセージは機密性を使用していませんでした\n" -#: fe-secure-gssapi.c:640 +#: fe-secure-gssapi.c:653 msgid "could not initiate GSSAPI security context" msgstr "GSSAPIセキュリティコンテキストを開始できませんでした" -#: fe-secure-gssapi.c:668 +#: fe-secure-gssapi.c:703 msgid "GSSAPI size check error" msgstr "GSSAPIサイズチェックエラー" -#: fe-secure-gssapi.c:679 -msgid "GSSAPI context establishment error" -msgstr "GSSAPIコンテクスト確立エラー" - #: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, c-format msgid "SSL SYSCALL error: %s\n" @@ -1224,6 +1239,15 @@ msgstr "サーバーにデータを送信できませんでした: %s\n" msgid "unrecognized socket error: 0x%08X/%d" msgstr "不明なソケットエラー 0x%08X/%d" +#~ msgid "GSSAPI context establishment error" +#~ msgstr "GSSAPIコンテクスト確立エラー" + +#~ msgid "incomplete multibyte character" +#~ msgstr "不完全なマルチバイト文字" + +#~ msgid "invalid multibyte character" +#~ msgstr "不正なマルチバイト文字" + #~ msgid "keepalives parameter must be an integer\n" #~ msgstr "keepaliveのパラメータは整数でなければなりません\n" diff --git a/src/interfaces/libpq/po/ru.po b/src/interfaces/libpq/po/ru.po index a3534511b7b..2bf5157048e 100644 --- a/src/interfaces/libpq/po/ru.po +++ b/src/interfaces/libpq/po/ru.po @@ -4,14 +4,14 @@ # Serguei A. Mokhov , 2001-2004. # Oleg Bartunov , 2005. # Andrey Sudnik , 2010. -# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 Alexander Lakhin # Maxim Yablokov , 2021. msgid "" msgstr "" "Project-Id-Version: libpq (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-11-14 04:46+0300\n" -"PO-Revision-Date: 2024-11-14 05:02+0300\n" +"POT-Creation-Date: 2026-02-07 08:59+0200\n" +"PO-Revision-Date: 2026-02-07 10:48+0200\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -61,16 +61,16 @@ msgstr "не удалось сгенерировать разовый код\n" #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 -#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 -#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 -#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 -#: fe-exec.c:4114 fe-exec.c:4279 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 -#: fe-protocol3.c:1731 fe-secure-common.c:110 fe-secure-gssapi.c:500 -#: fe-secure-openssl.c:446 fe-secure-openssl.c:1124 +#: fe-connect.c:914 fe-connect.c:1463 fe-connect.c:1632 fe-connect.c:2983 +#: fe-connect.c:4715 fe-connect.c:4990 fe-connect.c:5109 fe-connect.c:5361 +#: fe-connect.c:5442 fe-connect.c:5541 fe-connect.c:5797 fe-connect.c:5826 +#: fe-connect.c:5898 fe-connect.c:5922 fe-connect.c:5940 fe-connect.c:6041 +#: fe-connect.c:6050 fe-connect.c:6408 fe-connect.c:6558 fe-connect.c:6826 +#: fe-exec.c:691 fe-exec.c:881 fe-exec.c:1228 fe-exec.c:3150 fe-exec.c:3342 +#: fe-exec.c:4211 fe-exec.c:4405 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:976 fe-protocol3.c:991 fe-protocol3.c:1024 +#: fe-protocol3.c:1745 fe-secure-common.c:110 fe-secure-gssapi.c:512 +#: fe-secure-gssapi.c:687 fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "нехватка памяти\n" @@ -245,12 +245,12 @@ msgstr "метод аутентификации %u не поддерживает msgid "user name lookup failure: error code %lu\n" msgstr "распознать имя пользователя не удалось (код ошибки: %lu)\n" -#: fe-auth.c:1117 fe-connect.c:2857 +#: fe-auth.c:1117 fe-connect.c:2858 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "найти локального пользователя по идентификатору (%d) не удалось: %s\n" -#: fe-auth.c:1122 fe-connect.c:2862 +#: fe-auth.c:1122 fe-connect.c:2863 #, c-format msgid "local user with ID %d does not exist\n" msgstr "локальный пользователь с ID %d не существует\n" @@ -268,167 +268,167 @@ msgstr "слишком длинное значение password_encryption\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "нераспознанный алгоритм шифрования пароля \"%s\"\n" -#: fe-connect.c:1096 +#: fe-connect.c:1097 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "не удалось сопоставить имена узлов (%d) со значениями hostaddr (%d)\n" -#: fe-connect.c:1182 +#: fe-connect.c:1183 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "не удалось сопоставить номера портов (%d) с узлами (%d)\n" -#: fe-connect.c:1275 fe-connect.c:1301 fe-connect.c:1343 fe-connect.c:1352 -#: fe-connect.c:1385 fe-connect.c:1429 +#: fe-connect.c:1276 fe-connect.c:1302 fe-connect.c:1344 fe-connect.c:1353 +#: fe-connect.c:1386 fe-connect.c:1430 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "неверное значение %s: \"%s\"\n" -#: fe-connect.c:1322 +#: fe-connect.c:1323 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "значение sslmode \"%s\" недопустимо для сборки без поддержки SSL\n" -#: fe-connect.c:1370 +#: fe-connect.c:1371 msgid "invalid SSL protocol version range\n" msgstr "неверный диапазон версий протокола SSL\n" -#: fe-connect.c:1395 +#: fe-connect.c:1396 #, c-format msgid "" "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "" "значение gssencmode \"%s\" недопустимо для сборки без поддержки GSSAPI\n" -#: fe-connect.c:1655 +#: fe-connect.c:1656 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "не удалось перевести сокет в режим TCP-передачи без задержки: %s\n" -#: fe-connect.c:1717 +#: fe-connect.c:1718 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "подключиться к серверу через сокет \"%s\" не удалось: " -#: fe-connect.c:1744 +#: fe-connect.c:1745 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "подключиться к серверу \"%s\" (%s), порту %s не удалось: " -#: fe-connect.c:1749 +#: fe-connect.c:1750 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "подключиться к серверу \"%s\", порту %s не удалось: " -#: fe-connect.c:1774 +#: fe-connect.c:1775 msgid "" "\tIs the server running locally and accepting connections on that socket?\n" msgstr "" "\tСервер действительно работает локально и принимает подключения через этот " "сокет?\n" -#: fe-connect.c:1778 +#: fe-connect.c:1779 msgid "" "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "" "\tСервер действительно работает по данному адресу и принимает TCP-" "соединения?\n" -#: fe-connect.c:1842 +#: fe-connect.c:1843 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "" "неверное целочисленное значение \"%s\" для параметра соединения \"%s\"\n" -#: fe-connect.c:1872 fe-connect.c:1907 fe-connect.c:1943 fe-connect.c:2032 -#: fe-connect.c:2645 +#: fe-connect.c:1873 fe-connect.c:1908 fe-connect.c:1944 fe-connect.c:2033 +#: fe-connect.c:2646 #, c-format msgid "%s(%s) failed: %s\n" msgstr "ошибка в %s(%s): %s\n" -#: fe-connect.c:1997 +#: fe-connect.c:1998 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "ошибка в %s(%s): код ошибки %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "неверное состояние соединения - возможно разрушение памяти\n" -#: fe-connect.c:2391 +#: fe-connect.c:2392 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "неверный номер порта: \"%s\"\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "преобразовать имя \"%s\" в адрес не удалось: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "не удалось разобрать сетевой адрес \"%s\": %s\n" -#: fe-connect.c:2433 +#: fe-connect.c:2434 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "длина пути Unix-сокета \"%s\" превышает предел (%d байт)\n" -#: fe-connect.c:2448 +#: fe-connect.c:2449 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "преобразовать путь Unix-сокета \"%s\" в адрес не удалось: %s\n" -#: fe-connect.c:2574 +#: fe-connect.c:2575 #, c-format msgid "could not create socket: %s\n" msgstr "не удалось создать сокет: %s\n" -#: fe-connect.c:2605 +#: fe-connect.c:2606 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "не удалось перевести сокет в неблокирующий режим: %s\n" -#: fe-connect.c:2615 +#: fe-connect.c:2616 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "" "не удалось перевести сокет в режим закрытия при выполнении (close-on-exec): " "%s\n" -#: fe-connect.c:2773 +#: fe-connect.c:2774 #, c-format msgid "could not get socket error status: %s\n" msgstr "не удалось получить статус ошибки сокета: %s\n" -#: fe-connect.c:2801 +#: fe-connect.c:2802 #, c-format msgid "could not get client address from socket: %s\n" msgstr "не удалось получить адрес клиента из сокета: %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2844 msgid "requirepeer parameter is not supported on this platform\n" msgstr "параметр requirepeer не поддерживается в этой ОС\n" -#: fe-connect.c:2846 +#: fe-connect.c:2847 #, c-format msgid "could not get peer credentials: %s\n" msgstr "не удалось получить учётные данные сервера: %s\n" -#: fe-connect.c:2870 +#: fe-connect.c:2871 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "" "requirepeer допускает подключение только к \"%s\", но сервер работает под " "именем \"%s\"\n" -#: fe-connect.c:2910 +#: fe-connect.c:2911 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "не удалось отправить пакет согласования GSSAPI: %s\n" -#: fe-connect.c:2922 +#: fe-connect.c:2923 msgid "" "GSSAPI encryption required but was impossible (possibly no credential cache, " "no server support, or using a local socket)\n" @@ -437,174 +437,181 @@ msgstr "" "отсутствует кеш учётных данных, нет поддержки на сервере или используется " "локальный сокет)\n" -#: fe-connect.c:2964 +#: fe-connect.c:2965 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "не удалось отправить пакет согласования SSL: %s\n" -#: fe-connect.c:2995 +#: fe-connect.c:2996 #, c-format msgid "could not send startup packet: %s\n" msgstr "не удалось отправить стартовый пакет: %s\n" -#: fe-connect.c:3071 +#: fe-connect.c:3072 msgid "server does not support SSL, but SSL was required\n" msgstr "затребовано подключение через SSL, но сервер не поддерживает SSL\n" -#: fe-connect.c:3089 +#: fe-connect.c:3090 msgid "server sent an error response during SSL exchange\n" msgstr "сервер передал ошибочный ответ во время обмена сообщениями SSL\n" -#: fe-connect.c:3095 +#: fe-connect.c:3096 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "получен неверный ответ при согласовании SSL: %c\n" -#: fe-connect.c:3116 +#: fe-connect.c:3117 msgid "received unencrypted data after SSL response\n" msgstr "после ответа SSL получены незашифрованные данные\n" -#: fe-connect.c:3197 +#: fe-connect.c:3198 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "затребовано шифрование GSSAPI, но сервер его не поддерживает\n" -#: fe-connect.c:3209 +#: fe-connect.c:3210 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "получен неверный ответ при согласовании GSSAPI: %c\n" -#: fe-connect.c:3228 +#: fe-connect.c:3229 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "" "после ответа на запрос шифрования GSSAPI получены незашифрованные данные\n" -#: fe-connect.c:3293 fe-connect.c:3318 +#: fe-connect.c:3294 fe-connect.c:3319 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "ожидался запрос аутентификации от сервера, но получено: %c\n" -#: fe-connect.c:3525 +#: fe-connect.c:3526 msgid "unexpected message from server during startup\n" msgstr "неожиданное сообщение от сервера в начале работы\n" -#: fe-connect.c:3617 +#: fe-connect.c:3618 msgid "session is read-only\n" msgstr "сеанс не допускает запись\n" -#: fe-connect.c:3620 +#: fe-connect.c:3621 msgid "session is not read-only\n" msgstr "сеанс допускает запись\n" -#: fe-connect.c:3674 +#: fe-connect.c:3675 msgid "server is in hot standby mode\n" msgstr "сервер работает в режиме горячего резерва\n" -#: fe-connect.c:3677 +#: fe-connect.c:3678 msgid "server is not in hot standby mode\n" msgstr "сервер работает не в режиме горячего резерва\n" -#: fe-connect.c:3795 fe-connect.c:3847 +#: fe-connect.c:3796 fe-connect.c:3848 #, c-format msgid "\"%s\" failed\n" msgstr "выполнить \"%s\" не удалось\n" -#: fe-connect.c:3861 +#: fe-connect.c:3862 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "неверное состояние соединения %d - возможно разрушение памяти\n" -#: fe-connect.c:4307 fe-connect.c:4367 +#: fe-connect.c:4308 fe-connect.c:4368 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_CONNRESET\n" -#: fe-connect.c:4727 +#: fe-connect.c:4728 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "некорректный адрес LDAP \"%s\": схема должна быть ldap://\n" -#: fe-connect.c:4742 +#: fe-connect.c:4743 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "некорректный адрес LDAP \"%s\": отсутствует уникальное имя\n" -#: fe-connect.c:4754 fe-connect.c:4812 +#: fe-connect.c:4755 fe-connect.c:4813 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "некорректный адрес LDAP \"%s\": должен быть только один атрибут\n" -#: fe-connect.c:4766 fe-connect.c:4828 +#: fe-connect.c:4767 fe-connect.c:4829 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "" "некорректный адрес LDAP \"%s\": не указана область поиска (base/one/sub)\n" -#: fe-connect.c:4778 +#: fe-connect.c:4779 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "некорректный адрес LDAP \"%s\": нет фильтра\n" -#: fe-connect.c:4800 +#: fe-connect.c:4801 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "некорректный адрес LDAP \"%s\": неверный номер порта\n" -#: fe-connect.c:4838 +#: fe-connect.c:4839 msgid "could not create LDAP structure\n" msgstr "не удалось создать структуру LDAP\n" -#: fe-connect.c:4914 +#: fe-connect.c:4915 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "ошибка поиска на сервере LDAP: %s\n" -#: fe-connect.c:4925 +#: fe-connect.c:4926 msgid "more than one entry found on LDAP lookup\n" msgstr "при поиске LDAP найдено более одного вхождения\n" -#: fe-connect.c:4926 fe-connect.c:4938 +#: fe-connect.c:4927 fe-connect.c:4939 msgid "no entry found on LDAP lookup\n" msgstr "при поиске LDAP ничего не найдено\n" -#: fe-connect.c:4949 fe-connect.c:4962 +#: fe-connect.c:4950 fe-connect.c:4963 msgid "attribute has no values on LDAP lookup\n" msgstr "атрибут не содержит значений при поиске LDAP\n" -#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 +#: fe-connect.c:4977 +#, c-format +msgid "connection info string size exceeds the maximum allowed (%d)\n" +msgstr "" +"размер строки с информацией о подключении превышает максимально допустимый " +"(%d)\n" + +#: fe-connect.c:5029 fe-connect.c:5048 fe-connect.c:5580 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "в строке соединения нет \"=\" после \"%s\"\n" -#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 +#: fe-connect.c:5121 fe-connect.c:5765 fe-connect.c:6541 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "неверный параметр соединения \"%s\"\n" -#: fe-connect.c:5122 fe-connect.c:5614 +#: fe-connect.c:5137 fe-connect.c:5629 msgid "unterminated quoted string in connection info string\n" msgstr "в строке соединения не хватает закрывающей кавычки\n" -#: fe-connect.c:5203 +#: fe-connect.c:5218 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "определение службы \"%s\" не найдено\n" -#: fe-connect.c:5229 +#: fe-connect.c:5244 #, c-format msgid "service file \"%s\" not found\n" msgstr "файл определений служб \"%s\" не найден\n" -#: fe-connect.c:5243 +#: fe-connect.c:5258 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "слишком длинная строка (%d) в файле определений служб \"%s\"\n" -#: fe-connect.c:5314 fe-connect.c:5358 +#: fe-connect.c:5329 fe-connect.c:5373 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "синтаксическая ошибка в файле определения служб \"%s\" (строка %d)\n" -#: fe-connect.c:5325 +#: fe-connect.c:5340 #, c-format msgid "" "nested service specifications not supported in service file \"%s\", line %d\n" @@ -612,24 +619,24 @@ msgstr "" "рекурсивные определения служб не поддерживаются (файл определения служб " "\"%s\", строка %d)\n" -#: fe-connect.c:6046 +#: fe-connect.c:6061 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "во внутреннюю процедуру разбора строки передан ошибочный URI: \"%s\"\n" -#: fe-connect.c:6123 +#: fe-connect.c:6138 #, c-format msgid "" "end of string reached when looking for matching \"]\" in IPv6 host address " "in URI: \"%s\"\n" msgstr "URI не содержит символ \"]\" после адреса IPv6: \"%s\"\n" -#: fe-connect.c:6130 +#: fe-connect.c:6145 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6, содержащийся в URI, не может быть пустым: \"%s\"\n" -#: fe-connect.c:6145 +#: fe-connect.c:6160 #, c-format msgid "" "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): " @@ -638,41 +645,41 @@ msgstr "" "неожиданный символ \"%c\" в позиции %d в URI (ожидалось \":\" или \"/\"): " "\"%s\"\n" -#: fe-connect.c:6275 +#: fe-connect.c:6290 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "лишний разделитель ключа/значения \"=\" в параметрах URI: \"%s\"\n" -#: fe-connect.c:6295 +#: fe-connect.c:6310 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "в параметрах URI не хватает разделителя ключа/значения \"=\": \"%s\"\n" -#: fe-connect.c:6347 +#: fe-connect.c:6362 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "неверный параметр в URI: \"%s\"\n" -#: fe-connect.c:6421 +#: fe-connect.c:6436 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "неверный символ, закодированный с %%: \"%s\"\n" -#: fe-connect.c:6431 +#: fe-connect.c:6446 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "недопустимое значение %%00 для символа, закодированного с %%: \"%s\"\n" -#: fe-connect.c:6801 +#: fe-connect.c:6818 msgid "connection pointer is NULL\n" msgstr "нулевой указатель соединения\n" -#: fe-connect.c:7089 +#: fe-connect.c:7106 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ПРЕДУПРЕЖДЕНИЕ: файл паролей \"%s\" - не обычный файл\n" -#: fe-connect.c:7098 +#: fe-connect.c:7115 #, c-format msgid "" "WARNING: password file \"%s\" has group or world access; permissions should " @@ -681,154 +688,171 @@ msgstr "" "ПРЕДУПРЕЖДЕНИЕ: к файлу паролей \"%s\" имеют доступ все или группа; права " "должны быть u=rw (0600) или более ограниченные\n" -#: fe-connect.c:7206 +#: fe-connect.c:7223 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "пароль получен из файла \"%s\"\n" -#: fe-exec.c:449 fe-exec.c:3411 +#: fe-exec.c:449 fe-exec.c:3416 #, c-format msgid "row number %d is out of range 0..%d" msgstr "номер записи %d вне диапазона 0..%d" -#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:256 -#: fe-protocol3.c:274 fe-protocol3.c:371 fe-protocol3.c:743 +#: fe-exec.c:510 fe-protocol3.c:208 fe-protocol3.c:233 fe-protocol3.c:257 +#: fe-protocol3.c:275 fe-protocol3.c:372 fe-protocol3.c:744 msgid "out of memory" msgstr "нехватка памяти" -#: fe-exec.c:511 fe-protocol3.c:1939 +#: fe-exec.c:511 fe-protocol3.c:1953 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:792 +#: fe-exec.c:797 msgid "write to server failed\n" msgstr "ошибка при передаче данных серверу\n" -#: fe-exec.c:864 +#: fe-exec.c:869 msgid "NOTICE" msgstr "ЗАМЕЧАНИЕ" -#: fe-exec.c:922 +#: fe-exec.c:927 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult не может вместить больше чем INT_MAX кортежей" -#: fe-exec.c:934 +#: fe-exec.c:939 msgid "size_t overflow" msgstr "переполнение size_t" -#: fe-exec.c:1351 fe-exec.c:1477 fe-exec.c:1526 +#: fe-exec.c:1356 fe-exec.c:1482 fe-exec.c:1531 msgid "command string is a null pointer\n" msgstr "указатель на командную строку нулевой\n" -#: fe-exec.c:1483 fe-exec.c:1532 fe-exec.c:1628 +#: fe-exec.c:1488 fe-exec.c:1537 fe-exec.c:1633 #, c-format msgid "number of parameters must be between 0 and %d\n" msgstr "число параметров должно быть от 0 до %d\n" -#: fe-exec.c:1520 fe-exec.c:1622 +#: fe-exec.c:1525 fe-exec.c:1627 msgid "statement name is a null pointer\n" msgstr "указатель на имя оператора нулевой\n" -#: fe-exec.c:1664 fe-exec.c:3256 +#: fe-exec.c:1669 fe-exec.c:3261 msgid "no connection to the server\n" msgstr "нет соединения с сервером\n" -#: fe-exec.c:1673 fe-exec.c:3265 +#: fe-exec.c:1678 fe-exec.c:3270 msgid "another command is already in progress\n" msgstr "уже выполняется другая команда\n" -#: fe-exec.c:1704 +#: fe-exec.c:1709 msgid "cannot queue commands during COPY\n" msgstr "во время COPY нельзя добавлять команды в очередь\n" -#: fe-exec.c:1822 +#: fe-exec.c:1827 msgid "length must be given for binary parameter\n" msgstr "для двоичного параметра должна быть указана длина\n" -#: fe-exec.c:2142 +#: fe-exec.c:2147 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "неожиданный asyncStatus: %d\n" -#: fe-exec.c:2178 +#: fe-exec.c:2183 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "ошибка в PGEventProc \"%s\" при обработке события PGEVT_RESULTCREATE\n" -#: fe-exec.c:2326 +#: fe-exec.c:2331 msgid "" "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "" "функции синхронного выполнения команд не допускаются в конвейерном режиме\n" -#: fe-exec.c:2348 +#: fe-exec.c:2353 msgid "COPY terminated by new PQexec" msgstr "операция COPY прервана вызовом PQexec" -#: fe-exec.c:2365 +#: fe-exec.c:2370 msgid "PQexec not allowed during COPY BOTH\n" msgstr "вызов PQexec не допускается в процессе COPY BOTH\n" -#: fe-exec.c:2593 fe-exec.c:2649 fe-exec.c:2718 fe-protocol3.c:1870 +#: fe-exec.c:2598 fe-exec.c:2654 fe-exec.c:2723 fe-protocol3.c:1884 msgid "no COPY in progress\n" msgstr "операция COPY не выполняется\n" -#: fe-exec.c:2895 +#: fe-exec.c:2900 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfn не допускается в конвейерном режиме\n" -#: fe-exec.c:2903 +#: fe-exec.c:2908 msgid "connection in wrong state\n" msgstr "соединение в неправильном состоянии\n" -#: fe-exec.c:2947 +#: fe-exec.c:2952 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "перейти в конвейерный режиме нельзя, соединение не простаивает\n" -#: fe-exec.c:2984 fe-exec.c:3008 +#: fe-exec.c:2989 fe-exec.c:3013 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "выйти из конвейерного режима нельзя, не собрав все результаты\n" -#: fe-exec.c:2989 +#: fe-exec.c:2994 msgid "cannot exit pipeline mode while busy\n" msgstr "выйти из конвейерного режима в занятом состоянии нельзя\n" -#: fe-exec.c:3001 +#: fe-exec.c:3006 msgid "cannot exit pipeline mode while in COPY\n" msgstr "выйти из конвейерного режима во время COPY нельзя\n" -#: fe-exec.c:3189 +#: fe-exec.c:3194 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "отправить конвейер, не перейдя в конвейерный режим, нельзя\n" -#: fe-exec.c:3300 +#: fe-exec.c:3305 msgid "invalid ExecStatusType code" msgstr "неверный код ExecStatusType" -#: fe-exec.c:3327 +#: fe-exec.c:3332 msgid "PGresult is not an error result\n" msgstr "В PGresult не передан результат ошибки\n" -#: fe-exec.c:3395 fe-exec.c:3418 +#: fe-exec.c:3400 fe-exec.c:3423 #, c-format msgid "column number %d is out of range 0..%d" msgstr "номер столбца %d вне диапазона 0..%d" -#: fe-exec.c:3433 +#: fe-exec.c:3438 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "номер параметра %d вне диапазона 0..%d" -#: fe-exec.c:3743 +#: fe-exec.c:3748 #, c-format msgid "could not interpret result from server: %s" msgstr "не удалось интерпретировать ответ сервера: %s" -#: fe-exec.c:4007 fe-exec.c:4096 +#: fe-exec.c:4026 fe-exec.c:4160 msgid "incomplete multibyte character\n" msgstr "неполный многобайтный символ\n" +#: fe-exec.c:4029 fe-exec.c:4180 +msgid "invalid multibyte character\n" +msgstr "неверный многобайтный символ\n" + +#: fe-exec.c:4283 +#, c-format +msgid "escaped string size exceeds the maximum allowed (%zu)\n" +msgstr "" +"размер строки с экранированием превышает максимально допустимый (%zu)\n" + +#: fe-exec.c:4461 +#, c-format +msgid "escaped bytea size exceeds the maximum allowed (%zu)\n" +msgstr "" +"размер значения bytea с экранированием превышает максимально допустимый " +"(%zu)\n" + #: fe-gssapi-common.c:124 msgid "GSSAPI name import error" msgstr "ошибка импорта имени в GSSAPI" @@ -881,11 +905,11 @@ msgstr "функция pqGetInt не поддерживает integer разме msgid "integer of size %lu not supported by pqPutInt" msgstr "функция pqPutInt не поддерживает integer размером %lu байт" -#: fe-misc.c:576 fe-misc.c:822 +#: fe-misc.c:602 fe-misc.c:848 msgid "connection not open\n" msgstr "соединение не открыто\n" -#: fe-misc.c:755 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-misc.c:781 fe-secure-openssl.c:204 fe-secure-openssl.c:317 #: fe-secure.c:262 fe-secure.c:380 msgid "" "server closed the connection unexpectedly\n" @@ -896,25 +920,25 @@ msgstr "" "\tСкорее всего сервер прекратил работу из-за сбоя\n" "\tдо или в процессе выполнения запроса.\n" -#: fe-misc.c:1015 +#: fe-misc.c:1041 msgid "timeout expired\n" msgstr "тайм-аут\n" -#: fe-misc.c:1060 +#: fe-misc.c:1086 msgid "invalid socket\n" msgstr "неверный сокет\n" -#: fe-misc.c:1083 +#: fe-misc.c:1109 #, c-format msgid "%s() failed: %s\n" msgstr "ошибка в %s(): %s\n" -#: fe-protocol3.c:184 +#: fe-protocol3.c:185 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "от сервера во время простоя получено сообщение типа 0x%02x" -#: fe-protocol3.c:403 +#: fe-protocol3.c:404 msgid "" "server sent data (\"D\" message) without prior row description (\"T\" " "message)\n" @@ -922,121 +946,121 @@ msgstr "" "сервер отправил данные (сообщение \"D\") без предварительного описания " "строки (сообщение \"T\")\n" -#: fe-protocol3.c:446 +#: fe-protocol3.c:447 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "неожиданный ответ сервера; первый полученный символ: \"%c\"\n" -#: fe-protocol3.c:471 +#: fe-protocol3.c:472 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "содержимое не соответствует длине в сообщении типа \"%c\"\n" -#: fe-protocol3.c:491 +#: fe-protocol3.c:492 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "" "потеряна синхронизация с сервером: получено сообщение типа \"%c\", длина %d\n" -#: fe-protocol3.c:543 fe-protocol3.c:583 +#: fe-protocol3.c:544 fe-protocol3.c:584 msgid "insufficient data in \"T\" message" msgstr "недостаточно данных в сообщении \"T\"" -#: fe-protocol3.c:654 fe-protocol3.c:860 +#: fe-protocol3.c:655 fe-protocol3.c:861 msgid "out of memory for query result" msgstr "недостаточно памяти для результата запроса" -#: fe-protocol3.c:723 +#: fe-protocol3.c:724 msgid "insufficient data in \"t\" message" msgstr "недостаточно данных в сообщении \"t\"" -#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 +#: fe-protocol3.c:783 fe-protocol3.c:815 fe-protocol3.c:833 msgid "insufficient data in \"D\" message" msgstr "недостаточно данных в сообщении \"D\"" -#: fe-protocol3.c:788 +#: fe-protocol3.c:789 msgid "unexpected field count in \"D\" message" msgstr "неверное число полей в сообщении \"D\"" -#: fe-protocol3.c:1036 +#: fe-protocol3.c:1037 msgid "no error message available\n" msgstr "нет сообщения об ошибке\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1084 fe-protocol3.c:1103 +#: fe-protocol3.c:1085 fe-protocol3.c:1104 #, c-format msgid " at character %s" msgstr " символ %s" -#: fe-protocol3.c:1116 +#: fe-protocol3.c:1117 #, c-format msgid "DETAIL: %s\n" msgstr "ПОДРОБНОСТИ: %s\n" -#: fe-protocol3.c:1119 +#: fe-protocol3.c:1120 #, c-format msgid "HINT: %s\n" msgstr "ПОДСКАЗКА: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1123 #, c-format msgid "QUERY: %s\n" msgstr "ЗАПРОС: %s\n" -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1130 #, c-format msgid "CONTEXT: %s\n" msgstr "КОНТЕКСТ: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1139 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "СХЕМА: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1143 #, c-format msgid "TABLE NAME: %s\n" msgstr "ТАБЛИЦА: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1147 #, c-format msgid "COLUMN NAME: %s\n" msgstr "СТОЛБЕЦ: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1151 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "ТИП ДАННЫХ: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1155 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "ОГРАНИЧЕНИЕ: %s\n" -#: fe-protocol3.c:1166 +#: fe-protocol3.c:1167 msgid "LOCATION: " msgstr "ПОЛОЖЕНИЕ: " -#: fe-protocol3.c:1168 +#: fe-protocol3.c:1169 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1171 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1365 +#: fe-protocol3.c:1379 #, c-format msgid "LINE %d: " msgstr "СТРОКА %d: " -#: fe-protocol3.c:1764 +#: fe-protocol3.c:1778 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline можно вызывать только во время COPY OUT с текстом\n" -#: fe-protocol3.c:2130 +#: fe-protocol3.c:2144 #, c-format msgid "protocol error: id=0x%x\n" msgstr "ошибка протокола: id=0x%x\n" @@ -1059,44 +1083,40 @@ msgstr "" msgid "could not get server's host name from server certificate\n" msgstr "не удалось получить имя сервера из серверного сертификата\n" -#: fe-secure-gssapi.c:194 +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "ошибка обёртывания сообщения в GSSAPI" -#: fe-secure-gssapi.c:202 +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "исходящее сообщение GSSAPI не будет защищено\n" -#: fe-secure-gssapi.c:210 +#: fe-secure-gssapi.c:217 fe-secure-gssapi.c:715 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "клиент попытался передать чрезмерно большой пакет GSSAPI (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:594 +#: fe-secure-gssapi.c:357 fe-secure-gssapi.c:607 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "сервер передал чрезмерно большой пакет GSSAPI (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "ошибка развёртывания сообщения в GSSAPI" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:406 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "входящее сообщение GSSAPI не защищено\n" -#: fe-secure-gssapi.c:640 +#: fe-secure-gssapi.c:653 msgid "could not initiate GSSAPI security context" msgstr "не удалось инициализировать контекст безопасности GSSAPI" -#: fe-secure-gssapi.c:668 +#: fe-secure-gssapi.c:703 msgid "GSSAPI size check error" msgstr "ошибка проверки размера в GSSAPI" -#: fe-secure-gssapi.c:679 -msgid "GSSAPI context establishment error" -msgstr "ошибка установления контекста в GSSAPI" - #: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, c-format msgid "SSL SYSCALL error: %s\n" @@ -1305,6 +1325,9 @@ msgstr "не удалось передать данные серверу: %s\n" msgid "unrecognized socket error: 0x%08X/%d" msgstr "нераспознанная ошибка сокета: 0x%08X/%d" +#~ msgid "GSSAPI context establishment error" +#~ msgstr "ошибка установления контекста в GSSAPI" + #~ msgid "keepalives parameter must be an integer\n" #~ msgstr "параметр keepalives должен быть целым числом\n" diff --git a/src/interfaces/libpq/po/sv.po b/src/interfaces/libpq/po/sv.po index c2f25cef84e..59482389eb1 100644 --- a/src/interfaces/libpq/po/sv.po +++ b/src/interfaces/libpq/po/sv.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PostgreSQL 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-12 07:59+0000\n" -"PO-Revision-Date: 2025-02-12 21:12+0100\n" +"POT-Creation-Date: 2026-02-03 00:17+0000\n" +"PO-Revision-Date: 2026-02-02 23:34+0100\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -56,16 +56,16 @@ msgstr "kunde inte skapa engångsnummer\n" #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:913 fe-connect.c:1462 fe-connect.c:1631 fe-connect.c:2982 -#: fe-connect.c:4714 fe-connect.c:4975 fe-connect.c:5094 fe-connect.c:5346 -#: fe-connect.c:5427 fe-connect.c:5526 fe-connect.c:5782 fe-connect.c:5811 -#: fe-connect.c:5883 fe-connect.c:5907 fe-connect.c:5925 fe-connect.c:6026 -#: fe-connect.c:6035 fe-connect.c:6393 fe-connect.c:6543 fe-connect.c:6809 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3145 fe-exec.c:3337 -#: fe-exec.c:4179 fe-exec.c:4346 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:975 fe-protocol3.c:990 fe-protocol3.c:1023 -#: fe-protocol3.c:1731 fe-secure-common.c:110 fe-secure-gssapi.c:500 -#: fe-secure-openssl.c:446 fe-secure-openssl.c:1124 +#: fe-connect.c:914 fe-connect.c:1463 fe-connect.c:1632 fe-connect.c:2983 +#: fe-connect.c:4715 fe-connect.c:4990 fe-connect.c:5109 fe-connect.c:5361 +#: fe-connect.c:5442 fe-connect.c:5541 fe-connect.c:5797 fe-connect.c:5826 +#: fe-connect.c:5898 fe-connect.c:5922 fe-connect.c:5940 fe-connect.c:6041 +#: fe-connect.c:6050 fe-connect.c:6408 fe-connect.c:6558 fe-connect.c:6826 +#: fe-exec.c:691 fe-exec.c:881 fe-exec.c:1228 fe-exec.c:3150 fe-exec.c:3342 +#: fe-exec.c:4211 fe-exec.c:4405 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:976 fe-protocol3.c:991 fe-protocol3.c:1024 +#: fe-protocol3.c:1745 fe-secure-common.c:110 fe-secure-gssapi.c:512 +#: fe-secure-gssapi.c:687 fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "slut på minne\n" @@ -219,12 +219,12 @@ msgstr "autentiseringsmetod %u stöds ej\n" msgid "user name lookup failure: error code %lu\n" msgstr "misslyckad sökning efter användarnamn: felkod %lu\n" -#: fe-auth.c:1117 fe-connect.c:2857 +#: fe-auth.c:1117 fe-connect.c:2858 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "kunde inte slå upp lokalt användar-id %d: %s\n" -#: fe-auth.c:1122 fe-connect.c:2862 +#: fe-auth.c:1122 fe-connect.c:2863 #, c-format msgid "local user with ID %d does not exist\n" msgstr "lokal användare med ID %d existerar inte\n" @@ -242,538 +242,553 @@ msgstr "password_encryption-värdet är för långt\n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "okänd lösenordskrypteringsalgoritm \"%s\"\n" -#: fe-connect.c:1096 +#: fe-connect.c:1097 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "kunde inte matcha %d värdnamn till %d värdadresser\n" -#: fe-connect.c:1182 +#: fe-connect.c:1183 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "kunde inte matcha %d portnummer med %d värdar\n" -#: fe-connect.c:1275 fe-connect.c:1301 fe-connect.c:1343 fe-connect.c:1352 -#: fe-connect.c:1385 fe-connect.c:1429 +#: fe-connect.c:1276 fe-connect.c:1302 fe-connect.c:1344 fe-connect.c:1353 +#: fe-connect.c:1386 fe-connect.c:1430 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "ogiltigt %s-värde: \"%s\"\n" -#: fe-connect.c:1322 +#: fe-connect.c:1323 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "värde för ssl-läge, \"%s\", är ogiltigt när SSL-stöd inte kompilerats in\n" -#: fe-connect.c:1370 +#: fe-connect.c:1371 msgid "invalid SSL protocol version range\n" msgstr "ogiltigt intervall för SSL-protokollversion\n" -#: fe-connect.c:1395 +#: fe-connect.c:1396 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "värde för gssenc-läge, \"%s\", är ogiltigt när GSSAPI-stöd inte kompilerats in\n" -#: fe-connect.c:1655 +#: fe-connect.c:1656 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "kunde inte sätta uttag (socket) till läget TCP-ingen-fördröjning: %s\n" -#: fe-connect.c:1717 +#: fe-connect.c:1718 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "anslutning till server på socket \"%s\" misslyckades: " -#: fe-connect.c:1744 +#: fe-connect.c:1745 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "anslutning til server på \"%s\" (%s), port %s misslyckades: " -#: fe-connect.c:1749 +#: fe-connect.c:1750 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "anslutning till server på \"%s\", port %s misslyckades: " -#: fe-connect.c:1774 +#: fe-connect.c:1775 msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "" "\tKör servern lokalt och accepterar den\n" "\tanslutningar till detta uttag (socket)?\n" -#: fe-connect.c:1778 +#: fe-connect.c:1779 msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "\tKör servern på den värden och accepterar den TCP/IP-anslutningar?\n" -#: fe-connect.c:1842 +#: fe-connect.c:1843 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "ogiltigt heltalsvärde \"%s\" för anslutningsflagga \"%s\"\n" -#: fe-connect.c:1872 fe-connect.c:1907 fe-connect.c:1943 fe-connect.c:2032 -#: fe-connect.c:2645 +#: fe-connect.c:1873 fe-connect.c:1908 fe-connect.c:1944 fe-connect.c:2033 +#: fe-connect.c:2646 #, c-format msgid "%s(%s) failed: %s\n" msgstr "%s(%s) misslyckades: %s\n" -#: fe-connect.c:1997 +#: fe-connect.c:1998 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "%s(%s) misslyckades: felkod %d\n" -#: fe-connect.c:2312 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "ogiltigt tillstånd i anslutning, antagligen korrupt minne\n" -#: fe-connect.c:2391 +#: fe-connect.c:2392 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "ogiltigt portnummer \"%s\"\n" -#: fe-connect.c:2407 +#: fe-connect.c:2408 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "kunde inte översätta värdnamn \"%s\" till adress: %s\n" -#: fe-connect.c:2420 +#: fe-connect.c:2421 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "kunde inte parsa nätverksadress \"%s\": %s\n" -#: fe-connect.c:2433 +#: fe-connect.c:2434 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Sökväg till unixdomänuttag \"%s\" är för lång (maximalt %d byte)\n" -#: fe-connect.c:2448 +#: fe-connect.c:2449 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "kunde inte översätta sökväg till unix-uttag (socket) \"%s\" till adress: %s\n" -#: fe-connect.c:2574 +#: fe-connect.c:2575 #, c-format msgid "could not create socket: %s\n" msgstr "kan inte skapa uttag: %s\n" -#: fe-connect.c:2605 +#: fe-connect.c:2606 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "kunde inte sätta uttag (socket) till ickeblockerande läge: %s\n" -#: fe-connect.c:2615 +#: fe-connect.c:2616 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "kunde inte ställa in uttag (socket) i \"close-on-exec\"-läge: %s\n" -#: fe-connect.c:2773 +#: fe-connect.c:2774 #, c-format msgid "could not get socket error status: %s\n" msgstr "kunde inte hämta felstatus för uttag (socket): %s\n" -#: fe-connect.c:2801 +#: fe-connect.c:2802 #, c-format msgid "could not get client address from socket: %s\n" msgstr "kunde inte få tag på klientadressen från uttag (socket): %s\n" -#: fe-connect.c:2843 +#: fe-connect.c:2844 msgid "requirepeer parameter is not supported on this platform\n" msgstr "requirepeer-parameter stöds inte på denna plattform\n" -#: fe-connect.c:2846 +#: fe-connect.c:2847 #, c-format msgid "could not get peer credentials: %s\n" msgstr "kunde inte hämta andra sidans referenser: %s\n" -#: fe-connect.c:2870 +#: fe-connect.c:2871 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer anger \"%s\", men andra sidans användarnamn är \"%s\"\n" -#: fe-connect.c:2910 +#: fe-connect.c:2911 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "kunde inte skicka GSSAPI-paket för uppkopplingsförhandling: %s\n" -#: fe-connect.c:2922 +#: fe-connect.c:2923 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "GSSAPI-kryptering krävdes men var omöjligt (kanske ingen credential-cache, inget serverstöd eller använder ett lokalt uttag)\n" -#: fe-connect.c:2964 +#: fe-connect.c:2965 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "kunde inte skicka SSL-paket för uppkopplingsförhandling: %s\n" -#: fe-connect.c:2995 +#: fe-connect.c:2996 #, c-format msgid "could not send startup packet: %s\n" msgstr "kan inte skicka startpaketet: %s\n" -#: fe-connect.c:3071 +#: fe-connect.c:3072 msgid "server does not support SSL, but SSL was required\n" msgstr "SSL stöds inte av servern, men SSL krävdes\n" -#: fe-connect.c:3089 +#: fe-connect.c:3090 msgid "server sent an error response during SSL exchange\n" msgstr "servern skickade ett felmeddelande vid SSL-utbyte\n" -#: fe-connect.c:3095 +#: fe-connect.c:3096 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "tog emot ogiltigt svar till SSL-uppkopplingsförhandling: %c\n" -#: fe-connect.c:3116 +#: fe-connect.c:3117 msgid "received unencrypted data after SSL response\n" msgstr "tog emot okrypterad data efter SSL-svar\n" -#: fe-connect.c:3197 +#: fe-connect.c:3198 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "GSSAPI stöds inte av servern, men det krävdes\n" -#: fe-connect.c:3209 +#: fe-connect.c:3210 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "tog emot ogiltigt svar till GSSAPI-uppkopplingsförhandling: %c\n" -#: fe-connect.c:3228 +#: fe-connect.c:3229 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "tog emot okrypterad data efter GSSAPI-krypteringssvar\n" -#: fe-connect.c:3293 fe-connect.c:3318 +#: fe-connect.c:3294 fe-connect.c:3319 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "förväntade autentiseringsförfrågan från servern, men fick %c\n" -#: fe-connect.c:3525 +#: fe-connect.c:3526 msgid "unexpected message from server during startup\n" msgstr "oväntat meddelande från servern under starten\n" -#: fe-connect.c:3617 +#: fe-connect.c:3618 msgid "session is read-only\n" msgstr "sessionen är i readonly-läge\n" -#: fe-connect.c:3620 +#: fe-connect.c:3621 msgid "session is not read-only\n" msgstr "sessionen är inte i readonly-läge\n" -#: fe-connect.c:3674 +#: fe-connect.c:3675 msgid "server is in hot standby mode\n" msgstr "servern är i varmt standby-läge\n" -#: fe-connect.c:3677 +#: fe-connect.c:3678 msgid "server is not in hot standby mode\n" msgstr "servern är inte i varmt standby-läge\n" -#: fe-connect.c:3795 fe-connect.c:3847 +#: fe-connect.c:3796 fe-connect.c:3848 #, c-format msgid "\"%s\" failed\n" msgstr "\"%s\" misslyckades\n" -#: fe-connect.c:3861 +#: fe-connect.c:3862 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "ogiltigt tillstånd %d i anslutning, antagligen korrupt minne\n" -#: fe-connect.c:4307 fe-connect.c:4367 +#: fe-connect.c:4308 fe-connect.c:4368 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "PGEventProc \"%s\" misslyckades under PGEVT_CONNRESET-händelse\n" -#: fe-connect.c:4727 +#: fe-connect.c:4728 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "ogiltig LDAP URL \"%s\": schemat måste vara ldap://\n" -#: fe-connect.c:4742 +#: fe-connect.c:4743 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "ogiltig LDAP URL \"%s\": saknar urskiljbart namn\n" -#: fe-connect.c:4754 fe-connect.c:4812 +#: fe-connect.c:4755 fe-connect.c:4813 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "ogiltig LDAP URL \"%s\": måste finnas exakt ett attribut\n" -#: fe-connect.c:4766 fe-connect.c:4828 +#: fe-connect.c:4767 fe-connect.c:4829 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "ogiltig LDAP URL \"%s\": måste ha sök-scope (base/one/sub)\n" -#: fe-connect.c:4778 +#: fe-connect.c:4779 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "ogiltigt LDAP URL \"%s\": inget filter\n" -#: fe-connect.c:4800 +#: fe-connect.c:4801 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "ogiltig LDAP URL \"%s\": ogiltigt portnummer\n" -#: fe-connect.c:4838 +#: fe-connect.c:4839 msgid "could not create LDAP structure\n" msgstr "kunde inte skapa LDAP-struktur\n" -#: fe-connect.c:4914 +#: fe-connect.c:4915 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "uppslagning av LDAP-server misslyckades: %s\n" -#: fe-connect.c:4925 +#: fe-connect.c:4926 msgid "more than one entry found on LDAP lookup\n" msgstr "mer än en post hittad i LDAP-uppslagning\n" -#: fe-connect.c:4926 fe-connect.c:4938 +#: fe-connect.c:4927 fe-connect.c:4939 msgid "no entry found on LDAP lookup\n" msgstr "ingen post hittad i LDAP-uppslagning\n" -#: fe-connect.c:4949 fe-connect.c:4962 +#: fe-connect.c:4950 fe-connect.c:4963 msgid "attribute has no values on LDAP lookup\n" msgstr "attributet har inga värden i LDAP-uppslagning\n" -#: fe-connect.c:5014 fe-connect.c:5033 fe-connect.c:5565 +#: fe-connect.c:4977 +#, c-format +msgid "connection info string size exceeds the maximum allowed (%d)\n" +msgstr "anslutningssträng överskrider det maximalt tillåtna (%d)\n" + +#: fe-connect.c:5029 fe-connect.c:5048 fe-connect.c:5580 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "\"=\" efter \"%s\" saknas i anslutningssträng\n" -#: fe-connect.c:5106 fe-connect.c:5750 fe-connect.c:6526 +#: fe-connect.c:5121 fe-connect.c:5765 fe-connect.c:6541 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "ogiltig anslutningsparameter \"%s\"\n" -#: fe-connect.c:5122 fe-connect.c:5614 +#: fe-connect.c:5137 fe-connect.c:5629 msgid "unterminated quoted string in connection info string\n" msgstr "icke terminerad sträng i uppkopplingsinformationen\n" -#: fe-connect.c:5203 +#: fe-connect.c:5218 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "definition av service \"%s\" hittades inte\n" -#: fe-connect.c:5229 +#: fe-connect.c:5244 #, c-format msgid "service file \"%s\" not found\n" msgstr "servicefil \"%s\" hittades inte\n" -#: fe-connect.c:5243 +#: fe-connect.c:5258 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "rad %d för lång i servicefil \"%s\"\n" -#: fe-connect.c:5314 fe-connect.c:5358 +#: fe-connect.c:5329 fe-connect.c:5373 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "syntaxfel i servicefel \"%s\", rad %d\n" -#: fe-connect.c:5325 +#: fe-connect.c:5340 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "nästlade servicespecifikationer stöds inte i servicefil \"%s\", rad %d\n" -#: fe-connect.c:6046 +#: fe-connect.c:6061 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "ogiltig URI propagerad till intern parsningsrutin: \"%s\"\n" -#: fe-connect.c:6123 +#: fe-connect.c:6138 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "nådde slutet på strängen när vi letade efter matchande \"]\" i IPv6-värdadress i URI: \"%s\"\n" -#: fe-connect.c:6130 +#: fe-connect.c:6145 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6-värdadress får ej vara tom i URI: \"%s\"\n" -#: fe-connect.c:6145 +#: fe-connect.c:6160 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "oväntat tecken \"%c\" vid position %d i URI (förväntade \":\" eller \"/\"): \"%s\"\n" -#: fe-connect.c:6275 +#: fe-connect.c:6290 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "extra nyckel/värde-separator \"=\" i URI-frågeparameter: \"%s\"\n" -#: fe-connect.c:6295 +#: fe-connect.c:6310 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "saknar nyckel/värde-separator \"=\" i URI-frågeparameter: \"%s\"\n" -#: fe-connect.c:6347 +#: fe-connect.c:6362 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "ogiltig URI-frågeparameter: \"%s\"\n" -#: fe-connect.c:6421 +#: fe-connect.c:6436 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "ogiltigt procent-kodad symbol: \"%s\"\n" -#: fe-connect.c:6431 +#: fe-connect.c:6446 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "förbjudet värde %%00 i procentkodat värde: \"%s\"\n" -#: fe-connect.c:6801 +#: fe-connect.c:6818 msgid "connection pointer is NULL\n" msgstr "anslutningspekare är NULL\n" -#: fe-connect.c:7089 +#: fe-connect.c:7106 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "FEL: lösenordsfil \"%s\" är inte en vanlig fil\n" -#: fe-connect.c:7098 +#: fe-connect.c:7115 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "VARNING: lösenordsfilen \"%s\" har läsrättigheter för gruppen eller världen; rättigheten skall vara u=rw (0600) eller mindre\n" -#: fe-connect.c:7206 +#: fe-connect.c:7223 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "lösenord hämtat från fil \"%s\"\n" -#: fe-exec.c:449 fe-exec.c:3411 +#: fe-exec.c:449 fe-exec.c:3416 #, c-format msgid "row number %d is out of range 0..%d" msgstr "radnummer %d är utanför giltigt intervall 0..%d" -#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:256 -#: fe-protocol3.c:274 fe-protocol3.c:371 fe-protocol3.c:743 +#: fe-exec.c:510 fe-protocol3.c:208 fe-protocol3.c:233 fe-protocol3.c:257 +#: fe-protocol3.c:275 fe-protocol3.c:372 fe-protocol3.c:744 msgid "out of memory" msgstr "slut på minne" -#: fe-exec.c:511 fe-protocol3.c:1939 +#: fe-exec.c:511 fe-protocol3.c:1953 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:792 +#: fe-exec.c:797 msgid "write to server failed\n" msgstr "skrivning till servern misslyckades\n" -#: fe-exec.c:864 +#: fe-exec.c:869 msgid "NOTICE" msgstr "NOTIS" -#: fe-exec.c:922 +#: fe-exec.c:927 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult stöder inte mer än INT_MAX tupler" -#: fe-exec.c:934 +#: fe-exec.c:939 msgid "size_t overflow" msgstr "size_t-överspill" -#: fe-exec.c:1351 fe-exec.c:1477 fe-exec.c:1526 +#: fe-exec.c:1356 fe-exec.c:1482 fe-exec.c:1531 msgid "command string is a null pointer\n" msgstr "kommandosträngen är en null-pekare\n" -#: fe-exec.c:1483 fe-exec.c:1532 fe-exec.c:1628 +#: fe-exec.c:1488 fe-exec.c:1537 fe-exec.c:1633 #, c-format msgid "number of parameters must be between 0 and %d\n" msgstr "antal parametrar måste vara mellan 0 och %d\n" -#: fe-exec.c:1520 fe-exec.c:1622 +#: fe-exec.c:1525 fe-exec.c:1627 msgid "statement name is a null pointer\n" msgstr "satsens namn är en null-pekare\n" -#: fe-exec.c:1664 fe-exec.c:3256 +#: fe-exec.c:1669 fe-exec.c:3261 msgid "no connection to the server\n" msgstr "inte förbunden till servern\n" -#: fe-exec.c:1673 fe-exec.c:3265 +#: fe-exec.c:1678 fe-exec.c:3270 msgid "another command is already in progress\n" msgstr "ett annat kommando pågår redan\n" -#: fe-exec.c:1704 +#: fe-exec.c:1709 msgid "cannot queue commands during COPY\n" msgstr "kan inte köa kommandon när COPY körs\n" -#: fe-exec.c:1822 +#: fe-exec.c:1827 msgid "length must be given for binary parameter\n" msgstr "längden måste anges för en binär parameter\n" -#: fe-exec.c:2142 +#: fe-exec.c:2147 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "oväntad asyncStatus: %d\n" -#: fe-exec.c:2178 +#: fe-exec.c:2183 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "PGEventProc \"%s\" misslyckades under PGEVT_RESULTCREATE-händelse\n" -#: fe-exec.c:2326 +#: fe-exec.c:2331 msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "synkrona kommandoexekveringsfunktioner tillåts inte i pipeline-läge\n" -#: fe-exec.c:2348 +#: fe-exec.c:2353 msgid "COPY terminated by new PQexec" msgstr "COPY terminerad av ny PQexec" -#: fe-exec.c:2365 +#: fe-exec.c:2370 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec tillåts inte under COPY BOTH\n" -#: fe-exec.c:2593 fe-exec.c:2649 fe-exec.c:2718 fe-protocol3.c:1870 +#: fe-exec.c:2598 fe-exec.c:2654 fe-exec.c:2723 fe-protocol3.c:1884 msgid "no COPY in progress\n" msgstr "ingen COPY pågår\n" -#: fe-exec.c:2895 +#: fe-exec.c:2900 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfn tillåts inte i pipeline-läge\n" -#: fe-exec.c:2903 +#: fe-exec.c:2908 msgid "connection in wrong state\n" msgstr "anslutning i felaktigt tillstånd\n" -#: fe-exec.c:2947 +#: fe-exec.c:2952 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "kan inte byta till pipeline-läge, anslutningen är inte inaktiv\n" -#: fe-exec.c:2984 fe-exec.c:3008 +#: fe-exec.c:2989 fe-exec.c:3013 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "kan inte anvsluta pipeline-läge när alla svar inte tagits emot\n" -#: fe-exec.c:2989 +#: fe-exec.c:2994 msgid "cannot exit pipeline mode while busy\n" msgstr "är upptagen och kan inte avsluta pipeline-läge\n" -#: fe-exec.c:3001 +#: fe-exec.c:3006 msgid "cannot exit pipeline mode while in COPY\n" msgstr "kan inte avsluta pipeline-läge inne i en COPY\n" -#: fe-exec.c:3189 +#: fe-exec.c:3194 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "kan inte skicka en pipeline när vi inte är i pipeline-läge\n" -#: fe-exec.c:3300 +#: fe-exec.c:3305 msgid "invalid ExecStatusType code" msgstr "ogiltig ExecStatusType-kod" -#: fe-exec.c:3327 +#: fe-exec.c:3332 msgid "PGresult is not an error result\n" msgstr "PGresult är inte ett felresultat\n" -#: fe-exec.c:3395 fe-exec.c:3418 +#: fe-exec.c:3400 fe-exec.c:3423 #, c-format msgid "column number %d is out of range 0..%d" msgstr "kolumnnummer %d är utanför giltigt intervall 0..%d" -#: fe-exec.c:3433 +#: fe-exec.c:3438 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "parameter nummer %d är utanför giltigt intervall 0..%d" -#: fe-exec.c:3743 +#: fe-exec.c:3748 #, c-format msgid "could not interpret result from server: %s" msgstr "kunde inte tolka svaret från servern: %s" -#: fe-exec.c:4006 fe-exec.c:4139 +#: fe-exec.c:4026 fe-exec.c:4160 msgid "incomplete multibyte character\n" msgstr "ofullständigt multibyte-tecken\n" -#: fe-exec.c:4034 fe-exec.c:4159 +#: fe-exec.c:4029 fe-exec.c:4180 msgid "invalid multibyte character\n" msgstr "ogiltigt multibyte-tecken\n" +#: fe-exec.c:4283 +#, c-format +msgid "escaped string size exceeds the maximum allowed (%zu)\n" +msgstr "escape:ad strängstorlek överskrider maximalt tillåtna (%zu)\n" + +#: fe-exec.c:4461 +#, c-format +msgid "escaped bytea size exceeds the maximum allowed (%zu)\n" +msgstr "escaped bytea size exceeds the maximum allowed (%zu)\n" + #: fe-gssapi-common.c:124 msgid "GSSAPI name import error" msgstr "GSSAPI-fel vid import av namn" @@ -826,11 +841,11 @@ msgstr "heltal med storlek %lu stöds inte av pqGetInt" msgid "integer of size %lu not supported by pqPutInt" msgstr "heltal med storlek %lu stöds inte av pqPutInt" -#: fe-misc.c:576 fe-misc.c:822 +#: fe-misc.c:602 fe-misc.c:848 msgid "connection not open\n" msgstr "anslutningen är inte öppen\n" -#: fe-misc.c:755 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-misc.c:781 fe-secure-openssl.c:204 fe-secure-openssl.c:317 #: fe-secure.c:262 fe-secure.c:380 msgid "" "server closed the connection unexpectedly\n" @@ -841,142 +856,142 @@ msgstr "" "\tTroligen så terminerade servern pga något fel antingen\n" "\tinnan eller under tiden den bearbetade en förfrågan.\n" -#: fe-misc.c:1015 +#: fe-misc.c:1041 msgid "timeout expired\n" msgstr "timeout utgången\n" -#: fe-misc.c:1060 +#: fe-misc.c:1086 msgid "invalid socket\n" msgstr "ogiltigt uttag\n" -#: fe-misc.c:1083 +#: fe-misc.c:1109 #, c-format msgid "%s() failed: %s\n" msgstr "%s() misslyckades: %s\n" -#: fe-protocol3.c:184 +#: fe-protocol3.c:185 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "meddelandetyp 0x%02x kom från server under viloperiod" -#: fe-protocol3.c:403 +#: fe-protocol3.c:404 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "servern skickade data (meddelande \"D\") utan att först skicka en radbeskrivning (meddelande \"T\")\n" -#: fe-protocol3.c:446 +#: fe-protocol3.c:447 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "oväntat svar för servern; första mottagna tecknet var \"%c\"\n" -#: fe-protocol3.c:471 +#: fe-protocol3.c:472 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "meddelandeinnehåll stämmer inte med längden för meddelandetyp \"%c\"\n" -#: fe-protocol3.c:491 +#: fe-protocol3.c:492 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "tappade synkronisering med servern: fick meddelandetyp \"%c\", längd %d\n" -#: fe-protocol3.c:543 fe-protocol3.c:583 +#: fe-protocol3.c:544 fe-protocol3.c:584 msgid "insufficient data in \"T\" message" msgstr "otillräckligt med data i \"T\"-meddelande" -#: fe-protocol3.c:654 fe-protocol3.c:860 +#: fe-protocol3.c:655 fe-protocol3.c:861 msgid "out of memory for query result" msgstr "slut på minnet för frågeresultat" -#: fe-protocol3.c:723 +#: fe-protocol3.c:724 msgid "insufficient data in \"t\" message" msgstr "otillräckligt med data i \"t\"-meddelande" -#: fe-protocol3.c:782 fe-protocol3.c:814 fe-protocol3.c:832 +#: fe-protocol3.c:783 fe-protocol3.c:815 fe-protocol3.c:833 msgid "insufficient data in \"D\" message" msgstr "otillräckligt med data i \"D\"-meddelande" -#: fe-protocol3.c:788 +#: fe-protocol3.c:789 msgid "unexpected field count in \"D\" message" msgstr "oväntat fältantal i \"D\"-meddelande" -#: fe-protocol3.c:1036 +#: fe-protocol3.c:1037 msgid "no error message available\n" msgstr "inget felmeddelande finns tillgängligt\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1084 fe-protocol3.c:1103 +#: fe-protocol3.c:1085 fe-protocol3.c:1104 #, c-format msgid " at character %s" msgstr " vid tecken %s" -#: fe-protocol3.c:1116 +#: fe-protocol3.c:1117 #, c-format msgid "DETAIL: %s\n" msgstr "DETALJ: %s\n" -#: fe-protocol3.c:1119 +#: fe-protocol3.c:1120 #, c-format msgid "HINT: %s\n" msgstr "TIPS: %s\n" -#: fe-protocol3.c:1122 +#: fe-protocol3.c:1123 #, c-format msgid "QUERY: %s\n" msgstr "FRÅGA: %s\n" -#: fe-protocol3.c:1129 +#: fe-protocol3.c:1130 #, c-format msgid "CONTEXT: %s\n" msgstr "KONTEXT: %s\n" -#: fe-protocol3.c:1138 +#: fe-protocol3.c:1139 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "SCHEMANAMN: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1143 #, c-format msgid "TABLE NAME: %s\n" msgstr "TABELLNAMN: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1147 #, c-format msgid "COLUMN NAME: %s\n" msgstr "KOLUMNNAMN: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1151 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "DATATYPNAMN: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1155 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "VILLKORSNAMN: %s\n" -#: fe-protocol3.c:1166 +#: fe-protocol3.c:1167 msgid "LOCATION: " msgstr "PLATS: " -#: fe-protocol3.c:1168 +#: fe-protocol3.c:1169 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1171 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1365 +#: fe-protocol3.c:1379 #, c-format msgid "LINE %d: " msgstr "RAD %d: " -#: fe-protocol3.c:1764 +#: fe-protocol3.c:1778 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline: utför inte text-COPY OUT\n" -#: fe-protocol3.c:2130 +#: fe-protocol3.c:2144 #, c-format msgid "protocol error: id=0x%x\n" msgstr "protokollfel: id=0x%x\n" @@ -998,44 +1013,40 @@ msgstr "servercertifikat för \"%s\" matchar inte värdnamn \"%s\"\n" msgid "could not get server's host name from server certificate\n" msgstr "kan inte hämta ut serverns värdnamn från servercertifikatet\n" -#: fe-secure-gssapi.c:194 +#: fe-secure-gssapi.c:201 msgid "GSSAPI wrap error" msgstr "GSSAPI-fel vid inpackning" -#: fe-secure-gssapi.c:202 +#: fe-secure-gssapi.c:209 msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "utgående GSSAPI-meddelande skulle inte använda sekretess\n" -#: fe-secure-gssapi.c:210 +#: fe-secure-gssapi.c:217 fe-secure-gssapi.c:715 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "klienten försöke skicka för stort GSSAPI-paket (%zu > %zu)\n" -#: fe-secure-gssapi.c:350 fe-secure-gssapi.c:594 +#: fe-secure-gssapi.c:357 fe-secure-gssapi.c:607 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "för stort GSSAPI-paket skickat av servern (%zu > %zu)\n" -#: fe-secure-gssapi.c:389 +#: fe-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "GSSAPI-fel vid uppackning" -#: fe-secure-gssapi.c:399 +#: fe-secure-gssapi.c:406 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "inkommande GSSAPI-meddelande använde inte sekretess\n" -#: fe-secure-gssapi.c:640 +#: fe-secure-gssapi.c:653 msgid "could not initiate GSSAPI security context" msgstr "kunde inte initiera GSSAPI-säkerhetskontext" -#: fe-secure-gssapi.c:668 +#: fe-secure-gssapi.c:703 msgid "GSSAPI size check error" msgstr "GSSAPI-fel vid kontroll av storlek" -#: fe-secure-gssapi.c:679 -msgid "GSSAPI context establishment error" -msgstr "GSSAPI-fel vid skapande av kontext" - #: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, c-format msgid "SSL SYSCALL error: %s\n" diff --git a/src/interfaces/libpq/po/uk.po b/src/interfaces/libpq/po/uk.po index b447166bd99..359300aa34d 100644 --- a/src/interfaces/libpq/po/uk.po +++ b/src/interfaces/libpq/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-07-19 08:55+0000\n" -"PO-Revision-Date: 2022-09-13 12:23\n" +"POT-Creation-Date: 2025-12-31 03:17+0000\n" +"PO-Revision-Date: 2025-12-31 15:41\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -55,16 +55,16 @@ msgstr "не вдалося згенерувати одноразовий іде #: fe-auth-scram.c:616 fe-auth-scram.c:642 fe-auth-scram.c:657 #: fe-auth-scram.c:707 fe-auth-scram.c:746 fe-auth.c:290 fe-auth.c:362 #: fe-auth.c:398 fe-auth.c:615 fe-auth.c:774 fe-auth.c:1132 fe-auth.c:1282 -#: fe-connect.c:911 fe-connect.c:1460 fe-connect.c:1629 fe-connect.c:2981 -#: fe-connect.c:4711 fe-connect.c:4972 fe-connect.c:5091 fe-connect.c:5343 -#: fe-connect.c:5424 fe-connect.c:5523 fe-connect.c:5779 fe-connect.c:5808 -#: fe-connect.c:5880 fe-connect.c:5904 fe-connect.c:5922 fe-connect.c:6023 -#: fe-connect.c:6032 fe-connect.c:6390 fe-connect.c:6540 fe-connect.c:6806 -#: fe-exec.c:686 fe-exec.c:876 fe-exec.c:1223 fe-exec.c:3125 fe-exec.c:3309 -#: fe-exec.c:4082 fe-exec.c:4247 fe-gssapi-common.c:111 fe-lobj.c:881 -#: fe-protocol3.c:979 fe-protocol3.c:994 fe-protocol3.c:1027 -#: fe-protocol3.c:1735 fe-secure-common.c:110 fe-secure-gssapi.c:504 -#: fe-secure-openssl.c:440 fe-secure-openssl.c:1133 +#: fe-connect.c:914 fe-connect.c:1463 fe-connect.c:1632 fe-connect.c:2983 +#: fe-connect.c:4715 fe-connect.c:4990 fe-connect.c:5109 fe-connect.c:5361 +#: fe-connect.c:5442 fe-connect.c:5541 fe-connect.c:5797 fe-connect.c:5826 +#: fe-connect.c:5898 fe-connect.c:5922 fe-connect.c:5940 fe-connect.c:6041 +#: fe-connect.c:6050 fe-connect.c:6408 fe-connect.c:6558 fe-connect.c:6826 +#: fe-exec.c:691 fe-exec.c:881 fe-exec.c:1228 fe-exec.c:3150 fe-exec.c:3342 +#: fe-exec.c:4211 fe-exec.c:4405 fe-gssapi-common.c:111 fe-lobj.c:881 +#: fe-protocol3.c:976 fe-protocol3.c:991 fe-protocol3.c:1024 +#: fe-protocol3.c:1745 fe-secure-common.c:110 fe-secure-gssapi.c:512 +#: fe-secure-gssapi.c:687 fe-secure-openssl.c:446 fe-secure-openssl.c:1124 msgid "out of memory\n" msgstr "недостатньо пам'яті\n" @@ -218,12 +218,12 @@ msgstr "спосіб автентифікації %u не підтримуєть msgid "user name lookup failure: error code %lu\n" msgstr "невдала підстановка імені користувача: код помилки %lu\n" -#: fe-auth.c:1117 fe-connect.c:2856 +#: fe-auth.c:1117 fe-connect.c:2858 #, c-format msgid "could not look up local user ID %d: %s\n" msgstr "не вдалося знайти локального користувача за ідентифікатором: %d: %s\n" -#: fe-auth.c:1122 fe-connect.c:2861 +#: fe-auth.c:1122 fe-connect.c:2863 #, c-format msgid "local user with ID %d does not exist\n" msgstr "локального користувача з ідентифікатором %d не існує\n" @@ -241,532 +241,551 @@ msgstr "занадто довге значення password_encryption \n" msgid "unrecognized password encryption algorithm \"%s\"\n" msgstr "нерозпізнаний алгоритм шифрування пароля \"%s\"\n" -#: fe-connect.c:1094 +#: fe-connect.c:1097 #, c-format msgid "could not match %d host names to %d hostaddr values\n" msgstr "не вдалося зіставити %d імен хостів зі %d значеннями hostaddr\n" -#: fe-connect.c:1180 +#: fe-connect.c:1183 #, c-format msgid "could not match %d port numbers to %d hosts\n" msgstr "не вдалося зіставити %d номерів портів з %d хостами\n" -#: fe-connect.c:1273 fe-connect.c:1299 fe-connect.c:1341 fe-connect.c:1350 -#: fe-connect.c:1383 fe-connect.c:1427 +#: fe-connect.c:1276 fe-connect.c:1302 fe-connect.c:1344 fe-connect.c:1353 +#: fe-connect.c:1386 fe-connect.c:1430 #, c-format msgid "invalid %s value: \"%s\"\n" msgstr "неприпустиме значення %s : \"%s\"\n" -#: fe-connect.c:1320 +#: fe-connect.c:1323 #, c-format msgid "sslmode value \"%s\" invalid when SSL support is not compiled in\n" msgstr "значення sslmode \"%s\" неприпустиме, якщо підтримку протоколу SSL не скомпільовано\n" -#: fe-connect.c:1368 +#: fe-connect.c:1371 msgid "invalid SSL protocol version range\n" msgstr "неприпустимий діапазон версії протоколу SSL\n" -#: fe-connect.c:1393 +#: fe-connect.c:1396 #, c-format msgid "gssencmode value \"%s\" invalid when GSSAPI support is not compiled in\n" msgstr "значення gssencmode \"%s\" неприпустиме, якщо підтримку протоколу GSSAPI не скомпільовано\n" -#: fe-connect.c:1653 +#: fe-connect.c:1656 #, c-format msgid "could not set socket to TCP no delay mode: %s\n" msgstr "не вдалося встановити сокет у TCP-режим без затримки: %s\n" -#: fe-connect.c:1715 +#: fe-connect.c:1718 #, c-format msgid "connection to server on socket \"%s\" failed: " msgstr "помилка при з'єднанні з сервером через сокет \"%s\": " -#: fe-connect.c:1742 +#: fe-connect.c:1745 #, c-format msgid "connection to server at \"%s\" (%s), port %s failed: " msgstr "підключення до серверу \"%s\" (%s), порт %s провалено: " -#: fe-connect.c:1747 +#: fe-connect.c:1750 #, c-format msgid "connection to server at \"%s\", port %s failed: " msgstr "підключення до серверу \"%s\", порт %s провалено: " -#: fe-connect.c:1772 +#: fe-connect.c:1775 msgid "\tIs the server running locally and accepting connections on that socket?\n" msgstr "\tЧи працює сервер локально і приймає підключення до цього сокету?\n" -#: fe-connect.c:1776 +#: fe-connect.c:1779 msgid "\tIs the server running on that host and accepting TCP/IP connections?\n" msgstr "\tЧи працює сервер на цьому хості і приймає TCP/IP підключення?\n" -#: fe-connect.c:1840 +#: fe-connect.c:1843 #, c-format msgid "invalid integer value \"%s\" for connection option \"%s\"\n" msgstr "неприпустиме ціле значення \"%s\" для параметра з'єднання \"%s\"\n" -#: fe-connect.c:1870 fe-connect.c:1905 fe-connect.c:1941 fe-connect.c:2030 -#: fe-connect.c:2644 +#: fe-connect.c:1873 fe-connect.c:1908 fe-connect.c:1944 fe-connect.c:2033 +#: fe-connect.c:2646 #, c-format msgid "%s(%s) failed: %s\n" msgstr "%s(%s) помилка: %s\n" -#: fe-connect.c:1995 +#: fe-connect.c:1998 #, c-format msgid "%s(%s) failed: error code %d\n" msgstr "%s(%s) помилка: код помилки %d\n" -#: fe-connect.c:2310 +#: fe-connect.c:2313 msgid "invalid connection state, probably indicative of memory corruption\n" msgstr "неприпустимий стан підключення, можливо, пошкоджена пам'ять\n" -#: fe-connect.c:2389 +#: fe-connect.c:2392 #, c-format msgid "invalid port number: \"%s\"\n" msgstr "неприпустимий номер порту: \"%s\"\n" -#: fe-connect.c:2405 +#: fe-connect.c:2408 #, c-format msgid "could not translate host name \"%s\" to address: %s\n" msgstr "не вдалося перекласти ім’я хоста \"%s\" в адресу: %s\n" -#: fe-connect.c:2418 +#: fe-connect.c:2421 #, c-format msgid "could not parse network address \"%s\": %s\n" msgstr "не вдалося проаналізувати адресу мережі \"%s\": %s\n" -#: fe-connect.c:2431 +#: fe-connect.c:2434 #, c-format msgid "Unix-domain socket path \"%s\" is too long (maximum %d bytes)\n" msgstr "Шлях Unix-сокету \"%s\" занадто довгий (максимум %d байтів)\n" -#: fe-connect.c:2446 +#: fe-connect.c:2449 #, c-format msgid "could not translate Unix-domain socket path \"%s\" to address: %s\n" msgstr "не вдалося перекласти шлях Unix-сокету \"%s\" в адресу: %s\n" -#: fe-connect.c:2572 +#: fe-connect.c:2575 #, c-format msgid "could not create socket: %s\n" msgstr "не вдалося створити сокет: %s\n" -#: fe-connect.c:2603 +#: fe-connect.c:2606 #, c-format msgid "could not set socket to nonblocking mode: %s\n" msgstr "не вдалося встановити сокет у режим без блокування: %s\n" -#: fe-connect.c:2613 +#: fe-connect.c:2616 #, c-format msgid "could not set socket to close-on-exec mode: %s\n" msgstr "не вдалося встановити сокет у режим закриття по виконанню: %s\n" -#: fe-connect.c:2631 -msgid "keepalives parameter must be an integer\n" -msgstr "параметр keepalives має бути цілим числом\n" - -#: fe-connect.c:2772 +#: fe-connect.c:2774 #, c-format msgid "could not get socket error status: %s\n" msgstr "не вдалося отримати статус помилки сокету: %s\n" -#: fe-connect.c:2800 +#: fe-connect.c:2802 #, c-format msgid "could not get client address from socket: %s\n" msgstr "не вдалося отримати адресу клієнта з сокету: %s\n" -#: fe-connect.c:2842 +#: fe-connect.c:2844 msgid "requirepeer parameter is not supported on this platform\n" msgstr "параметр requirepeer не підтримується на цій платформі\n" -#: fe-connect.c:2845 +#: fe-connect.c:2847 #, c-format msgid "could not get peer credentials: %s\n" msgstr "не вдалося отримати облікові дані сервера: %s\n" -#: fe-connect.c:2869 +#: fe-connect.c:2871 #, c-format msgid "requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n" msgstr "requirepeer вказує на \"%s\", але фактичне ім'я вузла \"%s\"\n" -#: fe-connect.c:2909 +#: fe-connect.c:2911 #, c-format msgid "could not send GSSAPI negotiation packet: %s\n" msgstr "не вдалося передати пакет узгодження протоколу GSSAPI: %s\n" -#: fe-connect.c:2921 +#: fe-connect.c:2923 msgid "GSSAPI encryption required but was impossible (possibly no credential cache, no server support, or using a local socket)\n" msgstr "вимагалося шифрування GSSAPI, але не було неможливим (можливо, без кешу облікових даних, підтримки сервера, або використання локального сокета)\n" -#: fe-connect.c:2963 +#: fe-connect.c:2965 #, c-format msgid "could not send SSL negotiation packet: %s\n" msgstr "не вдалося передати пакет узгодження протоколу SSL: %s\n" -#: fe-connect.c:2994 +#: fe-connect.c:2996 #, c-format msgid "could not send startup packet: %s\n" msgstr "не вдалося передати стартовий пакет: %s\n" -#: fe-connect.c:3070 +#: fe-connect.c:3072 msgid "server does not support SSL, but SSL was required\n" msgstr "сервер не підтримує протокол SSL, але протокол SSL вимагається\n" -#: fe-connect.c:3097 +#: fe-connect.c:3090 +msgid "server sent an error response during SSL exchange\n" +msgstr "сервер відповів помилкою під час обміну SSL\n" + +#: fe-connect.c:3096 #, c-format msgid "received invalid response to SSL negotiation: %c\n" msgstr "отримано неприпустиму відповідь на узгодження SSL: %c\n" -#: fe-connect.c:3118 +#: fe-connect.c:3117 msgid "received unencrypted data after SSL response\n" msgstr "отримані незашифровані дані після відповіді SSL\n" -#: fe-connect.c:3199 +#: fe-connect.c:3198 msgid "server doesn't support GSSAPI encryption, but it was required\n" msgstr "сервер не підтримує шифрування GSSAPI, але це було необхідно\n" -#: fe-connect.c:3211 +#: fe-connect.c:3210 #, c-format msgid "received invalid response to GSSAPI negotiation: %c\n" msgstr "отримано неприпустиму відповідь на узгодження GSSAPI: %c\n" -#: fe-connect.c:3230 +#: fe-connect.c:3229 msgid "received unencrypted data after GSSAPI encryption response\n" msgstr "отримані незашифровані дані після відповіді шифрування GSSAPI\n" -#: fe-connect.c:3290 fe-connect.c:3315 +#: fe-connect.c:3294 fe-connect.c:3319 #, c-format msgid "expected authentication request from server, but received %c\n" msgstr "очікувався запит автентифікації від сервера, але отримано %c\n" -#: fe-connect.c:3522 +#: fe-connect.c:3526 msgid "unexpected message from server during startup\n" msgstr "неочікуване повідомлення від сервера під час запуску\n" -#: fe-connect.c:3614 +#: fe-connect.c:3618 msgid "session is read-only\n" msgstr "сесія доступна тільки для читання\n" -#: fe-connect.c:3617 +#: fe-connect.c:3621 msgid "session is not read-only\n" msgstr "сесія доступна не лише для читання\n" -#: fe-connect.c:3671 +#: fe-connect.c:3675 msgid "server is in hot standby mode\n" msgstr "сервер знаходиться у режимі hot standby\n" -#: fe-connect.c:3674 +#: fe-connect.c:3678 msgid "server is not in hot standby mode\n" msgstr "сервер не в режимі hot standby\n" -#: fe-connect.c:3792 fe-connect.c:3844 +#: fe-connect.c:3796 fe-connect.c:3848 #, c-format msgid "\"%s\" failed\n" msgstr "\"%s\" помилка\n" -#: fe-connect.c:3858 +#: fe-connect.c:3862 #, c-format msgid "invalid connection state %d, probably indicative of memory corruption\n" msgstr "неприпустимий стан підключення %d, можливо, пошкоджена пам'ять\n" -#: fe-connect.c:4304 fe-connect.c:4364 +#: fe-connect.c:4308 fe-connect.c:4368 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n" msgstr "Помилка у PGEventProc \"%s\" під час події PGEVT_CONNRESET\n" -#: fe-connect.c:4724 +#: fe-connect.c:4728 #, c-format msgid "invalid LDAP URL \"%s\": scheme must be ldap://\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": схема має бути ldap://\n" -#: fe-connect.c:4739 +#: fe-connect.c:4743 #, c-format msgid "invalid LDAP URL \"%s\": missing distinguished name\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": відсутнє унікальне ім'я\n" -#: fe-connect.c:4751 fe-connect.c:4809 +#: fe-connect.c:4755 fe-connect.c:4813 #, c-format msgid "invalid LDAP URL \"%s\": must have exactly one attribute\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": має бути лише один атрибут\n" -#: fe-connect.c:4763 fe-connect.c:4825 +#: fe-connect.c:4767 fe-connect.c:4829 #, c-format msgid "invalid LDAP URL \"%s\": must have search scope (base/one/sub)\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": відсутня область пошуку (base/one/sub)\n" -#: fe-connect.c:4775 +#: fe-connect.c:4779 #, c-format msgid "invalid LDAP URL \"%s\": no filter\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": відсутній фільтр\n" -#: fe-connect.c:4797 +#: fe-connect.c:4801 #, c-format msgid "invalid LDAP URL \"%s\": invalid port number\n" msgstr "неприпустима URL-адреса протоколу LDAP \"%s\": неприпустимий номер порту\n" -#: fe-connect.c:4835 +#: fe-connect.c:4839 msgid "could not create LDAP structure\n" msgstr "не вдалося створити структуру протоколу LDAP\n" -#: fe-connect.c:4911 +#: fe-connect.c:4915 #, c-format msgid "lookup on LDAP server failed: %s\n" msgstr "помилка підстановки на сервері протоколу LDAP: %s\n" -#: fe-connect.c:4922 +#: fe-connect.c:4926 msgid "more than one entry found on LDAP lookup\n" msgstr "знайдено більше одного входження при підстановці протоколу LDAP\n" -#: fe-connect.c:4923 fe-connect.c:4935 +#: fe-connect.c:4927 fe-connect.c:4939 msgid "no entry found on LDAP lookup\n" msgstr "не знайдено входження при підстановці протоколу LDAP\n" -#: fe-connect.c:4946 fe-connect.c:4959 +#: fe-connect.c:4950 fe-connect.c:4963 msgid "attribute has no values on LDAP lookup\n" msgstr "атрибут не має значення при підстановці протоколу LDAP\n" -#: fe-connect.c:5011 fe-connect.c:5030 fe-connect.c:5562 +#: fe-connect.c:4977 +#, c-format +msgid "connection info string size exceeds the maximum allowed (%d)\n" +msgstr "розмір рядка з'єднання з інформацією перевищує максимально дозволену (%d)\n" + +#: fe-connect.c:5029 fe-connect.c:5048 fe-connect.c:5580 #, c-format msgid "missing \"=\" after \"%s\" in connection info string\n" msgstr "відсутній \"=\" після \"%s\" у рядку інформації про підключення\n" -#: fe-connect.c:5103 fe-connect.c:5747 fe-connect.c:6523 +#: fe-connect.c:5121 fe-connect.c:5765 fe-connect.c:6541 #, c-format msgid "invalid connection option \"%s\"\n" msgstr "неприпустимий параметр підключення \"%s\"\n" -#: fe-connect.c:5119 fe-connect.c:5611 +#: fe-connect.c:5137 fe-connect.c:5629 msgid "unterminated quoted string in connection info string\n" msgstr "відкриті лапки у рядку інформації про підключення\n" -#: fe-connect.c:5200 +#: fe-connect.c:5218 #, c-format msgid "definition of service \"%s\" not found\n" msgstr "не знайдено визначення сервера \"%s\"\n" -#: fe-connect.c:5226 +#: fe-connect.c:5244 #, c-format msgid "service file \"%s\" not found\n" msgstr "не знайдено сервісний файл \"%s\"\n" -#: fe-connect.c:5240 +#: fe-connect.c:5258 #, c-format msgid "line %d too long in service file \"%s\"\n" msgstr "рядок %d занадто довгий у сервісному файлі \"%s\"\n" -#: fe-connect.c:5311 fe-connect.c:5355 +#: fe-connect.c:5329 fe-connect.c:5373 #, c-format msgid "syntax error in service file \"%s\", line %d\n" msgstr "синтаксична помилка у сервісному файлі \"%s\", рядок %d\n" -#: fe-connect.c:5322 +#: fe-connect.c:5340 #, c-format msgid "nested service specifications not supported in service file \"%s\", line %d\n" msgstr "вкладені сервісні специфікації не підтримуються у сервісному файлі \"%s\", рядок %d\n" -#: fe-connect.c:6043 +#: fe-connect.c:6061 #, c-format msgid "invalid URI propagated to internal parser routine: \"%s\"\n" msgstr "у внутрішню процедуру аналізу рядка передано помилковий URI: \"%s\"\n" -#: fe-connect.c:6120 +#: fe-connect.c:6138 #, c-format msgid "end of string reached when looking for matching \"]\" in IPv6 host address in URI: \"%s\"\n" msgstr "досягнуто кінця рядка під час пошуку відповідного \"]\" в адресі IPv6 URI: \"%s\"\n" -#: fe-connect.c:6127 +#: fe-connect.c:6145 #, c-format msgid "IPv6 host address may not be empty in URI: \"%s\"\n" msgstr "IPv6, що знаходиться в URI, не може бути пустим: \"%s\"\n" -#: fe-connect.c:6142 +#: fe-connect.c:6160 #, c-format msgid "unexpected character \"%c\" at position %d in URI (expected \":\" or \"/\"): \"%s\"\n" msgstr "неочікуваний символ \"%c\" на позиції %d в URI (очікувалося \":\" або \"/\"): \"%s\"\n" -#: fe-connect.c:6272 +#: fe-connect.c:6290 #, c-format msgid "extra key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "зайвий розділювач ключа/значення \"=\" в параметрі запиту URI: \"%s\"\n" -#: fe-connect.c:6292 +#: fe-connect.c:6310 #, c-format msgid "missing key/value separator \"=\" in URI query parameter: \"%s\"\n" msgstr "відсутній розділювач ключа/значення \"=\" у параметрі запиту URI: \"%s\"\n" -#: fe-connect.c:6344 +#: fe-connect.c:6362 #, c-format msgid "invalid URI query parameter: \"%s\"\n" msgstr "неприпустимий параметр запиту URI: \"%s\"\n" -#: fe-connect.c:6418 +#: fe-connect.c:6436 #, c-format msgid "invalid percent-encoded token: \"%s\"\n" msgstr "неприпустимий токен, закодований відсотками: \"%s\"\n" -#: fe-connect.c:6428 +#: fe-connect.c:6446 #, c-format msgid "forbidden value %%00 in percent-encoded value: \"%s\"\n" msgstr "неприпустиме значення %%00 для значення, закодованого відсотками: \"%s\"\n" -#: fe-connect.c:6798 +#: fe-connect.c:6818 msgid "connection pointer is NULL\n" msgstr "нульове значення вказівника підключення \n" -#: fe-connect.c:7086 +#: fe-connect.c:7106 #, c-format msgid "WARNING: password file \"%s\" is not a plain file\n" msgstr "ПОПЕРЕДЖЕННЯ: файл паролів \"%s\" не є простим файлом\n" -#: fe-connect.c:7095 +#: fe-connect.c:7115 #, c-format msgid "WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less\n" msgstr "ПОПЕРЕДЖЕННЯ: до файлу паролів \"%s\" мають доступ група або всі; дозволи мають бути u=rw (0600) або менше\n" -#: fe-connect.c:7203 +#: fe-connect.c:7223 #, c-format msgid "password retrieved from file \"%s\"\n" msgstr "пароль отримано з файлу \"%s\"\n" -#: fe-exec.c:449 fe-exec.c:3383 +#: fe-exec.c:449 fe-exec.c:3416 #, c-format msgid "row number %d is out of range 0..%d" msgstr "число рядків %d поза діапазоном 0..%d" -#: fe-exec.c:510 fe-protocol3.c:207 fe-protocol3.c:232 fe-protocol3.c:261 -#: fe-protocol3.c:279 fe-protocol3.c:375 fe-protocol3.c:747 +#: fe-exec.c:510 fe-protocol3.c:208 fe-protocol3.c:233 fe-protocol3.c:257 +#: fe-protocol3.c:275 fe-protocol3.c:372 fe-protocol3.c:744 msgid "out of memory" msgstr "недостатньо пам'яті" -#: fe-exec.c:511 fe-protocol3.c:1943 +#: fe-exec.c:511 fe-protocol3.c:1953 #, c-format msgid "%s" msgstr "%s" -#: fe-exec.c:792 +#: fe-exec.c:797 msgid "write to server failed\n" msgstr "записати на сервер не вдалося\n" -#: fe-exec.c:864 +#: fe-exec.c:869 msgid "NOTICE" msgstr "ПОВІДОМЛЕННЯ" -#: fe-exec.c:922 +#: fe-exec.c:927 msgid "PGresult cannot support more than INT_MAX tuples" msgstr "PGresult не може підтримувати більше ніж INT_MAX кортежів" -#: fe-exec.c:934 +#: fe-exec.c:939 msgid "size_t overflow" msgstr "переповнення size_t" -#: fe-exec.c:1351 fe-exec.c:1477 fe-exec.c:1526 +#: fe-exec.c:1356 fe-exec.c:1482 fe-exec.c:1531 msgid "command string is a null pointer\n" msgstr "рядок команди є нульовим вказівником\n" -#: fe-exec.c:1483 fe-exec.c:1532 fe-exec.c:1628 +#: fe-exec.c:1488 fe-exec.c:1537 fe-exec.c:1633 #, c-format msgid "number of parameters must be between 0 and %d\n" msgstr "кількість параметрів має бути між 0 і %d\n" -#: fe-exec.c:1520 fe-exec.c:1622 +#: fe-exec.c:1525 fe-exec.c:1627 msgid "statement name is a null pointer\n" msgstr "ім’я оператора є пустим вказівником\n" -#: fe-exec.c:1664 fe-exec.c:3236 +#: fe-exec.c:1669 fe-exec.c:3261 msgid "no connection to the server\n" msgstr "немає підключення до сервера\n" -#: fe-exec.c:1673 fe-exec.c:3245 +#: fe-exec.c:1678 fe-exec.c:3270 msgid "another command is already in progress\n" msgstr "інша команда уже в прогресі\n" -#: fe-exec.c:1704 +#: fe-exec.c:1709 msgid "cannot queue commands during COPY\n" msgstr "не можна поставити в чергу команди під час COPY\n" -#: fe-exec.c:1822 +#: fe-exec.c:1827 msgid "length must be given for binary parameter\n" msgstr "для бінарного параметра має бути надана довжина\n" -#: fe-exec.c:2149 +#: fe-exec.c:2147 #, c-format msgid "unexpected asyncStatus: %d\n" msgstr "неочікуваний asyncStatus: %d\n" -#: fe-exec.c:2185 +#: fe-exec.c:2183 #, c-format msgid "PGEventProc \"%s\" failed during PGEVT_RESULTCREATE event\n" msgstr "Помилка у PGEventProc \"%s\" під час події PGEVT_RESULTCREAT\n" -#: fe-exec.c:2333 +#: fe-exec.c:2331 msgid "synchronous command execution functions are not allowed in pipeline mode\n" msgstr "функції синхронного виконання команд заборонені в режимі конвеєра\n" -#: fe-exec.c:2355 +#: fe-exec.c:2353 msgid "COPY terminated by new PQexec" msgstr "COPY завершено новим PQexec" -#: fe-exec.c:2372 +#: fe-exec.c:2370 msgid "PQexec not allowed during COPY BOTH\n" msgstr "PQexec не дозволяється під час COPY BOTH\n" -#: fe-exec.c:2600 fe-exec.c:2656 fe-exec.c:2725 fe-protocol3.c:1874 +#: fe-exec.c:2598 fe-exec.c:2654 fe-exec.c:2723 fe-protocol3.c:1884 msgid "no COPY in progress\n" msgstr "Немає COPY у процесі\n" -#: fe-exec.c:2902 +#: fe-exec.c:2900 msgid "PQfn not allowed in pipeline mode\n" msgstr "PQfn заборонено в режимі конвеєра\n" -#: fe-exec.c:2910 +#: fe-exec.c:2908 msgid "connection in wrong state\n" msgstr "підключення у неправильному стані\n" -#: fe-exec.c:2954 +#: fe-exec.c:2952 msgid "cannot enter pipeline mode, connection not idle\n" msgstr "не можна увійти в режим конвеєра, підключення не в очікуванні\n" -#: fe-exec.c:2991 fe-exec.c:3015 +#: fe-exec.c:2989 fe-exec.c:3013 msgid "cannot exit pipeline mode with uncollected results\n" msgstr "не можна вийти з режиму конвеєра з незібраними результатами\n" -#: fe-exec.c:2996 +#: fe-exec.c:2994 msgid "cannot exit pipeline mode while busy\n" msgstr "не можна вийти з режиму конвеєра, коли зайнято\n" -#: fe-exec.c:3008 +#: fe-exec.c:3006 msgid "cannot exit pipeline mode while in COPY\n" msgstr "не можна вийти з режиму конвеєра під час COPY\n" -#: fe-exec.c:3169 +#: fe-exec.c:3194 msgid "cannot send pipeline when not in pipeline mode\n" msgstr "неможливо скористатися конвеєром не у режимі конвеєра\n" -#: fe-exec.c:3272 +#: fe-exec.c:3305 msgid "invalid ExecStatusType code" msgstr "неприпустимий код ExecStatusType" -#: fe-exec.c:3299 +#: fe-exec.c:3332 msgid "PGresult is not an error result\n" msgstr "PGresult не є помилковим результатом\n" -#: fe-exec.c:3367 fe-exec.c:3390 +#: fe-exec.c:3400 fe-exec.c:3423 #, c-format msgid "column number %d is out of range 0..%d" msgstr "число стовпців %d поза діапазоном 0..%d" -#: fe-exec.c:3405 +#: fe-exec.c:3438 #, c-format msgid "parameter number %d is out of range 0..%d" msgstr "число параметрів %d поза діапазоном 0..%d" -#: fe-exec.c:3715 +#: fe-exec.c:3748 #, c-format msgid "could not interpret result from server: %s" msgstr "не вдалося інтерпретувати результат від сервера: %s" -#: fe-exec.c:3975 fe-exec.c:4064 +#: fe-exec.c:4026 fe-exec.c:4160 msgid "incomplete multibyte character\n" msgstr "неповний мультибайтний символ\n" +#: fe-exec.c:4029 fe-exec.c:4180 +msgid "invalid multibyte character\n" +msgstr "неприпустимий мультибайтний символ\n" + +#: fe-exec.c:4283 +#, c-format +msgid "escaped string size exceeds the maximum allowed (%zu)\n" +msgstr "довжина екранованого рядка перевищує максимально допустиму (%zu)\n" + +#: fe-exec.c:4461 +#, c-format +msgid "escaped bytea size exceeds the maximum allowed (%zu)\n" +msgstr "розмір bytea перевищує максимальний допустимий розмір (%zu)\n" + #: fe-gssapi-common.c:124 msgid "GSSAPI name import error" msgstr "Помилка імпорту імені у GSSAPI" @@ -819,154 +838,154 @@ msgstr "pqGetInt не підтримує ціле число розміром %l msgid "integer of size %lu not supported by pqPutInt" msgstr "pqPutInt не підтримує ціле число розміром %lu" -#: fe-misc.c:576 fe-misc.c:822 +#: fe-misc.c:602 fe-misc.c:848 msgid "connection not open\n" msgstr "підключення не відкрито\n" -#: fe-misc.c:755 fe-secure-openssl.c:209 fe-secure-openssl.c:316 -#: fe-secure.c:260 fe-secure.c:373 +#: fe-misc.c:781 fe-secure-openssl.c:204 fe-secure-openssl.c:317 +#: fe-secure.c:262 fe-secure.c:380 msgid "server closed the connection unexpectedly\n" "\tThis probably means the server terminated abnormally\n" "\tbefore or while processing the request.\n" msgstr "сервер неочікувано закрив підключення\n" " Це може означати, що сервер завершив роботу ненормально до або під час обробки запиту.\n" -#: fe-misc.c:1015 +#: fe-misc.c:1041 msgid "timeout expired\n" msgstr "тайм-аут минув\n" -#: fe-misc.c:1060 +#: fe-misc.c:1086 msgid "invalid socket\n" msgstr "неприпустимий сокет\n" -#: fe-misc.c:1083 +#: fe-misc.c:1109 #, c-format msgid "%s() failed: %s\n" msgstr "%s() помилка: %s\n" -#: fe-protocol3.c:184 +#: fe-protocol3.c:185 #, c-format msgid "message type 0x%02x arrived from server while idle" msgstr "отримано тип повідомлення 0x%02x від сервера під час бездіяльності" -#: fe-protocol3.c:407 +#: fe-protocol3.c:404 msgid "server sent data (\"D\" message) without prior row description (\"T\" message)\n" msgstr "сервер передав дані (повідомлення \"D\") без попереднього опису рядка (повідомлення \"T\")\n" -#: fe-protocol3.c:450 +#: fe-protocol3.c:447 #, c-format msgid "unexpected response from server; first received character was \"%c\"\n" msgstr "неочікувана відповідь від сервера; перший отриманий символ був \"%c\"\n" -#: fe-protocol3.c:475 +#: fe-protocol3.c:472 #, c-format msgid "message contents do not agree with length in message type \"%c\"\n" msgstr "вміст повідомлення не відповідає довжині у типі повідомлення \"%c\"\n" -#: fe-protocol3.c:495 +#: fe-protocol3.c:492 #, c-format msgid "lost synchronization with server: got message type \"%c\", length %d\n" msgstr "втрачено синхронізацію з сервером: отримано тип повідомлення \"%c\", довжина %d\n" -#: fe-protocol3.c:547 fe-protocol3.c:587 +#: fe-protocol3.c:544 fe-protocol3.c:584 msgid "insufficient data in \"T\" message" msgstr "недостатньо даних у повідомленні \"T\"" -#: fe-protocol3.c:658 fe-protocol3.c:864 +#: fe-protocol3.c:655 fe-protocol3.c:861 msgid "out of memory for query result" msgstr "недостатньо пам'яті для результату запиту" -#: fe-protocol3.c:727 +#: fe-protocol3.c:724 msgid "insufficient data in \"t\" message" msgstr "недостатньо даних у повідомленні \"t\"" -#: fe-protocol3.c:786 fe-protocol3.c:818 fe-protocol3.c:836 +#: fe-protocol3.c:783 fe-protocol3.c:815 fe-protocol3.c:833 msgid "insufficient data in \"D\" message" msgstr "зайві дані у повідомленні \"D\"" -#: fe-protocol3.c:792 +#: fe-protocol3.c:789 msgid "unexpected field count in \"D\" message" msgstr "неочікувана кількість полів у повідомленні \"D\"" -#: fe-protocol3.c:1040 +#: fe-protocol3.c:1037 msgid "no error message available\n" msgstr "немає доступного повідомлення про помилку\n" #. translator: %s represents a digit string -#: fe-protocol3.c:1088 fe-protocol3.c:1107 +#: fe-protocol3.c:1085 fe-protocol3.c:1104 #, c-format msgid " at character %s" msgstr " в символі %s" -#: fe-protocol3.c:1120 +#: fe-protocol3.c:1117 #, c-format msgid "DETAIL: %s\n" msgstr "ДЕТАЛІ: %s\n" -#: fe-protocol3.c:1123 +#: fe-protocol3.c:1120 #, c-format msgid "HINT: %s\n" msgstr "ПІДКАЗКА: %s\n" -#: fe-protocol3.c:1126 +#: fe-protocol3.c:1123 #, c-format msgid "QUERY: %s\n" msgstr "ЗАПИТ: %s\n" -#: fe-protocol3.c:1133 +#: fe-protocol3.c:1130 #, c-format msgid "CONTEXT: %s\n" msgstr "КОНТЕКСТ: %s\n" -#: fe-protocol3.c:1142 +#: fe-protocol3.c:1139 #, c-format msgid "SCHEMA NAME: %s\n" msgstr "ІМ'Я СХЕМИ: %s\n" -#: fe-protocol3.c:1146 +#: fe-protocol3.c:1143 #, c-format msgid "TABLE NAME: %s\n" msgstr "ІМ'Я ТАБЛИЦІ: %s\n" -#: fe-protocol3.c:1150 +#: fe-protocol3.c:1147 #, c-format msgid "COLUMN NAME: %s\n" msgstr "ІМ'Я СТОВПЦЯ: %s\n" -#: fe-protocol3.c:1154 +#: fe-protocol3.c:1151 #, c-format msgid "DATATYPE NAME: %s\n" msgstr "ІМ'Я ТИПУ ДАНИХ: %s\n" -#: fe-protocol3.c:1158 +#: fe-protocol3.c:1155 #, c-format msgid "CONSTRAINT NAME: %s\n" msgstr "ІМ'Я ОБМЕЖЕННЯ: %s\n" -#: fe-protocol3.c:1170 +#: fe-protocol3.c:1167 msgid "LOCATION: " msgstr "РОЗТАШУВАННЯ: " -#: fe-protocol3.c:1172 +#: fe-protocol3.c:1169 #, c-format msgid "%s, " msgstr "%s, " -#: fe-protocol3.c:1174 +#: fe-protocol3.c:1171 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: fe-protocol3.c:1369 +#: fe-protocol3.c:1379 #, c-format msgid "LINE %d: " msgstr "РЯДОК %d: " -#: fe-protocol3.c:1768 +#: fe-protocol3.c:1778 msgid "PQgetline: not doing text COPY OUT\n" msgstr "PQgetline можна викликати лише під час COPY OUT\n" -#: fe-protocol3.c:2134 +#: fe-protocol3.c:2144 #, c-format msgid "protocol error: id=0x%x\n" msgstr "помилка протоколу: id=0x%x\n" @@ -996,215 +1015,211 @@ msgstr "помилка при згортанні GSSAPI" msgid "outgoing GSSAPI message would not use confidentiality\n" msgstr "вихідне повідомлення GSSAPI не буде використовувати конфіденційність\n" -#: fe-secure-gssapi.c:217 +#: fe-secure-gssapi.c:217 fe-secure-gssapi.c:715 #, c-format msgid "client tried to send oversize GSSAPI packet (%zu > %zu)\n" msgstr "клієнт намагався відправити переповнений пакет GSSAPI: (%zu > %zu)\n" -#: fe-secure-gssapi.c:354 fe-secure-gssapi.c:596 +#: fe-secure-gssapi.c:357 fe-secure-gssapi.c:607 #, c-format msgid "oversize GSSAPI packet sent by the server (%zu > %zu)\n" msgstr "переповнений пакет GSSAPI відправлений сервером: (%zu > %zu)\n" -#: fe-secure-gssapi.c:393 +#: fe-secure-gssapi.c:396 msgid "GSSAPI unwrap error" msgstr "помилка при розгортанні GSSAPI" -#: fe-secure-gssapi.c:403 +#: fe-secure-gssapi.c:406 msgid "incoming GSSAPI message did not use confidentiality\n" msgstr "вхідне повідомлення GSSAPI не використовувало конфіденційність\n" -#: fe-secure-gssapi.c:642 +#: fe-secure-gssapi.c:653 msgid "could not initiate GSSAPI security context" msgstr "не вдалося ініціювати контекст безпеки GSSAPI" -#: fe-secure-gssapi.c:670 +#: fe-secure-gssapi.c:703 msgid "GSSAPI size check error" msgstr "помилка перевірки розміру GSSAPI" -#: fe-secure-gssapi.c:681 -msgid "GSSAPI context establishment error" -msgstr "помилка встановлення контексту GSSAPI" - -#: fe-secure-openssl.c:214 fe-secure-openssl.c:321 fe-secure-openssl.c:1367 +#: fe-secure-openssl.c:209 fe-secure-openssl.c:322 fe-secure-openssl.c:1360 #, c-format msgid "SSL SYSCALL error: %s\n" msgstr "Помилка SSL SYSCALL: %s\n" -#: fe-secure-openssl.c:221 fe-secure-openssl.c:328 fe-secure-openssl.c:1371 +#: fe-secure-openssl.c:216 fe-secure-openssl.c:329 fe-secure-openssl.c:1364 msgid "SSL SYSCALL error: EOF detected\n" msgstr "Помилка SSL SYSCALL: виявлено EOF\n" -#: fe-secure-openssl.c:232 fe-secure-openssl.c:339 fe-secure-openssl.c:1380 +#: fe-secure-openssl.c:227 fe-secure-openssl.c:340 fe-secure-openssl.c:1373 #, c-format msgid "SSL error: %s\n" msgstr "Помилка SSL: %s\n" -#: fe-secure-openssl.c:247 fe-secure-openssl.c:354 +#: fe-secure-openssl.c:242 fe-secure-openssl.c:355 msgid "SSL connection has been closed unexpectedly\n" msgstr "SSL підключення було неочікувано перервано\n" -#: fe-secure-openssl.c:253 fe-secure-openssl.c:360 fe-secure-openssl.c:1430 +#: fe-secure-openssl.c:248 fe-secure-openssl.c:361 fe-secure-openssl.c:1423 #, c-format msgid "unrecognized SSL error code: %d\n" msgstr "нерозпізнаний код помилки SSL: %d\n" -#: fe-secure-openssl.c:400 +#: fe-secure-openssl.c:406 msgid "could not determine server certificate signature algorithm\n" msgstr "не вдалося визначити алгоритм підпису серверного сертифікату\n" -#: fe-secure-openssl.c:421 +#: fe-secure-openssl.c:427 #, c-format msgid "could not find digest for NID %s\n" msgstr "не вдалося знайти дайджест для NID %s\n" -#: fe-secure-openssl.c:431 +#: fe-secure-openssl.c:437 msgid "could not generate peer certificate hash\n" msgstr "не вдалося згенерувати хеш сертифікату вузла\n" -#: fe-secure-openssl.c:488 +#: fe-secure-openssl.c:494 msgid "SSL certificate's name entry is missing\n" msgstr "Відсутня ім'я в сертифікаті SSL\n" -#: fe-secure-openssl.c:822 +#: fe-secure-openssl.c:812 #, c-format msgid "could not create SSL context: %s\n" msgstr "не вдалося створити контекст SSL: %s\n" -#: fe-secure-openssl.c:861 +#: fe-secure-openssl.c:851 #, c-format msgid "invalid value \"%s\" for minimum SSL protocol version\n" msgstr "неприпустиме значення \"%s\" для мінімальної версії протоколу SSL\n" -#: fe-secure-openssl.c:872 +#: fe-secure-openssl.c:862 #, c-format msgid "could not set minimum SSL protocol version: %s\n" msgstr "не вдалося встановити мінімальну версію протоколу SSL: %s\n" -#: fe-secure-openssl.c:890 +#: fe-secure-openssl.c:880 #, c-format msgid "invalid value \"%s\" for maximum SSL protocol version\n" msgstr "неприпустиме значення \"%s\" для максимальної версії протоколу SSL\n" -#: fe-secure-openssl.c:901 +#: fe-secure-openssl.c:891 #, c-format msgid "could not set maximum SSL protocol version: %s\n" msgstr "не вдалося встановити максимальну версію протоколу SSL: %s\n" -#: fe-secure-openssl.c:937 +#: fe-secure-openssl.c:927 #, c-format msgid "could not read root certificate file \"%s\": %s\n" msgstr "не вдалося прочитати файл кореневого сертифікату \"%s\": %s\n" -#: fe-secure-openssl.c:990 +#: fe-secure-openssl.c:980 msgid "could not get home directory to locate root certificate file\n" "Either provide the file or change sslmode to disable server certificate verification.\n" msgstr "не вдалося отримати домашній каталог, щоб знайти файл кореневого сертифікату\n" "Надайте файл або змініть sslmode, щоб вимкнути перевірку серверного сертифікату.\n" -#: fe-secure-openssl.c:994 +#: fe-secure-openssl.c:984 #, c-format msgid "root certificate file \"%s\" does not exist\n" "Either provide the file or change sslmode to disable server certificate verification.\n" msgstr "файлу кореневого сертифікату \"%s\" не існує\n" "Вкажіть повний шлях до файлу або вимкніть перевірку сертифікату сервера, змінивши sslmode.\n" -#: fe-secure-openssl.c:1025 +#: fe-secure-openssl.c:1015 #, c-format msgid "could not open certificate file \"%s\": %s\n" msgstr "не вдалося відкрити файл сертифікату \"%s\": %s\n" -#: fe-secure-openssl.c:1044 +#: fe-secure-openssl.c:1034 #, c-format msgid "could not read certificate file \"%s\": %s\n" msgstr "не вдалося прочитати файл сертифікату \"%s\": %s\n" -#: fe-secure-openssl.c:1069 +#: fe-secure-openssl.c:1059 #, c-format msgid "could not establish SSL connection: %s\n" msgstr "не вдалося встановити SSL-підключення: %s\n" -#: fe-secure-openssl.c:1103 +#: fe-secure-openssl.c:1093 #, c-format msgid "could not set SSL Server Name Indication (SNI): %s\n" msgstr "не вдалося встановити Індикацію Імені Сервера протокол SSL (SNI): %s\n" -#: fe-secure-openssl.c:1149 +#: fe-secure-openssl.c:1140 #, c-format msgid "could not load SSL engine \"%s\": %s\n" msgstr "не вдалося завантажити модуль SSL \"%s\": %s\n" -#: fe-secure-openssl.c:1161 +#: fe-secure-openssl.c:1152 #, c-format msgid "could not initialize SSL engine \"%s\": %s\n" msgstr "не вдалося ініціалізувати модуль SSL \"%s\": %s\n" -#: fe-secure-openssl.c:1177 +#: fe-secure-openssl.c:1168 #, c-format msgid "could not read private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не вдалося прочитати закритий ключ SSL \"%s\" з модуля \"%s\": %s\n" -#: fe-secure-openssl.c:1191 +#: fe-secure-openssl.c:1182 #, c-format msgid "could not load private SSL key \"%s\" from engine \"%s\": %s\n" msgstr "не вдалося завантажити закритий ключ SSL \"%s\" з модуля \"%s\": %s\n" -#: fe-secure-openssl.c:1228 +#: fe-secure-openssl.c:1219 #, c-format msgid "certificate present, but not private key file \"%s\"\n" msgstr "сертифікат присутній, але файл закритого ключа \"%s\" ні\n" -#: fe-secure-openssl.c:1237 +#: fe-secure-openssl.c:1228 #, c-format msgid "private key file \"%s\" is not a regular file\n" msgstr "файл закритого ключа \"%s\" не є звичайним файлом\n" -#: fe-secure-openssl.c:1270 +#: fe-secure-openssl.c:1261 #, c-format msgid "private key file \"%s\" has group or world access; file must have permissions u=rw (0600) or less if owned by the current user, or permissions u=rw,g=r (0640) or less if owned by root\n" msgstr "файл закритого ключа \"%s\" має груповий або загальний доступ; файл повинен мати права u=rw (0600) або менше, якщо він належить поточному користувачу, або права u=rw,g=r (0640) або менше, якщо належить root\n" -#: fe-secure-openssl.c:1295 +#: fe-secure-openssl.c:1286 #, c-format msgid "could not load private key file \"%s\": %s\n" msgstr "не вдалося завантажити файл закритого ключа \"%s\": %s\n" -#: fe-secure-openssl.c:1313 +#: fe-secure-openssl.c:1304 #, c-format msgid "certificate does not match private key file \"%s\": %s\n" msgstr "сертифікат не відповідає файлу закритого ключа \"%s\": %s\n" -#: fe-secure-openssl.c:1413 +#: fe-secure-openssl.c:1406 #, c-format msgid "This may indicate that the server does not support any SSL protocol version between %s and %s.\n" msgstr "Це може вказувати, що сервер не підтримує жодної версії протоколу SSL між %s і %s.\n" -#: fe-secure-openssl.c:1449 +#: fe-secure-openssl.c:1442 #, c-format msgid "certificate could not be obtained: %s\n" msgstr "не вдалося отримати сертифікат: %s\n" -#: fe-secure-openssl.c:1555 +#: fe-secure-openssl.c:1549 #, c-format msgid "no SSL error reported" msgstr "немає повідомлення про помилку SSL" -#: fe-secure-openssl.c:1564 +#: fe-secure-openssl.c:1575 #, c-format msgid "SSL error code %lu" msgstr "Код помилки SSL %lu" -#: fe-secure-openssl.c:1812 +#: fe-secure-openssl.c:1847 #, c-format msgid "WARNING: sslpassword truncated\n" msgstr "ПОПЕРЕДЖЕННЯ: sslpassword скорочено\n" -#: fe-secure.c:267 +#: fe-secure.c:274 #, c-format msgid "could not receive data from server: %s\n" msgstr "не вдалося отримати дані з серверу: %s\n" -#: fe-secure.c:380 +#: fe-secure.c:387 #, c-format msgid "could not send data to server: %s\n" msgstr "не вдалося передати дані серверу: %s\n" diff --git a/src/nls-global.mk b/src/nls-global.mk index 53129f0a04e..552eeb783a4 100644 --- a/src/nls-global.mk +++ b/src/nls-global.mk @@ -132,8 +132,13 @@ init-po: po/$(CATALOG_NAME).pot # For performance reasons, only calculate these when the user actually # requested update-po or a specific file. ifneq (,$(filter update-po %.po.new,$(MAKECMDGOALS))) +ifdef PGXS +ALL_LANGUAGES := $(shell find . -name '*.po' -print | sed 's,^.*/\([^/]*\).po$$,\1,' | LC_ALL=C sort -u) +all_compendia := $(shell find . -name '*.po' -print | LC_ALL=C sort) +else ALL_LANGUAGES := $(shell find $(top_srcdir) -name '*.po' -print | sed 's,^.*/\([^/]*\).po$$,\1,' | LC_ALL=C sort -u) all_compendia := $(shell find $(top_srcdir) -name '*.po' -print | LC_ALL=C sort) +endif else ALL_LANGUAGES = $(AVAIL_LANGUAGES) all_compendia = FORCE diff --git a/src/oracle_test/isolation/expected/eval-plan-qual.out b/src/oracle_test/isolation/expected/eval-plan-qual.out index 0590d16195b..6c94bb22361 100644 --- a/src/oracle_test/isolation/expected/eval-plan-qual.out +++ b/src/oracle_test/isolation/expected/eval-plan-qual.out @@ -1188,6 +1188,100 @@ subid|id (1 row) +starting permutation: tid1 tid2 c1 c2 read +step tid1: UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tid2: UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' RETURNING accountid, balance; +step c1: COMMIT; +step tid2: <... completed> +accountid|balance +---------+------- +(0 rows) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 700| 1400 +savings | 600| 1200 +(2 rows) + + +starting permutation: tid1 tidsucceed2 c1 c2 read +step tid1: UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tidsucceed2: UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' OR ctid = '(0,3)' RETURNING accountid, balance; +step c1: COMMIT; +step tidsucceed2: <... completed> +accountid|balance +---------+------- +checking | 900 +(1 row) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 900| 1400 +savings | 600| 1200 +(2 rows) + + +starting permutation: tidrange1 tidrange2 c1 c2 read +step tidrange1: UPDATE accounts SET balance = balance + 100 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tidrange2: UPDATE accounts SET balance = balance + 200 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; +step c1: COMMIT; +step tidrange2: <... completed> +accountid|balance +---------+------- +(0 rows) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 700| 1400 +savings | 600| 1200 +(2 rows) + + +starting permutation: tid1 tid2 r1 c2 read +step tid1: UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tid2: UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' RETURNING accountid, balance; +step r1: ROLLBACK; +step tid2: <... completed> +accountid|balance +---------+------- +checking | 800 +(1 row) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 800| 1600 +savings | 600| 1200 +(2 rows) + + starting permutation: simplepartupdate conditionalpartupdate c1 c2 read_part step simplepartupdate: update parttbl set b = b + 10; diff --git a/src/oracle_test/isolation/expected/inplace-inval.out b/src/oracle_test/isolation/expected/inplace-inval.out index e68eca5de98..c35895a8aa7 100644 --- a/src/oracle_test/isolation/expected/inplace-inval.out +++ b/src/oracle_test/isolation/expected/inplace-inval.out @@ -1,6 +1,6 @@ Parsed test spec with 3 sessions -starting permutation: cachefill3 cir1 cic2 ddl3 +starting permutation: cachefill3 cir1 cic2 ddl3 read1 step cachefill3: TABLE newly_indexed; c - @@ -9,6 +9,14 @@ c step cir1: BEGIN; CREATE INDEX i1 ON newly_indexed (c); ROLLBACK; step cic2: CREATE INDEX i2 ON newly_indexed (c); step ddl3: ALTER TABLE newly_indexed ADD extra int; +step read1: + SELECT relhasindex FROM pg_class WHERE oid = 'newly_indexed'::regclass; + +relhasindex +----------- +t +(1 row) + starting permutation: cir1 cic2 ddl3 read1 step cir1: BEGIN; CREATE INDEX i1 ON newly_indexed (c); ROLLBACK; diff --git a/src/oracle_test/isolation/expected/insert-conflict-do-update-4.out b/src/oracle_test/isolation/expected/insert-conflict-do-update-4.out new file mode 100644 index 00000000000..6e96e0d12da --- /dev/null +++ b/src/oracle_test/isolation/expected/insert-conflict-do-update-4.out @@ -0,0 +1,63 @@ +Parsed test spec with 2 sessions + +starting permutation: lock2 insert1 update2a c2 select1 c1 +step lock2: SELECT * FROM upsert WHERE i = 1 FOR UPDATE; +i| j| k +-+--+--- +1|10|100 +(1 row) + +step insert1: INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; +step update2a: UPDATE upsert SET i = i + 10 WHERE i = 1; +step c2: COMMIT; +step insert1: <... completed> +step select1: SELECT * FROM upsert; + i| j| k +--+--+--- +11|10|100 + 1|11|111 +(2 rows) + +step c1: COMMIT; + +starting permutation: lock2 insert1 update2b c2 select1 c1 +step lock2: SELECT * FROM upsert WHERE i = 1 FOR UPDATE; +i| j| k +-+--+--- +1|10|100 +(1 row) + +step insert1: INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; +step update2b: UPDATE upsert SET i = i + 150 WHERE i = 1; +step c2: COMMIT; +step insert1: <... completed> +step select1: SELECT * FROM upsert; + i| j| k +---+--+--- + 1|11|111 +151|10|100 +(2 rows) + +step c1: COMMIT; + +starting permutation: lock2 insert1 delete2 c2 select1 c1 +step lock2: SELECT * FROM upsert WHERE i = 1 FOR UPDATE; +i| j| k +-+--+--- +1|10|100 +(1 row) + +step insert1: INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; +step delete2: DELETE FROM upsert WHERE i = 1; +step c2: COMMIT; +step insert1: <... completed> +step select1: SELECT * FROM upsert; +i| j| k +-+--+--- +1|11|111 +(1 row) + +step c1: COMMIT; diff --git a/src/oracle_test/isolation/isolation_schedule b/src/oracle_test/isolation/isolation_schedule index 416ff733959..b92878966df 100644 --- a/src/oracle_test/isolation/isolation_schedule +++ b/src/oracle_test/isolation/isolation_schedule @@ -46,6 +46,7 @@ test: insert-conflict-do-nothing-2 test: insert-conflict-do-update test: insert-conflict-do-update-2 test: insert-conflict-do-update-3 +test: insert-conflict-do-update-4 test: insert-conflict-specconflict test: delete-abort-savept test: delete-abort-savept-2 diff --git a/src/oracle_test/isolation/specs/eval-plan-qual.spec b/src/oracle_test/isolation/specs/eval-plan-qual.spec index cf27577e692..9e53b772bee 100644 --- a/src/oracle_test/isolation/specs/eval-plan-qual.spec +++ b/src/oracle_test/isolation/specs/eval-plan-qual.spec @@ -95,6 +95,10 @@ step upsert1 { WHERE NOT EXISTS (SELECT 1 FROM upsert); } +# Tests for Tid / Tid Range Scan +step tid1 { UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; } +step tidrange1 { UPDATE accounts SET balance = balance + 100 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; } + # tests with table p check inheritance cases: # readp1/writep1/readp2 tests a bug where nodeLockRows did the wrong thing # when the first updated tuple was in a non-first child table. @@ -237,6 +241,11 @@ step updateforcip3 { step wrtwcte { UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; } step wrjt { UPDATE jointest SET data = 42 WHERE id = 7; } +step tid2 { UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' RETURNING accountid, balance; } +step tidrange2 { UPDATE accounts SET balance = balance + 200 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; } +# here, recheck succeeds; (0,3) is the id that step tid1 will assign +step tidsucceed2 { UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' OR ctid = '(0,3)' RETURNING accountid, balance; } + step conditionalpartupdate { update parttbl set c = -c where b < 10; } @@ -379,6 +388,11 @@ permutation wrtwcte readwcte c1 c2 permutation wrjt selectjoinforupdate c2 c1 permutation wrjt selectresultforupdate c2 c1 permutation wrtwcte multireadwcte c1 c2 +permutation tid1 tid2 c1 c2 read +permutation tid1 tidsucceed2 c1 c2 read +permutation tidrange1 tidrange2 c1 c2 read +# test that a rollback on s1 has s2 perform the update on the original row +permutation tid1 tid2 r1 c2 read permutation simplepartupdate conditionalpartupdate c1 c2 read_part permutation simplepartupdate complexpartupdate c1 c2 read_part diff --git a/src/oracle_test/isolation/specs/inplace-inval.spec b/src/oracle_test/isolation/specs/inplace-inval.spec index 96954fd86c4..b99112ddb88 100644 --- a/src/oracle_test/isolation/specs/inplace-inval.spec +++ b/src/oracle_test/isolation/specs/inplace-inval.spec @@ -1,7 +1,7 @@ -# If a heap_update() caller retrieves its oldtup from a cache, it's possible -# for that cache entry to predate an inplace update, causing loss of that -# inplace update. This arises because the transaction may abort before -# sending the inplace invalidation message to the shared queue. +# An inplace update had been able to abort before sending the inplace +# invalidation message to the shared queue. If a heap_update() caller then +# retrieved its oldtup from a cache, the heap_update() could revert the +# inplace update. setup { @@ -27,14 +27,12 @@ step cachefill3 { TABLE newly_indexed; } step ddl3 { ALTER TABLE newly_indexed ADD extra int; } -# XXX shows an extant bug. Adding step read1 at the end would usually print -# relhasindex=f (not wanted). This does not reach the unwanted behavior under -# -DCATCACHE_FORCE_RELEASE and friends. permutation cachefill3 # populates the pg_class row in the catcache cir1 # sets relhasindex=true; rollback discards cache inval cic2 # sees relhasindex=true, skips changing it (so no inval) ddl3 # cached row as the oldtup of an update, losing relhasindex + read1 # observe damage # without cachefill3, no bug permutation cir1 cic2 ddl3 read1 diff --git a/src/oracle_test/isolation/specs/insert-conflict-do-update-4.spec b/src/oracle_test/isolation/specs/insert-conflict-do-update-4.spec new file mode 100644 index 00000000000..6297b1d1d6c --- /dev/null +++ b/src/oracle_test/isolation/specs/insert-conflict-do-update-4.spec @@ -0,0 +1,42 @@ +# INSERT...ON CONFLICT DO UPDATE test with partitioned table +# +# We use SELECT FOR UPDATE to block the INSERT at the point where +# it has found an existing tuple and is attempting to update it. +# Then we can execute a conflicting update and verify the results. +# Of course, this only works in READ COMMITTED mode, else we'd get an error. + +setup +{ + CREATE TABLE upsert (i int PRIMARY KEY, j int, k int) PARTITION BY RANGE (i); + CREATE TABLE upsert_1 PARTITION OF upsert FOR VALUES FROM (1) TO (100); + CREATE TABLE upsert_2 PARTITION OF upsert FOR VALUES FROM (100) TO (200); + + INSERT INTO upsert VALUES (1, 10, 100); +} + +teardown +{ + DROP TABLE upsert; +} + +session s1 +setup { BEGIN ISOLATION LEVEL READ COMMITTED; } +step insert1 { INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; } +step select1 { SELECT * FROM upsert; } +step c1 { COMMIT; } + +session s2 +setup { BEGIN ISOLATION LEVEL READ COMMITTED; } +step lock2 { SELECT * FROM upsert WHERE i = 1 FOR UPDATE; } +step update2a { UPDATE upsert SET i = i + 10 WHERE i = 1; } +step update2b { UPDATE upsert SET i = i + 150 WHERE i = 1; } +step delete2 { DELETE FROM upsert WHERE i = 1; } +step c2 { COMMIT; } + +# Test case where concurrent update moves the target row within the partition +permutation lock2 insert1 update2a c2 select1 c1 +# Test case where concurrent update moves the target row to another partition +permutation lock2 insert1 update2b c2 select1 c1 +# Test case where target row is concurrently deleted +permutation lock2 insert1 delete2 c2 select1 c1 diff --git a/src/oracle_test/modules/brin/t/01_workitems.pl b/src/oracle_test/modules/brin/t/01_workitems.pl index a4f603a9d54..5fd0c57ca26 100644 --- a/src/oracle_test/modules/brin/t/01_workitems.pl +++ b/src/oracle_test/modules/brin/t/01_workitems.pl @@ -7,7 +7,7 @@ use warnings; use TestLib; -use Test::More tests => 2; +use Test::More tests => 4; use PostgresNode; my $node = get_new_node('tango'); @@ -24,13 +24,31 @@ create index brin_wi_idx on brin_wi using brin (a) with (pages_per_range=1, autosummarize=on); ' ); +# Another table with an index that requires a snapshot to run +$node->safe_psql( + 'postgres', + 'create table journal (d timestamp) with (fillfactor = 10); + create function packdate(d timestamp) returns text language plpgsql + as $$ begin return to_char(d, \'yyyymm\'); end; $$ + returns null on null input immutable; + create index brin_packdate_idx on journal using brin (packdate(d)) + with (autosummarize = on, pages_per_range = 1); + ' +); + my $count = $node->safe_psql('postgres', "select count(*) from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)" ); -is($count, '1', "initial index state is correct"); +is($count, '1', "initial brin_wi_index index state is correct"); +$count = $node->safe_psql('postgres', + "select count(*) from brin_page_items(get_raw_page('brin_packdate_idx', 2), 'brin_packdate_idx'::regclass)" +); +is($count, '1', "initial brin_packdate_idx index state is correct"); $node->safe_psql('postgres', 'insert into brin_wi select * from generate_series(1, 100)'); +$node->safe_psql('postgres', + "insert into journal select * from generate_series(timestamp '1976-08-01', '1976-10-28', '1 day')"); $node->poll_query_until( 'postgres', @@ -38,7 +56,20 @@ 't'); $count = $node->safe_psql('postgres', - "select count(*) > 1 from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)" + "select count(*) from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass) + where not placeholder;" ); -is($count, 't', "index got summarized"); +cmp_ok($count, '>', '1', "$count brin_wi_idx ranges got summarized"); + +$node->poll_query_until( + 'postgres', + "select count(*) > 1 from brin_page_items(get_raw_page('brin_packdate_idx', 2), 'brin_packdate_idx'::regclass)", + 't'); + +$count = $node->safe_psql('postgres', + "select count(*) from brin_page_items(get_raw_page('brin_packdate_idx', 2), 'brin_packdate_idx'::regclass) + where not placeholder;" +); +cmp_ok($count, '>', '1', "$count brin_packdate_idx ranges got summarized"); + $node->stop; diff --git a/src/oracle_test/modules/test_misc/Makefile b/src/oracle_test/modules/test_misc/Makefile index b4f29d3c9eb..0c375cd95c7 100644 --- a/src/oracle_test/modules/test_misc/Makefile +++ b/src/oracle_test/modules/test_misc/Makefile @@ -3,6 +3,8 @@ TAP_TESTS = 1 +EXTRA_INSTALL = contrib/test_decoding + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/src/oracle_test/modules/test_misc/t/008_replslot_single_user.pl b/src/oracle_test/modules/test_misc/t/008_replslot_single_user.pl new file mode 100644 index 00000000000..796700d621f --- /dev/null +++ b/src/oracle_test/modules/test_misc/t/008_replslot_single_user.pl @@ -0,0 +1,95 @@ +# Copyright (c) 2025, PostgreSQL Global Development Group + +# Test manipulations of replication slots with the single-user mode. + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; + +# Skip the tests on Windows, as single-user mode would fail on permission +# failure with privileged accounts. +if ($windows_os) +{ + plan skip_all => 'this test is not supported by this platform'; +} + +# Run set of queries in single-user mode. +sub test_single_mode +{ + my ($node, $queries, $testname) = @_; + + my $result = run_log( + [ + 'postgres', '--single', '-F', + '-c' => 'exit_on_error=true', + '-D' => $node->data_dir, + 'postgres' + ], + '<' => \$queries); + + ok($result, $testname); +} + +my $slot_logical = 'slot_logical'; +my $slot_physical = 'slot_physical'; + +# Initialize a node +my $node = PostgreSQL::Test::Cluster->new('node'); +$node->init(allows_streaming => "logical"); +$node->start; + +# Define initial table +$node->safe_psql('postgres', "CREATE TABLE foo (id int)"); + +$node->stop; + +test_single_mode( + $node, + "SELECT pg_create_logical_replication_slot('$slot_logical', 'test_decoding')", + "logical slot creation"); +test_single_mode( + $node, + "SELECT pg_create_physical_replication_slot('$slot_physical', true)", + "physical slot creation"); +test_single_mode( + $node, + "SELECT pg_create_physical_replication_slot('slot_tmp', true, true)", + "temporary physical slot creation"); + +test_single_mode( + $node, qq( +INSERT INTO foo VALUES (1); +SELECT pg_logical_slot_get_changes('$slot_logical', NULL, NULL); +), + "logical decoding"); + +test_single_mode( + $node, + "SELECT pg_replication_slot_advance('$slot_logical', pg_current_wal_lsn())", + "logical slot advance"); +test_single_mode( + $node, + "SELECT pg_replication_slot_advance('$slot_physical', pg_current_wal_lsn())", + "physical slot advance"); + +test_single_mode( + $node, + "SELECT pg_copy_logical_replication_slot('$slot_logical', 'slot_log_copy')", + "logical slot copy"); +test_single_mode( + $node, + "SELECT pg_copy_physical_replication_slot('$slot_physical', 'slot_phy_copy')", + "physical slot copy"); + +test_single_mode( + $node, + "SELECT pg_drop_replication_slot('$slot_logical')", + "logical slot drop"); +test_single_mode( + $node, + "SELECT pg_drop_replication_slot('$slot_physical')", + "physical slot drop"); + +done_testing(); diff --git a/src/oracle_test/modules/test_pg_dump/expected/test_pg_dump.out b/src/oracle_test/modules/test_pg_dump/expected/test_pg_dump.out index 27f20710036..1bd4ba60399 100644 --- a/src/oracle_test/modules/test_pg_dump/expected/test_pg_dump.out +++ b/src/oracle_test/modules/test_pg_dump/expected/test_pg_dump.out @@ -98,18 +98,17 @@ DROP OWNED BY regress_dump_test_role RESTRICT; DROP ROLE regress_dump_test_role; DROP EXTENSION test_pg_dump; -- shouldn't be anything left in pg_init_privs -SELECT * FROM pg_init_privs WHERE privtype = 'e'; - objoid | classoid | objsubid | privtype | initprivs ---------+----------+----------+----------+----------------------------------------- - 15774 | 1259 | 0 | e | {ivorysql=rwU/ivorysql,=rwU/ivorysql} - 15808 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15813 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15818 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15824 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15829 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15834 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15840 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15845 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} - 15850 | 1259 | 0 | e | {ivorysql=arwdDxt/ivorysql,=r/ivorysql} -(10 rows) +-- (exclude ivorysql_ora extension which is created during initdb) +SELECT p.* FROM pg_init_privs p +WHERE p.privtype = 'e' +AND NOT EXISTS ( + SELECT 1 FROM pg_depend d + JOIN pg_extension e ON d.refobjid = e.oid + WHERE d.objid = p.objoid + AND d.classid = p.classoid + AND e.extname = 'ivorysql_ora' +); + objoid | classoid | objsubid | privtype | initprivs +--------+----------+----------+----------+----------- +(0 rows) diff --git a/src/oracle_test/modules/test_pg_dump/sql/test_pg_dump.sql b/src/oracle_test/modules/test_pg_dump/sql/test_pg_dump.sql index e42f925a768..4d006eb2973 100644 --- a/src/oracle_test/modules/test_pg_dump/sql/test_pg_dump.sql +++ b/src/oracle_test/modules/test_pg_dump/sql/test_pg_dump.sql @@ -117,4 +117,13 @@ DROP ROLE regress_dump_test_role; DROP EXTENSION test_pg_dump; -- shouldn't be anything left in pg_init_privs -SELECT * FROM pg_init_privs WHERE privtype = 'e'; +-- (exclude ivorysql_ora extension which is created during initdb) +SELECT p.* FROM pg_init_privs p +WHERE p.privtype = 'e' +AND NOT EXISTS ( + SELECT 1 FROM pg_depend d + JOIN pg_extension e ON d.refobjid = e.oid + WHERE d.objid = p.objoid + AND d.classid = p.classoid + AND e.extname = 'ivorysql_ora' +); diff --git a/src/oracle_test/modules/test_pg_dump/t/001_base.pl b/src/oracle_test/modules/test_pg_dump/t/001_base.pl index 976b2afb88b..6f82ca55487 100644 --- a/src/oracle_test/modules/test_pg_dump/t/001_base.pl +++ b/src/oracle_test/modules/test_pg_dump/t/001_base.pl @@ -286,16 +286,17 @@ # Tests which are considered 'full' dumps by pg_dump, but there # are flags used to exclude specific items (ACLs, blobs, etc). my %full_runs = ( - binary_upgrade => 1, - clean => 1, - clean_if_exists => 1, - createdb => 1, - defaults => 1, - exclude_table => 1, - no_privs => 1, - no_owner => 1, - with_extension => 1, - without_extension => 1); + binary_upgrade => 1, + clean => 1, + clean_if_exists => 1, + createdb => 1, + defaults => 1, + exclude_table => 1, + no_privs => 1, + no_owner => 1, + privileged_internals => 1, + with_extension => 1, + without_extension => 1); my %tests = ( 'ALTER EXTENSION test_pg_dump' => { @@ -331,6 +332,16 @@ like => { pg_dumpall_globals => 1, }, }, + 'CREATE ROLE regress_dump_login_role' => { + create_order => 1, + create_sql => 'CREATE ROLE regress_dump_login_role LOGIN;', + regexp => qr/^ + \QCREATE ROLE regress_dump_login_role;\E + \n\QALTER ROLE regress_dump_login_role WITH \E.*\Q LOGIN \E.*; + \n/xm, + like => { pg_dumpall_globals => 1, }, + }, + 'CREATE SEQUENCE regress_pg_dump_table_col1_seq' => { regexp => qr/^ \QCREATE SEQUENCE public.regress_pg_dump_table_col1_seq\E @@ -678,6 +689,7 @@ section_pre_data => 1, # Excludes this schema as extension is not listed. without_extension_explicit_schema => 1, + privileged_internals => 1, }, }, @@ -694,6 +706,7 @@ section_pre_data => 1, # Excludes this schema as extension is not listed. without_extension_explicit_schema => 1, + privileged_internals => 1, }, }, @@ -713,6 +726,9 @@ # Excludes the extension and keeps the schema's data. without_extension_internal_schema => 1, }, + unlike => { + privileged_internals => 1, + }, },); ######################################### diff --git a/src/oracle_test/modules/test_regex/test_regex.c b/src/oracle_test/modules/test_regex/test_regex.c index 20b0dae21d6..c91592ec5d8 100644 --- a/src/oracle_test/modules/test_regex/test_regex.c +++ b/src/oracle_test/modules/test_regex/test_regex.c @@ -425,7 +425,8 @@ parse_test_flags(test_re_flags *flags, text *opts) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid regular expression test option: \"%.*s\"", - pg_mblen(opt_p + i), opt_p + i))); + pg_mblen_range(opt_p + i, opt_p + opt_len), + opt_p + i))); break; } } diff --git a/src/oracle_test/modules/test_shm_mq/worker.c b/src/oracle_test/modules/test_shm_mq/worker.c index 43a02f2c72a..68e37955bff 100644 --- a/src/oracle_test/modules/test_shm_mq/worker.c +++ b/src/oracle_test/modules/test_shm_mq/worker.c @@ -79,7 +79,7 @@ test_shm_mq_main(Datum main_arg) * exit, which is fine. If there were a ResourceOwner, it would acquire * ownership of the mapping, but we have no need for that. */ - seg = dsm_attach(DatumGetInt32(main_arg)); + seg = dsm_attach(DatumGetUInt32(main_arg)); if (seg == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), diff --git a/src/oracle_test/perl/PostgreSQL/Test/BackgroundPsql.pm b/src/oracle_test/perl/PostgreSQL/Test/BackgroundPsql.pm index 9878bedef88..1b03a19ae3b 100644 --- a/src/oracle_test/perl/PostgreSQL/Test/BackgroundPsql.pm +++ b/src/oracle_test/perl/PostgreSQL/Test/BackgroundPsql.pm @@ -134,11 +134,25 @@ sub _wait_connect # connection failures are caught here, relieving callers of the need to # handle those. (Right now, we have no particularly good handling for # errors anyway, but that might be added later.) + # + # See query() for details about why/how the banner is used. my $banner = "background_psql: ready"; - $self->{stdin} .= "\\echo $banner\n"; + my $banner_match = qr/$banner\r?\n/; + $self->{stdin} .= "\\echo '$banner'\n\\warn '$banner'\n"; $self->{run}->pump() - until $self->{stdout} =~ /$banner/ || $self->{timeout}->is_expired; - $self->{stdout} = ''; # clear out banner + until ($self->{stdout} =~ /$banner_match/ + && $self->{stderr} =~ /$banner_match/) + || $self->{timeout}->is_expired; + + note "connect output:\n", + explain { + stdout => $self->{stdout}, + stderr => $self->{stderr}, + }; + + # clear out banners + $self->{stdout} = ''; + $self->{stderr} = ''; die "psql startup timed out" if $self->{timeout}->is_expired; } @@ -213,17 +227,45 @@ sub query # Feed the query to psql's stdin, followed by \n (so psql processes the # line), by a ; (so that psql issues the query, if it doesn't include a ; - # itself), and a separator echoed with \echo, that we can wait on. + # itself), and a separator echoed both with \echo and \warn, that we can + # wait on. + # + # To avoid somehow confusing the separator from separately issued queries, + # and to make it easier to debug, we include a per-psql query counter in + # the separator. + # + # We need both \echo (printing to stdout) and \warn (printing to stderr), + # because on windows we can get data on stdout before seeing data on + # stderr (or vice versa), even if psql printed them in the opposite + # order. We therefore wait on both. + # + # In interactive psql we emit \r\n, so we need to allow for that. + # Also, include quotes around the banner string in the \echo and \warn + # commands, not because the string needs quoting but so that $banner_match + # can't match readline's echoing of these commands. my $banner = "background_psql: QUERY_SEPARATOR"; - $self->{stdin} .= "$query\n;\n\\echo $banner\n"; + my $banner_match = qr/$banner\r?\n/; + $self->{stdin} .= "$query\n;\n\\echo '$banner'\n\\warn '$banner'\n"; + $self->{run}->pump() + until ($self->{stdout} =~ /$banner_match/ + && $self->{stderr} =~ /$banner_match/) + || $self->{timeout}->is_expired; - pump_until($self->{run}, $self->{timeout}, \$self->{stdout}, qr/$banner/); + note "results query:\n", + explain { + stdout => $self->{stdout}, + stderr => $self->{stderr}, + }; die "psql query timed out" if $self->{timeout}->is_expired; - $output = $self->{stdout}; - # remove banner again, our caller doesn't care - $output =~ s/\n$banner\n$//s; + # Remove banner from stdout and stderr, our caller doesn't want it. + # Also remove the query output's trailing newline, if present (there + # would not be one if consuming an empty query result). + $banner_match = qr/\r?\n?$banner\r?\n/; + $output = $self->{stdout}; + $output =~ s/$banner_match//; + $self->{stderr} =~ s/$banner_match//; # clear out output for the next query $self->{stdout} = ''; diff --git a/src/oracle_test/perl/PostgresNode.pm b/src/oracle_test/perl/PostgresNode.pm index 497140be6d3..e335ce29040 100644 --- a/src/oracle_test/perl/PostgresNode.pm +++ b/src/oracle_test/perl/PostgresNode.pm @@ -1944,6 +1944,7 @@ sub background_psql local %ENV = $self->_get_env(); + my $replication = $params{replication}; my $timeout = undef; my @psql_params = ( @@ -2376,7 +2377,7 @@ sub issues_sql_like =pod -=item $node->log_check($offset, $test_name, %parameters) +=item $node->log_check($test_name, $offset, %params) Check contents of server logs. diff --git a/src/oracle_test/recovery/t/004_timeline_switch.pl b/src/oracle_test/recovery/t/004_timeline_switch.pl index c101980e9e2..6d7b21ba73d 100644 --- a/src/oracle_test/recovery/t/004_timeline_switch.pl +++ b/src/oracle_test/recovery/t/004_timeline_switch.pl @@ -7,7 +7,7 @@ use File::Path qw(rmtree); use PostgresNode; use TestLib; -use Test::More tests => 3; +use Test::More tests => 5; $ENV{PGDATABASE} = 'postgres'; @@ -58,8 +58,19 @@ 'postgresql.conf', qq( primary_conninfo='$connstr_1' )); + +# Rotate logfile before restarting, for the log checks done below. +$node_standby_2->rotate_logfile; $node_standby_2->restart; +# Wait for walreceiver to reconnect after the restart. We want to +# verify that after reconnection, the walreceiver stays alive during +# the timeline switch. +$node_standby_2->poll_query_until('postgres', + "SELECT EXISTS(SELECT 1 FROM pg_stat_wal_receiver)"); +my $wr_pid_before_switch = $node_standby_2->safe_psql('postgres', + "SELECT pid FROM pg_stat_wal_receiver"); + # Insert some data in standby 1 and check its presence in standby 2 # to ensure that the timeline switch has been done. $node_standby_1->safe_psql('postgres', @@ -71,6 +82,22 @@ $node_standby_2->safe_psql('postgres', "SELECT count(*) FROM tab_int"); is($result, qq(2000), 'check content of standby 2'); +# Check the logs, WAL receiver should not have been stopped while +# transitioning to its new timeline. There is no need to rely on an +# offset in this check of the server logs: a new log file is used on +# node restart when primary_conninfo is updated above. +ok( !$node_standby_2->log_contains( + "FATAL: .* terminating walreceiver process due to administrator command" + ), + 'WAL receiver should not be stopped across timeline jumps'); + +# Verify that the walreceiver process stayed alive across the timeline +# switch, check its PID. +my $wr_pid_after_switch = $node_standby_2->safe_psql('postgres', + "SELECT pid FROM pg_stat_wal_receiver"); + +is($wr_pid_before_switch, $wr_pid_after_switch, + 'WAL receiver PID matches across timeline jumps'); # Ensure that a standby is able to follow a primary on a newer timeline # when WAL archiving is enabled. diff --git a/src/oracle_test/recovery/t/037_invalid_database.pl b/src/oracle_test/recovery/t/037_invalid_database.pl index 7e5e0bb31f9..69fcaaf0c3b 100644 --- a/src/oracle_test/recovery/t/037_invalid_database.pl +++ b/src/oracle_test/recovery/t/037_invalid_database.pl @@ -92,13 +92,12 @@ my $pid = $bgpsql->query('SELECT pg_backend_pid()'); # create the database, prevent drop database via lock held by a 2PC transaction -ok( $bgpsql->query_safe( - qq( +$bgpsql->query_safe( + qq( CREATE DATABASE regression_invalid_interrupt; BEGIN; LOCK pg_tablespace; - PREPARE TRANSACTION 'lock_tblspc';)), - "blocked DROP DATABASE completion"); + PREPARE TRANSACTION 'lock_tblspc';)); # Try to drop. This will wait due to the still held lock. $bgpsql->query_until(qr//, "DROP DATABASE regression_invalid_interrupt;\n"); @@ -131,11 +130,8 @@ # To properly drop the database, we need to release the lock previously preventing # doing so. -ok($bgpsql->query_safe(qq(ROLLBACK PREPARED 'lock_tblspc')), - "unblock DROP DATABASE"); - -ok($bgpsql->query(qq(DROP DATABASE regression_invalid_interrupt)), - "DROP DATABASE invalid_interrupt"); +$bgpsql->query_safe(qq(ROLLBACK PREPARED 'lock_tblspc')); +$bgpsql->query_safe(qq(DROP DATABASE regression_invalid_interrupt)); $bgpsql->quit(); diff --git a/src/oracle_test/recovery/t/043_vacuum_horizon_floor.pl b/src/oracle_test/recovery/t/043_vacuum_horizon_floor.pl index 3e3e424be94..ad21736b638 100644 --- a/src/oracle_test/recovery/t/043_vacuum_horizon_floor.pl +++ b/src/oracle_test/recovery/t/043_vacuum_horizon_floor.pl @@ -1,8 +1,5 @@ -use strict; -use warnings; -use PostgreSQL::Test::Cluster; -use Test::More; - +# Copyright (c) 2025, PostgreSQL Global Development Group +# # Test that vacuum prunes away all dead tuples killed before OldestXmin # # This test creates a table on a primary, updates the table to generate dead @@ -10,6 +7,11 @@ # GlobalVisState->maybe_needed on the primary to move backwards and precede # the value of OldestXmin set at the beginning of vacuuming the table. +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use Test::More; + # Set up nodes my $node_primary = PostgreSQL::Test::Cluster->new('primary'); $node_primary->init(allows_streaming => 'physical'); diff --git a/src/oracle_test/regress/expected/.gitignore b/src/oracle_test/regress/expected/.gitignore index 32ac5888d1a..4d4024b136c 100644 --- a/src/oracle_test/regress/expected/.gitignore +++ b/src/oracle_test/regress/expected/.gitignore @@ -3,6 +3,8 @@ /create_function_0.out /create_function_1.out /create_function_2.out +/encoding.out +/encoding_1.out /largeobject.out /largeobject_1.out /misc.out diff --git a/src/oracle_test/regress/expected/alter_table.out b/src/oracle_test/regress/expected/alter_table.out index aee42f9d87e..d0dcc91b6df 100644 --- a/src/oracle_test/regress/expected/alter_table.out +++ b/src/oracle_test/regress/expected/alter_table.out @@ -3469,12 +3469,15 @@ SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment F -- filenode function call can return NULL for a relation dropped concurrently -- with the call's surrounding query, so ignore a NULL mapped_oid for -- relations that no longer exist after all calls finish. +-- Temporary relations are ignored, as not supported by pg_filenode_relation(). CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid -WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +WHERE relkind IN ('r', 'i', 'S', 't', 'm') + AND relpersistence != 't' + AND mapped_oid IS DISTINCT FROM oid; SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT NULL; oid | mapped_oid | reltablespace | relfilenode | relname @@ -4351,6 +4354,14 @@ Check constraints: "part_rp100_a_check" CHECK (a >= 123 AND a < 133 AND a IS NOT NULL) DROP TABLE range_parted2; +-- Test that hash partitions continue to work after they're concurrently +-- detached (bugs #18371, #19070) +CREATE TABLE hash_parted2 (a int) PARTITION BY HASH(a); +CREATE TABLE part_hp PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 2, REMAINDER 0); +ALTER TABLE hash_parted2 DETACH PARTITION part_hp CONCURRENTLY; +DROP TABLE hash_parted2; +INSERT INTO part_hp VALUES (1); +DROP TABLE part_hp; -- Check ALTER TABLE commands for partitioned tables and partitions -- cannot add/drop column to/from *only* the parent ALTER TABLE ONLY list_parted2 ADD COLUMN c int; @@ -4578,6 +4589,21 @@ create trigger xtrig for each statement execute procedure xtrig(); update bar1 set a = a + 1; INFO: a=1, b=1 +/* Test case for bug #18970 */ +create table attbl(a int); +create table atref(b attbl check ((b).a is not null)); +alter table attbl alter column a type numeric; -- someday this should work +ERROR: cannot alter table "attbl" because column "atref.b" uses its row type +alter table atref drop constraint atref_b_check; +create statistics atref_stat on ((b).a is not null) from atref; +alter table attbl alter column a type numeric; -- someday this should work +ERROR: cannot alter table "attbl" because column "atref.b" uses its row type +drop statistics atref_stat; +create index atref_idx on atref (((b).a)); +alter table attbl alter column a type numeric; -- someday this should work +ERROR: cannot alter table "attbl" because column "atref.b" uses its row type +drop table attbl, atref; +/* End test case for bug #18970 */ -- Test that ALTER TABLE rewrite preserves a clustered index -- for normal indexes and indexes on constraints. create table alttype_cluster (a int); diff --git a/src/oracle_test/regress/expected/arrays.out b/src/oracle_test/regress/expected/arrays.out index 5a8c84ca0f9..1fd62d8ee46 100644 --- a/src/oracle_test/regress/expected/arrays.out +++ b/src/oracle_test/regress/expected/arrays.out @@ -1536,6 +1536,11 @@ select '[0:1]={1.1,2.2}'::float8[]; (1 row) -- all of the above should be accepted +-- some day we might allow these cases, but for now they're errors: +select array[]::oidvector; +ERROR: array is not a valid oidvector +select array[]::int2vector; +ERROR: array is not a valid int2vector -- tests for array aggregates CREATE TEMP TABLE arraggtest ( f1 INT[], f2 TEXT[][], f3 FLOAT[]); INSERT INTO arraggtest (f1, f2, f3) VALUES diff --git a/src/oracle_test/regress/expected/collate.icu.utf8.out b/src/oracle_test/regress/expected/collate.icu.utf8.out index 02a946c2ef6..409262600ca 100644 --- a/src/oracle_test/regress/expected/collate.icu.utf8.out +++ b/src/oracle_test/regress/expected/collate.icu.utf8.out @@ -813,10 +813,13 @@ SELECT a, CAST(b AS varchar) FROM collate_test3 ORDER BY 2; -- and plpgsql functions too CREATE FUNCTION mylt (text, text) RETURNS boolean LANGUAGE sql AS $$ select $1 < $2 $$; +/ CREATE FUNCTION mylt_noninline (text, text) RETURNS boolean LANGUAGE sql AS $$ select $1 < $2 limit 1 $$; +/ CREATE FUNCTION mylt_plpgsql (text, text) RETURNS boolean LANGUAGE plpgsql AS $$ begin return $1 < $2; end $$; +/ SELECT a.b AS a, b.b AS b, a.b < b.b AS lt, mylt(a.b, b.b), mylt_noninline(a.b, b.b), mylt_plpgsql(a.b, b.b) FROM collate_test1 a, collate_test1 b @@ -875,6 +878,7 @@ begin return xx < yy; end $$; +/ SELECT mylt2('a', 'B' collate "en-x-icu") as t, mylt2('a', 'B' collate "C") as f; t | f ---+--- @@ -890,6 +894,7 @@ begin return xx < yy; end $$; +/ SELECT mylt2('a', 'B') as f; f --- @@ -936,6 +941,7 @@ SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test3)) ORDER CREATE FUNCTION dup (anyelement) RETURNS anyelement AS 'select $1' LANGUAGE sql; +/ SELECT a, dup(b) FROM collate_test1 ORDER BY 2; a | dup ---+----- @@ -1519,15 +1525,15 @@ SELECT x FROM test3bpci WHERE x = 'abc'; x ----- abc - ABC -(2 rows) +(1 row) SELECT x FROM test3bpci WHERE x <> 'abc'; x ----- + ABC def ghi -(2 rows) +(3 rows) SELECT x FROM test3bpci WHERE x LIKE 'a%'; ERROR: nondeterministic collations are not supported for LIKE @@ -1540,71 +1546,75 @@ ERROR: nondeterministic collations are not supported for regular expressions SELECT x FROM test1bpci UNION SELECT x FROM test2bpci ORDER BY x; x ----- + ABC abc def ghi -(3 rows) +(4 rows) SELECT x FROM test2bpci UNION SELECT x FROM test1bpci ORDER BY x; x ----- ABC + abc def ghi -(3 rows) +(4 rows) SELECT x FROM test1bpci INTERSECT SELECT x FROM test2bpci ORDER BY x; x ----- - abc ghi -(2 rows) +(1 row) SELECT x FROM test2bpci INTERSECT SELECT x FROM test1bpci ORDER BY x; x ----- - ABC ghi -(2 rows) +(1 row) SELECT x FROM test1bpci EXCEPT SELECT x FROM test2bpci; x ----- + abc def -(1 row) +(2 rows) SELECT x FROM test2bpci EXCEPT SELECT x FROM test1bpci; - x ---- -(0 rows) + x +----- + ABC +(1 row) SELECT DISTINCT x FROM test3bpci ORDER BY x; x ----- + ABC abc def ghi -(3 rows) +(4 rows) SELECT count(DISTINCT x) FROM test3bpci; count ------- - 3 + 4 (1 row) SELECT x, count(*) FROM test3bpci GROUP BY x ORDER BY x; x | count -----+------- - abc | 2 + ABC | 1 + abc | 1 def | 1 ghi | 1 -(3 rows) +(4 rows) SELECT x, row_number() OVER (ORDER BY x), rank() OVER (ORDER BY x) FROM test3bpci ORDER BY x; x | row_number | rank -----+------------+------ abc | 1 | 1 - ABC | 2 | 1 + ABC | 2 | 2 def | 3 | 3 ghi | 4 | 4 (4 rows) @@ -1659,7 +1669,7 @@ SELECT 'ὀδυσσεύς' = 'ὈΔΥΣΣΕΎΣ' COLLATE case_sensitive; SELECT 'ὀδυσσεύς' = 'ὈΔΥΣΣΕΎΣ' COLLATE case_insensitive; ?column? ---------- - t + f (1 row) -- name vs. text comparison operators diff --git a/src/oracle_test/regress/expected/create_index.out b/src/oracle_test/regress/expected/create_index.out index 1514e21e1bf..3d9c1be357a 100644 --- a/src/oracle_test/regress/expected/create_index.out +++ b/src/oracle_test/regress/expected/create_index.out @@ -1244,6 +1244,8 @@ CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops); CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops); CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops); CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops) WITH (fillfactor=60); +CREATE INDEX hash_i4_partial_index ON hash_i4_heap USING hash (seqno) + WHERE seqno = 9999; CREATE UNLOGGED TABLE unlogged_hash_table (id int4); CREATE INDEX unlogged_hash_index ON unlogged_hash_table USING hash (id int4_ops); DROP TABLE unlogged_hash_table; @@ -1587,8 +1589,8 @@ DROP TABLE cwi_test; -- CREATE TABLE syscol_table (a INT); -- System columns cannot be indexed -CREATE INDEX ON syscolcol_table (ctid); -ERROR: relation "syscolcol_table" does not exist +CREATE INDEX ON syscol_table (ctid); +ERROR: index creation on system columns is not supported -- nor used in expressions CREATE INDEX ON syscol_table ((ctid >= '(1000,0)')); ERROR: index creation on system columns is not supported diff --git a/src/oracle_test/regress/expected/create_table.out b/src/oracle_test/regress/expected/create_table.out index b54bdd17004..2987af99e43 100644 --- a/src/oracle_test/regress/expected/create_table.out +++ b/src/oracle_test/regress/expected/create_table.out @@ -297,6 +297,18 @@ ERROR: tables declared WITH OIDS are not supported -- but explicitly not adding oids is still supported CREATE TEMP TABLE withoutoid() WITHOUT OIDS; DROP TABLE withoutoid; CREATE TEMP TABLE withoutoid() WITH (oids = false); DROP TABLE withoutoid; +-- temporary tables are ignored by pg_filenode_relation(). +CREATE TEMP TABLE relation_filenode_check(c1 int); +SELECT relpersistence, + pg_filenode_relation (reltablespace, pg_relation_filenode(oid)) + FROM pg_class + WHERE relname = 'relation_filenode_check'; + relpersistence | pg_filenode_relation +----------------+---------------------- + t | +(1 row) + +DROP TABLE relation_filenode_check; -- check restriction with default expressions -- invalid use of column reference in default expressions CREATE TABLE default_expr_column (id int DEFAULT (id)); diff --git a/src/oracle_test/regress/expected/euc_kr.out b/src/oracle_test/regress/expected/euc_kr.out new file mode 100644 index 00000000000..7a61c89a43a --- /dev/null +++ b/src/oracle_test/regress/expected/euc_kr.out @@ -0,0 +1,16 @@ +-- This test is about EUC_KR encoding, chosen as perhaps the most prevalent +-- non-UTF8, multibyte encoding as of 2026-01. Since UTF8 can represent all +-- of EUC_KR, also run the test in UTF8. +SELECT getdatabaseencoding() NOT IN ('EUC_KR', 'UTF8') AS skip_test \gset +\if :skip_test +\quit +\endif +-- Exercise is_multibyte_char_in_char (non-UTF8) slow path. +SELECT POSITION( + convert_from('\xbcf6c7d0', 'EUC_KR') IN + convert_from('\xb0fac7d02c20bcf6c7d02c20b1e2bcfa2c20bbee', 'EUC_KR')); + position +---------- + 5 +(1 row) + diff --git a/src/oracle_test/regress/expected/euc_kr_1.out b/src/oracle_test/regress/expected/euc_kr_1.out new file mode 100644 index 00000000000..faaac5d6355 --- /dev/null +++ b/src/oracle_test/regress/expected/euc_kr_1.out @@ -0,0 +1,6 @@ +-- This test is about EUC_KR encoding, chosen as perhaps the most prevalent +-- non-UTF8, multibyte encoding as of 2026-01. Since UTF8 can represent all +-- of EUC_KR, also run the test in UTF8. +SELECT getdatabaseencoding() NOT IN ('EUC_KR', 'UTF8') AS skip_test \gset +\if :skip_test +\quit diff --git a/src/oracle_test/regress/expected/foreign_key.out b/src/oracle_test/regress/expected/foreign_key.out index 4384cb78d76..16e872b7c4d 100644 --- a/src/oracle_test/regress/expected/foreign_key.out +++ b/src/oracle_test/regress/expected/foreign_key.out @@ -1972,21 +1972,26 @@ LEFT JOIN pg_class cf ON cf.oid = co.confrelid LEFT JOIN pg_constraint p ON p.oid = co.conparentid WHERE cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) ORDER BY co.contype, cr.relname, co.conname, p.conname; - relname | conname | contype | convalidated | conparent | convalidated | foreignrel -----------------+----------------------------+---------+--------------+----------------------------+--------------+---------------- - part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk - part1_self_fk | part1_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part2_self_fk | part2_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part32_self_fk | part32_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part33_self_fk | part33_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part3_self_fk | part3_self_fk_pkey | p | t | parted_self_fk_pkey | t | - parted_self_fk | parted_self_fk_pkey | p | t | | | -(12 rows) + relname | conname | contype | convalidated | conparent | convalidated | foreignrel +----------------+-----------------------------+---------+--------------+-----------------------------+--------------+---------------- + part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey1 | f | t | parted_self_fk_id_abc_fkey | t | part1_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey2 | f | t | parted_self_fk_id_abc_fkey | t | part2_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey3 | f | t | parted_self_fk_id_abc_fkey | t | part3_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey4 | f | t | parted_self_fk_id_abc_fkey3 | t | part32_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey5 | f | t | parted_self_fk_id_abc_fkey3 | t | part33_self_fk + part1_self_fk | part1_self_fk_pkey | p | t | parted_self_fk_pkey | t | + part2_self_fk | part2_self_fk_pkey | p | t | parted_self_fk_pkey | t | + part32_self_fk | part32_self_fk_pkey | p | t | part3_self_fk_pkey | t | + part33_self_fk | part33_self_fk_pkey | p | t | part3_self_fk_pkey | t | + part3_self_fk | part3_self_fk_pkey | p | t | parted_self_fk_pkey | t | + parted_self_fk | parted_self_fk_pkey | p | t | | | +(17 rows) -- detach and re-attach multiple times just to ensure everything is kosher ALTER TABLE parted_self_fk DETACH PARTITION part2_self_fk; @@ -2001,21 +2006,26 @@ LEFT JOIN pg_class cf ON cf.oid = co.confrelid LEFT JOIN pg_constraint p ON p.oid = co.conparentid WHERE cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) ORDER BY co.contype, cr.relname, co.conname, p.conname; - relname | conname | contype | convalidated | conparent | convalidated | foreignrel -----------------+----------------------------+---------+--------------+----------------------------+--------------+---------------- - part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk - part1_self_fk | part1_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part2_self_fk | part2_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part32_self_fk | part32_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part33_self_fk | part33_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part3_self_fk | part3_self_fk_pkey | p | t | parted_self_fk_pkey | t | - parted_self_fk | parted_self_fk_pkey | p | t | | | -(12 rows) + relname | conname | contype | convalidated | conparent | convalidated | foreignrel +----------------+-----------------------------+---------+--------------+-----------------------------+--------------+---------------- + part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey1 | f | t | parted_self_fk_id_abc_fkey | t | part1_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey2 | f | t | parted_self_fk_id_abc_fkey | t | part2_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey3 | f | t | parted_self_fk_id_abc_fkey | t | part3_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey4 | f | t | parted_self_fk_id_abc_fkey3 | t | part32_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey5 | f | t | parted_self_fk_id_abc_fkey3 | t | part33_self_fk + part1_self_fk | part1_self_fk_pkey | p | t | parted_self_fk_pkey | t | + part2_self_fk | part2_self_fk_pkey | p | t | parted_self_fk_pkey | t | + part32_self_fk | part32_self_fk_pkey | p | t | part3_self_fk_pkey | t | + part33_self_fk | part33_self_fk_pkey | p | t | part3_self_fk_pkey | t | + part3_self_fk | part3_self_fk_pkey | p | t | parted_self_fk_pkey | t | + parted_self_fk | parted_self_fk_pkey | p | t | | | +(17 rows) -- Leave this table around, for pg_upgrade/pg_dump tests -- Test creating a constraint at the parent that already exists in partitions. diff --git a/src/oracle_test/regress/expected/generated.out b/src/oracle_test/regress/expected/generated.out index 45ae5107ba1..eaa730c198b 100644 --- a/src/oracle_test/regress/expected/generated.out +++ b/src/oracle_test/regress/expected/generated.out @@ -412,6 +412,12 @@ COPY gtest1 FROM stdin; COPY gtest1 (a, b) FROM stdin; ERROR: column "b" is a generated column DETAIL: Generated columns cannot be used in COPY. +COPY gtest1 FROM stdin WHERE b <> 10; +ERROR: generated columns are not supported in COPY FROM WHERE conditions +DETAIL: Column "b" is a generated column. +COPY gtest1 FROM stdin WHERE gtest1 IS NULL; +ERROR: generated columns are not supported in COPY FROM WHERE conditions +DETAIL: Column "b" is a generated column. SELECT * FROM gtest1 ORDER BY a; a | b ---+--- @@ -732,11 +738,26 @@ ERROR: cannot use generated column in partition key LINE 1: ...ENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f3); ^ DETAIL: Column "f3" is a generated column. +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3)); +ERROR: cannot use generated column in partition key +LINE 1: ...ERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3)); + ^ +DETAIL: Column "f3" is a generated column. CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); ERROR: cannot use generated column in partition key LINE 1: ...ED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); ^ DETAIL: Column "f3" is a generated column. +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent)); +ERROR: cannot use generated column in partition key +LINE 1: ...ED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_par... + ^ +DETAIL: Column "f3" is a generated column. +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent is not null)); +ERROR: cannot use generated column in partition key +LINE 1: ...ED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_par... + ^ +DETAIL: Column "f3" is a generated column. -- ALTER TABLE ... ADD COLUMN CREATE TABLE gtest25 (a int PRIMARY KEY); INSERT INTO gtest25 VALUES (3), (4); diff --git a/src/oracle_test/regress/expected/hash_index.out b/src/oracle_test/regress/expected/hash_index.out index e23de21b41c..19bb94921fd 100644 --- a/src/oracle_test/regress/expected/hash_index.out +++ b/src/oracle_test/regress/expected/hash_index.out @@ -82,6 +82,25 @@ SELECT * FROM hash_f8_heap -------+-------- (0 rows) +-- +-- partial hash index +-- +EXPLAIN (COSTS OFF) +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + QUERY PLAN +-------------------------------------------------------- + Index Scan using hash_i4_partial_index on hash_i4_heap + Index Cond: (seqno = 9999) +(2 rows) + +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + seqno | random +-------+------------ + 9999 | 1227676208 +(1 row) + -- -- hash index -- grep '^90[^0-9]' hashovfl.data diff --git a/src/oracle_test/regress/expected/horology.out b/src/oracle_test/regress/expected/horology.out index cd44b12701b..46c4146a92a 100644 --- a/src/oracle_test/regress/expected/horology.out +++ b/src/oracle_test/regress/expected/horology.out @@ -1377,7 +1377,7 @@ ERROR: date/time field value out of range: "2016 367" SELECT to_date('0000-02-01','YYYY-MM-DD'); -- allowed, though it shouldn't be to_date ------------ - 2025-02-01 + 2026-02-01 (1 row) -- diff --git a/src/oracle_test/regress/expected/indexing.out b/src/oracle_test/regress/expected/indexing.out index 63b8d9ecb50..de9c91ab580 100644 --- a/src/oracle_test/regress/expected/indexing.out +++ b/src/oracle_test/regress/expected/indexing.out @@ -1587,3 +1587,151 @@ select indexrelid::regclass, indisvalid, indisreplident, (3 rows) drop table parted_replica_tab; +-- create global index using non-partition key +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (10); +create table gidxpart2 partition of gidxpart for values from (10) to (100); +create unique index gidx_u on gidxpart using btree(b) global; +select relname, relhasindex, relkind from pg_class where relname like '%gidx%' order by oid; + relname | relhasindex | relkind +-----------------+-------------+--------- + gidxpart | t | p + gidxpart1 | t | r + gidxpart2 | t | r + gidx_u | f | I + gidxpart1_b_idx | f | g + gidxpart2_b_idx | f | g +(6 rows) + +\d+ gidxpart + Partitioned table "public.gidxpart" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+----------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | + c | text | | | | extended | | +Partition key: RANGE (a) +Indexes: + "gidx_u" UNIQUE, btree (b) +Partitions: gidxpart1 FOR VALUES FROM (0) TO (10), + gidxpart2 FOR VALUES FROM (10) TO (100) + +\d+ gidx_u + Partitioned index "public.gidx_u" + Column | Type | Key? | Definition | Storage | Stats target +--------+---------+------+------------+---------+-------------- + b | integer | yes | b | plain | +unique, btree, for table "public.gidxpart" +Partitions: gidxpart1_b_idx, + gidxpart2_b_idx + +-- cross-partition uniqueness check for insert and update +insert into gidxpart values (1, 1, 'first'); +insert into gidxpart values (11, 11, 'eleventh'); +insert into gidxpart values (2, 11, 'duplicated (b)=(11) on other partition'); +ERROR: duplicate key value violates unique constraint "gidxpart2_b_idx" +DETAIL: Key (b)=(11) already exists. +insert into gidxpart values (12, 1, 'duplicated (b)=(1) on other partition'); +ERROR: duplicate key value violates unique constraint "gidxpart1_b_idx" +DETAIL: Key (b)=(1) already exists. +insert into gidxpart values (2, 120, 'second'); +insert into gidxpart values (12, 2, 'twelfth'); +update gidxpart set b=2 where a=2; +ERROR: duplicate key value violates unique constraint "gidxpart2_b_idx" +DETAIL: Key (b)=(2) already exists. +update gidxpart set b=1 where a=12; +ERROR: duplicate key value violates unique constraint "gidxpart1_b_idx" +DETAIL: Key (b)=(1) already exists. +update gidxpart set b=12 where a=12; +update gidxpart set b=2 where a=2; +select * from gidxpart; + a | b | c +----+----+---------- + 1 | 1 | first + 2 | 2 | second + 11 | 11 | eleventh + 12 | 12 | twelfth +(4 rows) + +-- cross-partition uniqueness check applys to newly created partition +create table gidxpart3 partition of gidxpart for values from (100) to (200); +select relname, relkind from pg_class where relname = 'gidxpart3_b_idx'; + relname | relkind +-----------------+--------- + gidxpart3_b_idx | g +(1 row) + +insert into gidxpart values (150, 11, 'duplicated (b)=(11) on other partition'); +ERROR: duplicate key value violates unique constraint "gidxpart2_b_idx" +DETAIL: Key (b)=(11) already exists. +insert into gidxpart values (150, 13, 'no duplicate b'); +-- clean up global index tests +drop index gidx_u; +drop table gidxpart; +-- Test the cross-partition uniqueness with non-partition key with global unique index +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +create table gidxpart2 partition of gidxpart for values from (100000) to (199999); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +insert into gidxpart (a, b, c) values (150000, 572814, 'inserted second on gidxpart2'); +create unique index on gidxpart (b) global; -- should fail +ERROR: could not create unique index "gidxpart1_b_idx" +DETAIL: Key (b)=(572814) is duplicated. +delete from gidxpart where a = 150000 and b = 572814; +create unique index on gidxpart (b) global; +drop table gidxpart; +-- Test partition attach and detach with global unique index (no existing index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +ERROR: could not create unique index "gidxpart1_b_idx" +DETAIL: Key (b)=(572814) is duplicated. +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g + relname | relkind +-----------------+--------- + gidxpart2_b_idx | g +(1 row) + +alter table gidxpart detach partition gidxpart2; +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i + relname | relkind +-----------------+--------- + gidxpart2_b_idx | i +(1 row) + +drop table gidxpart; +drop table gidxpart2; +-- Test partition attach and detach with global unique index (with duplicate index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +create unique index on gidxpart2 (b); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i + relname | relkind +-----------------+--------- + gidxpart2_b_idx | i +(1 row) + +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +ERROR: could not create unique index "gidxpart1_b_idx" +DETAIL: Key (b)=(572814) is duplicated. +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g + relname | relkind +-----------------+--------- + gidxpart2_b_idx | g +(1 row) + +alter table gidxpart detach partition gidxpart2; +drop table gidxpart; +drop table gidxpart2; diff --git a/src/oracle_test/regress/expected/limit.out b/src/oracle_test/regress/expected/limit.out index 9f398f70e26..d3c714c3ecb 100644 --- a/src/oracle_test/regress/expected/limit.out +++ b/src/oracle_test/regress/expected/limit.out @@ -644,7 +644,7 @@ View definition: WHERE onek.thousand < 995 ORDER BY onek.thousand OFFSET 10 - FETCH FIRST 5 ROWS WITH TIES; + FETCH FIRST (5) ROWS WITH TIES; CREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY; @@ -676,15 +676,29 @@ View definition: FROM onek WHERE onek.thousand < 995 ORDER BY onek.thousand - FETCH FIRST (NULL::integer + 1) ROWS WITH TIES; + FETCH FIRST ((NULL::integer + 1)) ROWS WITH TIES; CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995 - ORDER BY thousand FETCH FIRST NULL ROWS ONLY; + ORDER BY thousand FETCH FIRST (5::bigint) ROWS WITH TIES; \d+ limit_thousand_v_4 View "public.limit_thousand_v_4" Column | Type | Collation | Nullable | Default | Storage | Description ----------+---------+-----------+----------+---------+---------+------------- thousand | integer | | | | plain | +View definition: + SELECT onek.thousand + FROM onek + WHERE onek.thousand < 995 + ORDER BY onek.thousand + FETCH FIRST (5::bigint) ROWS WITH TIES; + +CREATE VIEW limit_thousand_v_5 AS SELECT thousand FROM onek WHERE thousand < 995 + ORDER BY thousand FETCH FIRST NULL ROWS ONLY; +\d+ limit_thousand_v_5 + View "public.limit_thousand_v_5" + Column | Type | Collation | Nullable | Default | Storage | Description +----------+---------+-----------+----------+---------+---------+------------- + thousand | integer | | | | plain | View definition: SELECT onek.thousand FROM onek diff --git a/src/oracle_test/regress/expected/privileges.out b/src/oracle_test/regress/expected/privileges.out index bd61ae47417..aca88e0f25b 100644 --- a/src/oracle_test/regress/expected/privileges.out +++ b/src/oracle_test/regress/expected/privileges.out @@ -326,8 +326,6 @@ CREATE VIEW atest12v AS SELECT * FROM atest12 WHERE b <<< 5; CREATE VIEW atest12sbv WITH (security_barrier=true) AS SELECT * FROM atest12 WHERE b <<< 5; -GRANT SELECT ON atest12v TO PUBLIC; -GRANT SELECT ON atest12sbv TO PUBLIC; -- This plan should use nestloop, knowing that few rows will be selected. EXPLAIN (COSTS OFF) SELECT * FROM atest12v x, atest12v y WHERE x.a = y.b; QUERY PLAN @@ -374,9 +372,18 @@ CREATE FUNCTION leak2(integer,integer) RETURNS boolean / CREATE OPERATOR >>> (procedure = leak2, leftarg = integer, rightarg = integer, restrict = scalargtsel); --- This should not show any "leak" notices before failing. +-- These should not show any "leak" notices before failing. EXPLAIN (COSTS OFF) SELECT * FROM atest12 WHERE a >>> 0; ERROR: permission denied for table atest12 +EXPLAIN (COSTS OFF) SELECT * FROM atest12v WHERE a >>> 0; +ERROR: permission denied for view atest12v +EXPLAIN (COSTS OFF) SELECT * FROM atest12sbv WHERE a >>> 0; +ERROR: permission denied for view atest12sbv +-- Now regress_priv_user1 grants access to regress_priv_user2 via the views. +SET SESSION AUTHORIZATION regress_priv_user1; +GRANT SELECT ON atest12v TO PUBLIC; +GRANT SELECT ON atest12sbv TO PUBLIC; +SET SESSION AUTHORIZATION regress_priv_user2; -- These plans should continue to use a nestloop, since they execute with the -- privileges of the view owner. EXPLAIN (COSTS OFF) SELECT * FROM atest12v x, atest12v y WHERE x.a = y.b; @@ -2025,6 +2032,26 @@ SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); - ALTER DEFAULT PRIVILEGES FOR ROLE regress_priv_user1 REVOKE EXECUTE ON FUNCTIONS FROM public; ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT USAGE ON SCHEMAS TO regress_priv_user2; -- error ERROR: cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS +-- Test quoting and dequoting of user names in ACLs +CREATE ROLE "regress_""quoted"; +SELECT makeaclitem('regress_"quoted'::regrole, 'regress_"quoted'::regrole, + 'SELECT', TRUE); + makeaclitem +------------------------------------------ + "regress_""quoted"=r*/"regress_""quoted" +(1 row) + +SELECT '"regress_""quoted"=r*/"regress_""quoted"'::aclitem; + aclitem +------------------------------------------ + "regress_""quoted"=r*/"regress_""quoted" +(1 row) + +SELECT '""=r*/""'::aclitem; -- used to be misparsed as """" +ERROR: a name must follow the "/" sign +LINE 1: SELECT '""=r*/""'::aclitem; + ^ +DROP ROLE "regress_""quoted"; -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. @@ -2454,6 +2481,11 @@ DROP USER regress_priv_user6; DROP USER regress_priv_user7; DROP USER regress_priv_user8; -- does not exist ERROR: role "regress_priv_user8" does not exist +-- leave some default ACLs for pg_upgrade's dump-restore test input. +ALTER DEFAULT PRIVILEGES FOR ROLE pg_signal_backend + REVOKE USAGE ON TYPES FROM pg_signal_backend; +ALTER DEFAULT PRIVILEGES FOR ROLE pg_read_all_settings + REVOKE USAGE ON TYPES FROM pg_read_all_settings; -- permissions with LOCK TABLE CREATE USER regress_locktable_user; CREATE TABLE lock_table (a int); diff --git a/src/oracle_test/regress/expected/psql.out b/src/oracle_test/regress/expected/psql.out index 834269f0e87..a9fef77ee1c 100644 --- a/src/oracle_test/regress/expected/psql.out +++ b/src/oracle_test/regress/expected/psql.out @@ -4493,6 +4493,7 @@ invalid command \lo \pset arg1 arg2 \q \reset + \restrict test \s arg1 \set arg1 arg2 arg3 arg4 arg5 arg6 arg7 \setenv arg1 arg2 @@ -4501,6 +4502,7 @@ invalid command \lo \t arg1 \T arg1 \timing arg1 + \unrestrict not_valid \unset arg1 \w arg1 \watch arg1 diff --git a/src/oracle_test/regress/expected/publication.out b/src/oracle_test/regress/expected/publication.out index b7ce080424f..e78d302d3bc 100644 --- a/src/oracle_test/regress/expected/publication.out +++ b/src/oracle_test/regress/expected/publication.out @@ -341,6 +341,37 @@ DROP PUBLICATION testpib_ins_trunct; DROP PUBLICATION testpub_fortbl; DROP SCHEMA pub_test CASCADE; NOTICE: drop cascades to table pub_test.testpub_nopk +-- Test that the INSERT ON CONFLICT command correctly checks REPLICA IDENTITY +-- when the target table is published. +CREATE TABLE testpub_insert_onconfl_no_ri (a int unique, b int); +CREATE TABLE testpub_insert_onconfl_parted (a int unique, b int) PARTITION by RANGE (a); +CREATE TABLE testpub_insert_onconfl_part_no_ri PARTITION OF testpub_insert_onconfl_parted FOR VALUES FROM (1) TO (10); +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION pub1 FOR ALL TABLES; +RESET client_min_messages; +-- fail - missing REPLICA IDENTITY +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; +ERROR: cannot update table "testpub_insert_onconfl_no_ri" because it does not have a replica identity and publishes updates +HINT: To enable updating the table, set REPLICA IDENTITY using ALTER TABLE. +-- ok - no updates +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT DO NOTHING; +-- fail - missing REPLICA IDENTITY in partition testpub_insert_onconfl_no_ri +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; +ERROR: cannot update table "testpub_insert_onconfl_part_no_ri" because it does not have a replica identity and publishes updates +HINT: To enable updating the table, set REPLICA IDENTITY using ALTER TABLE. +-- ok - no updates +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT DO NOTHING; +DROP PUBLICATION pub1; +DROP TABLE testpub_insert_onconfl_no_ri; +DROP TABLE testpub_insert_onconfl_parted; RESET SESSION AUTHORIZATION; DROP ROLE regress_publication_user, regress_publication_user2; DROP ROLE regress_publication_user_dummy; +-- stage objects for pg_dump tests +CREATE SCHEMA pubme CREATE TABLE t0 (c int, d int) CREATE TABLE t1 (c int); +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION dump_pub_1ct FOR TABLE ONLY pubme.t0; +CREATE PUBLICATION dump_pub_2ct FOR TABLE ONLY pubme.t0, pubme.t1; +CREATE PUBLICATION dump_pub_all FOR TABLE ONLY pubme.t0, pubme.t1 + WITH (publish_via_partition_root = true); +RESET client_min_messages; diff --git a/src/oracle_test/regress/expected/rowsecurity.out b/src/oracle_test/regress/expected/rowsecurity.out index d150d8c99c6..17f7fc491e1 100644 --- a/src/oracle_test/regress/expected/rowsecurity.out +++ b/src/oracle_test/regress/expected/rowsecurity.out @@ -3965,7 +3965,7 @@ RESET SESSION AUTHORIZATION; DROP VIEW rls_view; DROP TABLE rls_tbl; DROP TABLE ref_tbl; --- Leaky operator test +-- Leaky operator tests CREATE TABLE rls_tbl (a int); INSERT INTO rls_tbl SELECT x/10 FROM generate_series(1, 100) x; ANALYZE rls_tbl; @@ -3983,9 +3983,80 @@ SELECT * FROM rls_tbl WHERE a <<< 1000; --- (0 rows) +RESET SESSION AUTHORIZATION; +CREATE TABLE rls_child_tbl () INHERITS (rls_tbl); +INSERT INTO rls_child_tbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_child_tbl; +CREATE TABLE rls_ptbl (a int) PARTITION BY RANGE (a); +CREATE TABLE rls_part PARTITION OF rls_ptbl FOR VALUES FROM (-100) TO (100); +INSERT INTO rls_ptbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_ptbl, rls_part; +ALTER TABLE rls_ptbl ENABLE ROW LEVEL SECURITY; +ALTER TABLE rls_part ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_ptbl TO regress_rls_alice; +GRANT SELECT ON rls_part TO regress_rls_alice; +CREATE POLICY p1 ON rls_tbl USING (a < 0); +CREATE POLICY p2 ON rls_ptbl USING (a < 0); +CREATE POLICY p3 ON rls_part USING (a < 0); +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM rls_child_tbl WHERE a <<< 1000; +ERROR: permission denied for table rls_child_tbl +SELECT * FROM rls_ptbl WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM rls_part WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; +ERROR: permission denied for table rls_child_tbl +RESET SESSION AUTHORIZATION; +REVOKE SELECT ON rls_tbl FROM regress_rls_alice; +CREATE VIEW rls_tbl_view AS SELECT * FROM rls_tbl; +ALTER TABLE rls_child_tbl ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_child_tbl TO regress_rls_alice; +CREATE POLICY p4 ON rls_child_tbl USING (a < 0); +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; +ERROR: permission denied for table rls_tbl +SELECT * FROM rls_tbl_view WHERE a <<< 1000; +ERROR: permission denied for view rls_tbl_view +SELECT * FROM rls_child_tbl WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; +ERROR: permission denied for table rls_tbl +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; + a +--- +(0 rows) + DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); RESET SESSION AUTHORIZATION; +DROP TABLE rls_part; +DROP TABLE rls_ptbl; +DROP TABLE rls_child_tbl; +DROP VIEW rls_tbl_view; DROP TABLE rls_tbl; -- Bug #16006: whole-row Vars in a policy don't play nice with sub-selects SET SESSION AUTHORIZATION regress_rls_alice; diff --git a/src/oracle_test/regress/expected/stats_ext.out b/src/oracle_test/regress/expected/stats_ext.out index 236e8271623..bd40117570a 100644 --- a/src/oracle_test/regress/expected/stats_ext.out +++ b/src/oracle_test/regress/expected/stats_ext.out @@ -55,6 +55,24 @@ CREATE STATISTICS tst ON (x || 'x'), (x || 'x'), y FROM ext_stats_test; ERROR: duplicate expression in statistics definition CREATE STATISTICS tst (unrecognized) ON x, y FROM ext_stats_test; ERROR: unrecognized statistics kind "unrecognized" +-- unsupported targets +CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo; +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar; +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo; +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x); +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text); +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE FUNCTION tftest(int) returns table(a int, b int) as $$ +SELECT $1, $1+i FROM generate_series(1,5) g(i); +$$ LANGUAGE sql IMMUTABLE STRICT; +/ +CREATE STATISTICS alt_stat2 ON a FROM tftest(1); +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +DROP FUNCTION tftest; -- incorrect expressions CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference ERROR: extended statistics require at least 2 columns @@ -81,6 +99,20 @@ ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new; ERROR: must be owner of statistics object ab1_a_b_stats RESET SESSION AUTHORIZATION; DROP ROLE regress_stats_ext; +CREATE STATISTICS pg_temp.stats_ext_temp ON a, b FROM ab1; +SELECT regexp_replace(pg_describe_object(tableoid, oid, 0), + 'pg_temp_[0-9]*', 'pg_temp_REDACTED') AS descr, + pg_statistics_obj_is_visible(oid) AS visible + FROM pg_statistic_ext + WHERE stxname = 'stats_ext_temp'; + descr | visible +---------------------------------------------------+--------- + statistics object pg_temp_REDACTED.stats_ext_temp | f +(1 row) + +DROP STATISTICS stats_ext_temp; -- shall fail +ERROR: statistics object "stats_ext_temp" does not exist +DROP STATISTICS pg_temp.stats_ext_temp; CREATE STATISTICS IF NOT EXISTS ab1_a_b_stats ON a, b FROM ab1; NOTICE: statistics object "ab1_a_b_stats" already exists, skipping DROP STATISTICS ab1_a_b_stats; @@ -3194,8 +3226,17 @@ CREATE FUNCTION op_leak(int, int) RETURNS bool / CREATE OPERATOR <<< (procedure = op_leak, leftarg = int, rightarg = int, restrict = scalarltsel); +CREATE FUNCTION op_leak(record, record) RETURNS bool + AS 'BEGIN RAISE NOTICE ''op_leak => %, %'', $1, $2; RETURN $1 < $2; END' + LANGUAGE plpgsql; +/ +CREATE OPERATOR <<< (procedure = op_leak, leftarg = record, rightarg = record, + restrict = scalarltsel); SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied ERROR: permission denied for table priv_test_tbl +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied +ERROR: permission denied for table priv_test_tbl DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied ERROR: permission denied for table priv_test_tbl -- Grant access via a security barrier view, but hide all data @@ -3210,10 +3251,17 @@ SELECT * FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not l ---+--- (0 rows) +SELECT * FROM tststats.priv_test_view t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak + a | b +---+--- +(0 rows) + DELETE FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not leak -- Grant table access, but hide all data with RLS RESET SESSION AUTHORIZATION; ALTER TABLE tststats.priv_test_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_tbl_pol ON tststats.priv_test_tbl USING (2 * a < 0); GRANT SELECT, DELETE ON tststats.priv_test_tbl TO regress_stats_user1; -- Should now have direct table access, but see nothing and leak nothing SET SESSION AUTHORIZATION regress_stats_user1; @@ -3222,7 +3270,45 @@ SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not le ---+--- (0 rows) +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak + a | b +---+--- +(0 rows) + DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +-- Create plain inheritance parent table with no access permissions +RESET SESSION AUTHORIZATION; +CREATE TABLE tststats.priv_test_parent_tbl (a int, b int); +ALTER TABLE tststats.priv_test_tbl INHERIT tststats.priv_test_parent_tbl; +-- Should not have access to parent, and should leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +ERROR: permission denied for table priv_test_parent_tbl +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied +ERROR: permission denied for table priv_test_parent_tbl +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +ERROR: permission denied for table priv_test_parent_tbl +-- Grant table access to parent, but hide all data with RLS +RESET SESSION AUTHORIZATION; +ALTER TABLE tststats.priv_test_parent_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_parent_tbl_pol ON tststats.priv_test_parent_tbl USING (2 * a < 0); +GRANT SELECT, DELETE ON tststats.priv_test_parent_tbl TO regress_stats_user1; +-- Should now have direct table access to parent, but see nothing and leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak + a | b +---+--- +(0 rows) + +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak + a | b +---+--- +(0 rows) + +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak -- privilege checks for pg_stats_ext and pg_stats_ext_exprs RESET SESSION AUTHORIZATION; CREATE TABLE stats_ext_tbl (id INT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, col TEXT); @@ -3265,13 +3351,35 @@ SELECT statistics_name, most_common_vals FROM pg_stats_ext_exprs x s_expr | {1} (2 rows) +-- CREATE STATISTICS checks for CREATE on the schema +RESET SESSION AUTHORIZATION; +CREATE SCHEMA sts_sch1 CREATE TABLE sts_sch1.tbl (a INT, b INT); +GRANT USAGE ON SCHEMA sts_sch1 TO regress_stats_user1; +ALTER TABLE sts_sch1.tbl OWNER TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.fail ON a, b FROM sts_sch1.tbl; +ERROR: permission denied for schema sts_sch1 +RESET SESSION AUTHORIZATION; +GRANT CREATE ON SCHEMA sts_sch1 TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.pass ON a, b FROM sts_sch1.tbl; +-- re-creating statistics via ALTER TABLE bypasses checks for CREATE on schema +RESET SESSION AUTHORIZATION; +REVOKE CREATE ON SCHEMA sts_sch1 FROM regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +ALTER TABLE sts_sch1.tbl ALTER COLUMN a TYPE SMALLINT; -- Tidy up DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); +DROP OPERATOR <<< (record, record); +DROP FUNCTION op_leak(record, record); RESET SESSION AUTHORIZATION; DROP TABLE stats_ext_tbl; DROP SCHEMA tststats CASCADE; -NOTICE: drop cascades to 2 other objects -DETAIL: drop cascades to table tststats.priv_test_tbl +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table tststats.priv_test_parent_tbl +drop cascades to table tststats.priv_test_tbl drop cascades to view tststats.priv_test_view +DROP SCHEMA sts_sch1 CASCADE; +NOTICE: drop cascades to table sts_sch1.tbl DROP USER regress_stats_user1; diff --git a/src/oracle_test/regress/expected/strings.out b/src/oracle_test/regress/expected/strings.out index 23c3b8a085d..bdd02902a4f 100644 --- a/src/oracle_test/regress/expected/strings.out +++ b/src/oracle_test/regress/expected/strings.out @@ -561,6 +561,82 @@ SELECT 'abcdefg' SIMILAR TO '_bcd%' ESCAPE NULL AS null; SELECT 'abcdefg' SIMILAR TO '_bcd#%' ESCAPE '##' AS error; ERROR: invalid escape string HINT: Escape string must be empty or one character. +-- Characters that should be left alone in character classes when a +-- SIMILAR TO regexp pattern is converted to POSIX style. +-- Underscore "_" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '_[_[:alpha:]_]_'; + QUERY PLAN +------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:.[_[:alpha:]_].)$'::text) +(2 rows) + +-- Percentage "%" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '%[%[:alnum:]%]%'; + QUERY PLAN +-------------------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:.*[%[:alnum:]%].*)$'::text) +(2 rows) + +-- Dot "." +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '.[.[:alnum:].].'; + QUERY PLAN +-------------------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:\.[.[:alnum:].]\.)$'::text) +(2 rows) + +-- Dollar "$" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '$[$[:alnum:]$]$'; + QUERY PLAN +-------------------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:\$[$[:alnum:]$]\$)$'::text) +(2 rows) + +-- Opening parenthesis "(" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '()[([:alnum:](]()'; + QUERY PLAN +------------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:(?:)[([:alnum:](](?:))$'::text) +(2 rows) + +-- Caret "^" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '^[^[:alnum:]^[^^][[^^]][\^][[\^]]\^]^'; + QUERY PLAN +------------------------------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:\^[^[:alnum:]^[^^][[^^]][\^][[\^]]\^]\^)$'::text) +(2 rows) + +-- Closing square bracket "]" at the beginning of character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[]%][^]%][^%]%'; + QUERY PLAN +------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:[]%][^]%][^%].*)$'::text) +(2 rows) + +-- Closing square bracket effective after two carets at the beginning +-- of character class. +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[^^]^'; + QUERY PLAN +--------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:[^^]\^)$'::text) +(2 rows) + +-- Closing square bracket after an escape sequence at the beginning of +-- a character closes the character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[|a]%' ESCAPE '|'; + QUERY PLAN +--------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:[\a].*)$'::text) +(2 rows) + -- Test back reference in regexp_replace SELECT regexp_replace('1112223333', E'(\\d{3})(\\d{3})(\\d{4})', E'(\\1) \\2-\\3'); regexp_replace diff --git a/src/oracle_test/regress/expected/triggers.out b/src/oracle_test/regress/expected/triggers.out index 123e636109e..72657acbcd0 100644 --- a/src/oracle_test/regress/expected/triggers.out +++ b/src/oracle_test/regress/expected/triggers.out @@ -2733,11 +2733,13 @@ select tgrelid::regclass, rtrim(tgname, '0123456789') as tgname, tgfoid::regproc, tgenabled from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) order by tgrelid::regclass::text, tgfoid; - tgrelid | tgname | tgfoid | tgenabled ----------+-------------------------+---------------------+----------- - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O -(2 rows) + tgrelid | tgname | tgfoid | tgenabled +---------+-------------------------+------------------------+----------- + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_del" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_upd" | O +(4 rows) -- Before v15, this has no effect because parent has no triggers: alter table parent disable trigger all; @@ -2745,11 +2747,13 @@ select tgrelid::regclass, rtrim(tgname, '0123456789') as tgname, tgfoid::regproc, tgenabled from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) order by tgrelid::regclass::text, tgfoid; - tgrelid | tgname | tgfoid | tgenabled ----------+-------------------------+---------------------+----------- - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O -(2 rows) + tgrelid | tgname | tgfoid | tgenabled +---------+-------------------------+------------------------+----------- + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_del" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_upd" | O +(4 rows) drop table parent, child1; -- Verify that firing state propagates correctly on creation, too @@ -2950,6 +2954,10 @@ NOTICE: trigger = child3_delete_trig, old table = (42,CCC) -- copy into parent sees parent-format tuples copy parent (a, b) from stdin; NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42) +-- check detach/reattach behavior; statement triggers with transition tables +-- should not prevent a table from becoming a partition again +alter table parent detach partition child1; +alter table parent attach partition child1 for values in ('AAA'); -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; @@ -3150,6 +3158,10 @@ NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42) create index on parent(b); copy parent (a, b) from stdin; NOTICE: trigger = parent_insert_trig, new table = (DDD,42) +-- check disinherit/reinherit behavior; statement triggers with transition +-- tables should not prevent a table from becoming an inheritance child again +alter table child1 no inherit parent; +alter table child1 inherit parent; -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; diff --git a/src/oracle_test/regress/expected/with.out b/src/oracle_test/regress/expected/with.out index 18feb95dc95..c0b878a42d5 100644 --- a/src/oracle_test/regress/expected/with.out +++ b/src/oracle_test/regress/expected/with.out @@ -2170,6 +2170,48 @@ from int4_tbl; -2147483647 (5 rows) +-- +-- test for bug #19055: interaction of WITH with aggregates +-- +-- For now, we just throw an error if there's a use of a CTE below the +-- semantic level that the SQL standard assigns to the aggregate. +-- It's not entirely clear what we could do instead that doesn't risk +-- breaking more things than it fixes. +select f1, (with cte1(x,y) as (select 1,2) + select count((select i4.f1 from cte1))) as ss +from int4_tbl i4; +ERROR: outer-level aggregate cannot use a nested CTE +LINE 2: select count((select i4.f1 from cte1))) as ss + ^ +DETAIL: CTE "cte1" is below the aggregate's semantic level. +-- +-- test for bug #19106: interaction of WITH with aggregates +-- +-- the initial fix for #19055 was too aggressive and broke this case +explain (verbose, costs off) +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + QUERY PLAN +-------------------------------------------- + Aggregate + Output: max($0) + InitPlan 1 (returns $0) + -> Aggregate + Output: sum("*VALUES*".column1) + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 + -> Result +(8 rows) + +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + agg +----- + 3 +(1 row) + -- -- test for nested-recursive-WITH bug -- @@ -2703,6 +2745,47 @@ SELECT * FROM bug6051_3; --- (0 rows) +-- check that recursive CTE processing doesn't rewrite a CTE more than once +-- (must not try to expand GENERATED ALWAYS IDENTITY columns more than once) +CREATE TEMP TABLE id_alw1 (i int GENERATED ALWAYS AS IDENTITY); +CREATE TEMP TABLE id_alw2 (i int GENERATED ALWAYS AS IDENTITY); +CREATE TEMP VIEW id_alw2_view AS SELECT * FROM id_alw2; +CREATE TEMP TABLE id_alw3 (i int GENERATED ALWAYS AS IDENTITY); +CREATE RULE id_alw3_ins AS ON INSERT TO id_alw3 DO INSTEAD + WITH t1 AS (INSERT INTO id_alw1 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw2_view DEFAULT VALUES RETURNING i; +CREATE TEMP VIEW id_alw3_view AS SELECT * FROM id_alw3; +CREATE TEMP TABLE id_alw4 (i int GENERATED ALWAYS AS IDENTITY); +WITH t4 AS (INSERT INTO id_alw4 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw3_view DEFAULT VALUES RETURNING i; + i +--- + 1 +(1 row) + +SELECT * from id_alw1; + i +--- + 1 +(1 row) + +SELECT * from id_alw2; + i +--- + 1 +(1 row) + +SELECT * from id_alw3; + i +--- +(0 rows) + +SELECT * from id_alw4; + i +--- + 1 +(1 row) + -- a truly recursive CTE in the same list WITH RECURSIVE t(a) AS ( SELECT 0 diff --git a/src/oracle_test/regress/input/constraints.source b/src/oracle_test/regress/input/constraints.source index 6acac568461..9948d723b74 100644 --- a/src/oracle_test/regress/input/constraints.source +++ b/src/oracle_test/regress/input/constraints.source @@ -612,3 +612,9 @@ DROP DOMAIN constraint_comments_dom; DROP ROLE regress_constraint_comments; DROP ROLE regress_constraint_comments_noaccess; + +-- Leave some constraints for the pg_upgrade test to pick up +CREATE DOMAIN constraint_comments_dom AS int; + +ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT inv_ck CHECK (value > 0) NOT VALID; +COMMENT ON CONSTRAINT inv_ck ON DOMAIN constraint_comments_dom IS 'comment on invalid constraint'; diff --git a/src/oracle_test/regress/input/encoding.source b/src/oracle_test/regress/input/encoding.source new file mode 100644 index 00000000000..6920fe9d3bf --- /dev/null +++ b/src/oracle_test/regress/input/encoding.source @@ -0,0 +1,249 @@ +/* skip test if not UTF8 server encoding */ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit +\endif + +CREATE FUNCTION test_bytea_to_text(bytea) RETURNS text + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_text_to_bytea(text) RETURNS bytea + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_mblen_func(text, text, text, int) RETURNS int + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_text_to_wchars(text, text) RETURNS int[] + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_wchars_to_text(text, int[]) RETURNS text + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_valid_server_encoding(text) RETURNS boolean + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ + + +CREATE TABLE regress_encoding(good text, truncated text, with_nul text, truncated_with_nul text); +INSERT INTO regress_encoding +VALUES ('café', + 'caf' || test_bytea_to_text('\xc3'), + 'café' || test_bytea_to_text('\x00') || 'dcba', + 'caf' || test_bytea_to_text('\xc300') || 'dcba'); + +SELECT good, truncated, with_nul FROM regress_encoding; + +SELECT length(good) FROM regress_encoding; +SELECT substring(good, 3, 1) FROM regress_encoding; +SELECT substring(good, 4, 1) FROM regress_encoding; +SELECT regexp_replace(good, '^caf(.)$', '\1') FROM regress_encoding; +SELECT reverse(good) FROM regress_encoding; + +-- invalid short mb character = error +SELECT length(truncated) FROM regress_encoding; +SELECT substring(truncated, 1, 3) FROM regress_encoding; +SELECT substring(truncated, 1, 4) FROM regress_encoding; +SELECT reverse(truncated) FROM regress_encoding; +-- invalid short mb character = silently dropped +SELECT regexp_replace(truncated, '^caf(.)$', '\1') FROM regress_encoding; + +-- PostgreSQL doesn't allow strings to contain NUL. If a corrupted string +-- contains NUL at a character boundary position, some functions treat it as a +-- character while others treat it as a terminator, as implementation details. + +-- NUL = terminator +SELECT length(with_nul) FROM regress_encoding; +SELECT substring(with_nul, 3, 1) FROM regress_encoding; +SELECT substring(with_nul, 4, 1) FROM regress_encoding; +SELECT substring(with_nul, 5, 1) FROM regress_encoding; +SELECT convert_to(substring(with_nul, 5, 1), 'UTF8') FROM regress_encoding; +SELECT regexp_replace(with_nul, '^caf(.)$', '\1') FROM regress_encoding; +-- NUL = character +SELECT with_nul, reverse(with_nul), reverse(reverse(with_nul)) FROM regress_encoding; + +-- If a corrupted string contains NUL in the tail bytes of a multibyte +-- character (invalid in all encodings), it is considered part of the +-- character for length purposes. An error will only be raised in code paths +-- that convert or verify encodings. + +SELECT length(truncated_with_nul) FROM regress_encoding; +SELECT substring(truncated_with_nul, 3, 1) FROM regress_encoding; +SELECT substring(truncated_with_nul, 4, 1) FROM regress_encoding; +SELECT convert_to(substring(truncated_with_nul, 4, 1), 'UTF8') FROM regress_encoding; +SELECT substring(truncated_with_nul, 5, 1) FROM regress_encoding; +SELECT regexp_replace(truncated_with_nul, '^caf(.)dcba$', '\1') = test_bytea_to_text('\xc300') FROM regress_encoding; +SELECT reverse(truncated_with_nul) FROM regress_encoding; + +-- unbounded: sequence would overrun the string! +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated, 3) +FROM regress_encoding; + +-- condition detected when using the length/range variants +SELECT test_mblen_func('pg_mblen_with_len', 'UTF8', truncated, 3) +FROM regress_encoding; +SELECT test_mblen_func('pg_mblen_range', 'UTF8', truncated, 3) +FROM regress_encoding; + +-- unbounded: sequence would overrun the string, if the terminator were really +-- the end of it +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; +SELECT test_mblen_func('pg_encoding_mblen', 'GB18030', truncated_with_nul, 3) +FROM regress_encoding; + +-- condition detected when using the cstr variants +SELECT test_mblen_func('pg_mblen_cstr', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; + +DROP TABLE regress_encoding; + +-- mb<->wchar conversions +CREATE FUNCTION test_encoding(encoding text, description text, input bytea) +RETURNS VOID LANGUAGE plpgsql AS +$$ +DECLARE + prefix text; + len int; + wchars int[]; + round_trip bytea; + result text; +BEGIN + prefix := rpad(encoding || ' ' || description || ':', 28); + + -- XXX could also test validation, length functions and include client + -- only encodings with these test cases + + IF test_valid_server_encoding(encoding) THEN + wchars := test_text_to_wchars(encoding, test_bytea_to_text(input)); + round_trip = test_text_to_bytea(test_wchars_to_text(encoding, wchars)); + if input = round_trip then + result := 'OK'; + elsif length(input) > length(round_trip) and round_trip = substr(input, 1, length(round_trip)) then + result := 'truncated'; + else + result := 'failed'; + end if; + RAISE NOTICE '% % -> % -> % = %', prefix, input, wchars, round_trip, result; + END IF; +END; +$$; +/ +-- No validation is done on the encoding itself, just the length to avoid +-- overruns, so some of the byte sequences below are bogus. They cover +-- all code branches, server encodings only for now. +CREATE TABLE encoding_tests (encoding text, description text, input bytea); +INSERT INTO encoding_tests VALUES + -- LATIN1, other single-byte encodings + ('LATIN1', 'ASCII', 'a'), + ('LATIN1', 'extended', '\xe9'), + -- EUC_JP, EUC_JIS_2004, EUR_KR (for the purposes of wchar conversion): + -- 2 8e (CS2, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 3 8f (CS3, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 2 80..ff (CS1) + ('EUC_JP', 'ASCII', 'a'), + ('EUC_JP', 'CS1, short', '\x80'), + ('EUC_JP', 'CS1', '\x8002'), + ('EUC_JP', 'CS2, short', '\x8e'), + ('EUC_JP', 'CS2', '\x8e02'), + ('EUC_JP', 'CS3, short', '\x8f'), + ('EUC_JP', 'CS3, short', '\x8f02'), + ('EUC_JP', 'CS3', '\x8f0203'), + -- EUC_CN + -- 3 8e (CS2, not used but arbitrarily considered to have length 3) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_CN', 'ASCII', 'a'), + ('EUC_CN', 'CS1, short', '\x80'), + ('EUC_CN', 'CS1', '\x8002'), + ('EUC_CN', 'CS2, short', '\x8e'), + ('EUC_CN', 'CS2, short', '\x8e02'), + ('EUC_CN', 'CS2', '\x8e0203'), + ('EUC_CN', 'CS3, short', '\x8f'), + ('EUC_CN', 'CS3, short', '\x8f02'), + ('EUC_CN', 'CS3', '\x8f0203'), + -- EUC_TW: + -- 4 8e (CS2) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_TW', 'ASCII', 'a'), + ('EUC_TW', 'CS1, short', '\x80'), + ('EUC_TW', 'CS1', '\x8002'), + ('EUC_TW', 'CS2, short', '\x8e'), + ('EUC_TW', 'CS2, short', '\x8e02'), + ('EUC_TW', 'CS2, short', '\x8e0203'), + ('EUC_TW', 'CS2', '\x8e020304'), + ('EUC_TW', 'CS3, short', '\x8f'), + ('EUC_TW', 'CS3, short', '\x8f02'), + ('EUC_TW', 'CS3', '\x8f0203'), + -- UTF8 + -- 2 c0..df + -- 3 e0..ef + -- 4 f0..f7 (but maximum real codepoint U+10ffff has f4) + -- 5 f8..fb (not supported) + -- 6 fc..fd (not supported) + ('UTF8', 'ASCII', 'a'), + ('UTF8', '2 byte, short', '\xdf'), + ('UTF8', '2 byte', '\xdf82'), + ('UTF8', '3 byte, short', '\xef'), + ('UTF8', '3 byte, short', '\xef82'), + ('UTF8', '3 byte', '\xef8283'), + ('UTF8', '4 byte, short', '\xf7'), + ('UTF8', '4 byte, short', '\xf782'), + ('UTF8', '4 byte, short', '\xf78283'), + ('UTF8', '4 byte', '\xf7828384'), + ('UTF8', '5 byte, unsupported', '\xfb'), + ('UTF8', '5 byte, unsupported', '\xfb82'), + ('UTF8', '5 byte, unsupported', '\xfb8283'), + ('UTF8', '5 byte, unsupported', '\xfb828384'), + ('UTF8', '5 byte, unsupported', '\xfb82838485'), + ('UTF8', '6 byte, unsupported', '\xfd'), + ('UTF8', '6 byte, unsupported', '\xfd82'), + ('UTF8', '6 byte, unsupported', '\xfd8283'), + ('UTF8', '6 byte, unsupported', '\xfd828384'), + ('UTF8', '6 byte, unsupported', '\xfd82838485'), + ('UTF8', '6 byte, unsupported', '\xfd8283848586'), + -- MULE_INTERNAL + -- 2 81..8d LC1 + -- 3 90..99 LC2 + ('MULE_INTERNAL', 'ASCII', 'a'), + ('MULE_INTERNAL', 'LC1, short', '\x81'), + ('MULE_INTERNAL', 'LC1', '\x8182'), + ('MULE_INTERNAL', 'LC2, short', '\x90'), + ('MULE_INTERNAL', 'LC2, short', '\x9082'), + ('MULE_INTERNAL', 'LC2', '\x908283'); + +SELECT COUNT(test_encoding(encoding, description, input)) > 0 +FROM encoding_tests; + +-- substring fetches a slice of a toasted value; unused tail of that slice is +-- an incomplete char (bug #19406) +CREATE TABLE toast_3b_utf8 (c text); +INSERT INTO toast_3b_utf8 VALUES (repeat(U&'\2026', 4000)); +SELECT SUBSTRING(c FROM 1 FOR 1) FROM toast_3b_utf8; +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; +-- diagnose incomplete char iff within the substring +UPDATE toast_3b_utf8 SET c = c || test_bytea_to_text('\xe280'); +SELECT SUBSTRING(c FROM 4000 FOR 1) FROM toast_3b_utf8; +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; +-- substring needing last byte of its slice_size +ALTER TABLE toast_3b_utf8 RENAME TO toast_4b_utf8; +UPDATE toast_4b_utf8 SET c = repeat(U&'\+01F680', 3000); +SELECT SUBSTRING(c FROM 3000 FOR 1) FROM toast_4b_utf8; + +DROP TABLE encoding_tests; +DROP TABLE toast_4b_utf8; +DROP FUNCTION test_encoding; +DROP FUNCTION test_wchars_to_text; +DROP FUNCTION test_text_to_wchars; +DROP FUNCTION test_valid_server_encoding; +DROP FUNCTION test_mblen_func; +DROP FUNCTION test_bytea_to_text; +DROP FUNCTION test_text_to_bytea; + + +-- substring slow path: multi-byte escape char vs. multi-byte pattern char. +SELECT SUBSTRING('a' SIMILAR U&'\00AC' ESCAPE U&'\00A7'); +-- Levenshtein distance metric: exercise character length cache. +SELECT U&"real\00A7_name" FROM (select 1) AS x(real_name); +-- JSON errcontext: truncate long data. +SELECT repeat(U&'\00A7', 30)::json; diff --git a/src/oracle_test/regress/output/constraints.source b/src/oracle_test/regress/output/constraints.source index 6429c103e24..1de98a17769 100644 --- a/src/oracle_test/regress/output/constraints.source +++ b/src/oracle_test/regress/output/constraints.source @@ -802,3 +802,7 @@ DROP TABLE constraint_comments_tbl; DROP DOMAIN constraint_comments_dom; DROP ROLE regress_constraint_comments; DROP ROLE regress_constraint_comments_noaccess; +-- Leave some constraints for the pg_upgrade test to pick up +CREATE DOMAIN constraint_comments_dom AS int; +ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT inv_ck CHECK (value > 0) NOT VALID; +COMMENT ON CONSTRAINT inv_ck ON DOMAIN constraint_comments_dom IS 'comment on invalid constraint'; diff --git a/src/oracle_test/regress/output/encoding.source b/src/oracle_test/regress/output/encoding.source new file mode 100644 index 00000000000..24b8c43a760 --- /dev/null +++ b/src/oracle_test/regress/output/encoding.source @@ -0,0 +1,448 @@ +/* skip test if not UTF8 server encoding */ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit +\endif +CREATE FUNCTION test_bytea_to_text(bytea) RETURNS text + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_text_to_bytea(text) RETURNS bytea + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_mblen_func(text, text, text, int) RETURNS int + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_text_to_wchars(text, text) RETURNS int[] + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_wchars_to_text(text, int[]) RETURNS text + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE FUNCTION test_valid_server_encoding(text) RETURNS boolean + AS '@libdir@/oraregress@DLSUFFIX@' LANGUAGE C STRICT; +/ +CREATE TABLE regress_encoding(good text, truncated text, with_nul text, truncated_with_nul text); +INSERT INTO regress_encoding +VALUES ('café', + 'caf' || test_bytea_to_text('\xc3'), + 'café' || test_bytea_to_text('\x00') || 'dcba', + 'caf' || test_bytea_to_text('\xc300') || 'dcba'); +SELECT good, truncated, with_nul FROM regress_encoding; + good | truncated | with_nul +------+-----------+---------- + café | caf | café +(1 row) + +SELECT length(good) FROM regress_encoding; + length +-------- + 4 +(1 row) + +SELECT substring(good, 3, 1) FROM regress_encoding; + substring +----------- + f +(1 row) + +SELECT substring(good, 4, 1) FROM regress_encoding; + substring +----------- + é +(1 row) + +SELECT regexp_replace(good, '^caf(.)$', '\1') FROM regress_encoding; + regexp_replace +---------------- + é +(1 row) + +SELECT reverse(good) FROM regress_encoding; + reverse +--------- + éfac +(1 row) + +-- invalid short mb character = error +SELECT length(truncated) FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +SELECT substring(truncated, 1, 3) FROM regress_encoding; + substring +----------- + caf +(1 row) + +SELECT substring(truncated, 1, 4) FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +SELECT reverse(truncated) FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +-- invalid short mb character = silently dropped +SELECT regexp_replace(truncated, '^caf(.)$', '\1') FROM regress_encoding; + regexp_replace +---------------- + caf +(1 row) + +-- PostgreSQL doesn't allow strings to contain NUL. If a corrupted string +-- contains NUL at a character boundary position, some functions treat it as a +-- character while others treat it as a terminator, as implementation details. +-- NUL = terminator +SELECT length(with_nul) FROM regress_encoding; + length +-------- + 4 +(1 row) + +SELECT substring(with_nul, 3, 1) FROM regress_encoding; + substring +----------- + f +(1 row) + +SELECT substring(with_nul, 4, 1) FROM regress_encoding; + substring +----------- + é +(1 row) + +SELECT substring(with_nul, 5, 1) FROM regress_encoding; + substring +----------- + +(1 row) + +SELECT convert_to(substring(with_nul, 5, 1), 'UTF8') FROM regress_encoding; + convert_to +------------ + \x +(1 row) + +SELECT regexp_replace(with_nul, '^caf(.)$', '\1') FROM regress_encoding; + regexp_replace +---------------- + é +(1 row) + +-- NUL = character +SELECT with_nul, reverse(with_nul), reverse(reverse(with_nul)) FROM regress_encoding; + with_nul | reverse | reverse +----------+---------+--------- + café | abcd | café +(1 row) + +-- If a corrupted string contains NUL in the tail bytes of a multibyte +-- character (invalid in all encodings), it is considered part of the +-- character for length purposes. An error will only be raised in code paths +-- that convert or verify encodings. +SELECT length(truncated_with_nul) FROM regress_encoding; + length +-------- + 8 +(1 row) + +SELECT substring(truncated_with_nul, 3, 1) FROM regress_encoding; + substring +----------- + f +(1 row) + +SELECT substring(truncated_with_nul, 4, 1) FROM regress_encoding; + substring +----------- + +(1 row) + +SELECT convert_to(substring(truncated_with_nul, 4, 1), 'UTF8') FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 0x00 +SELECT substring(truncated_with_nul, 5, 1) FROM regress_encoding; + substring +----------- + d +(1 row) + +SELECT regexp_replace(truncated_with_nul, '^caf(.)dcba$', '\1') = test_bytea_to_text('\xc300') FROM regress_encoding; + ?column? +---------- + t +(1 row) + +SELECT reverse(truncated_with_nul) FROM regress_encoding; + reverse +--------- + abcd +(1 row) + +-- unbounded: sequence would overrun the string! +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated, 3) +FROM regress_encoding; + test_mblen_func +----------------- + 2 +(1 row) + +-- condition detected when using the length/range variants +SELECT test_mblen_func('pg_mblen_with_len', 'UTF8', truncated, 3) +FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +SELECT test_mblen_func('pg_mblen_range', 'UTF8', truncated, 3) +FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +-- unbounded: sequence would overrun the string, if the terminator were really +-- the end of it +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; + test_mblen_func +----------------- + 2 +(1 row) + +SELECT test_mblen_func('pg_encoding_mblen', 'GB18030', truncated_with_nul, 3) +FROM regress_encoding; + test_mblen_func +----------------- + 2 +(1 row) + +-- condition detected when using the cstr variants +SELECT test_mblen_func('pg_mblen_cstr', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +DROP TABLE regress_encoding; +-- mb<->wchar conversions +CREATE FUNCTION test_encoding(encoding text, description text, input bytea) +RETURNS VOID LANGUAGE plpgsql AS +$$ +DECLARE + prefix text; + len int; + wchars int[]; + round_trip bytea; + result text; +BEGIN + prefix := rpad(encoding || ' ' || description || ':', 28); + + -- XXX could also test validation, length functions and include client + -- only encodings with these test cases + + IF test_valid_server_encoding(encoding) THEN + wchars := test_text_to_wchars(encoding, test_bytea_to_text(input)); + round_trip = test_text_to_bytea(test_wchars_to_text(encoding, wchars)); + if input = round_trip then + result := 'OK'; + elsif length(input) > length(round_trip) and round_trip = substr(input, 1, length(round_trip)) then + result := 'truncated'; + else + result := 'failed'; + end if; + RAISE NOTICE '% % -> % -> % = %', prefix, input, wchars, round_trip, result; + END IF; +END; +$$; +/ +-- No validation is done on the encoding itself, just the length to avoid +-- overruns, so some of the byte sequences below are bogus. They cover +-- all code branches, server encodings only for now. +CREATE TABLE encoding_tests (encoding text, description text, input bytea); +INSERT INTO encoding_tests VALUES + -- LATIN1, other single-byte encodings + ('LATIN1', 'ASCII', 'a'), + ('LATIN1', 'extended', '\xe9'), + -- EUC_JP, EUC_JIS_2004, EUR_KR (for the purposes of wchar conversion): + -- 2 8e (CS2, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 3 8f (CS3, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 2 80..ff (CS1) + ('EUC_JP', 'ASCII', 'a'), + ('EUC_JP', 'CS1, short', '\x80'), + ('EUC_JP', 'CS1', '\x8002'), + ('EUC_JP', 'CS2, short', '\x8e'), + ('EUC_JP', 'CS2', '\x8e02'), + ('EUC_JP', 'CS3, short', '\x8f'), + ('EUC_JP', 'CS3, short', '\x8f02'), + ('EUC_JP', 'CS3', '\x8f0203'), + -- EUC_CN + -- 3 8e (CS2, not used but arbitrarily considered to have length 3) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_CN', 'ASCII', 'a'), + ('EUC_CN', 'CS1, short', '\x80'), + ('EUC_CN', 'CS1', '\x8002'), + ('EUC_CN', 'CS2, short', '\x8e'), + ('EUC_CN', 'CS2, short', '\x8e02'), + ('EUC_CN', 'CS2', '\x8e0203'), + ('EUC_CN', 'CS3, short', '\x8f'), + ('EUC_CN', 'CS3, short', '\x8f02'), + ('EUC_CN', 'CS3', '\x8f0203'), + -- EUC_TW: + -- 4 8e (CS2) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_TW', 'ASCII', 'a'), + ('EUC_TW', 'CS1, short', '\x80'), + ('EUC_TW', 'CS1', '\x8002'), + ('EUC_TW', 'CS2, short', '\x8e'), + ('EUC_TW', 'CS2, short', '\x8e02'), + ('EUC_TW', 'CS2, short', '\x8e0203'), + ('EUC_TW', 'CS2', '\x8e020304'), + ('EUC_TW', 'CS3, short', '\x8f'), + ('EUC_TW', 'CS3, short', '\x8f02'), + ('EUC_TW', 'CS3', '\x8f0203'), + -- UTF8 + -- 2 c0..df + -- 3 e0..ef + -- 4 f0..f7 (but maximum real codepoint U+10ffff has f4) + -- 5 f8..fb (not supported) + -- 6 fc..fd (not supported) + ('UTF8', 'ASCII', 'a'), + ('UTF8', '2 byte, short', '\xdf'), + ('UTF8', '2 byte', '\xdf82'), + ('UTF8', '3 byte, short', '\xef'), + ('UTF8', '3 byte, short', '\xef82'), + ('UTF8', '3 byte', '\xef8283'), + ('UTF8', '4 byte, short', '\xf7'), + ('UTF8', '4 byte, short', '\xf782'), + ('UTF8', '4 byte, short', '\xf78283'), + ('UTF8', '4 byte', '\xf7828384'), + ('UTF8', '5 byte, unsupported', '\xfb'), + ('UTF8', '5 byte, unsupported', '\xfb82'), + ('UTF8', '5 byte, unsupported', '\xfb8283'), + ('UTF8', '5 byte, unsupported', '\xfb828384'), + ('UTF8', '5 byte, unsupported', '\xfb82838485'), + ('UTF8', '6 byte, unsupported', '\xfd'), + ('UTF8', '6 byte, unsupported', '\xfd82'), + ('UTF8', '6 byte, unsupported', '\xfd8283'), + ('UTF8', '6 byte, unsupported', '\xfd828384'), + ('UTF8', '6 byte, unsupported', '\xfd82838485'), + ('UTF8', '6 byte, unsupported', '\xfd8283848586'), + -- MULE_INTERNAL + -- 2 81..8d LC1 + -- 3 90..99 LC2 + ('MULE_INTERNAL', 'ASCII', 'a'), + ('MULE_INTERNAL', 'LC1, short', '\x81'), + ('MULE_INTERNAL', 'LC1', '\x8182'), + ('MULE_INTERNAL', 'LC2, short', '\x90'), + ('MULE_INTERNAL', 'LC2, short', '\x9082'), + ('MULE_INTERNAL', 'LC2', '\x908283'); +SELECT COUNT(test_encoding(encoding, description, input)) > 0 +FROM encoding_tests; +NOTICE: LATIN1 ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: LATIN1 extended: \xe9 -> {233} -> \xe9 = OK +NOTICE: EUC_JP ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: EUC_JP CS1, short: \x80 -> {} -> \x = truncated +NOTICE: EUC_JP CS1: \x8002 -> {32770} -> \x8002 = OK +NOTICE: EUC_JP CS2, short: \x8e -> {} -> \x = truncated +NOTICE: EUC_JP CS2: \x8e02 -> {36354} -> \x8e02 = OK +NOTICE: EUC_JP CS3, short: \x8f -> {} -> \x = truncated +NOTICE: EUC_JP CS3, short: \x8f02 -> {} -> \x = truncated +NOTICE: EUC_JP CS3: \x8f0203 -> {9372163} -> \x8f0203 = OK +NOTICE: EUC_CN ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: EUC_CN CS1, short: \x80 -> {} -> \x = truncated +NOTICE: EUC_CN CS1: \x8002 -> {32770} -> \x8002 = OK +NOTICE: EUC_CN CS2, short: \x8e -> {} -> \x = truncated +NOTICE: EUC_CN CS2, short: \x8e02 -> {} -> \x = truncated +NOTICE: EUC_CN CS2: \x8e0203 -> {9306627} -> \x8e0203 = OK +NOTICE: EUC_CN CS3, short: \x8f -> {} -> \x = truncated +NOTICE: EUC_CN CS3, short: \x8f02 -> {} -> \x = truncated +NOTICE: EUC_CN CS3: \x8f0203 -> {9372163} -> \x8f0203 = OK +NOTICE: EUC_TW ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: EUC_TW CS1, short: \x80 -> {} -> \x = truncated +NOTICE: EUC_TW CS1: \x8002 -> {32770} -> \x8002 = OK +NOTICE: EUC_TW CS2, short: \x8e -> {} -> \x = truncated +NOTICE: EUC_TW CS2, short: \x8e02 -> {} -> \x = truncated +NOTICE: EUC_TW CS2, short: \x8e0203 -> {} -> \x = truncated +NOTICE: EUC_TW CS2: \x8e020304 -> {-1912470780} -> \x8e020304 = OK +NOTICE: EUC_TW CS3, short: \x8f -> {} -> \x = truncated +NOTICE: EUC_TW CS3, short: \x8f02 -> {} -> \x = truncated +NOTICE: EUC_TW CS3: \x8f0203 -> {9372163} -> \x8f0203 = OK +NOTICE: UTF8 ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: UTF8 2 byte, short: \xdf -> {} -> \x = truncated +NOTICE: UTF8 2 byte: \xdf82 -> {1986} -> \xdf82 = OK +NOTICE: UTF8 3 byte, short: \xef -> {} -> \x = truncated +NOTICE: UTF8 3 byte, short: \xef82 -> {} -> \x = truncated +NOTICE: UTF8 3 byte: \xef8283 -> {61571} -> \xef8283 = OK +NOTICE: UTF8 4 byte, short: \xf7 -> {} -> \x = truncated +NOTICE: UTF8 4 byte, short: \xf782 -> {} -> \x = truncated +NOTICE: UTF8 4 byte, short: \xf78283 -> {} -> \x = truncated +NOTICE: UTF8 4 byte: \xf7828384 -> {1843396} -> \xf7828384 = OK +NOTICE: UTF8 5 byte, unsupported: \xfb -> {251} -> \xc3bb = failed +NOTICE: UTF8 5 byte, unsupported: \xfb82 -> {251,130} -> \xc3bbc282 = failed +NOTICE: UTF8 5 byte, unsupported: \xfb8283 -> {251,130,131} -> \xc3bbc282c283 = failed +NOTICE: UTF8 5 byte, unsupported: \xfb828384 -> {251,130,131,132} -> \xc3bbc282c283c284 = failed +NOTICE: UTF8 5 byte, unsupported: \xfb82838485 -> {251,130,131,132,133} -> \xc3bbc282c283c284c285 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd -> {253} -> \xc3bd = failed +NOTICE: UTF8 6 byte, unsupported: \xfd82 -> {253,130} -> \xc3bdc282 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd8283 -> {253,130,131} -> \xc3bdc282c283 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd828384 -> {253,130,131,132} -> \xc3bdc282c283c284 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd82838485 -> {253,130,131,132,133} -> \xc3bdc282c283c284c285 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd8283848586 -> {253,130,131,132,133,134} -> \xc3bdc282c283c284c285c286 = failed +NOTICE: MULE_INTERNAL ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: MULE_INTERNAL LC1, short: \x81 -> {} -> \x = truncated +NOTICE: MULE_INTERNAL LC1: \x8182 -> {8454274} -> \x8182 = OK +NOTICE: MULE_INTERNAL LC2, short: \x90 -> {} -> \x = truncated +NOTICE: MULE_INTERNAL LC2, short: \x9082 -> {} -> \x = truncated +NOTICE: MULE_INTERNAL LC2: \x908283 -> {9470595} -> \x908283 = OK + ?column? +---------- + t +(1 row) + +-- substring fetches a slice of a toasted value; unused tail of that slice is +-- an incomplete char (bug #19406) +CREATE TABLE toast_3b_utf8 (c text); +INSERT INTO toast_3b_utf8 VALUES (repeat(U&'\2026', 4000)); +SELECT SUBSTRING(c FROM 1 FOR 1) FROM toast_3b_utf8; + substring +----------- + … +(1 row) + +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; + substring +----------- + +(1 row) + +-- diagnose incomplete char iff within the substring +UPDATE toast_3b_utf8 SET c = c || test_bytea_to_text('\xe280'); +SELECT SUBSTRING(c FROM 4000 FOR 1) FROM toast_3b_utf8; + substring +----------- + … +(1 row) + +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; +ERROR: invalid byte sequence for encoding "UTF8": 0xe2 0x80 +-- substring needing last byte of its slice_size +ALTER TABLE toast_3b_utf8 RENAME TO toast_4b_utf8; +UPDATE toast_4b_utf8 SET c = repeat(U&'\+01F680', 3000); +SELECT SUBSTRING(c FROM 3000 FOR 1) FROM toast_4b_utf8; + substring +----------- + 🚀 +(1 row) + +DROP TABLE encoding_tests; +DROP TABLE toast_4b_utf8; +DROP FUNCTION test_encoding; +DROP FUNCTION test_wchars_to_text; +DROP FUNCTION test_text_to_wchars; +DROP FUNCTION test_valid_server_encoding; +DROP FUNCTION test_mblen_func; +DROP FUNCTION test_bytea_to_text; +DROP FUNCTION test_text_to_bytea; +-- substring slow path: multi-byte escape char vs. multi-byte pattern char. +SELECT SUBSTRING('a' SIMILAR U&'\00AC' ESCAPE U&'\00A7'); + substring +----------- + +(1 row) + +-- Levenshtein distance metric: exercise character length cache. +SELECT U&"real\00A7_name" FROM (select 1) AS x(real_name); +ERROR: "real§_name": invalid identifier +LINE 1: SELECT U&"real\00A7_name" FROM (select 1) AS x(real_name); + ^ +-- JSON errcontext: truncate long data. +SELECT repeat(U&'\00A7', 30)::json; +ERROR: invalid input syntax for type json +DETAIL: Token "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§" is invalid. +CONTEXT: JSON data, line 1: ...§§§§§§§§§§§§§§§§§§§§§§§§ diff --git a/src/oracle_test/regress/output/encoding_1.source b/src/oracle_test/regress/output/encoding_1.source new file mode 100644 index 00000000000..a5b02090901 --- /dev/null +++ b/src/oracle_test/regress/output/encoding_1.source @@ -0,0 +1,4 @@ +/* skip test if not UTF8 server encoding */ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit diff --git a/src/oracle_test/regress/regress.c b/src/oracle_test/regress/regress.c index 5f299a2f69e..fb0b0a2ad24 100644 --- a/src/oracle_test/regress/regress.c +++ b/src/oracle_test/regress/regress.c @@ -635,7 +635,9 @@ PG_FUNCTION_INFO_V1(get_environ); Datum get_environ(PG_FUNCTION_ARGS) { +#if !defined(WIN32) || defined(_MSC_VER) extern char **environ; +#endif int nvals = 0; ArrayType *result; Datum *env; @@ -1271,6 +1273,145 @@ test_enc_conversion(PG_FUNCTION_ARGS) PG_RETURN_DATUM(HeapTupleGetDatum(tuple)); } +/* Convert bytea to text without validation for corruption tests from SQL. */ +PG_FUNCTION_INFO_V1(test_bytea_to_text); +Datum +test_bytea_to_text(PG_FUNCTION_ARGS) +{ + PG_RETURN_TEXT_P(PG_GETARG_BYTEA_PP(0)); +} + +/* And the reverse. */ +PG_FUNCTION_INFO_V1(test_text_to_bytea); +Datum +test_text_to_bytea(PG_FUNCTION_ARGS) +{ + PG_RETURN_BYTEA_P(PG_GETARG_TEXT_PP(0)); +} + +/* Corruption tests in C. */ +PG_FUNCTION_INFO_V1(test_mblen_func); +Datum +test_mblen_func(PG_FUNCTION_ARGS) +{ + const char *func = text_to_cstring(PG_GETARG_BYTEA_PP(0)); + const char *encoding = text_to_cstring(PG_GETARG_BYTEA_PP(1)); + text *string = PG_GETARG_BYTEA_PP(2); + int offset = PG_GETARG_INT32(3); + const char *data = VARDATA_ANY(string); + size_t size = VARSIZE_ANY_EXHDR(string); + int result = 0; + + if (strcmp(func, "pg_mblen_unbounded") == 0) + result = pg_mblen_unbounded(data + offset); + else if (strcmp(func, "pg_mblen_cstr") == 0) + result = pg_mblen_cstr(data + offset); + else if (strcmp(func, "pg_mblen_with_len") == 0) + result = pg_mblen_with_len(data + offset, size - offset); + else if (strcmp(func, "pg_mblen_range") == 0) + result = pg_mblen_range(data + offset, data + size); + else if (strcmp(func, "pg_encoding_mblen") == 0) + result = pg_encoding_mblen(pg_char_to_encoding(encoding), data + offset); + else + elog(ERROR, "unknown function"); + + PG_RETURN_INT32(result); +} + +PG_FUNCTION_INFO_V1(test_text_to_wchars); +Datum +test_text_to_wchars(PG_FUNCTION_ARGS) +{ + const char *encoding_name = text_to_cstring(PG_GETARG_BYTEA_PP(0)); + text *string = PG_GETARG_TEXT_PP(1); + const char *data = VARDATA_ANY(string); + size_t size = VARSIZE_ANY_EXHDR(string); + pg_wchar *wchars = palloc(sizeof(pg_wchar) * (size + 1)); + Datum *datums; + int wlen; + int encoding; + + encoding = pg_char_to_encoding(encoding_name); + if (encoding < 0) + elog(ERROR, "unknown encoding name: %s", encoding_name); + + if (size > 0) + { + datums = palloc(sizeof(Datum) * size); + wlen = pg_encoding_mb2wchar_with_len(encoding, + data, + wchars, + size); + Assert(wlen >= 0); + Assert(wlen <= size); + Assert(wchars[wlen] == 0); + + for (int i = 0; i < wlen; ++i) + datums[i] = UInt32GetDatum(wchars[i]); + } + else + { + datums = NULL; + wlen = 0; + } + + PG_RETURN_ARRAYTYPE_P(construct_array_builtin(datums, wlen, INT4OID)); +} + +PG_FUNCTION_INFO_V1(test_wchars_to_text); +Datum +test_wchars_to_text(PG_FUNCTION_ARGS) +{ + const char *encoding_name = text_to_cstring(PG_GETARG_BYTEA_PP(0)); + ArrayType *array = PG_GETARG_ARRAYTYPE_P(1); + Datum *datums; + bool *nulls; + char *mb; + text *result; + int wlen; + int bytes; + int encoding; + + encoding = pg_char_to_encoding(encoding_name); + if (encoding < 0) + elog(ERROR, "unknown encoding name: %s", encoding_name); + + deconstruct_array_builtin(array, INT4OID, &datums, &nulls, &wlen); + + if (wlen > 0) + { + pg_wchar *wchars = palloc(sizeof(pg_wchar) * wlen); + + for (int i = 0; i < wlen; ++i) + { + if (nulls[i]) + elog(ERROR, "unexpected NULL in array"); + wchars[i] = DatumGetInt32(datums[i]); + } + + mb = palloc(pg_encoding_max_length(encoding) * wlen + 1); + bytes = pg_encoding_wchar2mb_with_len(encoding, wchars, mb, wlen); + } + else + { + mb = ""; + bytes = 0; + } + + result = palloc(bytes + VARHDRSZ); + SET_VARSIZE(result, bytes + VARHDRSZ); + memcpy(VARDATA(result), mb, bytes); + + PG_RETURN_TEXT_P(result); +} + +PG_FUNCTION_INFO_V1(test_valid_server_encoding); +Datum +test_valid_server_encoding(PG_FUNCTION_ARGS) +{ + PG_RETURN_BOOL(pg_valid_server_encoding(text_to_cstring(PG_GETARG_TEXT_PP(0))) >= 0); +} + /* Provide SQL access to IsBinaryCoercible() */ PG_FUNCTION_INFO_V1(binary_coercible); Datum diff --git a/src/oracle_test/regress/sql/.gitignore b/src/oracle_test/regress/sql/.gitignore index a03e2f89c6f..0dec61c5e2b 100644 --- a/src/oracle_test/regress/sql/.gitignore +++ b/src/oracle_test/regress/sql/.gitignore @@ -3,6 +3,7 @@ /create_function_0.sql /create_function_1.sql /create_function_2.sql +/encoding.sql /largeobject.sql /misc.sql /tablespace.sql diff --git a/src/oracle_test/regress/sql/alter_table.sql b/src/oracle_test/regress/sql/alter_table.sql index 1e74008cd9d..272a354102a 100644 --- a/src/oracle_test/regress/sql/alter_table.sql +++ b/src/oracle_test/regress/sql/alter_table.sql @@ -2186,12 +2186,15 @@ SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment F -- filenode function call can return NULL for a relation dropped concurrently -- with the call's surrounding query, so ignore a NULL mapped_oid for -- relations that no longer exist after all calls finish. +-- Temporary relations are ignored, as not supported by pg_filenode_relation(). CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid -WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +WHERE relkind IN ('r', 'i', 'S', 't', 'm') + AND relpersistence != 't' + AND mapped_oid IS DISTINCT FROM oid; SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT NULL; @@ -2798,6 +2801,15 @@ ALTER TABLE range_parted2 DETACH PARTITION part_rp100 CONCURRENTLY; \d part_rp100 DROP TABLE range_parted2; +-- Test that hash partitions continue to work after they're concurrently +-- detached (bugs #18371, #19070) +CREATE TABLE hash_parted2 (a int) PARTITION BY HASH(a); +CREATE TABLE part_hp PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 2, REMAINDER 0); +ALTER TABLE hash_parted2 DETACH PARTITION part_hp CONCURRENTLY; +DROP TABLE hash_parted2; +INSERT INTO part_hp VALUES (1); +DROP TABLE part_hp; + -- Check ALTER TABLE commands for partitioned tables and partitions -- cannot add/drop column to/from *only* the parent @@ -3012,6 +3024,22 @@ create trigger xtrig update bar1 set a = a + 1; +/* Test case for bug #18970 */ + +create table attbl(a int); +create table atref(b attbl check ((b).a is not null)); +alter table attbl alter column a type numeric; -- someday this should work +alter table atref drop constraint atref_b_check; + +create statistics atref_stat on ((b).a is not null) from atref; +alter table attbl alter column a type numeric; -- someday this should work +drop statistics atref_stat; + +create index atref_idx on atref (((b).a)); +alter table attbl alter column a type numeric; -- someday this should work +drop table attbl, atref; + +/* End test case for bug #18970 */ -- Test that ALTER TABLE rewrite preserves a clustered index -- for normal indexes and indexes on constraints. diff --git a/src/oracle_test/regress/sql/arrays.sql b/src/oracle_test/regress/sql/arrays.sql index d1094a11a1a..27e62cd8d0d 100644 --- a/src/oracle_test/regress/sql/arrays.sql +++ b/src/oracle_test/regress/sql/arrays.sql @@ -474,6 +474,9 @@ select '{ select array[]::text[]; select '[0:1]={1.1,2.2}'::float8[]; -- all of the above should be accepted +-- some day we might allow these cases, but for now they're errors: +select array[]::oidvector; +select array[]::int2vector; -- tests for array aggregates CREATE TEMP TABLE arraggtest ( f1 INT[], f2 TEXT[][], f3 FLOAT[]); diff --git a/src/oracle_test/regress/sql/collate.icu.utf8.sql b/src/oracle_test/regress/sql/collate.icu.utf8.sql index b093e1d1670..e805eaf4499 100644 --- a/src/oracle_test/regress/sql/collate.icu.utf8.sql +++ b/src/oracle_test/regress/sql/collate.icu.utf8.sql @@ -268,13 +268,13 @@ SELECT a, CAST(b AS varchar) FROM collate_test3 ORDER BY 2; CREATE FUNCTION mylt (text, text) RETURNS boolean LANGUAGE sql AS $$ select $1 < $2 $$; - +/ CREATE FUNCTION mylt_noninline (text, text) RETURNS boolean LANGUAGE sql AS $$ select $1 < $2 limit 1 $$; - +/ CREATE FUNCTION mylt_plpgsql (text, text) RETURNS boolean LANGUAGE plpgsql AS $$ begin return $1 < $2; end $$; - +/ SELECT a.b AS a, b.b AS b, a.b < b.b AS lt, mylt(a.b, b.b), mylt_noninline(a.b, b.b), mylt_plpgsql(a.b, b.b) FROM collate_test1 a, collate_test1 b @@ -297,6 +297,7 @@ begin return xx < yy; end $$; +/ SELECT mylt2('a', 'B' collate "en-x-icu") as t, mylt2('a', 'B' collate "C") as f; @@ -309,7 +310,7 @@ begin return xx < yy; end $$; - +/ SELECT mylt2('a', 'B') as f; SELECT mylt2('a', 'B' collate "C") as fail; -- conflicting collations SELECT mylt2('a', 'B' collate "POSIX") as f; @@ -323,6 +324,7 @@ SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test3)) ORDER CREATE FUNCTION dup (anyelement) RETURNS anyelement AS 'select $1' LANGUAGE sql; +/ SELECT a, dup(b) FROM collate_test1 ORDER BY 2; SELECT a, dup(b) FROM collate_test2 ORDER BY 2; diff --git a/src/oracle_test/regress/sql/create_index.sql b/src/oracle_test/regress/sql/create_index.sql index ad978f3f4a9..8ae1499d465 100644 --- a/src/oracle_test/regress/sql/create_index.sql +++ b/src/oracle_test/regress/sql/create_index.sql @@ -370,6 +370,9 @@ CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops); CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops) WITH (fillfactor=60); +CREATE INDEX hash_i4_partial_index ON hash_i4_heap USING hash (seqno) + WHERE seqno = 9999; + CREATE UNLOGGED TABLE unlogged_hash_table (id int4); CREATE INDEX unlogged_hash_index ON unlogged_hash_table USING hash (id int4_ops); DROP TABLE unlogged_hash_table; @@ -607,7 +610,7 @@ DROP TABLE cwi_test; CREATE TABLE syscol_table (a INT); -- System columns cannot be indexed -CREATE INDEX ON syscolcol_table (ctid); +CREATE INDEX ON syscol_table (ctid); -- nor used in expressions CREATE INDEX ON syscol_table ((ctid >= '(1000,0)')); diff --git a/src/oracle_test/regress/sql/create_table.sql b/src/oracle_test/regress/sql/create_table.sql index d3e5eae6d0a..df8f55ae7eb 100644 --- a/src/oracle_test/regress/sql/create_table.sql +++ b/src/oracle_test/regress/sql/create_table.sql @@ -304,6 +304,14 @@ CREATE TABLE withoid() WITH (oids = true); CREATE TEMP TABLE withoutoid() WITHOUT OIDS; DROP TABLE withoutoid; CREATE TEMP TABLE withoutoid() WITH (oids = false); DROP TABLE withoutoid; +-- temporary tables are ignored by pg_filenode_relation(). +CREATE TEMP TABLE relation_filenode_check(c1 int); +SELECT relpersistence, + pg_filenode_relation (reltablespace, pg_relation_filenode(oid)) + FROM pg_class + WHERE relname = 'relation_filenode_check'; +DROP TABLE relation_filenode_check; + -- check restriction with default expressions -- invalid use of column reference in default expressions CREATE TABLE default_expr_column (id int DEFAULT (id)); diff --git a/src/oracle_test/regress/sql/euc_kr.sql b/src/oracle_test/regress/sql/euc_kr.sql new file mode 100644 index 00000000000..1851b2a8c14 --- /dev/null +++ b/src/oracle_test/regress/sql/euc_kr.sql @@ -0,0 +1,12 @@ +-- This test is about EUC_KR encoding, chosen as perhaps the most prevalent +-- non-UTF8, multibyte encoding as of 2026-01. Since UTF8 can represent all +-- of EUC_KR, also run the test in UTF8. +SELECT getdatabaseencoding() NOT IN ('EUC_KR', 'UTF8') AS skip_test \gset +\if :skip_test +\quit +\endif + +-- Exercise is_multibyte_char_in_char (non-UTF8) slow path. +SELECT POSITION( + convert_from('\xbcf6c7d0', 'EUC_KR') IN + convert_from('\xb0fac7d02c20bcf6c7d02c20b1e2bcfa2c20bbee', 'EUC_KR')); diff --git a/src/oracle_test/regress/sql/generated.sql b/src/oracle_test/regress/sql/generated.sql index 8fccc7da666..95ac0760c6c 100644 --- a/src/oracle_test/regress/sql/generated.sql +++ b/src/oracle_test/regress/sql/generated.sql @@ -188,6 +188,10 @@ COPY gtest1 FROM stdin; COPY gtest1 (a, b) FROM stdin; +COPY gtest1 FROM stdin WHERE b <> 10; + +COPY gtest1 FROM stdin WHERE gtest1 IS NULL; + SELECT * FROM gtest1 ORDER BY a; TRUNCATE gtest3; @@ -387,7 +391,10 @@ DROP TABLE gtest_parent; -- generated columns in partition key (not allowed) CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f3); +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3)); CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent)); +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent is not null)); -- ALTER TABLE ... ADD COLUMN CREATE TABLE gtest25 (a int PRIMARY KEY); diff --git a/src/oracle_test/regress/sql/hash_index.sql b/src/oracle_test/regress/sql/hash_index.sql index 4d1aa020a96..cf05ec02751 100644 --- a/src/oracle_test/regress/sql/hash_index.sql +++ b/src/oracle_test/regress/sql/hash_index.sql @@ -55,6 +55,16 @@ SELECT * FROM hash_f8_heap SELECT * FROM hash_f8_heap WHERE hash_f8_heap.random = '88888888'::float8; +-- +-- partial hash index +-- +EXPLAIN (COSTS OFF) +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + -- -- hash index -- grep '^90[^0-9]' hashovfl.data diff --git a/src/oracle_test/regress/sql/indexing.sql b/src/oracle_test/regress/sql/indexing.sql index a48a3177faf..c375e181f26 100644 --- a/src/oracle_test/regress/sql/indexing.sql +++ b/src/oracle_test/regress/sql/indexing.sql @@ -871,3 +871,77 @@ select indexrelid::regclass, indisvalid, indisreplident, where indexrelid::regclass::text like 'parted_replica%' order by indexrelid::regclass::text collate "C"; drop table parted_replica_tab; +-- create global index using non-partition key +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (10); +create table gidxpart2 partition of gidxpart for values from (10) to (100); +create unique index gidx_u on gidxpart using btree(b) global; +select relname, relhasindex, relkind from pg_class where relname like '%gidx%' order by oid; +\d+ gidxpart +\d+ gidx_u +-- cross-partition uniqueness check for insert and update +insert into gidxpart values (1, 1, 'first'); +insert into gidxpart values (11, 11, 'eleventh'); +insert into gidxpart values (2, 11, 'duplicated (b)=(11) on other partition'); +insert into gidxpart values (12, 1, 'duplicated (b)=(1) on other partition'); +insert into gidxpart values (2, 120, 'second'); +insert into gidxpart values (12, 2, 'twelfth'); +update gidxpart set b=2 where a=2; +update gidxpart set b=1 where a=12; +update gidxpart set b=12 where a=12; +update gidxpart set b=2 where a=2; +select * from gidxpart; + +-- cross-partition uniqueness check applys to newly created partition +create table gidxpart3 partition of gidxpart for values from (100) to (200); +select relname, relkind from pg_class where relname = 'gidxpart3_b_idx'; +insert into gidxpart values (150, 11, 'duplicated (b)=(11) on other partition'); +insert into gidxpart values (150, 13, 'no duplicate b'); + +-- clean up global index tests +drop index gidx_u; +drop table gidxpart; + +-- Test the cross-partition uniqueness with non-partition key with global unique index +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +create table gidxpart2 partition of gidxpart for values from (100000) to (199999); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +insert into gidxpart (a, b, c) values (150000, 572814, 'inserted second on gidxpart2'); +create unique index on gidxpart (b) global; -- should fail +delete from gidxpart where a = 150000 and b = 572814; +create unique index on gidxpart (b) global; +drop table gidxpart; + +-- Test partition attach and detach with global unique index (no existing index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g +alter table gidxpart detach partition gidxpart2; +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i +drop table gidxpart; +drop table gidxpart2; + +-- Test partition attach and detach with global unique index (with duplicate index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +create unique index on gidxpart2 (b); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g +alter table gidxpart detach partition gidxpart2; +drop table gidxpart; +drop table gidxpart2; diff --git a/src/oracle_test/regress/sql/limit.sql b/src/oracle_test/regress/sql/limit.sql index f47c459541f..a6a50e4613c 100644 --- a/src/oracle_test/regress/sql/limit.sql +++ b/src/oracle_test/regress/sql/limit.sql @@ -197,7 +197,10 @@ CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES; \d+ limit_thousand_v_3 CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995 - ORDER BY thousand FETCH FIRST NULL ROWS ONLY; + ORDER BY thousand FETCH FIRST (5::bigint) ROWS WITH TIES; \d+ limit_thousand_v_4 +CREATE VIEW limit_thousand_v_5 AS SELECT thousand FROM onek WHERE thousand < 995 + ORDER BY thousand FETCH FIRST NULL ROWS ONLY; +\d+ limit_thousand_v_5 -- leave these views reset ivorysql.enable_emptystring_to_null; diff --git a/src/oracle_test/regress/sql/privileges.sql b/src/oracle_test/regress/sql/privileges.sql index 0860b439c08..b4c00fe365f 100644 --- a/src/oracle_test/regress/sql/privileges.sql +++ b/src/oracle_test/regress/sql/privileges.sql @@ -228,8 +228,6 @@ CREATE VIEW atest12v AS SELECT * FROM atest12 WHERE b <<< 5; CREATE VIEW atest12sbv WITH (security_barrier=true) AS SELECT * FROM atest12 WHERE b <<< 5; -GRANT SELECT ON atest12v TO PUBLIC; -GRANT SELECT ON atest12sbv TO PUBLIC; -- This plan should use nestloop, knowing that few rows will be selected. EXPLAIN (COSTS OFF) SELECT * FROM atest12v x, atest12v y WHERE x.a = y.b; @@ -252,8 +250,16 @@ CREATE FUNCTION leak2(integer,integer) RETURNS boolean CREATE OPERATOR >>> (procedure = leak2, leftarg = integer, rightarg = integer, restrict = scalargtsel); --- This should not show any "leak" notices before failing. +-- These should not show any "leak" notices before failing. EXPLAIN (COSTS OFF) SELECT * FROM atest12 WHERE a >>> 0; +EXPLAIN (COSTS OFF) SELECT * FROM atest12v WHERE a >>> 0; +EXPLAIN (COSTS OFF) SELECT * FROM atest12sbv WHERE a >>> 0; + +-- Now regress_priv_user1 grants access to regress_priv_user2 via the views. +SET SESSION AUTHORIZATION regress_priv_user1; +GRANT SELECT ON atest12v TO PUBLIC; +GRANT SELECT ON atest12sbv TO PUBLIC; +SET SESSION AUTHORIZATION regress_priv_user2; -- These plans should continue to use a nestloop, since they execute with the -- privileges of the view owner. @@ -1216,6 +1222,14 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_priv_user1 REVOKE EXECUTE ON FUNCTIONS ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT USAGE ON SCHEMAS TO regress_priv_user2; -- error +-- Test quoting and dequoting of user names in ACLs +CREATE ROLE "regress_""quoted"; +SELECT makeaclitem('regress_"quoted'::regrole, 'regress_"quoted'::regrole, + 'SELECT', TRUE); +SELECT '"regress_""quoted"=r*/"regress_""quoted"'::aclitem; +SELECT '""=r*/""'::aclitem; -- used to be misparsed as """" +DROP ROLE "regress_""quoted"; + -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. @@ -1482,6 +1496,13 @@ DROP USER regress_priv_user7; DROP USER regress_priv_user8; -- does not exist +-- leave some default ACLs for pg_upgrade's dump-restore test input. +ALTER DEFAULT PRIVILEGES FOR ROLE pg_signal_backend + REVOKE USAGE ON TYPES FROM pg_signal_backend; +ALTER DEFAULT PRIVILEGES FOR ROLE pg_read_all_settings + REVOKE USAGE ON TYPES FROM pg_read_all_settings; + + -- permissions with LOCK TABLE CREATE USER regress_locktable_user; CREATE TABLE lock_table (a int); diff --git a/src/oracle_test/regress/sql/psql.sql b/src/oracle_test/regress/sql/psql.sql index 84a83cf1bca..dc6da80fa33 100644 --- a/src/oracle_test/regress/sql/psql.sql +++ b/src/oracle_test/regress/sql/psql.sql @@ -994,6 +994,7 @@ select \if false \\ (bogus \else \\ 42 \endif \\ forty_two; \pset arg1 arg2 \q \reset + \restrict test \s arg1 \set arg1 arg2 arg3 arg4 arg5 arg6 arg7 \setenv arg1 arg2 @@ -1002,6 +1003,7 @@ select \if false \\ (bogus \else \\ 42 \endif \\ forty_two; \t arg1 \T arg1 \timing arg1 + \unrestrict not_valid \unset arg1 \w arg1 \watch arg1 diff --git a/src/oracle_test/regress/sql/publication.sql b/src/oracle_test/regress/sql/publication.sql index 7d5c9373845..dc09d1fdf6f 100644 --- a/src/oracle_test/regress/sql/publication.sql +++ b/src/oracle_test/regress/sql/publication.sql @@ -215,6 +215,41 @@ DROP PUBLICATION testpub_fortbl; DROP SCHEMA pub_test CASCADE; +-- Test that the INSERT ON CONFLICT command correctly checks REPLICA IDENTITY +-- when the target table is published. +CREATE TABLE testpub_insert_onconfl_no_ri (a int unique, b int); +CREATE TABLE testpub_insert_onconfl_parted (a int unique, b int) PARTITION by RANGE (a); +CREATE TABLE testpub_insert_onconfl_part_no_ri PARTITION OF testpub_insert_onconfl_parted FOR VALUES FROM (1) TO (10); + +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION pub1 FOR ALL TABLES; +RESET client_min_messages; + +-- fail - missing REPLICA IDENTITY +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; + +-- ok - no updates +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT DO NOTHING; + +-- fail - missing REPLICA IDENTITY in partition testpub_insert_onconfl_no_ri +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; + +-- ok - no updates +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT DO NOTHING; + +DROP PUBLICATION pub1; +DROP TABLE testpub_insert_onconfl_no_ri; +DROP TABLE testpub_insert_onconfl_parted; + RESET SESSION AUTHORIZATION; DROP ROLE regress_publication_user, regress_publication_user2; DROP ROLE regress_publication_user_dummy; + +-- stage objects for pg_dump tests +CREATE SCHEMA pubme CREATE TABLE t0 (c int, d int) CREATE TABLE t1 (c int); +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION dump_pub_1ct FOR TABLE ONLY pubme.t0; +CREATE PUBLICATION dump_pub_2ct FOR TABLE ONLY pubme.t0, pubme.t1; +CREATE PUBLICATION dump_pub_all FOR TABLE ONLY pubme.t0, pubme.t1 + WITH (publish_via_partition_root = true); +RESET client_min_messages; diff --git a/src/oracle_test/regress/sql/rowsecurity.sql b/src/oracle_test/regress/sql/rowsecurity.sql index 11974846de4..a8844212859 100644 --- a/src/oracle_test/regress/sql/rowsecurity.sql +++ b/src/oracle_test/regress/sql/rowsecurity.sql @@ -1835,7 +1835,7 @@ DROP VIEW rls_view; DROP TABLE rls_tbl; DROP TABLE ref_tbl; --- Leaky operator test +-- Leaky operator tests CREATE TABLE rls_tbl (a int); INSERT INTO rls_tbl SELECT x/10 FROM generate_series(1, 100) x; ANALYZE rls_tbl; @@ -1851,9 +1851,58 @@ CREATE FUNCTION op_leak(int, int) RETURNS bool CREATE OPERATOR <<< (procedure = op_leak, leftarg = int, rightarg = int, restrict = scalarltsel); SELECT * FROM rls_tbl WHERE a <<< 1000; +RESET SESSION AUTHORIZATION; + +CREATE TABLE rls_child_tbl () INHERITS (rls_tbl); +INSERT INTO rls_child_tbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_child_tbl; + +CREATE TABLE rls_ptbl (a int) PARTITION BY RANGE (a); +CREATE TABLE rls_part PARTITION OF rls_ptbl FOR VALUES FROM (-100) TO (100); +INSERT INTO rls_ptbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_ptbl, rls_part; + +ALTER TABLE rls_ptbl ENABLE ROW LEVEL SECURITY; +ALTER TABLE rls_part ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_ptbl TO regress_rls_alice; +GRANT SELECT ON rls_part TO regress_rls_alice; +CREATE POLICY p1 ON rls_tbl USING (a < 0); +CREATE POLICY p2 ON rls_ptbl USING (a < 0); +CREATE POLICY p3 ON rls_part USING (a < 0); + +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; +SELECT * FROM rls_child_tbl WHERE a <<< 1000; +SELECT * FROM rls_ptbl WHERE a <<< 1000; +SELECT * FROM rls_part WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; +RESET SESSION AUTHORIZATION; + +REVOKE SELECT ON rls_tbl FROM regress_rls_alice; +CREATE VIEW rls_tbl_view AS SELECT * FROM rls_tbl; + +ALTER TABLE rls_child_tbl ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_child_tbl TO regress_rls_alice; +CREATE POLICY p4 ON rls_child_tbl USING (a < 0); + +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; +SELECT * FROM rls_tbl_view WHERE a <<< 1000; +SELECT * FROM rls_child_tbl WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); RESET SESSION AUTHORIZATION; +DROP TABLE rls_part; +DROP TABLE rls_ptbl; +DROP TABLE rls_child_tbl; +DROP VIEW rls_tbl_view; DROP TABLE rls_tbl; -- Bug #16006: whole-row Vars in a policy don't play nice with sub-selects diff --git a/src/oracle_test/regress/sql/stats_ext.sql b/src/oracle_test/regress/sql/stats_ext.sql index 93f53a33771..7f148f0f886 100644 --- a/src/oracle_test/regress/sql/stats_ext.sql +++ b/src/oracle_test/regress/sql/stats_ext.sql @@ -41,6 +41,18 @@ CREATE STATISTICS tst ON x, x, y, x, x, (x || 'x'), (y + 1), (x || 'x'), (x || ' CREATE STATISTICS tst ON (x || 'x'), (x || 'x'), (y + 1), (x || 'x'), (x || 'x'), (y + 1), (x || 'x'), (x || 'x'), (y + 1) FROM ext_stats_test; CREATE STATISTICS tst ON (x || 'x'), (x || 'x'), y FROM ext_stats_test; CREATE STATISTICS tst (unrecognized) ON x, y FROM ext_stats_test; +-- unsupported targets +CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo; +CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar; +CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo; +CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x); +CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text); +CREATE FUNCTION tftest(int) returns table(a int, b int) as $$ +SELECT $1, $1+i FROM generate_series(1,5) g(i); +$$ LANGUAGE sql IMMUTABLE STRICT; +/ +CREATE STATISTICS alt_stat2 ON a FROM tftest(1); +DROP FUNCTION tftest; -- incorrect expressions CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference CREATE STATISTICS tst ON y + z FROM ext_stats_test; -- missing parentheses @@ -58,6 +70,14 @@ DROP STATISTICS ab1_a_b_stats; ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new; RESET SESSION AUTHORIZATION; DROP ROLE regress_stats_ext; +CREATE STATISTICS pg_temp.stats_ext_temp ON a, b FROM ab1; +SELECT regexp_replace(pg_describe_object(tableoid, oid, 0), + 'pg_temp_[0-9]*', 'pg_temp_REDACTED') AS descr, + pg_statistics_obj_is_visible(oid) AS visible + FROM pg_statistic_ext + WHERE stxname = 'stats_ext_temp'; +DROP STATISTICS stats_ext_temp; -- shall fail +DROP STATISTICS pg_temp.stats_ext_temp; CREATE STATISTICS IF NOT EXISTS ab1_a_b_stats ON a, b FROM ab1; DROP STATISTICS ab1_a_b_stats; @@ -1608,7 +1628,15 @@ CREATE FUNCTION op_leak(int, int) RETURNS bool / CREATE OPERATOR <<< (procedure = op_leak, leftarg = int, rightarg = int, restrict = scalarltsel); +CREATE FUNCTION op_leak(record, record) RETURNS bool + AS 'BEGIN RAISE NOTICE ''op_leak => %, %'', $1, $2; RETURN $1 < $2; END' + LANGUAGE plpgsql; +/ +CREATE OPERATOR <<< (procedure = op_leak, leftarg = record, rightarg = record, + restrict = scalarltsel); SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied -- Grant access via a security barrier view, but hide all data @@ -1620,18 +1648,48 @@ GRANT SELECT, DELETE ON tststats.priv_test_view TO regress_stats_user1; -- Should now have access via the view, but see nothing and leak nothing SET SESSION AUTHORIZATION regress_stats_user1; SELECT * FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not leak +SELECT * FROM tststats.priv_test_view t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak DELETE FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not leak -- Grant table access, but hide all data with RLS RESET SESSION AUTHORIZATION; ALTER TABLE tststats.priv_test_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_tbl_pol ON tststats.priv_test_tbl USING (2 * a < 0); GRANT SELECT, DELETE ON tststats.priv_test_tbl TO regress_stats_user1; -- Should now have direct table access, but see nothing and leak nothing SET SESSION AUTHORIZATION regress_stats_user1; SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +-- Create plain inheritance parent table with no access permissions +RESET SESSION AUTHORIZATION; +CREATE TABLE tststats.priv_test_parent_tbl (a int, b int); +ALTER TABLE tststats.priv_test_tbl INHERIT tststats.priv_test_parent_tbl; + +-- Should not have access to parent, and should leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied + +-- Grant table access to parent, but hide all data with RLS +RESET SESSION AUTHORIZATION; +ALTER TABLE tststats.priv_test_parent_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_parent_tbl_pol ON tststats.priv_test_parent_tbl USING (2 * a < 0); +GRANT SELECT, DELETE ON tststats.priv_test_parent_tbl TO regress_stats_user1; + +-- Should now have direct table access to parent, but see nothing and leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak + -- privilege checks for pg_stats_ext and pg_stats_ext_exprs RESET SESSION AUTHORIZATION; CREATE TABLE stats_ext_tbl (id INT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, col TEXT); @@ -1658,10 +1716,31 @@ SELECT statistics_name, most_common_vals FROM pg_stats_ext x SELECT statistics_name, most_common_vals FROM pg_stats_ext_exprs x WHERE tablename = 'stats_ext_tbl' ORDER BY ROW(x.*); +-- CREATE STATISTICS checks for CREATE on the schema +RESET SESSION AUTHORIZATION; +CREATE SCHEMA sts_sch1 CREATE TABLE sts_sch1.tbl (a INT, b INT); +GRANT USAGE ON SCHEMA sts_sch1 TO regress_stats_user1; +ALTER TABLE sts_sch1.tbl OWNER TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.fail ON a, b FROM sts_sch1.tbl; +RESET SESSION AUTHORIZATION; +GRANT CREATE ON SCHEMA sts_sch1 TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.pass ON a, b FROM sts_sch1.tbl; + +-- re-creating statistics via ALTER TABLE bypasses checks for CREATE on schema +RESET SESSION AUTHORIZATION; +REVOKE CREATE ON SCHEMA sts_sch1 FROM regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +ALTER TABLE sts_sch1.tbl ALTER COLUMN a TYPE SMALLINT; + -- Tidy up DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); +DROP OPERATOR <<< (record, record); +DROP FUNCTION op_leak(record, record); RESET SESSION AUTHORIZATION; DROP TABLE stats_ext_tbl; DROP SCHEMA tststats CASCADE; +DROP SCHEMA sts_sch1 CASCADE; DROP USER regress_stats_user1; diff --git a/src/oracle_test/regress/sql/strings.sql b/src/oracle_test/regress/sql/strings.sql index f611d30170f..d520929b39c 100644 --- a/src/oracle_test/regress/sql/strings.sql +++ b/src/oracle_test/regress/sql/strings.sql @@ -186,6 +186,29 @@ SELECT 'abcd\efg' SIMILAR TO '_bcd\%' ESCAPE '' AS true; SELECT 'abcdefg' SIMILAR TO '_bcd%' ESCAPE NULL AS null; SELECT 'abcdefg' SIMILAR TO '_bcd#%' ESCAPE '##' AS error; +-- Characters that should be left alone in character classes when a +-- SIMILAR TO regexp pattern is converted to POSIX style. +-- Underscore "_" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '_[_[:alpha:]_]_'; +-- Percentage "%" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '%[%[:alnum:]%]%'; +-- Dot "." +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '.[.[:alnum:].].'; +-- Dollar "$" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '$[$[:alnum:]$]$'; +-- Opening parenthesis "(" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '()[([:alnum:](]()'; +-- Caret "^" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '^[^[:alnum:]^[^^][[^^]][\^][[\^]]\^]^'; +-- Closing square bracket "]" at the beginning of character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[]%][^]%][^%]%'; +-- Closing square bracket effective after two carets at the beginning +-- of character class. +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[^^]^'; +-- Closing square bracket after an escape sequence at the beginning of +-- a character closes the character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[|a]%' ESCAPE '|'; + -- Test back reference in regexp_replace SELECT regexp_replace('1112223333', E'(\\d{3})(\\d{3})(\\d{4})', E'(\\1) \\2-\\3'); SELECT regexp_replace('AAA BBB CCC ', E'\\s+', ' ', 'g'); diff --git a/src/oracle_test/regress/sql/triggers.sql b/src/oracle_test/regress/sql/triggers.sql index 97f1872b63b..e6414ce00ff 100644 --- a/src/oracle_test/regress/sql/triggers.sql +++ b/src/oracle_test/regress/sql/triggers.sql @@ -2072,6 +2072,11 @@ BBB 42 CCC 42 \. +-- check detach/reattach behavior; statement triggers with transition tables +-- should not prevent a table from becoming a partition again +alter table parent detach partition child1; +alter table parent attach partition child1 for values in ('AAA'); + -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; @@ -2294,6 +2299,11 @@ copy parent (a, b) from stdin; DDD 42 \. +-- check disinherit/reinherit behavior; statement triggers with transition +-- tables should not prevent a table from becoming an inheritance child again +alter table child1 no inherit parent; +alter table child1 inherit parent; + -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; diff --git a/src/oracle_test/regress/sql/with.sql b/src/oracle_test/regress/sql/with.sql index be444820334..f9a5bf63630 100644 --- a/src/oracle_test/regress/sql/with.sql +++ b/src/oracle_test/regress/sql/with.sql @@ -1037,6 +1037,30 @@ select ( with cte(foo) as ( values(f1) ) values((select foo from cte)) ) from int4_tbl; +-- +-- test for bug #19055: interaction of WITH with aggregates +-- +-- For now, we just throw an error if there's a use of a CTE below the +-- semantic level that the SQL standard assigns to the aggregate. +-- It's not entirely clear what we could do instead that doesn't risk +-- breaking more things than it fixes. +select f1, (with cte1(x,y) as (select 1,2) + select count((select i4.f1 from cte1))) as ss +from int4_tbl i4; + +-- +-- test for bug #19106: interaction of WITH with aggregates +-- +-- the initial fix for #19055 was too aggressive and broke this case +explain (verbose, costs off) +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + -- -- test for nested-recursive-WITH bug -- @@ -1276,6 +1300,29 @@ COMMIT; SELECT * FROM bug6051_3; +-- check that recursive CTE processing doesn't rewrite a CTE more than once +-- (must not try to expand GENERATED ALWAYS IDENTITY columns more than once) +CREATE TEMP TABLE id_alw1 (i int GENERATED ALWAYS AS IDENTITY); + +CREATE TEMP TABLE id_alw2 (i int GENERATED ALWAYS AS IDENTITY); +CREATE TEMP VIEW id_alw2_view AS SELECT * FROM id_alw2; + +CREATE TEMP TABLE id_alw3 (i int GENERATED ALWAYS AS IDENTITY); +CREATE RULE id_alw3_ins AS ON INSERT TO id_alw3 DO INSTEAD + WITH t1 AS (INSERT INTO id_alw1 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw2_view DEFAULT VALUES RETURNING i; +CREATE TEMP VIEW id_alw3_view AS SELECT * FROM id_alw3; + +CREATE TEMP TABLE id_alw4 (i int GENERATED ALWAYS AS IDENTITY); + +WITH t4 AS (INSERT INTO id_alw4 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw3_view DEFAULT VALUES RETURNING i; + +SELECT * from id_alw1; +SELECT * from id_alw2; +SELECT * from id_alw3; +SELECT * from id_alw4; + -- a truly recursive CTE in the same list WITH RECURSIVE t(a) AS ( SELECT 0 diff --git a/src/oracle_test/subscription/t/004_sync.pl b/src/oracle_test/subscription/t/004_sync.pl index 545599b8f8d..cd5acf11a0f 100644 --- a/src/oracle_test/subscription/t/004_sync.pl +++ b/src/oracle_test/subscription/t/004_sync.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 8; +use Test::More tests => 9; # Initialize publisher node my $node_publisher = get_new_node('publisher'); @@ -172,5 +172,11 @@ 'postgres', 'SELECT count(*) = 0 FROM pg_replication_slots'), 'DROP SUBSCRIPTION during error can clean up the slots on the publisher'); +# After dropping the subscription, all replication origins, whether created by +# an apply worker or table sync worker, should have been cleaned up. +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM pg_replication_origin_status"); +is($result, qq(0), 'all replication origins have been cleaned up'); + $node_subscriber->stop('fast'); $node_publisher->stop('fast'); diff --git a/src/oracle_test/subscription/t/100_bugs.pl b/src/oracle_test/subscription/t/100_bugs.pl index cce91891ab9..235227c7727 100644 --- a/src/oracle_test/subscription/t/100_bugs.pl +++ b/src/oracle_test/subscription/t/100_bugs.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 9; +use Test::More tests => 11; # Bug #15114 @@ -362,3 +362,33 @@ $node_publisher_d_cols->stop('fast'); $node_subscriber_d_cols->stop('fast'); + +# BUG #18988 +# The bug happened due to a self-deadlock between the DROP SUBSCRIPTION +# command and the walsender process for accessing pg_subscription. This +# occurred when DROP SUBSCRIPTION attempted to remove a replication slot by +# connecting to a newly created database whose caches are not yet +# initialized. +# +# The bug is fixed by reducing the lock-level during DROP SUBSCRIPTION. +$node_publisher->start(); + +$publisher_connstr = $node_publisher->connstr . ' dbname=regress_db'; +$node_publisher->safe_psql( + 'postgres', qq( + CREATE DATABASE regress_db; + CREATE SUBSCRIPTION regress_sub1 CONNECTION '$publisher_connstr' PUBLICATION regress_pub WITH (connect=false); +)); + +my ($ret, $stdout, $stderr) = + $node_publisher->psql('postgres', q{DROP SUBSCRIPTION regress_sub1}); + +isnt($ret, 0, "replication slot does not exist: exit code not 0"); +like( + $stderr, + qr/ERROR: could not drop replication slot "regress_sub1" on publisher/, + "could not drop replication slot: error message"); + +$node_publisher->safe_psql('postgres', "DROP DATABASE regress_db"); + +$node_publisher->stop('fast'); diff --git a/src/pl/plisql/src/pl_exec.c b/src/pl/plisql/src/pl_exec.c index d622929359b..dd51aac3ffc 100644 --- a/src/pl/plisql/src/pl_exec.c +++ b/src/pl/plisql/src/pl_exec.c @@ -3235,28 +3235,14 @@ exec_stmt_return(PLiSQL_execstate *estate, PLiSQL_stmt_return *stmt) } break; - case PLISQL_DTYPE_REC: - { - PLiSQL_rec *rec = (PLiSQL_rec *) retvar; - - /* If record is empty, we return NULL not a row of nulls */ - if (rec->erh && !ExpandedRecordIsEmpty(rec->erh)) - { - estate->retval = ExpandedRecordGetDatum(rec->erh); - estate->retisnull = false; - estate->rettype = rec->rectypeid; - } - } - break; - case PLISQL_DTYPE_ROW: + case PLISQL_DTYPE_REC: { - PLiSQL_row *row = (PLiSQL_row *) retvar; + /* exec_eval_datum can handle these cases */ int32 rettypmod; - /* We get here if there are multiple OUT parameters */ exec_eval_datum(estate, - (PLiSQL_datum *) row, + retvar, &estate->rettype, &rettypmod, &estate->retval, @@ -5790,7 +5776,7 @@ exec_eval_expr(PLiSQL_execstate *estate, /* * Else do it the hard way via exec_run_select */ - rc = exec_run_select(estate, expr, 2, NULL); + rc = exec_run_select(estate, expr, 0, NULL); if (rc != SPI_OK_SELECT) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -5844,6 +5830,10 @@ exec_eval_expr(PLiSQL_execstate *estate, /* ---------- * exec_run_select Execute a select query + * + * Note: passing maxtuples different from 0 ("return all tuples") is + * deprecated because it will prevent parallel execution of the query. + * However, we retain the parameter in case we need it someday. * ---------- */ static int diff --git a/src/pl/plperl/expected/plperl_setup.out b/src/pl/plperl/expected/plperl_setup.out index a1a24dfb41c..efe5c454c76 100644 --- a/src/pl/plperl/expected/plperl_setup.out +++ b/src/pl/plperl/expected/plperl_setup.out @@ -4,9 +4,9 @@ -- Before going ahead with the to-be-tested installations, verify that -- a non-superuser is allowed to install plperl (but not plperlu) when -- suitable permissions have been granted. -CREATE USER regress_user1; -CREATE USER regress_user2; -SET ROLE regress_user1; +CREATE USER regress_plperl_user1; +CREATE USER regress_plperl_user2; +SET ROLE regress_plperl_user1; CREATE EXTENSION plperl; -- fail ERROR: permission denied to create extension "plperl" HINT: Must have CREATE privilege on current database to create this extension. @@ -16,11 +16,11 @@ HINT: Must be superuser to create this extension. RESET ROLE; DO $$ begin - execute format('grant create on database %I to regress_user1', + execute format('grant create on database %I to regress_plperl_user1', current_database()); end; $$; -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; CREATE EXTENSION plperl; CREATE EXTENSION plperlu; -- fail ERROR: permission denied to create extension "plperlu" @@ -34,15 +34,15 @@ SELECT foo1(); -- Must reconnect to avoid failure with non-MULTIPLICITY Perl interpreters \c - -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; -- Should be able to change privileges on the language revoke all on language plperl from public; -SET ROLE regress_user2; +SET ROLE regress_plperl_user2; CREATE FUNCTION foo2() returns int language plperl as '2;'; -- fail ERROR: permission denied for language plperl -SET ROLE regress_user1; -grant usage on language plperl to regress_user2; -SET ROLE regress_user2; +SET ROLE regress_plperl_user1; +grant usage on language plperl to regress_plperl_user2; +SET ROLE regress_plperl_user2; CREATE FUNCTION foo2() returns int language plperl as '2;'; SELECT foo2(); foo2 @@ -50,7 +50,7 @@ SELECT foo2(); 2 (1 row) -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; -- Should be able to drop the extension, but not the language per se DROP LANGUAGE plperl CASCADE; ERROR: cannot drop language plperl because extension plperl requires it @@ -61,9 +61,9 @@ DETAIL: drop cascades to function foo1() drop cascades to function foo2() -- Clean up RESET ROLE; -DROP OWNED BY regress_user1; -DROP USER regress_user1; -DROP USER regress_user2; +DROP OWNED BY regress_plperl_user1; +DROP USER regress_plperl_user1; +DROP USER regress_plperl_user2; -- Now install the versions that will be used by subsequent test scripts. CREATE EXTENSION plperl; CREATE EXTENSION plperlu; diff --git a/src/pl/plperl/po/es.po b/src/pl/plperl/po/es.po index ebdfe076d16..a9595a5f109 100644 --- a/src/pl/plperl/po/es.po +++ b/src/pl/plperl/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: plperl (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:28+0000\n" +"POT-Creation-Date: 2026-02-06 21:24+0000\n" "PO-Revision-Date: 2019-06-06 17:25-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/pl/plperl/sql/plperl_setup.sql b/src/pl/plperl/sql/plperl_setup.sql index 74844782f87..231c16bbae8 100644 --- a/src/pl/plperl/sql/plperl_setup.sql +++ b/src/pl/plperl/sql/plperl_setup.sql @@ -6,10 +6,10 @@ -- a non-superuser is allowed to install plperl (but not plperlu) when -- suitable permissions have been granted. -CREATE USER regress_user1; -CREATE USER regress_user2; +CREATE USER regress_plperl_user1; +CREATE USER regress_plperl_user2; -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; CREATE EXTENSION plperl; -- fail CREATE EXTENSION plperlu; -- fail @@ -18,12 +18,12 @@ RESET ROLE; DO $$ begin - execute format('grant create on database %I to regress_user1', + execute format('grant create on database %I to regress_plperl_user1', current_database()); end; $$; -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; CREATE EXTENSION plperl; CREATE EXTENSION plperlu; -- fail @@ -34,25 +34,25 @@ SELECT foo1(); -- Must reconnect to avoid failure with non-MULTIPLICITY Perl interpreters \c - -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; -- Should be able to change privileges on the language revoke all on language plperl from public; -SET ROLE regress_user2; +SET ROLE regress_plperl_user2; CREATE FUNCTION foo2() returns int language plperl as '2;'; -- fail -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; -grant usage on language plperl to regress_user2; +grant usage on language plperl to regress_plperl_user2; -SET ROLE regress_user2; +SET ROLE regress_plperl_user2; CREATE FUNCTION foo2() returns int language plperl as '2;'; SELECT foo2(); -SET ROLE regress_user1; +SET ROLE regress_plperl_user1; -- Should be able to drop the extension, but not the language per se DROP LANGUAGE plperl CASCADE; @@ -60,9 +60,9 @@ DROP EXTENSION plperl CASCADE; -- Clean up RESET ROLE; -DROP OWNED BY regress_user1; -DROP USER regress_user1; -DROP USER regress_user2; +DROP OWNED BY regress_plperl_user1; +DROP USER regress_plperl_user1; +DROP USER regress_plperl_user2; -- Now install the versions that will be used by subsequent test scripts. CREATE EXTENSION plperl; diff --git a/src/pl/plpgsql/src/expected/plpgsql_domain.out b/src/pl/plpgsql/src/expected/plpgsql_domain.out index efc877cdd10..4afbf7bcdb7 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_domain.out +++ b/src/pl/plpgsql/src/expected/plpgsql_domain.out @@ -395,3 +395,16 @@ SELECT * FROM test_assign_ordered_named_pairs(1,2,0); -- should fail someday {"(1,2)"} (1 row) +CREATE FUNCTION test_null_ordered_named_pair() + RETURNS ordered_named_pair AS $$ +declare v ordered_named_pair; +begin +return v; +end +$$ LANGUAGE plpgsql; +SELECT * FROM test_null_ordered_named_pair(); + i | j +---+--- + | +(1 row) + diff --git a/src/pl/plpgsql/src/expected/plpgsql_simple.out b/src/pl/plpgsql/src/expected/plpgsql_simple.out index 7b22e60f198..da351873e74 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_simple.out +++ b/src/pl/plpgsql/src/expected/plpgsql_simple.out @@ -118,3 +118,14 @@ select simplecaller(); 44 (1 row) +-- Check handling of simple expression in a scrollable cursor (bug #18859) +do $$ +declare + p_CurData refcursor; + val int; +begin + open p_CurData scroll for select 42; + fetch p_CurData into val; + raise notice 'val = %', val; +end; $$; +NOTICE: val = 42 diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index d22733f0db8..162e82ab45f 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -3208,28 +3208,14 @@ exec_stmt_return(PLpgSQL_execstate *estate, PLpgSQL_stmt_return *stmt) } break; - case PLPGSQL_DTYPE_REC: - { - PLpgSQL_rec *rec = (PLpgSQL_rec *) retvar; - - /* If record is empty, we return NULL not a row of nulls */ - if (rec->erh && !ExpandedRecordIsEmpty(rec->erh)) - { - estate->retval = ExpandedRecordGetDatum(rec->erh); - estate->retisnull = false; - estate->rettype = rec->rectypeid; - } - } - break; - case PLPGSQL_DTYPE_ROW: + case PLPGSQL_DTYPE_REC: { - PLpgSQL_row *row = (PLpgSQL_row *) retvar; + /* exec_eval_datum can handle these cases */ int32 rettypmod; - /* We get here if there are multiple OUT parameters */ exec_eval_datum(estate, - (PLpgSQL_datum *) row, + retvar, &estate->rettype, &rettypmod, &estate->retval, @@ -5656,7 +5642,7 @@ exec_eval_expr(PLpgSQL_execstate *estate, /* * Else do it the hard way via exec_run_select */ - rc = exec_run_select(estate, expr, 2, NULL); + rc = exec_run_select(estate, expr, 0, NULL); if (rc != SPI_OK_SELECT) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -5710,6 +5696,10 @@ exec_eval_expr(PLpgSQL_execstate *estate, /* ---------- * exec_run_select Execute a select query + * + * Note: passing maxtuples different from 0 ("return all tuples") is + * deprecated because it will prevent parallel execution of the query. + * However, we retain the parameter in case we need it someday. * ---------- */ static int @@ -8089,10 +8079,12 @@ exec_save_simple_expr(PLpgSQL_expr *expr, CachedPlan *cplan) /* * Ordinarily, the plan node should be a simple Result. However, if * force_parallel_mode is on, the planner might've stuck a Gather node - * atop that. The simplest way to deal with this is to look through the - * Gather node. The Gather node's tlist would normally contain a Var - * referencing the child node's output, but it could also be a Param, or - * it could be a Const that setrefs.c copied as-is. + * atop that; and/or if this plan is for a scrollable cursor, the planner + * might've stuck a Material node atop it. The simplest way to deal with + * this is to look through the Gather and/or Material nodes. The upper + * node's tlist would normally contain a Var referencing the child node's + * output, but it could also be a Param, or it could be a Const that + * setrefs.c copied as-is. */ plan = stmt->planTree; for (;;) @@ -8110,7 +8102,7 @@ exec_save_simple_expr(PLpgSQL_expr *expr, CachedPlan *cplan) ((Result *) plan)->resconstantqual == NULL); break; } - else if (IsA(plan, Gather)) + else if (IsA(plan, Gather) || IsA(plan, Material)) { Assert(plan->lefttree != NULL && plan->righttree == NULL && diff --git a/src/pl/plpgsql/src/po/es.po b/src/pl/plpgsql/src/po/es.po index 668cfde15d7..e1590635b92 100644 --- a/src/pl/plpgsql/src/po/es.po +++ b/src/pl/plpgsql/src/po/es.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:28+0000\n" +"POT-Creation-Date: 2026-02-06 21:25+0000\n" "PO-Revision-Date: 2021-10-14 10:18-0500\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -79,7 +79,7 @@ msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Podría referirse tanto a una variable PL/pgSQL como a una columna de una tabla." #: pl_comp.c:1324 pl_exec.c:5202 pl_exec.c:5375 pl_exec.c:5462 pl_exec.c:5553 -#: pl_exec.c:6581 +#: pl_exec.c:6585 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "el registro «%s» no tiene un campo «%s»" @@ -104,7 +104,7 @@ msgstr "la variable «%s» tiene pseudotipo %s" msgid "type \"%s\" is only a shell" msgstr "el tipo «%s» está inconcluso" -#: pl_comp.c:2204 pl_exec.c:6882 +#: pl_comp.c:2204 pl_exec.c:6886 #, c-format msgid "type %s is not composite" msgstr "el tipo %s no es compuesto" @@ -329,7 +329,7 @@ msgstr "no se puede usar RETURN QUERY en una función que no ha sido declarada S msgid "structure of query does not match function result type" msgstr "la estructura de la consulta no coincide con el tipo del resultado de la función" -#: pl_exec.c:3596 pl_exec.c:4422 pl_exec.c:8667 +#: pl_exec.c:3596 pl_exec.c:4422 pl_exec.c:8673 #, c-format msgid "query string argument of EXECUTE is null" msgstr "el argumento de consulta a ejecutar en EXECUTE es null" @@ -454,7 +454,7 @@ msgstr "no se puede asignar a la columna de sistema «%s»" msgid "query did not return data" msgstr "la consulta no retornó datos" -#: pl_exec.c:5661 pl_exec.c:5673 pl_exec.c:5698 pl_exec.c:5774 pl_exec.c:5779 +#: pl_exec.c:5661 pl_exec.c:5673 pl_exec.c:5698 pl_exec.c:5778 pl_exec.c:5783 #, c-format msgid "query: %s" msgstr "consulta: %s" @@ -466,43 +466,43 @@ msgid_plural "query returned %d columns" msgstr[0] "la consulta retornó %d columna" msgstr[1] "la consulta retornó %d columnas" -#: pl_exec.c:5773 +#: pl_exec.c:5777 #, c-format msgid "query is SELECT INTO, but it should be plain SELECT" msgstr "la consulta es SELECT INTO, pero debería ser un SELECT simple" -#: pl_exec.c:5778 +#: pl_exec.c:5782 #, c-format msgid "query is not a SELECT" msgstr "la consulta no es un SELECT" -#: pl_exec.c:6595 pl_exec.c:6635 pl_exec.c:6675 +#: pl_exec.c:6599 pl_exec.c:6639 pl_exec.c:6679 #, c-format msgid "type of parameter %d (%s) does not match that when preparing the plan (%s)" msgstr "el tipo del parámetro %d (%s) no coincide aquel con que fue preparado el plan (%s)" -#: pl_exec.c:7086 pl_exec.c:7120 pl_exec.c:7194 pl_exec.c:7220 +#: pl_exec.c:7090 pl_exec.c:7124 pl_exec.c:7198 pl_exec.c:7224 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "no coincide el número de campos de origen y destino en la asignación" #. translator: %s represents a name of an extra check -#: pl_exec.c:7088 pl_exec.c:7122 pl_exec.c:7196 pl_exec.c:7222 +#: pl_exec.c:7092 pl_exec.c:7126 pl_exec.c:7200 pl_exec.c:7226 #, c-format msgid "%s check of %s is active." msgstr "El chequeo %s de %s está activo." -#: pl_exec.c:7092 pl_exec.c:7126 pl_exec.c:7200 pl_exec.c:7226 +#: pl_exec.c:7096 pl_exec.c:7130 pl_exec.c:7204 pl_exec.c:7230 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "Asegúrese que la consulta retorna la lista exacta de columnas." -#: pl_exec.c:7613 +#: pl_exec.c:7617 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "el registro «%s» no ha sido asignado aún" -#: pl_exec.c:7614 +#: pl_exec.c:7618 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "La estructura de fila de un registro aún no asignado no está determinado." diff --git a/src/pl/plpgsql/src/po/ru.po b/src/pl/plpgsql/src/po/ru.po index 75a9946f11e..af36792e58f 100644 --- a/src/pl/plpgsql/src/po/ru.po +++ b/src/pl/plpgsql/src/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: plpgsql (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2024-09-07 17:27+0300\n" +"POT-Creation-Date: 2026-02-21 05:20+0200\n" "PO-Revision-Date: 2021-09-04 12:39+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -78,8 +78,8 @@ msgstr "неоднозначная ссылка на столбец \"%s\"" msgid "It could refer to either a PL/pgSQL variable or a table column." msgstr "Подразумевается ссылка на переменную PL/pgSQL или столбец таблицы." -#: pl_comp.c:1324 pl_exec.c:5202 pl_exec.c:5375 pl_exec.c:5462 pl_exec.c:5553 -#: pl_exec.c:6581 +#: pl_comp.c:1324 pl_exec.c:5188 pl_exec.c:5361 pl_exec.c:5448 pl_exec.c:5539 +#: pl_exec.c:6571 #, c-format msgid "record \"%s\" has no field \"%s\"" msgstr "в записи \"%s\" нет поля \"%s\"" @@ -104,7 +104,7 @@ msgstr "переменная \"%s\" имеет псевдотип %s" msgid "type \"%s\" is only a shell" msgstr "тип \"%s\" является пустышкой" -#: pl_comp.c:2204 pl_exec.c:6882 +#: pl_comp.c:2204 pl_exec.c:6872 #, c-format msgid "type %s is not composite" msgstr "тип %s не является составным" @@ -143,7 +143,7 @@ msgstr "конец функции достигнут без RETURN" msgid "while casting return value to function's return type" msgstr "при приведении возвращаемого значения к типу результата функции" -#: pl_exec.c:647 pl_exec.c:3649 +#: pl_exec.c:647 pl_exec.c:3635 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "" @@ -153,7 +153,7 @@ msgstr "" msgid "during function exit" msgstr "при выходе из функции" -#: pl_exec.c:828 pl_exec.c:892 pl_exec.c:3446 +#: pl_exec.c:828 pl_exec.c:892 pl_exec.c:3432 msgid "returned record type does not match expected record type" msgstr "возвращаемый тип записи не соответствует ожидаемому" @@ -271,17 +271,17 @@ msgstr "значение BY в цикле FOR не может быть равн msgid "BY value of FOR loop must be greater than zero" msgstr "значение BY в цикле FOR должно быть больше нуля" -#: pl_exec.c:2853 pl_exec.c:4644 +#: pl_exec.c:2853 pl_exec.c:4630 #, c-format msgid "cursor \"%s\" already in use" msgstr "курсор \"%s\" уже используется" -#: pl_exec.c:2876 pl_exec.c:4709 +#: pl_exec.c:2876 pl_exec.c:4695 #, c-format msgid "arguments given for cursor without arguments" msgstr "курсору без аргументов были переданы аргументы" -#: pl_exec.c:2895 pl_exec.c:4728 +#: pl_exec.c:2895 pl_exec.c:4714 #, c-format msgid "arguments required for cursor" msgstr "курсору требуются аргументы" @@ -311,123 +311,123 @@ msgstr "переменная цикла FOREACH ... SLICE должна быть msgid "FOREACH loop variable must not be of an array type" msgstr "переменная цикла FOREACH не должна быть массивом" -#: pl_exec.c:3207 pl_exec.c:3264 pl_exec.c:3439 +#: pl_exec.c:3207 pl_exec.c:3250 pl_exec.c:3425 #, c-format msgid "" "cannot return non-composite value from function returning composite type" msgstr "" "функция, возвращающая составной тип, не может вернуть несоставное значение" -#: pl_exec.c:3303 pl_gram.y:3365 +#: pl_exec.c:3289 pl_gram.y:3365 #, c-format msgid "cannot use RETURN NEXT in a non-SETOF function" msgstr "" "RETURN NEXT можно использовать только в функциях, возвращающих множества" -#: pl_exec.c:3344 pl_exec.c:3476 +#: pl_exec.c:3330 pl_exec.c:3462 #, c-format msgid "wrong result type supplied in RETURN NEXT" msgstr "в RETURN NEXT передан неправильный тип результата" -#: pl_exec.c:3382 pl_exec.c:3403 +#: pl_exec.c:3368 pl_exec.c:3389 #, c-format msgid "wrong record type supplied in RETURN NEXT" msgstr "в RETURN NEXT передан неправильный тип записи" -#: pl_exec.c:3495 +#: pl_exec.c:3481 #, c-format msgid "RETURN NEXT must have a parameter" msgstr "у оператора RETURN NEXT должен быть параметр" -#: pl_exec.c:3523 pl_gram.y:3429 +#: pl_exec.c:3509 pl_gram.y:3429 #, c-format msgid "cannot use RETURN QUERY in a non-SETOF function" msgstr "" "RETURN QUERY можно использовать только в функциях, возвращающих множества" -#: pl_exec.c:3541 +#: pl_exec.c:3527 msgid "structure of query does not match function result type" msgstr "структура запроса не соответствует типу результата функции" -#: pl_exec.c:3596 pl_exec.c:4422 pl_exec.c:8667 +#: pl_exec.c:3582 pl_exec.c:4408 pl_exec.c:8659 #, c-format msgid "query string argument of EXECUTE is null" msgstr "в качестве текста запроса в EXECUTE передан NULL" -#: pl_exec.c:3677 pl_exec.c:3815 +#: pl_exec.c:3663 pl_exec.c:3801 #, c-format msgid "RAISE option already specified: %s" msgstr "этот параметр RAISE уже указан: %s" -#: pl_exec.c:3711 +#: pl_exec.c:3697 #, c-format msgid "RAISE without parameters cannot be used outside an exception handler" msgstr "" "RAISE без параметров нельзя использовать вне блока обработчика исключения" -#: pl_exec.c:3805 +#: pl_exec.c:3791 #, c-format msgid "RAISE statement option cannot be null" msgstr "параметром оператора RAISE не может быть NULL" -#: pl_exec.c:3875 +#: pl_exec.c:3861 #, c-format msgid "%s" msgstr "%s" -#: pl_exec.c:3930 +#: pl_exec.c:3916 #, c-format msgid "assertion failed" msgstr "нарушение истинности" -#: pl_exec.c:4295 pl_exec.c:4483 +#: pl_exec.c:4281 pl_exec.c:4469 #, c-format msgid "cannot COPY to/from client in PL/pgSQL" msgstr "в PL/pgSQL нельзя выполнить COPY с участием клиента" -#: pl_exec.c:4301 +#: pl_exec.c:4287 #, c-format msgid "unsupported transaction command in PL/pgSQL" msgstr "неподдерживаемая транзакционная команда в PL/pgSQL" -#: pl_exec.c:4324 pl_exec.c:4512 +#: pl_exec.c:4310 pl_exec.c:4498 #, c-format msgid "INTO used with a command that cannot return data" msgstr "INTO с командой не может возвращать данные" -#: pl_exec.c:4347 pl_exec.c:4535 +#: pl_exec.c:4333 pl_exec.c:4521 #, c-format msgid "query returned no rows" msgstr "запрос не вернул строк" -#: pl_exec.c:4369 pl_exec.c:4554 pl_exec.c:5697 +#: pl_exec.c:4355 pl_exec.c:4540 pl_exec.c:5683 #, c-format msgid "query returned more than one row" msgstr "запрос вернул несколько строк" -#: pl_exec.c:4371 +#: pl_exec.c:4357 #, c-format msgid "Make sure the query returns a single row, or use LIMIT 1." msgstr "" "Измените запрос, чтобы он выбирал одну строку, или используйте LIMIT 1." -#: pl_exec.c:4387 +#: pl_exec.c:4373 #, c-format msgid "query has no destination for result data" msgstr "в запросе нет назначения для данных результата" -#: pl_exec.c:4388 +#: pl_exec.c:4374 #, c-format msgid "If you want to discard the results of a SELECT, use PERFORM instead." msgstr "Если вам нужно отбросить результаты SELECT, используйте PERFORM." -#: pl_exec.c:4475 +#: pl_exec.c:4461 #, c-format msgid "EXECUTE of SELECT ... INTO is not implemented" msgstr "возможность выполнения SELECT ... INTO в EXECUTE не реализована" # skip-rule: space-before-ellipsis -#: pl_exec.c:4476 +#: pl_exec.c:4462 #, c-format msgid "" "You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS " @@ -436,57 +436,57 @@ msgstr "" "Альтернативой может стать EXECUTE ... INTO или EXECUTE CREATE TABLE ... " "AS ..." -#: pl_exec.c:4489 +#: pl_exec.c:4475 #, c-format msgid "EXECUTE of transaction commands is not implemented" msgstr "EXECUTE с транзакционными командами не поддерживается" -#: pl_exec.c:4790 pl_exec.c:4878 +#: pl_exec.c:4776 pl_exec.c:4864 #, c-format msgid "cursor variable \"%s\" is null" msgstr "переменная курсора \"%s\" равна NULL" -#: pl_exec.c:4801 pl_exec.c:4889 +#: pl_exec.c:4787 pl_exec.c:4875 #, c-format msgid "cursor \"%s\" does not exist" msgstr "курсор \"%s\" не существует" -#: pl_exec.c:4814 +#: pl_exec.c:4800 #, c-format msgid "relative or absolute cursor position is null" msgstr "относительная или абсолютная позиция курсора равна NULL" -#: pl_exec.c:5052 pl_exec.c:5147 +#: pl_exec.c:5038 pl_exec.c:5133 #, c-format msgid "null value cannot be assigned to variable \"%s\" declared NOT NULL" msgstr "значение NULL нельзя присвоить переменной \"%s\", объявленной NOT NULL" -#: pl_exec.c:5128 +#: pl_exec.c:5114 #, c-format msgid "cannot assign non-composite value to a row variable" msgstr "переменной типа кортеж можно присвоить только составное значение" -#: pl_exec.c:5160 +#: pl_exec.c:5146 #, c-format msgid "cannot assign non-composite value to a record variable" msgstr "переменной типа запись можно присвоить только составное значение" -#: pl_exec.c:5211 +#: pl_exec.c:5197 #, c-format msgid "cannot assign to system column \"%s\"" msgstr "присвоить значение системному столбцу \"%s\" нельзя" -#: pl_exec.c:5660 +#: pl_exec.c:5646 #, c-format msgid "query did not return data" msgstr "запрос не вернул данные" -#: pl_exec.c:5661 pl_exec.c:5673 pl_exec.c:5698 pl_exec.c:5774 pl_exec.c:5779 +#: pl_exec.c:5647 pl_exec.c:5659 pl_exec.c:5684 pl_exec.c:5764 pl_exec.c:5769 #, c-format msgid "query: %s" msgstr "запрос: %s" -#: pl_exec.c:5669 +#: pl_exec.c:5655 #, c-format msgid "query returned %d column" msgid_plural "query returned %d columns" @@ -494,17 +494,17 @@ msgstr[0] "запрос вернул %d столбец" msgstr[1] "запрос вернул %d столбца" msgstr[2] "запрос вернул %d столбцов" -#: pl_exec.c:5773 +#: pl_exec.c:5763 #, c-format msgid "query is SELECT INTO, but it should be plain SELECT" msgstr "запрос - не просто SELECT, а SELECT INTO" -#: pl_exec.c:5778 +#: pl_exec.c:5768 #, c-format msgid "query is not a SELECT" msgstr "запрос - не SELECT" -#: pl_exec.c:6595 pl_exec.c:6635 pl_exec.c:6675 +#: pl_exec.c:6585 pl_exec.c:6625 pl_exec.c:6665 #, c-format msgid "" "type of parameter %d (%s) does not match that when preparing the plan (%s)" @@ -512,29 +512,29 @@ msgstr "" "тип параметра %d (%s) не соответствует тому, с которым подготавливался план " "(%s)" -#: pl_exec.c:7086 pl_exec.c:7120 pl_exec.c:7194 pl_exec.c:7220 +#: pl_exec.c:7076 pl_exec.c:7110 pl_exec.c:7184 pl_exec.c:7210 #, c-format msgid "number of source and target fields in assignment does not match" msgstr "в левой и правой части присваивания разное количество полей" #. translator: %s represents a name of an extra check -#: pl_exec.c:7088 pl_exec.c:7122 pl_exec.c:7196 pl_exec.c:7222 +#: pl_exec.c:7078 pl_exec.c:7112 pl_exec.c:7186 pl_exec.c:7212 #, c-format msgid "%s check of %s is active." msgstr "Включена проверка %s (с %s)." -#: pl_exec.c:7092 pl_exec.c:7126 pl_exec.c:7200 pl_exec.c:7226 +#: pl_exec.c:7082 pl_exec.c:7116 pl_exec.c:7190 pl_exec.c:7216 #, c-format msgid "Make sure the query returns the exact list of columns." msgstr "" "Измените запрос, чтобы он возвращал в точности требуемый список столбцов." -#: pl_exec.c:7613 +#: pl_exec.c:7603 #, c-format msgid "record \"%s\" is not assigned yet" msgstr "записи \"%s\" не присвоено значение" -#: pl_exec.c:7614 +#: pl_exec.c:7604 #, c-format msgid "The tuple structure of a not-yet-assigned record is indeterminate." msgstr "" diff --git a/src/pl/plpgsql/src/sql/plpgsql_domain.sql b/src/pl/plpgsql/src/sql/plpgsql_domain.sql index 8f99aae5a9f..4c5dd7dc707 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_domain.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_domain.sql @@ -277,3 +277,13 @@ $$ LANGUAGE plpgsql; SELECT * FROM test_assign_ordered_named_pairs(1,2,3); SELECT * FROM test_assign_ordered_named_pairs(2,1,3); SELECT * FROM test_assign_ordered_named_pairs(1,2,0); -- should fail someday + +CREATE FUNCTION test_null_ordered_named_pair() + RETURNS ordered_named_pair AS $$ +declare v ordered_named_pair; +begin +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_null_ordered_named_pair(); diff --git a/src/pl/plpgsql/src/sql/plpgsql_simple.sql b/src/pl/plpgsql/src/sql/plpgsql_simple.sql index 143bf09dce4..72d8afe4500 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_simple.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_simple.sql @@ -102,3 +102,15 @@ as $$select 22 + 22$$; select simplecaller(); select simplecaller(); + +-- Check handling of simple expression in a scrollable cursor (bug #18859) + +do $$ +declare + p_CurData refcursor; + val int; +begin + open p_CurData scroll for select 42; + fetch p_CurData into val; + raise notice 'val = %', val; +end; $$; diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile index 35d828f864a..60d3f74d517 100644 --- a/src/pl/plpython/Makefile +++ b/src/pl/plpython/Makefile @@ -11,7 +11,7 @@ ifeq ($(PORTNAME), win32) override python_libspec = endif -override CPPFLAGS := -I. -I$(srcdir) $(python_includespec) $(CPPFLAGS) +override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) $(python_includespec) rpathdir = $(python_libdir) diff --git a/src/pl/plpython/expected/plpython_types_3.out b/src/pl/plpython/expected/plpython_types_3.out index b2cc0ccfbd0..6fadd5462d1 100644 --- a/src/pl/plpython/expected/plpython_types_3.out +++ b/src/pl/plpython/expected/plpython_types_3.out @@ -574,10 +574,10 @@ return x $$ LANGUAGE plpython3u; SELECT * FROM test_type_conversion_array_date(ARRAY[[['2016-09-21','2016-09-22',NULL],[NULL,'2016-10-21','2016-10-22']], [[NULL,'2016-11-21','2016-10-21'],['2015-09-21','2015-09-22','2014-09-21']]]::date[]); -INFO: ([[['2016-09-21', '2016-09-22', None], [None, '2016-10-21', '2016-10-22']], [[None, '2016-11-21', '2016-10-21'], ['2015-09-21', '2015-09-22', '2014-09-21']]], ) +INFO: ([[['09-21-2016', '09-22-2016', None], [None, '10-21-2016', '10-22-2016']], [[None, '11-21-2016', '10-21-2016'], ['09-21-2015', '09-22-2015', '09-21-2014']]], ) test_type_conversion_array_date --------------------------------------------------------------------------------------------------------------------------------- - {{{2016-09-21,2016-09-22,NULL},{NULL,2016-10-21,2016-10-22}},{{NULL,2016-11-21,2016-10-21},{2015-09-21,2015-09-22,2014-09-21}}} + {{{09-21-2016,09-22-2016,NULL},{NULL,10-21-2016,10-22-2016}},{{NULL,11-21-2016,10-21-2016},{09-21-2015,09-22-2015,09-21-2014}}} (1 row) CREATE FUNCTION test_type_conversion_array_timestamp(x timestamp[]) RETURNS timestamp[] AS $$ @@ -588,9 +588,12 @@ SELECT * FROM test_type_conversion_array_timestamp(ARRAY[[['2016-09-21 15:34:24. [NULL,'2016-10-21 11:34:25.078792-04','2016-10-21 11:34:24.098792-04']], [[NULL,'2016-01-21 11:34:24.078792-04','2016-11-21 11:34:24.108792-04'], ['2015-09-21 11:34:24.079792-04','2014-09-21 11:34:24.078792-04','2013-09-21 11:34:24.078792-04']]]::timestamp[]); -ERROR: datetime format picture ends before converting entire input string -LINE 1: ...FROM test_type_conversion_array_timestamp(ARRAY[[['2016-09-2... - ^ +INFO: ([[['Wed Sep 21 15:34:24.078792 2016', 'Sat Oct 22 11:34:24.078795 2016', None], [None, 'Fri Oct 21 11:34:25.078792 2016', 'Fri Oct 21 11:34:24.098792 2016']], [[None, 'Thu Jan 21 11:34:24.078792 2016', 'Mon Nov 21 11:34:24.108792 2016'], ['Mon Sep 21 11:34:24.079792 2015', 'Sun Sep 21 11:34:24.078792 2014', 'Sat Sep 21 11:34:24.078792 2013']]], ) + test_type_conversion_array_timestamp +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + {{{"Wed Sep 21 15:34:24.078792 2016","Sat Oct 22 11:34:24.078795 2016",NULL},{NULL,"Fri Oct 21 11:34:25.078792 2016","Fri Oct 21 11:34:24.098792 2016"}},{{NULL,"Thu Jan 21 11:34:24.078792 2016","Mon Nov 21 11:34:24.108792 2016"},{"Mon Sep 21 11:34:24.079792 2015","Sun Sep 21 11:34:24.078792 2014","Sat Sep 21 11:34:24.078792 2013"}}} +(1 row) + CREATE OR REPLACE FUNCTION pyreturnmultidemint4(h int4, i int4, j int4, k int4 ) RETURNS int4[] AS $BODY$ m = [[[[x for x in range(h)] for y in range(i)] for z in range(j)] for w in range(k)] plpy.info(m, type(m)) @@ -828,7 +831,7 @@ PL/Python function "test_type_conversion_array_domain_check_violation" CREATE FUNCTION test_read_uint2_array(x uint2[]) RETURNS uint2 AS $$ plpy.info(x, type(x)) return x[0] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; select test_read_uint2_array(array[1::uint2]); INFO: ([1], ) test_read_uint2_array @@ -838,7 +841,7 @@ INFO: ([1], ) CREATE FUNCTION test_build_uint2_array(x int2) RETURNS uint2[] AS $$ return [x, x] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; select test_build_uint2_array(1::int2); test_build_uint2_array ------------------------ @@ -857,7 +860,7 @@ PL/Python function "test_build_uint2_array" CREATE FUNCTION test_type_conversion_domain_array(x integer[]) RETURNS ordered_pair_domain[] AS $$ return [x, x] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; select test_type_conversion_domain_array(array[2,4]); ERROR: return value of function with array return type is not a Python sequence CONTEXT: while creating return value @@ -870,7 +873,7 @@ CREATE FUNCTION test_type_conversion_domain_array2(x ordered_pair_domain) RETURNS integer AS $$ plpy.info(x, type(x)) return x[1] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; select test_type_conversion_domain_array2(array[2,4]); INFO: ([2, 4], ) test_type_conversion_domain_array2 @@ -884,7 +887,7 @@ CREATE FUNCTION test_type_conversion_array_domain_array(x ordered_pair_domain[]) RETURNS ordered_pair_domain AS $$ plpy.info(x, type(x)) return x[0] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; select test_type_conversion_array_domain_array(array[array[2,4]::ordered_pair_domain]); INFO: ([[2, 4]], ) test_type_conversion_array_domain_array @@ -953,7 +956,7 @@ SELECT test_composite_type_input(row(1, 2)); CREATE TYPE nnint_container AS (f1 int, f2 nnint); CREATE FUNCTION nnint_test(x int, y int) RETURNS nnint_container AS $$ return {'f1': x, 'f2': y} -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; SELECT nnint_test(null, 3); nnint_test ------------ @@ -970,7 +973,7 @@ PL/Python function "nnint_test" CREATE DOMAIN ordered_named_pair AS named_pair_2 CHECK((VALUE).i <= (VALUE).j); CREATE FUNCTION read_ordered_named_pair(p ordered_named_pair) RETURNS integer AS $$ return p['i'] + p['j'] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; SELECT read_ordered_named_pair(row(1, 2)); read_ordered_named_pair ------------------------- @@ -981,7 +984,7 @@ SELECT read_ordered_named_pair(row(2, 1)); -- fail ERROR: value for domain ordered_named_pair violates check constraint "ordered_named_pair_check" CREATE FUNCTION build_ordered_named_pair(i int, j int) RETURNS ordered_named_pair AS $$ return {'i': i, 'j': j} -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; SELECT build_ordered_named_pair(1,2); build_ordered_named_pair -------------------------- @@ -994,7 +997,7 @@ CONTEXT: while creating return value PL/Python function "build_ordered_named_pair" CREATE FUNCTION build_ordered_named_pairs(i int, j int) RETURNS ordered_named_pair[] AS $$ return [{'i': i, 'j': j}, {'i': i, 'j': j+1}] -$$ LANGUAGE plpython3u; +$$ LANGUAGE plpythonu; SELECT build_ordered_named_pairs(1,2); build_ordered_named_pairs --------------------------- diff --git a/src/pl/plpython/plpy_elog.c b/src/pl/plpython/plpy_elog.c index 9b5b3bed2f5..285bf9f96c5 100644 --- a/src/pl/plpython/plpy_elog.c +++ b/src/pl/plpython/plpy_elog.c @@ -18,7 +18,8 @@ PyObject *PLy_exc_spi_error = NULL; static void PLy_traceback(PyObject *e, PyObject *v, PyObject *tb, - char **xmsg, char **tbmsg, int *tb_depth); + char *volatile *xmsg, char *volatile *tbmsg, + int *tb_depth); static void PLy_get_spi_error_data(PyObject *exc, int *sqlerrcode, char **detail, char **hint, char **query, int *position, char **schema_name, char **table_name, char **column_name, @@ -43,78 +44,82 @@ void PLy_elog_impl(int elevel, const char *fmt,...) { int save_errno = errno; - char *xmsg; - char *tbmsg; + char *volatile xmsg = NULL; + char *volatile tbmsg = NULL; int tb_depth; StringInfoData emsg; PyObject *exc, *val, *tb; - const char *primary = NULL; - int sqlerrcode = 0; - char *detail = NULL; - char *hint = NULL; - char *query = NULL; - int position = 0; - char *schema_name = NULL; - char *table_name = NULL; - char *column_name = NULL; - char *datatype_name = NULL; - char *constraint_name = NULL; + + /* If we'll need emsg, must initialize it before entering PG_TRY */ + if (fmt) + initStringInfo(&emsg); PyErr_Fetch(&exc, &val, &tb); - if (exc != NULL) + /* Use a PG_TRY block to ensure we release the PyObjects just acquired */ + PG_TRY(); { - PyErr_NormalizeException(&exc, &val, &tb); - - if (PyErr_GivenExceptionMatches(val, PLy_exc_spi_error)) - PLy_get_spi_error_data(val, &sqlerrcode, - &detail, &hint, &query, &position, + const char *primary = NULL; + int sqlerrcode = 0; + char *detail = NULL; + char *hint = NULL; + char *query = NULL; + int position = 0; + char *schema_name = NULL; + char *table_name = NULL; + char *column_name = NULL; + char *datatype_name = NULL; + char *constraint_name = NULL; + + if (exc != NULL) + { + PyErr_NormalizeException(&exc, &val, &tb); + + if (PyErr_GivenExceptionMatches(val, PLy_exc_spi_error)) + PLy_get_spi_error_data(val, &sqlerrcode, + &detail, &hint, &query, &position, + &schema_name, &table_name, &column_name, + &datatype_name, &constraint_name); + else if (PyErr_GivenExceptionMatches(val, PLy_exc_error)) + PLy_get_error_data(val, &sqlerrcode, &detail, &hint, &schema_name, &table_name, &column_name, &datatype_name, &constraint_name); - else if (PyErr_GivenExceptionMatches(val, PLy_exc_error)) - PLy_get_error_data(val, &sqlerrcode, &detail, &hint, - &schema_name, &table_name, &column_name, - &datatype_name, &constraint_name); - else if (PyErr_GivenExceptionMatches(val, PLy_exc_fatal)) - elevel = FATAL; - } + else if (PyErr_GivenExceptionMatches(val, PLy_exc_fatal)) + elevel = FATAL; + } - /* this releases our refcount on tb! */ - PLy_traceback(exc, val, tb, - &xmsg, &tbmsg, &tb_depth); + PLy_traceback(exc, val, tb, + &xmsg, &tbmsg, &tb_depth); - if (fmt) - { - initStringInfo(&emsg); - for (;;) + if (fmt) { - va_list ap; - int needed; - - errno = save_errno; - va_start(ap, fmt); - needed = appendStringInfoVA(&emsg, dgettext(TEXTDOMAIN, fmt), ap); - va_end(ap); - if (needed == 0) - break; - enlargeStringInfo(&emsg, needed); - } - primary = emsg.data; + for (;;) + { + va_list ap; + int needed; + + errno = save_errno; + va_start(ap, fmt); + needed = appendStringInfoVA(&emsg, dgettext(TEXTDOMAIN, fmt), ap); + va_end(ap); + if (needed == 0) + break; + enlargeStringInfo(&emsg, needed); + } + primary = emsg.data; - /* If there's an exception message, it goes in the detail. */ - if (xmsg) - detail = xmsg; - } - else - { - if (xmsg) - primary = xmsg; - } + /* If there's an exception message, it goes in the detail. */ + if (xmsg) + detail = xmsg; + } + else + { + if (xmsg) + primary = xmsg; + } - PG_TRY(); - { ereport(elevel, (errcode(sqlerrcode ? sqlerrcode : ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), errmsg_internal("%s", primary ? primary : "no exception data"), @@ -136,14 +141,16 @@ PLy_elog_impl(int elevel, const char *fmt,...) } PG_FINALLY(); { + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); + /* For neatness' sake, also release our string buffers */ if (fmt) pfree(emsg.data); if (xmsg) pfree(xmsg); if (tbmsg) pfree(tbmsg); - Py_XDECREF(exc); - Py_XDECREF(val); } PG_END_TRY(); } @@ -154,21 +161,14 @@ PLy_elog_impl(int elevel, const char *fmt,...) * The exception error message is returned in xmsg, the traceback in * tbmsg (both as palloc'd strings) and the traceback depth in * tb_depth. - * - * We release refcounts on all the Python objects in the traceback stack, - * but not on e or v. */ static void PLy_traceback(PyObject *e, PyObject *v, PyObject *tb, - char **xmsg, char **tbmsg, int *tb_depth) + char *volatile *xmsg, char *volatile *tbmsg, int *tb_depth) { - PyObject *e_type_o; - PyObject *e_module_o; - char *e_type_s = NULL; - char *e_module_s = NULL; - PyObject *vob = NULL; - char *vstr; - StringInfoData xstr; + PyObject *volatile e_type_o = NULL; + PyObject *volatile e_module_o = NULL; + PyObject *volatile vob = NULL; StringInfoData tbstr; /* @@ -186,51 +186,63 @@ PLy_traceback(PyObject *e, PyObject *v, PyObject *tb, /* * Format the exception and its value and put it in xmsg. */ + PG_TRY(); + { + char *e_type_s = NULL; + char *e_module_s = NULL; + const char *vstr; + StringInfoData xstr; + + e_type_o = PyObject_GetAttrString(e, "__name__"); + e_module_o = PyObject_GetAttrString(e, "__module__"); + if (e_type_o) + e_type_s = PyString_AsString(e_type_o); + if (e_module_o) + e_module_s = PyString_AsString(e_module_o); + + if (v && ((vob = PyObject_Str(v)) != NULL)) + vstr = PyString_AsString(vob); + else + vstr = "unknown"; - e_type_o = PyObject_GetAttrString(e, "__name__"); - e_module_o = PyObject_GetAttrString(e, "__module__"); - if (e_type_o) - e_type_s = PyString_AsString(e_type_o); - if (e_type_s) - e_module_s = PyString_AsString(e_module_o); - - if (v && ((vob = PyObject_Str(v)) != NULL)) - vstr = PyString_AsString(vob); - else - vstr = "unknown"; + initStringInfo(&xstr); + if (!e_type_s || !e_module_s) + { + if (PyString_Check(e)) + /* deprecated string exceptions */ + appendStringInfoString(&xstr, PyString_AsString(e)); + else + /* shouldn't happen */ + appendStringInfoString(&xstr, "unrecognized exception"); + } + /* mimics behavior of traceback.format_exception_only */ + else if (strcmp(e_module_s, "builtins") == 0 + || strcmp(e_module_s, "__main__") == 0 + || strcmp(e_module_s, "exceptions") == 0) + appendStringInfoString(&xstr, e_type_s); + else + appendStringInfo(&xstr, "%s.%s", e_module_s, e_type_s); + appendStringInfo(&xstr, ": %s", vstr); - initStringInfo(&xstr); - if (!e_type_s || !e_module_s) + *xmsg = xstr.data; + } + PG_FINALLY(); { - if (PyString_Check(e)) - /* deprecated string exceptions */ - appendStringInfoString(&xstr, PyString_AsString(e)); - else - /* shouldn't happen */ - appendStringInfoString(&xstr, "unrecognized exception"); + Py_XDECREF(e_type_o); + Py_XDECREF(e_module_o); + Py_XDECREF(vob); } - /* mimics behavior of traceback.format_exception_only */ - else if (strcmp(e_module_s, "builtins") == 0 - || strcmp(e_module_s, "__main__") == 0 - || strcmp(e_module_s, "exceptions") == 0) - appendStringInfoString(&xstr, e_type_s); - else - appendStringInfo(&xstr, "%s.%s", e_module_s, e_type_s); - appendStringInfo(&xstr, ": %s", vstr); - - *xmsg = xstr.data; + PG_END_TRY(); /* * Now format the traceback and put it in tbmsg. */ - *tb_depth = 0; initStringInfo(&tbstr); /* Mimic Python traceback reporting as close as possible. */ appendStringInfoString(&tbstr, "Traceback (most recent call last):"); while (tb != NULL && tb != Py_None) { - PyObject *volatile tb_prev = NULL; PyObject *volatile frame = NULL; PyObject *volatile code = NULL; PyObject *volatile name = NULL; @@ -258,95 +270,92 @@ PLy_traceback(PyObject *e, PyObject *v, PyObject *tb, filename = PyObject_GetAttrString(code, "co_filename"); if (filename == NULL) elog(ERROR, "could not get file name from Python code object"); - } - PG_CATCH(); - { - Py_XDECREF(frame); - Py_XDECREF(code); - Py_XDECREF(name); - Py_XDECREF(lineno); - Py_XDECREF(filename); - PG_RE_THROW(); - } - PG_END_TRY(); - /* The first frame always points at , skip it. */ - if (*tb_depth > 0) - { - PLyExecutionContext *exec_ctx = PLy_current_execution_context(); - char *proname; - char *fname; - char *line; - char *plain_filename; - long plain_lineno; - - /* - * The second frame points at the internal function, but to mimic - * Python error reporting we want to say . - */ - if (*tb_depth == 1) - fname = ""; - else - fname = PyString_AsString(name); + /* The first frame always points at , skip it. */ + if (*tb_depth > 0) + { + PLyExecutionContext *exec_ctx = PLy_current_execution_context(); + char *proname; + char *fname; + char *line; + char *plain_filename; + long plain_lineno; - proname = PLy_procedure_name(exec_ctx->curr_proc); - plain_filename = PyString_AsString(filename); - plain_lineno = PyInt_AsLong(lineno); + /* + * The second frame points at the internal function, but to + * mimic Python error reporting we want to say . + */ + if (*tb_depth == 1) + fname = ""; + else + fname = PyString_AsString(name); + + proname = PLy_procedure_name(exec_ctx->curr_proc); + plain_filename = PyString_AsString(filename); + plain_lineno = PyInt_AsLong(lineno); + + if (proname == NULL) + appendStringInfo(&tbstr, "\n PL/Python anonymous code block, line %ld, in %s", + plain_lineno - 1, fname); + else + appendStringInfo(&tbstr, "\n PL/Python function \"%s\", line %ld, in %s", + proname, plain_lineno - 1, fname); - if (proname == NULL) - appendStringInfo(&tbstr, "\n PL/Python anonymous code block, line %ld, in %s", - plain_lineno - 1, fname); - else - appendStringInfo(&tbstr, "\n PL/Python function \"%s\", line %ld, in %s", - proname, plain_lineno - 1, fname); - - /* - * function code object was compiled with "" as the - * filename - */ - if (exec_ctx->curr_proc && plain_filename != NULL && - strcmp(plain_filename, "") == 0) - { /* - * If we know the current procedure, append the exact line - * from the source, again mimicking Python's traceback.py - * module behavior. We could store the already line-split - * source to avoid splitting it every time, but producing a - * traceback is not the most important scenario to optimize - * for. But we do not go as far as traceback.py in reading - * the source of imported modules. + * function code object was compiled with "" as the + * filename */ - line = get_source_line(exec_ctx->curr_proc->src, plain_lineno); - if (line) + if (exec_ctx->curr_proc && plain_filename != NULL && + strcmp(plain_filename, "") == 0) { - appendStringInfo(&tbstr, "\n %s", line); - pfree(line); + /* + * If we know the current procedure, append the exact line + * from the source, again mimicking Python's traceback.py + * module behavior. We could store the already line-split + * source to avoid splitting it every time, but producing + * a traceback is not the most important scenario to + * optimize for. But we do not go as far as traceback.py + * in reading the source of imported modules. + */ + line = get_source_line(exec_ctx->curr_proc->src, plain_lineno); + if (line) + { + appendStringInfo(&tbstr, "\n %s", line); + pfree(line); + } } } } + PG_FINALLY(); + { + Py_XDECREF(frame); + Py_XDECREF(code); + Py_XDECREF(name); + Py_XDECREF(lineno); + Py_XDECREF(filename); + } + PG_END_TRY(); - Py_DECREF(frame); - Py_DECREF(code); - Py_DECREF(name); - Py_DECREF(lineno); - Py_DECREF(filename); - - /* Release the current frame and go to the next one. */ - tb_prev = tb; + /* Advance to the next frame. */ tb = PyObject_GetAttrString(tb, "tb_next"); - Assert(tb_prev != Py_None); - Py_DECREF(tb_prev); if (tb == NULL) elog(ERROR, "could not traverse Python traceback"); + + /* + * Release the refcount that PyObject_GetAttrString acquired on the + * next frame object. We don't need it, because our caller has a + * refcount on the first frame object and the frame objects each have + * a refcount on the next one. If we tried to hold this refcount + * longer, it would greatly complicate cleanup in the event of a + * failure in the above PG_TRY block. + */ + Py_DECREF(tb); + (*tb_depth)++; } /* Return the traceback. */ *tbmsg = tbstr.data; - - Py_XDECREF(e_type_o); - Py_XDECREF(e_module_o); - Py_XDECREF(vob); } /* @@ -375,6 +384,10 @@ PLy_get_sqlerrcode(PyObject *exc, int *sqlerrcode) /* * Extract the error data from a SPIError + * + * Note: the returned string values are pointers into the given PyObject. + * They must not be free()'d, and are not guaranteed to be valid once + * we stop holding a reference on the PyObject. */ static void PLy_get_spi_error_data(PyObject *exc, int *sqlerrcode, char **detail, @@ -411,6 +424,11 @@ PLy_get_spi_error_data(PyObject *exc, int *sqlerrcode, char **detail, * * Note: position and query attributes are never set for Error so, unlike * PLy_get_spi_error_data, this function doesn't return them. + * + * Note: the returned string values are palloc'd in the current context. + * While our caller could pfree them later, there's no real need to do so, + * and it would be complicated to handle both this convention and that of + * PLy_get_spi_error_data. */ static void PLy_get_error_data(PyObject *exc, int *sqlerrcode, char **detail, char **hint, diff --git a/src/pl/plpython/po/es.po b/src/pl/plpython/po/es.po index 057f1724b74..1d8e8135d9e 100644 --- a/src/pl/plpython/po/es.po +++ b/src/pl/plpython/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: plpython (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:27+0000\n" +"POT-Creation-Date: 2026-02-06 21:24+0000\n" "PO-Revision-Date: 2019-06-06 17:26-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" @@ -68,7 +68,7 @@ msgstr "el resultado de la consulta tiene demasiados registros y no entran en un msgid "closing a cursor in an aborted subtransaction" msgstr "cerrando un cursor en una subtransacción abortada" -#: plpy_elog.c:122 plpy_elog.c:123 plpy_plpymodule.c:546 +#: plpy_elog.c:127 plpy_elog.c:128 plpy_plpymodule.c:546 #, c-format msgid "%s" msgstr "%s" diff --git a/src/pl/plpython/po/ru.po b/src/pl/plpython/po/ru.po index 593db6c9fa4..2b331562901 100644 --- a/src/pl/plpython/po/ru.po +++ b/src/pl/plpython/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: plpython (PostgreSQL current)\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-08 07:45+0200\n" +"POT-Creation-Date: 2025-08-02 11:38+0300\n" "PO-Revision-Date: 2023-05-05 06:34+0300\n" "Last-Translator: Alexander Lakhin \n" "Language-Team: Russian \n" @@ -66,7 +66,7 @@ msgstr "" msgid "closing a cursor in an aborted subtransaction" msgstr "закрытие курсора в прерванной подтранзакции" -#: plpy_elog.c:122 plpy_elog.c:123 plpy_plpymodule.c:546 +#: plpy_elog.c:127 plpy_elog.c:128 plpy_plpymodule.c:546 #, c-format msgid "%s" msgstr "%s" diff --git a/src/pl/tcl/Makefile b/src/pl/tcl/Makefile index 25e65189b60..059daeffeaa 100644 --- a/src/pl/tcl/Makefile +++ b/src/pl/tcl/Makefile @@ -11,7 +11,7 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -override CPPFLAGS := -I. -I$(srcdir) $(TCL_INCLUDE_SPEC) $(CPPFLAGS) +override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) $(TCL_INCLUDE_SPEC) # On Windows, we don't link directly with the Tcl library; see below ifneq ($(PORTNAME), win32) diff --git a/src/pl/tcl/po/es.po b/src/pl/tcl/po/es.po index 9124d5325ee..3303ce79593 100644 --- a/src/pl/tcl/po/es.po +++ b/src/pl/tcl/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: pltcl (PostgreSQL) 14\n" "Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" -"POT-Creation-Date: 2025-02-16 20:27+0000\n" +"POT-Creation-Date: 2026-02-06 21:24+0000\n" "PO-Revision-Date: 2019-06-06 17:26-0400\n" "Last-Translator: Carlos Chapi \n" "Language-Team: PgSQL-es-Ayuda \n" diff --git a/src/pl/tcl/po/ru.po b/src/pl/tcl/po/ru.po index 43279316ff9..8f140962281 100644 --- a/src/pl/tcl/po/ru.po +++ b/src/pl/tcl/po/ru.po @@ -1,7 +1,7 @@ # Russian message translation file for pltcl # Copyright (C) 2012-2016 PostgreSQL Global Development Group # This file is distributed under the same license as the PostgreSQL package. -# Alexander Lakhin , 2012-2017, 2019, 2022, 2024. +# SPDX-FileCopyrightText: 2012-2017, 2019, 2022, 2024, 2025 Alexander Lakhin msgid "" msgstr "" "Project-Id-Version: pltcl (PostgreSQL current)\n" diff --git a/src/pl/tcl/po/uk.po b/src/pl/tcl/po/uk.po index b9b10ed1b95..ca81e5f6aba 100644 --- a/src/pl/tcl/po/uk.po +++ b/src/pl/tcl/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-03-16 09:08+0000\n" -"PO-Revision-Date: 2022-06-19 10:10\n" +"POT-Creation-Date: 2025-03-27 18:45+0000\n" +"PO-Revision-Date: 2025-04-01 15:40\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -17,93 +17,98 @@ msgstr "" "X-Crowdin-File: /REL_14_STABLE/pltcl.pot\n" "X-Crowdin-File-ID: 736\n" -#: pltcl.c:463 +#: pltcl.c:467 msgid "PL/Tcl function to call once when pltcl is first used." msgstr "Функція PL/Tcl використовується для виклику коли pltcl вперше використаний." -#: pltcl.c:470 +#: pltcl.c:474 msgid "PL/TclU function to call once when pltclu is first used." msgstr "Функція PL/TclU використовується для виклику коли pltclu вперше використаний." -#: pltcl.c:634 +#: pltcl.c:638 #, c-format msgid "function \"%s\" is in the wrong language" msgstr "функція «%s» написана неправильною мовою" -#: pltcl.c:645 +#: pltcl.c:649 #, c-format msgid "function \"%s\" must not be SECURITY DEFINER" msgstr "функція \"%s\" не має бути SECURITY DEFINER" #. translator: %s is "pltcl.start_proc" or "pltclu.start_proc" -#: pltcl.c:679 +#: pltcl.c:683 #, c-format msgid "processing %s parameter" msgstr "обробляється параметр %s" -#: pltcl.c:833 +#: pltcl.c:837 #, c-format msgid "set-valued function called in context that cannot accept a set" msgstr "функція \"set-valued\" викликана в контексті, де йому немає місця" -#: pltcl.c:1006 +#: pltcl.c:1010 #, c-format msgid "function returning record called in context that cannot accept type record" msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис" -#: pltcl.c:1290 +#: pltcl.c:1029 #, c-format -msgid "could not split return value from trigger: %s" -msgstr "не вдалося розділити повернене значення з тригера: %s" +msgid "could not parse function return value: %s" +msgstr "не вдалося проаналізувати значення функції: %s" -#: pltcl.c:1371 pltcl.c:1801 +#: pltcl.c:1297 +#, c-format +msgid "could not parse trigger return value: %s" +msgstr "не вдалося проаналізувати значення тригера: %s" + +#: pltcl.c:1382 pltcl.c:1812 #, c-format msgid "%s" msgstr "%s" -#: pltcl.c:1372 +#: pltcl.c:1383 #, c-format msgid "%s\n" "in PL/Tcl function \"%s\"" msgstr "%s\n" "у функції PL/Tcl \"%s\"" -#: pltcl.c:1536 +#: pltcl.c:1547 #, c-format msgid "trigger functions can only be called as triggers" msgstr "тригер-функція може викликатися лише як тригер" -#: pltcl.c:1540 +#: pltcl.c:1551 #, c-format msgid "PL/Tcl functions cannot return type %s" msgstr "Функції PL/Tcl не можуть повертати тип %s" -#: pltcl.c:1579 +#: pltcl.c:1590 #, c-format msgid "PL/Tcl functions cannot accept type %s" msgstr "Функції PL/Tcl не можуть приймати тип %s" -#: pltcl.c:1693 +#: pltcl.c:1704 #, c-format msgid "could not create internal procedure \"%s\": %s" msgstr "не вдалося створити внутрішню процедуру \"%s\": %s" -#: pltcl.c:3197 +#: pltcl.c:3206 #, c-format msgid "column name/value list must have even number of elements" msgstr "список імен і значень стовпців повинен мати парну кількість елементів" -#: pltcl.c:3215 +#: pltcl.c:3224 #, c-format msgid "column name/value list contains nonexistent column name \"%s\"" msgstr "список імен і значень стовпців містить неіснуєче ім'я стовпця \"%s\"" -#: pltcl.c:3222 +#: pltcl.c:3231 #, c-format msgid "cannot set system attribute \"%s\"" msgstr "не вдалося встановити системний атрибут \"%s\"" -#: pltcl.c:3228 +#: pltcl.c:3237 #, c-format msgid "cannot set generated column \"%s\"" msgstr "неможливо оновити згенерований стовпець \"%s\"" diff --git a/src/port/explicit_bzero.c b/src/port/explicit_bzero.c index e39e20b8a56..3fece47c8cf 100644 --- a/src/port/explicit_bzero.c +++ b/src/port/explicit_bzero.c @@ -12,9 +12,11 @@ *------------------------------------------------------------------------- */ +#define __STDC_WANT_LIB_EXT1__ 1 /* needed to access memset_s() */ + #include "c.h" -#if defined(HAVE_MEMSET_S) +#if HAVE_DECL_MEMSET_S void explicit_bzero(void *buf, size_t len) diff --git a/src/port/snprintf.c b/src/port/snprintf.c index 36fa3db6fc8..d1d1adb98e9 100644 --- a/src/port/snprintf.c +++ b/src/port/snprintf.c @@ -348,13 +348,22 @@ static void leading_pad(int zpad, int signvalue, int *padlen, static void trailing_pad(int padlen, PrintfTarget *target); /* - * If strchrnul exists (it's a glibc-ism), it's a good bit faster than the - * equivalent manual loop. If it doesn't exist, provide a replacement. + * If strchrnul exists (it's a glibc-ism, but since adopted by some other + * platforms), it's a good bit faster than the equivalent manual loop. + * Use it if possible, and if it doesn't exist, use this replacement. * * Note: glibc declares this as returning "char *", but that would require * casting away const internally, so we don't follow that detail. + * + * Note: macOS has this too as of Sequoia 15.4, but it's hidden behind + * a deployment-target check that causes compile errors if the deployment + * target isn't high enough. So !HAVE_DECL_STRCHRNUL may mean "yes it's + * declared, but it doesn't compile". To avoid failing in that scenario, + * use a macro to avoid matching 's name. */ -#ifndef HAVE_STRCHRNUL +#if !HAVE_DECL_STRCHRNUL + +#define strchrnul pg_strchrnul static inline const char * strchrnul(const char *s, int c) @@ -364,19 +373,7 @@ strchrnul(const char *s, int c) return s; } -#else - -/* - * glibc's declares strchrnul only if _GNU_SOURCE is defined. - * While we typically use that on glibc platforms, configure will set - * HAVE_STRCHRNUL whether it's used or not. Fill in the missing declaration - * so that this file will compile cleanly with or without _GNU_SOURCE. - */ -#ifndef _GNU_SOURCE -extern char *strchrnul(const char *s, int c); -#endif - -#endif /* HAVE_STRCHRNUL */ +#endif /* !HAVE_DECL_STRCHRNUL */ /* diff --git a/src/port/strtof.c b/src/port/strtof.c index 92bddfba40c..41ff8e23905 100644 --- a/src/port/strtof.c +++ b/src/port/strtof.c @@ -76,15 +76,18 @@ pg_strtof(const char *nptr, char **endptr) { int caller_errno = errno; float fresult; + char *myendptr; errno = 0; - fresult = (strtof) (nptr, endptr); + fresult = (strtof) (nptr, &myendptr); + if (endptr) + *endptr = myendptr; if (errno) { /* On error, just return the error to the caller. */ return fresult; } - else if ((*endptr == nptr) || isnan(fresult) || + else if ((myendptr == nptr) || isnan(fresult) || ((fresult >= FLT_MIN || fresult <= -FLT_MIN) && !isinf(fresult))) { /* @@ -98,7 +101,8 @@ pg_strtof(const char *nptr, char **endptr) else { /* - * Try again. errno is already 0 here. + * Try again. errno is already 0 here, and we assume that the endptr + * won't be any different. */ double dresult = strtod(nptr, NULL); diff --git a/src/port/win32env.c b/src/port/win32env.c index a03556078ce..0bb0fe0357f 100644 --- a/src/port/win32env.c +++ b/src/port/win32env.c @@ -152,6 +152,13 @@ pgwin32_unsetenv(const char *name) int res; char *envbuf; + /* Error conditions, per POSIX */ + if (name == NULL || name[0] == '\0' || strchr(name, '=') != NULL) + { + errno = EINVAL; + return -1; + } + envbuf = (char *) malloc(strlen(name) + 2); if (!envbuf) return -1; diff --git a/src/port/win32security.c b/src/port/win32security.c index 4a673fde19a..5098a8d8489 100644 --- a/src/port/win32security.c +++ b/src/port/win32security.c @@ -31,9 +31,9 @@ log_error(const char *fmt,...) va_start(ap, fmt); #ifndef FRONTEND - write_stderr(fmt, ap); + vwrite_stderr(fmt, ap); #else - fprintf(stderr, fmt, ap); + vfprintf(stderr, fmt, ap); #endif va_end(ap); } diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index 0590d16195b..6c94bb22361 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -1188,6 +1188,100 @@ subid|id (1 row) +starting permutation: tid1 tid2 c1 c2 read +step tid1: UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tid2: UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' RETURNING accountid, balance; +step c1: COMMIT; +step tid2: <... completed> +accountid|balance +---------+------- +(0 rows) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 700| 1400 +savings | 600| 1200 +(2 rows) + + +starting permutation: tid1 tidsucceed2 c1 c2 read +step tid1: UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tidsucceed2: UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' OR ctid = '(0,3)' RETURNING accountid, balance; +step c1: COMMIT; +step tidsucceed2: <... completed> +accountid|balance +---------+------- +checking | 900 +(1 row) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 900| 1400 +savings | 600| 1200 +(2 rows) + + +starting permutation: tidrange1 tidrange2 c1 c2 read +step tidrange1: UPDATE accounts SET balance = balance + 100 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tidrange2: UPDATE accounts SET balance = balance + 200 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; +step c1: COMMIT; +step tidrange2: <... completed> +accountid|balance +---------+------- +(0 rows) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 700| 1400 +savings | 600| 1200 +(2 rows) + + +starting permutation: tid1 tid2 r1 c2 read +step tid1: UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; +accountid|balance +---------+------- +checking | 700 +(1 row) + +step tid2: UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' RETURNING accountid, balance; +step r1: ROLLBACK; +step tid2: <... completed> +accountid|balance +---------+------- +checking | 800 +(1 row) + +step c2: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 800| 1600 +savings | 600| 1200 +(2 rows) + + starting permutation: simplepartupdate conditionalpartupdate c1 c2 read_part step simplepartupdate: update parttbl set b = b + 10; diff --git a/src/test/isolation/expected/inplace-inval.out b/src/test/isolation/expected/inplace-inval.out index e68eca5de98..c35895a8aa7 100644 --- a/src/test/isolation/expected/inplace-inval.out +++ b/src/test/isolation/expected/inplace-inval.out @@ -1,6 +1,6 @@ Parsed test spec with 3 sessions -starting permutation: cachefill3 cir1 cic2 ddl3 +starting permutation: cachefill3 cir1 cic2 ddl3 read1 step cachefill3: TABLE newly_indexed; c - @@ -9,6 +9,14 @@ c step cir1: BEGIN; CREATE INDEX i1 ON newly_indexed (c); ROLLBACK; step cic2: CREATE INDEX i2 ON newly_indexed (c); step ddl3: ALTER TABLE newly_indexed ADD extra int; +step read1: + SELECT relhasindex FROM pg_class WHERE oid = 'newly_indexed'::regclass; + +relhasindex +----------- +t +(1 row) + starting permutation: cir1 cic2 ddl3 read1 step cir1: BEGIN; CREATE INDEX i1 ON newly_indexed (c); ROLLBACK; diff --git a/src/test/isolation/expected/insert-conflict-do-update-4.out b/src/test/isolation/expected/insert-conflict-do-update-4.out new file mode 100644 index 00000000000..6e96e0d12da --- /dev/null +++ b/src/test/isolation/expected/insert-conflict-do-update-4.out @@ -0,0 +1,63 @@ +Parsed test spec with 2 sessions + +starting permutation: lock2 insert1 update2a c2 select1 c1 +step lock2: SELECT * FROM upsert WHERE i = 1 FOR UPDATE; +i| j| k +-+--+--- +1|10|100 +(1 row) + +step insert1: INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; +step update2a: UPDATE upsert SET i = i + 10 WHERE i = 1; +step c2: COMMIT; +step insert1: <... completed> +step select1: SELECT * FROM upsert; + i| j| k +--+--+--- +11|10|100 + 1|11|111 +(2 rows) + +step c1: COMMIT; + +starting permutation: lock2 insert1 update2b c2 select1 c1 +step lock2: SELECT * FROM upsert WHERE i = 1 FOR UPDATE; +i| j| k +-+--+--- +1|10|100 +(1 row) + +step insert1: INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; +step update2b: UPDATE upsert SET i = i + 150 WHERE i = 1; +step c2: COMMIT; +step insert1: <... completed> +step select1: SELECT * FROM upsert; + i| j| k +---+--+--- + 1|11|111 +151|10|100 +(2 rows) + +step c1: COMMIT; + +starting permutation: lock2 insert1 delete2 c2 select1 c1 +step lock2: SELECT * FROM upsert WHERE i = 1 FOR UPDATE; +i| j| k +-+--+--- +1|10|100 +(1 row) + +step insert1: INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; +step delete2: DELETE FROM upsert WHERE i = 1; +step c2: COMMIT; +step insert1: <... completed> +step select1: SELECT * FROM upsert; +i| j| k +-+--+--- +1|11|111 +(1 row) + +step c1: COMMIT; diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule index ab1383d3eed..e434eaebe3f 100644 --- a/src/test/isolation/isolation_schedule +++ b/src/test/isolation/isolation_schedule @@ -47,6 +47,7 @@ test: insert-conflict-do-nothing-2 test: insert-conflict-do-update test: insert-conflict-do-update-2 test: insert-conflict-do-update-3 +test: insert-conflict-do-update-4 test: insert-conflict-specconflict test: merge-insert-update test: merge-delete diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec index 8173cb7aa6c..f685392956e 100644 --- a/src/test/isolation/specs/eval-plan-qual.spec +++ b/src/test/isolation/specs/eval-plan-qual.spec @@ -95,6 +95,10 @@ step upsert1 { WHERE NOT EXISTS (SELECT 1 FROM upsert); } +# Tests for Tid / Tid Range Scan +step tid1 { UPDATE accounts SET balance = balance + 100 WHERE ctid = '(0,1)' RETURNING accountid, balance; } +step tidrange1 { UPDATE accounts SET balance = balance + 100 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; } + # tests with table p check inheritance cases: # readp1/writep1/readp2 tests a bug where nodeLockRows did the wrong thing # when the first updated tuple was in a non-first child table. @@ -237,6 +241,11 @@ step updateforcip3 { step wrtwcte { UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; } step wrjt { UPDATE jointest SET data = 42 WHERE id = 7; } +step tid2 { UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' RETURNING accountid, balance; } +step tidrange2 { UPDATE accounts SET balance = balance + 200 WHERE ctid BETWEEN '(0,1)' AND '(0,1)' RETURNING accountid, balance; } +# here, recheck succeeds; (0,3) is the id that step tid1 will assign +step tidsucceed2 { UPDATE accounts SET balance = balance + 200 WHERE ctid = '(0,1)' OR ctid = '(0,3)' RETURNING accountid, balance; } + step conditionalpartupdate { update parttbl set c = -c where b < 10; } @@ -379,6 +388,11 @@ permutation wrtwcte readwcte c1 c2 permutation wrjt selectjoinforupdate c2 c1 permutation wrjt selectresultforupdate c2 c1 permutation wrtwcte multireadwcte c1 c2 +permutation tid1 tid2 c1 c2 read +permutation tid1 tidsucceed2 c1 c2 read +permutation tidrange1 tidrange2 c1 c2 read +# test that a rollback on s1 has s2 perform the update on the original row +permutation tid1 tid2 r1 c2 read permutation simplepartupdate conditionalpartupdate c1 c2 read_part permutation simplepartupdate complexpartupdate c1 c2 read_part diff --git a/src/test/isolation/specs/inplace-inval.spec b/src/test/isolation/specs/inplace-inval.spec index 96954fd86c4..b99112ddb88 100644 --- a/src/test/isolation/specs/inplace-inval.spec +++ b/src/test/isolation/specs/inplace-inval.spec @@ -1,7 +1,7 @@ -# If a heap_update() caller retrieves its oldtup from a cache, it's possible -# for that cache entry to predate an inplace update, causing loss of that -# inplace update. This arises because the transaction may abort before -# sending the inplace invalidation message to the shared queue. +# An inplace update had been able to abort before sending the inplace +# invalidation message to the shared queue. If a heap_update() caller then +# retrieved its oldtup from a cache, the heap_update() could revert the +# inplace update. setup { @@ -27,14 +27,12 @@ step cachefill3 { TABLE newly_indexed; } step ddl3 { ALTER TABLE newly_indexed ADD extra int; } -# XXX shows an extant bug. Adding step read1 at the end would usually print -# relhasindex=f (not wanted). This does not reach the unwanted behavior under -# -DCATCACHE_FORCE_RELEASE and friends. permutation cachefill3 # populates the pg_class row in the catcache cir1 # sets relhasindex=true; rollback discards cache inval cic2 # sees relhasindex=true, skips changing it (so no inval) ddl3 # cached row as the oldtup of an update, losing relhasindex + read1 # observe damage # without cachefill3, no bug permutation cir1 cic2 ddl3 read1 diff --git a/src/test/isolation/specs/insert-conflict-do-update-4.spec b/src/test/isolation/specs/insert-conflict-do-update-4.spec new file mode 100644 index 00000000000..6297b1d1d6c --- /dev/null +++ b/src/test/isolation/specs/insert-conflict-do-update-4.spec @@ -0,0 +1,42 @@ +# INSERT...ON CONFLICT DO UPDATE test with partitioned table +# +# We use SELECT FOR UPDATE to block the INSERT at the point where +# it has found an existing tuple and is attempting to update it. +# Then we can execute a conflicting update and verify the results. +# Of course, this only works in READ COMMITTED mode, else we'd get an error. + +setup +{ + CREATE TABLE upsert (i int PRIMARY KEY, j int, k int) PARTITION BY RANGE (i); + CREATE TABLE upsert_1 PARTITION OF upsert FOR VALUES FROM (1) TO (100); + CREATE TABLE upsert_2 PARTITION OF upsert FOR VALUES FROM (100) TO (200); + + INSERT INTO upsert VALUES (1, 10, 100); +} + +teardown +{ + DROP TABLE upsert; +} + +session s1 +setup { BEGIN ISOLATION LEVEL READ COMMITTED; } +step insert1 { INSERT INTO upsert VALUES (1, 11, 111) + ON CONFLICT (i) DO UPDATE SET k = EXCLUDED.k; } +step select1 { SELECT * FROM upsert; } +step c1 { COMMIT; } + +session s2 +setup { BEGIN ISOLATION LEVEL READ COMMITTED; } +step lock2 { SELECT * FROM upsert WHERE i = 1 FOR UPDATE; } +step update2a { UPDATE upsert SET i = i + 10 WHERE i = 1; } +step update2b { UPDATE upsert SET i = i + 150 WHERE i = 1; } +step delete2 { DELETE FROM upsert WHERE i = 1; } +step c2 { COMMIT; } + +# Test case where concurrent update moves the target row within the partition +permutation lock2 insert1 update2a c2 select1 c1 +# Test case where concurrent update moves the target row to another partition +permutation lock2 insert1 update2b c2 select1 c1 +# Test case where target row is concurrently deleted +permutation lock2 insert1 delete2 c2 select1 c1 diff --git a/src/test/modules/brin/t/01_workitems.pl b/src/test/modules/brin/t/01_workitems.pl index a4f603a9d54..5fd0c57ca26 100644 --- a/src/test/modules/brin/t/01_workitems.pl +++ b/src/test/modules/brin/t/01_workitems.pl @@ -7,7 +7,7 @@ use warnings; use TestLib; -use Test::More tests => 2; +use Test::More tests => 4; use PostgresNode; my $node = get_new_node('tango'); @@ -24,13 +24,31 @@ create index brin_wi_idx on brin_wi using brin (a) with (pages_per_range=1, autosummarize=on); ' ); +# Another table with an index that requires a snapshot to run +$node->safe_psql( + 'postgres', + 'create table journal (d timestamp) with (fillfactor = 10); + create function packdate(d timestamp) returns text language plpgsql + as $$ begin return to_char(d, \'yyyymm\'); end; $$ + returns null on null input immutable; + create index brin_packdate_idx on journal using brin (packdate(d)) + with (autosummarize = on, pages_per_range = 1); + ' +); + my $count = $node->safe_psql('postgres', "select count(*) from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)" ); -is($count, '1', "initial index state is correct"); +is($count, '1', "initial brin_wi_index index state is correct"); +$count = $node->safe_psql('postgres', + "select count(*) from brin_page_items(get_raw_page('brin_packdate_idx', 2), 'brin_packdate_idx'::regclass)" +); +is($count, '1', "initial brin_packdate_idx index state is correct"); $node->safe_psql('postgres', 'insert into brin_wi select * from generate_series(1, 100)'); +$node->safe_psql('postgres', + "insert into journal select * from generate_series(timestamp '1976-08-01', '1976-10-28', '1 day')"); $node->poll_query_until( 'postgres', @@ -38,7 +56,20 @@ 't'); $count = $node->safe_psql('postgres', - "select count(*) > 1 from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)" + "select count(*) from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass) + where not placeholder;" ); -is($count, 't', "index got summarized"); +cmp_ok($count, '>', '1', "$count brin_wi_idx ranges got summarized"); + +$node->poll_query_until( + 'postgres', + "select count(*) > 1 from brin_page_items(get_raw_page('brin_packdate_idx', 2), 'brin_packdate_idx'::regclass)", + 't'); + +$count = $node->safe_psql('postgres', + "select count(*) from brin_page_items(get_raw_page('brin_packdate_idx', 2), 'brin_packdate_idx'::regclass) + where not placeholder;" +); +cmp_ok($count, '>', '1', "$count brin_packdate_idx ranges got summarized"); + $node->stop; diff --git a/src/test/modules/test_escape/test_escape.c b/src/test/modules/test_escape/test_escape.c index 09303a00a20..dddb6d6d623 100644 --- a/src/test/modules/test_escape/test_escape.c +++ b/src/test/modules/test_escape/test_escape.c @@ -12,6 +12,7 @@ #include #include +#include "common/jsonapi.h" #include "fe_utils/psqlscan.h" #include "fe_utils/string_utils.h" #include "getopt_long.h" @@ -31,6 +32,8 @@ typedef struct pe_test_config int failure_count; } pe_test_config; +#define NEVER_ACCESS_STR "\xff never-to-be-touched" + /* * An escape function to be tested by this test. @@ -86,6 +89,167 @@ static const PsqlScanCallbacks test_scan_callbacks = { }; +/* + * Print the string into buf, making characters outside of plain ascii + * somewhat easier to recognize. + * + * The output format could stand to be improved significantly, it's not at all + * unambiguous. + */ +static void +escapify(PQExpBuffer buf, const char *str, size_t len) +{ + for (size_t i = 0; i < len; i++) + { + char c = *str; + + if (c == '\n') + appendPQExpBufferStr(buf, "\\n"); + else if (c == '\0') + appendPQExpBufferStr(buf, "\\0"); + else if (c < ' ' || c > '~') + appendPQExpBuffer(buf, "\\x%2x", (uint8_t) c); + else + appendPQExpBufferChar(buf, c); + str++; + } +} + +static void +report_result(pe_test_config *tc, + bool success, + const char *testname, + const char *details, + const char *subname, + const char *resultdesc) +{ + int test_id = ++tc->test_count; + bool print_details = true; + bool print_result = true; + + if (success) + { + if (tc->verbosity <= 0) + print_details = false; + if (tc->verbosity < 0) + print_result = false; + } + else + tc->failure_count++; + + if (print_details) + printf("%s", details); + + if (print_result) + printf("%s %d - %s: %s: %s\n", + success ? "ok" : "not ok", + test_id, testname, + subname, + resultdesc); +} + +/* + * Return true for encodings in which bytes in a multi-byte character look + * like valid ascii characters. + */ +static bool +encoding_conflicts_ascii(int encoding) +{ + /* + * We don't store this property directly anywhere, but whether an encoding + * is a client-only encoding is a good proxy. + */ + if (encoding > PG_ENCODING_BE_LAST) + return true; + return false; +} + + +/* + * Confirm escaping doesn't read past the end of an allocation. Consider the + * result of malloc(4096), in the absence of freelist entries satisfying the + * allocation. On OpenBSD, reading one byte past the end of that object + * yields SIGSEGV. + * + * Run this test before the program's other tests, so freelists are minimal. + * len=4096 didn't SIGSEGV, likely due to free() calls in libpq. len=8192 + * did. Use 128 KiB, to somewhat insulate the outcome from distant new free() + * calls and libc changes. + */ +static void +test_gb18030_page_multiple(pe_test_config *tc) +{ + PQExpBuffer testname; + size_t input_len = 0x20000; + char *input; + + /* prepare input */ + input = pg_malloc(input_len); + memset(input, '-', input_len - 1); + input[input_len - 1] = 0xfe; + + /* name to describe the test */ + testname = createPQExpBuffer(); + appendPQExpBuffer(testname, ">repeat(%c, %zu)", input[0], input_len - 1); + escapify(testname, input + input_len - 1, 1); + appendPQExpBuffer(testname, "< - GB18030 - PQescapeLiteral"); + + /* test itself */ + PQsetClientEncoding(tc->conn, "GB18030"); + report_result(tc, PQescapeLiteral(tc->conn, input, input_len) == NULL, + testname->data, "", + "input validity vs escape success", "ok"); + + destroyPQExpBuffer(testname); + pg_free(input); +} + +/* + * Confirm json parsing doesn't read past the end of an allocation. This + * exercises wchar.c infrastructure like the true "escape" tests do, but this + * isn't an "escape" test. + */ +static void +test_gb18030_json(pe_test_config *tc) +{ + PQExpBuffer raw_buf; + PQExpBuffer testname; + const char input[] = "{\"\\u\xFE"; + size_t input_len = sizeof(input) - 1; + JsonLexContext *lex; + JsonSemAction sem = {0}; /* no callbacks */ + JsonParseErrorType json_error; + char *error_str; + + /* prepare input like test_one_vector_escape() does */ + raw_buf = createPQExpBuffer(); + appendBinaryPQExpBuffer(raw_buf, input, input_len); + appendPQExpBufferStr(raw_buf, NEVER_ACCESS_STR); + VALGRIND_MAKE_MEM_NOACCESS(&raw_buf->data[input_len], + raw_buf->len - input_len); + + /* name to describe the test */ + testname = createPQExpBuffer(); + appendPQExpBuffer(testname, ">"); + escapify(testname, input, input_len); + appendPQExpBuffer(testname, "< - GB18030 - pg_parse_json"); + + /* test itself */ + lex = makeJsonLexContextCstringLen(raw_buf->data, input_len, + PG_GB18030, false); + json_error = pg_parse_json(lex, &sem); + error_str = psprintf("JsonParseErrorType %d", json_error); + report_result(tc, json_error == JSON_UNICODE_ESCAPE_FORMAT, + testname->data, "", + "diagnosed", error_str); + + pfree(error_str); + pfree(lex); + destroyPQExpBuffer(testname); + destroyPQExpBuffer(raw_buf); +} + + static bool escape_literal(PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, @@ -376,88 +540,23 @@ static pe_test_vector pe_test_vectors[] = * Testcases that are not null terminated for the specified input length. * That's interesting to verify that escape functions don't read beyond * the intended input length. + * + * One interesting special case is GB18030, which has the odd behaviour + * needing to read beyond the first byte to determine the length of a + * multi-byte character. */ TV_LEN("gbk", "\x80", 1), + TV_LEN("GB18030", "\x80", 1), + TV_LEN("GB18030", "\x80\0", 2), + TV_LEN("GB18030", "\x80\x30", 2), + TV_LEN("GB18030", "\x80\x30\0", 3), + TV_LEN("GB18030", "\x80\x30\x30", 3), + TV_LEN("GB18030", "\x80\x30\x30\0", 4), TV_LEN("UTF-8", "\xC3\xb6 ", 1), TV_LEN("UTF-8", "\xC3\xb6 ", 2), }; -/* - * Print the string into buf, making characters outside of plain ascii - * somewhat easier to recognize. - * - * The output format could stand to be improved significantly, it's not at all - * unambiguous. - */ -static void -escapify(PQExpBuffer buf, const char *str, size_t len) -{ - for (size_t i = 0; i < len; i++) - { - char c = *str; - - if (c == '\n') - appendPQExpBufferStr(buf, "\\n"); - else if (c == '\0') - appendPQExpBufferStr(buf, "\\0"); - else if (c < ' ' || c > '~') - appendPQExpBuffer(buf, "\\x%2x", (uint8_t) c); - else - appendPQExpBufferChar(buf, c); - str++; - } -} - -static void -report_result(pe_test_config *tc, - bool success, - PQExpBuffer testname, - PQExpBuffer details, - const char *subname, - const char *resultdesc) -{ - int test_id = ++tc->test_count; - bool print_details = true; - bool print_result = true; - - if (success) - { - if (tc->verbosity <= 0) - print_details = false; - if (tc->verbosity < 0) - print_result = false; - } - else - tc->failure_count++; - - if (print_details) - printf("%s", details->data); - - if (print_result) - printf("%s %d - %s: %s: %s\n", - success ? "ok" : "not ok", - test_id, testname->data, - subname, - resultdesc); -} - -/* - * Return true for encodings in which bytes in a multi-byte character look - * like valid ascii characters. - */ -static bool -encoding_conflicts_ascii(int encoding) -{ - /* - * We don't store this property directly anywhere, but whether an encoding - * is a client-only encoding is a good proxy. - */ - if (encoding > PG_ENCODING_BE_LAST) - return true; - return false; -} - static const char * scan_res_s(PsqlScanResult res) { @@ -532,7 +631,7 @@ test_psql_parse(pe_test_config *tc, PQExpBuffer testname, else resdesc = "ok"; - report_result(tc, !test_fails, testname, details, + report_result(tc, !test_fails, testname->data, details->data, "psql parse", resdesc); } @@ -617,7 +716,6 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te */ appendBinaryPQExpBuffer(raw_buf, tv->escape, tv->escape_len); -#define NEVER_ACCESS_STR "\xff never-to-be-touched" if (ef->supports_input_length) { /* @@ -671,7 +769,7 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te * here, but that's not available everywhere. */ contains_never = strstr(escape_buf->data, NEVER_ACCESS_STR) == NULL; - report_result(tc, contains_never, testname, details, + report_result(tc, contains_never, testname->data, details->data, "escaped data beyond end of input", contains_never ? "no" : "all secrets revealed"); } @@ -714,7 +812,7 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te resdesc = "valid input failed to escape, due to zero byte"; } - report_result(tc, ok, testname, details, + report_result(tc, ok, testname->data, details->data, "input validity vs escape success", resdesc); } @@ -744,7 +842,7 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te resdesc = "invalid input produced valid output"; } - report_result(tc, ok, testname, details, + report_result(tc, ok, testname->data, details->data, "input and escaped encoding validity", resdesc); } @@ -801,7 +899,7 @@ usage(const char *hint) " -c, --conninfo=CONNINFO connection information to use\n" " -v, --verbose show test details even for successes\n" " -q, --quiet only show failures\n" - " --force-unsupported test invalid input even if unsupported\n" + " -f, --force-unsupported test invalid input even if unsupported\n" ); if (hint) @@ -824,7 +922,7 @@ main(int argc, char *argv[]) {NULL, 0, NULL, 0}, }; - while ((c = getopt_long(argc, argv, "vqh", long_options, &option_index)) != -1) + while ((c = getopt_long(argc, argv, "c:fhqv", long_options, &option_index)) != -1) { switch (c) { @@ -862,6 +960,9 @@ main(int argc, char *argv[]) exit(1); } + test_gb18030_page_multiple(&tc); + test_gb18030_json(&tc); + for (int i = 0; i < lengthof(pe_test_vectors); i++) { test_one_vector(&tc, &pe_test_vectors[i]); diff --git a/src/test/modules/test_misc/Makefile b/src/test/modules/test_misc/Makefile index 39c6c2014a0..06a8ee9d03a 100644 --- a/src/test/modules/test_misc/Makefile +++ b/src/test/modules/test_misc/Makefile @@ -2,6 +2,8 @@ TAP_TESTS = 1 +EXTRA_INSTALL = contrib/test_decoding + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/src/test/modules/test_misc/t/008_replslot_single_user.pl b/src/test/modules/test_misc/t/008_replslot_single_user.pl new file mode 100644 index 00000000000..796700d621f --- /dev/null +++ b/src/test/modules/test_misc/t/008_replslot_single_user.pl @@ -0,0 +1,95 @@ +# Copyright (c) 2025, PostgreSQL Global Development Group + +# Test manipulations of replication slots with the single-user mode. + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; + +# Skip the tests on Windows, as single-user mode would fail on permission +# failure with privileged accounts. +if ($windows_os) +{ + plan skip_all => 'this test is not supported by this platform'; +} + +# Run set of queries in single-user mode. +sub test_single_mode +{ + my ($node, $queries, $testname) = @_; + + my $result = run_log( + [ + 'postgres', '--single', '-F', + '-c' => 'exit_on_error=true', + '-D' => $node->data_dir, + 'postgres' + ], + '<' => \$queries); + + ok($result, $testname); +} + +my $slot_logical = 'slot_logical'; +my $slot_physical = 'slot_physical'; + +# Initialize a node +my $node = PostgreSQL::Test::Cluster->new('node'); +$node->init(allows_streaming => "logical"); +$node->start; + +# Define initial table +$node->safe_psql('postgres', "CREATE TABLE foo (id int)"); + +$node->stop; + +test_single_mode( + $node, + "SELECT pg_create_logical_replication_slot('$slot_logical', 'test_decoding')", + "logical slot creation"); +test_single_mode( + $node, + "SELECT pg_create_physical_replication_slot('$slot_physical', true)", + "physical slot creation"); +test_single_mode( + $node, + "SELECT pg_create_physical_replication_slot('slot_tmp', true, true)", + "temporary physical slot creation"); + +test_single_mode( + $node, qq( +INSERT INTO foo VALUES (1); +SELECT pg_logical_slot_get_changes('$slot_logical', NULL, NULL); +), + "logical decoding"); + +test_single_mode( + $node, + "SELECT pg_replication_slot_advance('$slot_logical', pg_current_wal_lsn())", + "logical slot advance"); +test_single_mode( + $node, + "SELECT pg_replication_slot_advance('$slot_physical', pg_current_wal_lsn())", + "physical slot advance"); + +test_single_mode( + $node, + "SELECT pg_copy_logical_replication_slot('$slot_logical', 'slot_log_copy')", + "logical slot copy"); +test_single_mode( + $node, + "SELECT pg_copy_physical_replication_slot('$slot_physical', 'slot_phy_copy')", + "physical slot copy"); + +test_single_mode( + $node, + "SELECT pg_drop_replication_slot('$slot_logical')", + "logical slot drop"); +test_single_mode( + $node, + "SELECT pg_drop_replication_slot('$slot_physical')", + "physical slot drop"); + +done_testing(); diff --git a/src/test/modules/test_regex/test_regex.c b/src/test/modules/test_regex/test_regex.c index 095751cf04e..b8ff535c8f3 100644 --- a/src/test/modules/test_regex/test_regex.c +++ b/src/test/modules/test_regex/test_regex.c @@ -424,7 +424,8 @@ parse_test_flags(test_re_flags *flags, text *opts) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid regular expression test option: \"%.*s\"", - pg_mblen(opt_p + i), opt_p + i))); + pg_mblen_range(opt_p + i, opt_p + opt_len), + opt_p + i))); break; } } diff --git a/src/test/modules/test_shm_mq/worker.c b/src/test/modules/test_shm_mq/worker.c index 2180776a669..5b30454dd22 100644 --- a/src/test/modules/test_shm_mq/worker.c +++ b/src/test/modules/test_shm_mq/worker.c @@ -77,7 +77,7 @@ test_shm_mq_main(Datum main_arg) * exit, which is fine. If there were a ResourceOwner, it would acquire * ownership of the mapping, but we have no need for that. */ - seg = dsm_attach(DatumGetInt32(main_arg)); + seg = dsm_attach(DatumGetUInt32(main_arg)); if (seg == NULL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), diff --git a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm index 9878bedef88..e0a67751564 100644 --- a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm +++ b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm @@ -68,7 +68,7 @@ use Test::More; =over -=item PostgreSQL::Test::BackgroundPsql->new(interactive, @psql_params, timeout) +=item PostgreSQL::Test::BackgroundPsql->new(interactive, @psql_params, timeout, wait) Builds a new object of class C for either an interactive or background session and starts it. If C is @@ -76,17 +76,21 @@ true then a PTY will be attached. C should contain the full command to run psql with all desired parameters and a complete connection string. For C sessions, IO::Pty is required. +This routine will not return until psql has started up and is ready to +consume input. Set B to 0 to return immediately instead. + =cut sub new { my $class = shift; - my ($interactive, $psql_params, $timeout) = @_; + my ($interactive, $psql_params, $timeout, $wait) = @_; my $psql = { 'stdin' => '', 'stdout' => '', 'stderr' => '', - 'query_timer_restart' => undef + 'query_timer_restart' => undef, + 'query_cnt' => 1, }; my $run; @@ -119,14 +123,25 @@ sub new my $self = bless $psql, $class; - $self->_wait_connect(); + $wait = 1 unless defined($wait); + if ($wait) + { + $self->wait_connect(); + } return $self; } -# Internal routine for awaiting psql starting up and being ready to consume -# input. -sub _wait_connect +=pod + +=item $session->wait_connect + +Returns once psql has started up and is ready to consume input. This is called +automatically for clients unless requested otherwise in the constructor. + +=cut + +sub wait_connect { my ($self) = @_; @@ -134,11 +149,25 @@ sub _wait_connect # connection failures are caught here, relieving callers of the need to # handle those. (Right now, we have no particularly good handling for # errors anyway, but that might be added later.) + # + # See query() for details about why/how the banner is used. my $banner = "background_psql: ready"; - $self->{stdin} .= "\\echo $banner\n"; + my $banner_match = qr/$banner\r?\n/; + $self->{stdin} .= "\\echo '$banner'\n\\warn '$banner'\n"; $self->{run}->pump() - until $self->{stdout} =~ /$banner/ || $self->{timeout}->is_expired; - $self->{stdout} = ''; # clear out banner + until ($self->{stdout} =~ /$banner_match/ + && $self->{stderr} =~ /$banner_match/) + || $self->{timeout}->is_expired; + + note "connect output:\n", + explain { + stdout => $self->{stdout}, + stderr => $self->{stderr}, + }; + + # clear out banners + $self->{stdout} = ''; + $self->{stderr} = ''; die "psql startup timed out" if $self->{timeout}->is_expired; } @@ -187,7 +216,7 @@ sub reconnect_and_clear $self->{stdin} = ''; $self->{stdout} = ''; - $self->_wait_connect(); + $self->wait_connect(); } =pod @@ -205,25 +234,55 @@ sub query my ($self, $query) = @_; my $ret; my $output; + my $query_cnt = $self->{query_cnt}++; + local $Test::Builder::Level = $Test::Builder::Level + 1; - note "issuing query via background psql: $query"; + note "issuing query $query_cnt via background psql: $query"; $self->{timeout}->start() if (defined($self->{query_timer_restart})); # Feed the query to psql's stdin, followed by \n (so psql processes the # line), by a ; (so that psql issues the query, if it doesn't include a ; - # itself), and a separator echoed with \echo, that we can wait on. - my $banner = "background_psql: QUERY_SEPARATOR"; - $self->{stdin} .= "$query\n;\n\\echo $banner\n"; + # itself), and a separator echoed both with \echo and \warn, that we can + # wait on. + # + # To avoid somehow confusing the separator from separately issued queries, + # and to make it easier to debug, we include a per-psql query counter in + # the separator. + # + # We need both \echo (printing to stdout) and \warn (printing to stderr), + # because on windows we can get data on stdout before seeing data on + # stderr (or vice versa), even if psql printed them in the opposite + # order. We therefore wait on both. + # + # In interactive psql we emit \r\n, so we need to allow for that. + # Also, include quotes around the banner string in the \echo and \warn + # commands, not because the string needs quoting but so that $banner_match + # can't match readline's echoing of these commands. + my $banner = "background_psql: QUERY_SEPARATOR $query_cnt:"; + my $banner_match = qr/$banner\r?\n/; + $self->{stdin} .= "$query\n;\n\\echo '$banner'\n\\warn '$banner'\n"; + $self->{run}->pump() + until ($self->{stdout} =~ /$banner_match/ + && $self->{stderr} =~ /$banner_match/) + || $self->{timeout}->is_expired; - pump_until($self->{run}, $self->{timeout}, \$self->{stdout}, qr/$banner/); + note "results query $query_cnt:\n", + explain { + stdout => $self->{stdout}, + stderr => $self->{stderr}, + }; die "psql query timed out" if $self->{timeout}->is_expired; - $output = $self->{stdout}; - # remove banner again, our caller doesn't care - $output =~ s/\n$banner\n$//s; + # Remove banner from stdout and stderr, our caller doesn't want it. + # Also remove the query output's trailing newline, if present (there + # would not be one if consuming an empty query result). + $banner_match = qr/\r?\n?$banner\r?\n/; + $output = $self->{stdout}; + $output =~ s/$banner_match//; + $self->{stderr} =~ s/$banner_match//; # clear out output for the next query $self->{stdout} = ''; diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 1936c343ae7..33d8cefb69c 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -1934,6 +1934,12 @@ connection. If given, it must be an array reference containing additional parameters to B. +=item wait => 1 + +By default, this method will not return until connection has completed (or +failed). Set B to 0 to return immediately instead. (Clients can call the +session's C method manually when needed.) + =back =cut @@ -1957,13 +1963,15 @@ sub background_psql '-'); $params{on_error_stop} = 1 unless defined $params{on_error_stop}; + $params{wait} = 1 unless defined $params{wait}; $timeout = $params{timeout} if defined $params{timeout}; push @psql_params, '-v', 'ON_ERROR_STOP=1' if $params{on_error_stop}; push @psql_params, @{ $params{extra_params} } if defined $params{extra_params}; - return PostgreSQL::Test::BackgroundPsql->new(0, \@psql_params, $timeout); + return PostgreSQL::Test::BackgroundPsql->new(0, \@psql_params, $timeout, + $params{wait}); } =pod @@ -2378,7 +2386,7 @@ sub issues_sql_like =pod -=item $node->log_check($offset, $test_name, %parameters) +=item $node->log_check($test_name, $offset, %params) Check contents of server logs. diff --git a/src/test/recovery/t/004_timeline_switch.pl b/src/test/recovery/t/004_timeline_switch.pl index c101980e9e2..6d7b21ba73d 100644 --- a/src/test/recovery/t/004_timeline_switch.pl +++ b/src/test/recovery/t/004_timeline_switch.pl @@ -7,7 +7,7 @@ use File::Path qw(rmtree); use PostgresNode; use TestLib; -use Test::More tests => 3; +use Test::More tests => 5; $ENV{PGDATABASE} = 'postgres'; @@ -58,8 +58,19 @@ 'postgresql.conf', qq( primary_conninfo='$connstr_1' )); + +# Rotate logfile before restarting, for the log checks done below. +$node_standby_2->rotate_logfile; $node_standby_2->restart; +# Wait for walreceiver to reconnect after the restart. We want to +# verify that after reconnection, the walreceiver stays alive during +# the timeline switch. +$node_standby_2->poll_query_until('postgres', + "SELECT EXISTS(SELECT 1 FROM pg_stat_wal_receiver)"); +my $wr_pid_before_switch = $node_standby_2->safe_psql('postgres', + "SELECT pid FROM pg_stat_wal_receiver"); + # Insert some data in standby 1 and check its presence in standby 2 # to ensure that the timeline switch has been done. $node_standby_1->safe_psql('postgres', @@ -71,6 +82,22 @@ $node_standby_2->safe_psql('postgres', "SELECT count(*) FROM tab_int"); is($result, qq(2000), 'check content of standby 2'); +# Check the logs, WAL receiver should not have been stopped while +# transitioning to its new timeline. There is no need to rely on an +# offset in this check of the server logs: a new log file is used on +# node restart when primary_conninfo is updated above. +ok( !$node_standby_2->log_contains( + "FATAL: .* terminating walreceiver process due to administrator command" + ), + 'WAL receiver should not be stopped across timeline jumps'); + +# Verify that the walreceiver process stayed alive across the timeline +# switch, check its PID. +my $wr_pid_after_switch = $node_standby_2->safe_psql('postgres', + "SELECT pid FROM pg_stat_wal_receiver"); + +is($wr_pid_before_switch, $wr_pid_after_switch, + 'WAL receiver PID matches across timeline jumps'); # Ensure that a standby is able to follow a primary on a newer timeline # when WAL archiving is enabled. diff --git a/src/test/recovery/t/006_logical_decoding.pl b/src/test/recovery/t/006_logical_decoding.pl index ae13c4fa4fd..eda3f2d4332 100644 --- a/src/test/recovery/t/006_logical_decoding.pl +++ b/src/test/recovery/t/006_logical_decoding.pl @@ -149,8 +149,8 @@ is($node_primary->psql('postgres', 'DROP DATABASE otherdb'), 3, 'dropping a DB with active logical slots fails'); $pg_recvlogical->kill_kill; - is($node_primary->slot('otherdb_slot')->{'slot_name'}, - undef, 'logical slot still exists'); + is($node_primary->slot('otherdb_slot')->{'plugin'}, + 'test_decoding', 'logical slot still exists'); } $node_primary->poll_query_until('otherdb', @@ -159,8 +159,8 @@ is($node_primary->psql('postgres', 'DROP DATABASE otherdb'), 0, 'dropping a DB with inactive logical slots succeeds'); -is($node_primary->slot('otherdb_slot')->{'slot_name'}, - undef, 'logical slot was actually dropped with DB'); +is($node_primary->slot('otherdb_slot')->{'plugin'}, + '', 'logical slot was actually dropped with DB'); # Test logical slot advancing and its durability. my $logical_slot = 'logical_slot'; diff --git a/src/test/recovery/t/010_logical_decoding_timelines.pl b/src/test/recovery/t/010_logical_decoding_timelines.pl index 873b5a2b337..9d5b97d503b 100644 --- a/src/test/recovery/t/010_logical_decoding_timelines.pl +++ b/src/test/recovery/t/010_logical_decoding_timelines.pl @@ -93,8 +93,8 @@ 'postgres', q[SELECT 1 FROM pg_database WHERE datname = 'dropme']), '', 'dropped DB dropme on standby'); -is($node_primary->slot('dropme_slot')->{'slot_name'}, - undef, 'logical slot was actually dropped on standby'); +is($node_replica->slot('dropme_slot')->{'plugin'}, + '', 'logical slot was actually dropped on standby'); # Back to testing failover... $node_primary->safe_psql('postgres', diff --git a/src/test/recovery/t/037_invalid_database.pl b/src/test/recovery/t/037_invalid_database.pl index 7e5e0bb31f9..69fcaaf0c3b 100644 --- a/src/test/recovery/t/037_invalid_database.pl +++ b/src/test/recovery/t/037_invalid_database.pl @@ -92,13 +92,12 @@ my $pid = $bgpsql->query('SELECT pg_backend_pid()'); # create the database, prevent drop database via lock held by a 2PC transaction -ok( $bgpsql->query_safe( - qq( +$bgpsql->query_safe( + qq( CREATE DATABASE regression_invalid_interrupt; BEGIN; LOCK pg_tablespace; - PREPARE TRANSACTION 'lock_tblspc';)), - "blocked DROP DATABASE completion"); + PREPARE TRANSACTION 'lock_tblspc';)); # Try to drop. This will wait due to the still held lock. $bgpsql->query_until(qr//, "DROP DATABASE regression_invalid_interrupt;\n"); @@ -131,11 +130,8 @@ # To properly drop the database, we need to release the lock previously preventing # doing so. -ok($bgpsql->query_safe(qq(ROLLBACK PREPARED 'lock_tblspc')), - "unblock DROP DATABASE"); - -ok($bgpsql->query(qq(DROP DATABASE regression_invalid_interrupt)), - "DROP DATABASE invalid_interrupt"); +$bgpsql->query_safe(qq(ROLLBACK PREPARED 'lock_tblspc')); +$bgpsql->query_safe(qq(DROP DATABASE regression_invalid_interrupt)); $bgpsql->quit(); diff --git a/src/test/recovery/t/043_vacuum_horizon_floor.pl b/src/test/recovery/t/043_vacuum_horizon_floor.pl index 3e3e424be94..ad21736b638 100644 --- a/src/test/recovery/t/043_vacuum_horizon_floor.pl +++ b/src/test/recovery/t/043_vacuum_horizon_floor.pl @@ -1,8 +1,5 @@ -use strict; -use warnings; -use PostgreSQL::Test::Cluster; -use Test::More; - +# Copyright (c) 2025, PostgreSQL Global Development Group +# # Test that vacuum prunes away all dead tuples killed before OldestXmin # # This test creates a table on a primary, updates the table to generate dead @@ -10,6 +7,11 @@ # GlobalVisState->maybe_needed on the primary to move backwards and precede # the value of OldestXmin set at the beginning of vacuuming the table. +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use Test::More; + # Set up nodes my $node_primary = PostgreSQL::Test::Cluster->new('primary'); $node_primary->init(allows_streaming => 'physical'); diff --git a/src/test/recovery/t/045_archive_restartpoint.pl b/src/test/recovery/t/045_archive_restartpoint.pl new file mode 100644 index 00000000000..b143bc4e1d4 --- /dev/null +++ b/src/test/recovery/t/045_archive_restartpoint.pl @@ -0,0 +1,57 @@ + +# Copyright (c) 2024-2025, PostgreSQL Global Development Group + +# Test restartpoints during archive recovery. +use strict; +use warnings; + +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; + +my $archive_max_mb = 320; +my $wal_segsize = 1; + +# Initialize primary node +my $node_primary = PostgreSQL::Test::Cluster->new('primary'); +$node_primary->init( + has_archiving => 1, + allows_streaming => 1, + extra => [ '--wal-segsize' => $wal_segsize ]); +$node_primary->start; +my $backup_name = 'my_backup'; +$node_primary->backup($backup_name); + +$node_primary->safe_psql('postgres', + ('DO $$BEGIN FOR i IN 1..' . $archive_max_mb / $wal_segsize) + . ' LOOP CHECKPOINT; PERFORM pg_switch_wal(); END LOOP; END$$;'); + +# Force archiving of WAL file containing recovery target +my $until_lsn = $node_primary->lsn('write'); +$node_primary->safe_psql('postgres', "SELECT pg_switch_wal()"); +$node_primary->stop; + +# Archive recovery +my $node_restore = PostgreSQL::Test::Cluster->new('restore'); +$node_restore->init_from_backup($node_primary, $backup_name, + has_restoring => 1); +$node_restore->append_conf('postgresql.conf', + "recovery_target_lsn = '$until_lsn'"); +$node_restore->append_conf('postgresql.conf', + 'recovery_target_action = pause'); +$node_restore->append_conf('postgresql.conf', + 'max_wal_size = ' . 2 * $wal_segsize); +$node_restore->append_conf('postgresql.conf', 'log_checkpoints = on'); + +$node_restore->start; + +# Wait until restore has replayed enough data +my $caughtup_query = + "SELECT '$until_lsn'::pg_lsn <= pg_last_wal_replay_lsn()"; +$node_restore->poll_query_until('postgres', $caughtup_query) + or die "Timed out while waiting for restore to catch up"; + +$node_restore->stop; +ok(1, 'restore caught up'); + +done_testing(); diff --git a/src/test/regress/expected/.gitignore b/src/test/regress/expected/.gitignore index b99caf5f40b..c1fc8abc772 100644 --- a/src/test/regress/expected/.gitignore +++ b/src/test/regress/expected/.gitignore @@ -3,6 +3,8 @@ /create_function_0.out /create_function_1.out /create_function_2.out +/encoding.out +/encoding_1.out /largeobject.out /largeobject_1.out /misc.out diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index 66a2d17cefc..79d5bc22671 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -3460,12 +3460,15 @@ SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment F -- filenode function call can return NULL for a relation dropped concurrently -- with the call's surrounding query, so ignore a NULL mapped_oid for -- relations that no longer exist after all calls finish. +-- Temporary relations are ignored, as not supported by pg_filenode_relation(). CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid -WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +WHERE relkind IN ('r', 'i', 'S', 't', 'm') + AND relpersistence != 't' + AND mapped_oid IS DISTINCT FROM oid; SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT NULL; oid | mapped_oid | reltablespace | relfilenode | relname @@ -4342,6 +4345,14 @@ Check constraints: "part_rp100_a_check" CHECK (a >= 123 AND a < 133 AND a IS NOT NULL) DROP TABLE range_parted2; +-- Test that hash partitions continue to work after they're concurrently +-- detached (bugs #18371, #19070) +CREATE TABLE hash_parted2 (a int) PARTITION BY HASH(a); +CREATE TABLE part_hp PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 2, REMAINDER 0); +ALTER TABLE hash_parted2 DETACH PARTITION part_hp CONCURRENTLY; +DROP TABLE hash_parted2; +INSERT INTO part_hp VALUES (1); +DROP TABLE part_hp; -- Check ALTER TABLE commands for partitioned tables and partitions -- cannot add/drop column to/from *only* the parent ALTER TABLE ONLY list_parted2 ADD COLUMN c int; @@ -4578,6 +4589,21 @@ create table atref (c1 int references attbl(p1)); alter table attbl alter column p1 set data type bigint; alter table atref alter column c1 set data type bigint; drop table attbl, atref; +/* Test case for bug #18970 */ +create table attbl(a int); +create table atref(b attbl check ((b).a is not null)); +alter table attbl alter column a type numeric; -- someday this should work +ERROR: cannot alter table "attbl" because column "atref.b" uses its row type +alter table atref drop constraint atref_b_check; +create statistics atref_stat on ((b).a is not null) from atref; +alter table attbl alter column a type numeric; -- someday this should work +ERROR: cannot alter table "attbl" because column "atref.b" uses its row type +drop statistics atref_stat; +create index atref_idx on atref (((b).a)); +alter table attbl alter column a type numeric; -- someday this should work +ERROR: cannot alter table "attbl" because column "atref.b" uses its row type +drop table attbl, atref; +/* End test case for bug #18970 */ -- Test that ALTER TABLE rewrite preserves a clustered index -- for normal indexes and indexes on constraints. create table alttype_cluster (a int); diff --git a/src/test/regress/expected/alter_table_view_rebuild.out b/src/test/regress/expected/alter_table_view_rebuild.out new file mode 100644 index 00000000000..79c9388b97c --- /dev/null +++ b/src/test/regress/expected/alter_table_view_rebuild.out @@ -0,0 +1,490 @@ +-- +-- Tests for auto-rebuild of dependent views on ALTER TABLE ... ALTER COLUMN TYPE +-- +-- Setup +CREATE SCHEMA atvr; +SET search_path = atvr, public; +-- =========================================================================== +-- Test 1: Basic single view rebuild +-- =========================================================================== +CREATE TABLE t1 (a int, b text); +INSERT INTO t1 VALUES (1, 'hello'), (2, 'world'); +CREATE VIEW v1 AS SELECT a, b FROM t1; +SELECT a, pg_typeof(a) FROM v1 ORDER BY a; + a | pg_typeof +---+----------- + 1 | integer + 2 | integer +(2 rows) + +ALTER TABLE t1 ALTER COLUMN a TYPE bigint; +-- View should still exist and work, column type should be bigint now +SELECT a, pg_typeof(a) FROM v1 ORDER BY a; + a | pg_typeof +---+----------- + 1 | bigint + 2 | bigint +(2 rows) + +-- Table column type changed +SELECT pg_typeof(a) FROM t1 LIMIT 1; + pg_typeof +----------- + bigint +(1 row) + +DROP VIEW v1; +DROP TABLE t1; +-- =========================================================================== +-- Test 2: View with expression on altered column +-- =========================================================================== +CREATE TABLE t2 (a int, b text); +INSERT INTO t2 VALUES (10, 'foo'), (20, 'bar'); +CREATE VIEW v2 AS SELECT a * 2 AS double_a, b FROM t2; +SELECT double_a, pg_typeof(double_a) FROM v2 ORDER BY double_a; + double_a | pg_typeof +----------+----------- + 20 | integer + 40 | integer +(2 rows) + +ALTER TABLE t2 ALTER COLUMN a TYPE bigint; +SELECT double_a, pg_typeof(double_a) FROM v2 ORDER BY double_a; + double_a | pg_typeof +----------+----------- + 20 | bigint + 40 | bigint +(2 rows) + +DROP VIEW v2; +DROP TABLE t2; +-- =========================================================================== +-- Test 3: View with WHERE clause on altered column +-- =========================================================================== +CREATE TABLE t3 (a int, b text); +INSERT INTO t3 VALUES (1, 'a'), (2, 'b'), (3, 'c'); +CREATE VIEW v3 AS SELECT a, b FROM t3 WHERE a > 1; +SELECT * FROM v3 ORDER BY a; + a | b +---+--- + 2 | b + 3 | c +(2 rows) + +ALTER TABLE t3 ALTER COLUMN a TYPE bigint; +SELECT * FROM v3 ORDER BY a; + a | b +---+--- + 2 | b + 3 | c +(2 rows) + +DROP VIEW v3; +DROP TABLE t3; +-- =========================================================================== +-- Test 4: View with GROUP BY and aggregates +-- =========================================================================== +CREATE TABLE t4 (a int, b text, c int); +INSERT INTO t4 VALUES (1, 'x', 10), (1, 'y', 20), (2, 'x', 30); +CREATE VIEW v4 AS SELECT a, sum(c) AS total FROM t4 GROUP BY a; +SELECT a, total, pg_typeof(a) FROM v4 ORDER BY a; + a | total | pg_typeof +---+-------+----------- + 1 | 30 | integer + 2 | 30 | integer +(2 rows) + +ALTER TABLE t4 ALTER COLUMN a TYPE bigint; +SELECT a, total, pg_typeof(a) FROM v4 ORDER BY a; + a | total | pg_typeof +---+-------+----------- + 1 | 30 | bigint + 2 | 30 | bigint +(2 rows) + +DROP VIEW v4; +DROP TABLE t4; +-- =========================================================================== +-- Test 5: Cascading views (v5b depends on v5a depends on t5) +-- =========================================================================== +CREATE TABLE t5 (a int, b text); +INSERT INTO t5 VALUES (1, 'alpha'), (2, 'beta'); +CREATE VIEW v5a AS SELECT a, b FROM t5; +CREATE VIEW v5b AS SELECT a * 10 AS aa, b FROM v5a; +SELECT aa, pg_typeof(aa) FROM v5b ORDER BY aa; + aa | pg_typeof +----+----------- + 10 | integer + 20 | integer +(2 rows) + +ALTER TABLE t5 ALTER COLUMN a TYPE bigint; +-- Both views should be rebuilt +SELECT a, pg_typeof(a) FROM v5a ORDER BY a; + a | pg_typeof +---+----------- + 1 | bigint + 2 | bigint +(2 rows) + +SELECT aa, pg_typeof(aa) FROM v5b ORDER BY aa; + aa | pg_typeof +----+----------- + 10 | bigint + 20 | bigint +(2 rows) + +DROP VIEW v5b; +DROP VIEW v5a; +DROP TABLE t5; +-- =========================================================================== +-- Test 6: Deep view chain (v6c -> v6b -> v6a -> t6) +-- =========================================================================== +CREATE TABLE t6 (a int, b text); +INSERT INTO t6 VALUES (5, 'deep'); +CREATE VIEW v6a AS SELECT a, b FROM t6; +CREATE VIEW v6b AS SELECT a + 1 AS a1, b FROM v6a; +CREATE VIEW v6c AS SELECT a1 + 1 AS a2, b FROM v6b; +SELECT a2, pg_typeof(a2) FROM v6c; + a2 | pg_typeof +----+----------- + 7 | integer +(1 row) + +ALTER TABLE t6 ALTER COLUMN a TYPE bigint; +SELECT a, pg_typeof(a) FROM v6a; + a | pg_typeof +---+----------- + 5 | bigint +(1 row) + +SELECT a1, pg_typeof(a1) FROM v6b; + a1 | pg_typeof +----+----------- + 6 | bigint +(1 row) + +SELECT a2, pg_typeof(a2) FROM v6c; + a2 | pg_typeof +----+----------- + 7 | bigint +(1 row) + +DROP VIEW v6c; +DROP VIEW v6b; +DROP VIEW v6a; +DROP TABLE t6; +-- =========================================================================== +-- Test 7: Multiple views on same table, all rebuilt +-- =========================================================================== +CREATE TABLE t7 (a int, b text, c float); +INSERT INTO t7 VALUES (1, 'one', 1.1), (2, 'two', 2.2); +CREATE VIEW v7a AS SELECT a, b FROM t7; +CREATE VIEW v7b AS SELECT a, c FROM t7; +CREATE VIEW v7c AS SELECT a, b, c FROM t7 WHERE a = 1; +SELECT pg_typeof(a) FROM v7a LIMIT 1; + pg_typeof +----------- + integer +(1 row) + +SELECT pg_typeof(a) FROM v7b LIMIT 1; + pg_typeof +----------- + integer +(1 row) + +SELECT pg_typeof(a) FROM v7c LIMIT 1; + pg_typeof +----------- + integer +(1 row) + +ALTER TABLE t7 ALTER COLUMN a TYPE bigint; +SELECT pg_typeof(a) FROM v7a LIMIT 1; + pg_typeof +----------- + bigint +(1 row) + +SELECT pg_typeof(a) FROM v7b LIMIT 1; + pg_typeof +----------- + bigint +(1 row) + +SELECT pg_typeof(a) FROM v7c LIMIT 1; + pg_typeof +----------- + bigint +(1 row) + +-- All views still return correct data +SELECT * FROM v7a ORDER BY a; + a | b +---+----- + 1 | one + 2 | two +(2 rows) + +SELECT * FROM v7b ORDER BY a; + a | c +---+----- + 1 | 1.1 + 2 | 2.2 +(2 rows) + +SELECT * FROM v7c ORDER BY a; + a | b | c +---+-----+----- + 1 | one | 1.1 +(1 row) + +DROP VIEW v7c; +DROP VIEW v7b; +DROP VIEW v7a; +DROP TABLE t7; +-- =========================================================================== +-- Test 8: security_barrier option preserved +-- =========================================================================== +CREATE TABLE t8 (a int, b text); +INSERT INTO t8 VALUES (1, 'secret'), (2, 'public'); +CREATE VIEW v8 WITH (security_barrier = true) AS SELECT a, b FROM t8; +SELECT relname, reloptions FROM pg_class WHERE relname = 'v8'; + relname | reloptions +---------+------------------------- + v8 | {security_barrier=true} +(1 row) + +ALTER TABLE t8 ALTER COLUMN a TYPE bigint; +-- security_barrier option preserved after rebuild +SELECT relname, reloptions FROM pg_class WHERE relname = 'v8'; + relname | reloptions +---------+------------------------- + v8 | {security_barrier=true} +(1 row) + +SELECT a, pg_typeof(a) FROM v8 ORDER BY a; + a | pg_typeof +---+----------- + 1 | bigint + 2 | bigint +(2 rows) + +DROP VIEW v8; +DROP TABLE t8; +-- =========================================================================== +-- Test 9: WITH LOCAL CHECK OPTION preserved +-- =========================================================================== +CREATE TABLE t9 (a int, b text); +INSERT INTO t9 VALUES (1, 'a'), (5, 'b'); +CREATE VIEW v9 AS SELECT a, b FROM t9 WHERE a < 10 WITH LOCAL CHECK OPTION; +-- Verify check option is set (stored in reloptions) +SELECT relname, reloptions FROM pg_class WHERE relname = 'v9'; + relname | reloptions +---------+---------------------- + v9 | {check_option=local} +(1 row) + +ALTER TABLE t9 ALTER COLUMN a TYPE bigint; +-- Check option should be preserved +SELECT relname, reloptions FROM pg_class WHERE relname = 'v9'; + relname | reloptions +---------+---------------------- + v9 | {check_option=local} +(1 row) + +-- Insert should still be checked +INSERT INTO v9 VALUES (3, 'ok'); +SELECT * FROM t9 ORDER BY a; + a | b +---+---- + 1 | a + 3 | ok + 5 | b +(3 rows) + +-- This should fail due to check option +INSERT INTO v9 VALUES (20, 'fail'); +ERROR: new row violates check option for view "v9" +DETAIL: Failing row contains (20, fail). +DROP VIEW v9; +DROP TABLE t9; +-- =========================================================================== +-- Test 10: WITH CASCADED CHECK OPTION preserved +-- =========================================================================== +CREATE TABLE t10 (a int, b text); +INSERT INTO t10 VALUES (1, 'a'); +CREATE VIEW v10 AS SELECT a, b FROM t10 WHERE a < 100 WITH CASCADED CHECK OPTION; +SELECT relname, reloptions FROM pg_class WHERE relname = 'v10'; + relname | reloptions +---------+------------------------- + v10 | {check_option=cascaded} +(1 row) + +ALTER TABLE t10 ALTER COLUMN a TYPE bigint; +SELECT relname, reloptions FROM pg_class WHERE relname = 'v10'; + relname | reloptions +---------+------------------------- + v10 | {check_option=cascaded} +(1 row) + +DROP VIEW v10; +DROP TABLE t10; +-- =========================================================================== +-- Test 11: USING clause with view rebuild +-- =========================================================================== +CREATE TABLE t11 (a text, b int); +INSERT INTO t11 VALUES ('10', 1), ('20', 2); +CREATE VIEW v11 AS SELECT a, b FROM t11; +SELECT a, pg_typeof(a) FROM v11 ORDER BY b; + a | pg_typeof +----+----------- + 10 | text + 20 | text +(2 rows) + +ALTER TABLE t11 ALTER COLUMN a TYPE int USING a::int; +SELECT a, pg_typeof(a) FROM v11 ORDER BY a; + a | pg_typeof +----+----------- + 10 | integer + 20 | integer +(2 rows) + +DROP VIEW v11; +DROP TABLE t11; +-- =========================================================================== +-- Test 12: Failure case - view uses operator not defined for new type +-- ALTER TABLE should roll back, original types preserved +-- =========================================================================== +CREATE TABLE t12 (a int, b text); +INSERT INTO t12 VALUES (1, 'test'), (2, 'data'); +CREATE VIEW v12 AS SELECT a + 1 AS ap1 FROM t12; -- + not defined for bool +SELECT a, pg_typeof(a) FROM t12; + a | pg_typeof +---+----------- + 1 | integer + 2 | integer +(2 rows) + +SELECT ap1, pg_typeof(ap1) FROM v12 ORDER BY ap1; + ap1 | pg_typeof +-----+----------- + 2 | integer + 3 | integer +(2 rows) + +-- This should fail: int + 1 cannot be re-expressed as bool + 1 +ALTER TABLE t12 ALTER COLUMN a TYPE bool USING (a > 0); +ERROR: operator does not exist: boolean + integer +LINE 1: ALTER TABLE t12 ALTER COLUMN a TYPE bool USING (a > 0); + ^ +HINT: No operator matches the given name and argument types. You might need to add explicit type casts. +-- Table and view should be unchanged (rolled back) +SELECT a, pg_typeof(a) FROM t12 ORDER BY a; + a | pg_typeof +---+----------- + 1 | integer + 2 | integer +(2 rows) + +SELECT ap1, pg_typeof(ap1) FROM v12 ORDER BY ap1; + ap1 | pg_typeof +-----+----------- + 2 | integer + 3 | integer +(2 rows) + +DROP VIEW v12; +DROP TABLE t12; +-- =========================================================================== +-- Test 13: Non-view rule still errors (original behavior preserved) +-- =========================================================================== +CREATE TABLE t13 (a int, b text); +CREATE TABLE t13_log (a int, b text); +CREATE RULE t13_insert_rule AS ON INSERT TO t13 + DO ALSO INSERT INTO t13_log VALUES (NEW.a, NEW.b); +-- Should still error: non-view rule depends on column a +ALTER TABLE t13 ALTER COLUMN a TYPE bigint; +ERROR: cannot alter type of a column used by a view or rule +DETAIL: rule t13_insert_rule on table t13 depends on column "a" +DROP RULE t13_insert_rule ON t13; +DROP TABLE t13_log; +DROP TABLE t13; +-- =========================================================================== +-- Test 14: ALTER multiple columns in single statement, views rebuilt once +-- =========================================================================== +CREATE TABLE t14 (a int, b int, c text); +INSERT INTO t14 VALUES (1, 10, 'x'), (2, 20, 'y'); +CREATE VIEW v14 AS SELECT a, b, c FROM t14; +SELECT a, pg_typeof(a), b, pg_typeof(b) FROM v14 ORDER BY a; + a | pg_typeof | b | pg_typeof +---+-----------+----+----------- + 1 | integer | 10 | integer + 2 | integer | 20 | integer +(2 rows) + +ALTER TABLE t14 ALTER COLUMN a TYPE bigint, ALTER COLUMN b TYPE bigint; +SELECT a, pg_typeof(a), b, pg_typeof(b) FROM v14 ORDER BY a; + a | pg_typeof | b | pg_typeof +---+-----------+----+----------- + 1 | bigint | 10 | bigint + 2 | bigint | 20 | bigint +(2 rows) + +DROP VIEW v14; +DROP TABLE t14; +-- =========================================================================== +-- Test 15: View not referencing altered column - should still work +-- (view depends on relation, not column, via different rules) +-- =========================================================================== +CREATE TABLE t15 (a int, b text, c int); +INSERT INTO t15 VALUES (1, 'hello', 100); +CREATE VIEW v15 AS SELECT b, c FROM t15; -- does not use column a +SELECT * FROM v15; + b | c +-------+----- + hello | 100 +(1 row) + +ALTER TABLE t15 ALTER COLUMN a TYPE bigint; +-- View on non-altered columns is unaffected +SELECT * FROM v15; + b | c +-------+----- + hello | 100 +(1 row) + +DROP VIEW v15; +DROP TABLE t15; +-- =========================================================================== +-- Test 16: View in non-default schema +-- =========================================================================== +CREATE SCHEMA atvr2; +CREATE TABLE atvr.t16 (a int, b text); +INSERT INTO atvr.t16 VALUES (1, 'one'), (2, 'two'); +CREATE VIEW atvr2.v16 AS SELECT a, b FROM atvr.t16; +SELECT a, pg_typeof(a) FROM atvr2.v16 ORDER BY a; + a | pg_typeof +---+----------- + 1 | integer + 2 | integer +(2 rows) + +ALTER TABLE atvr.t16 ALTER COLUMN a TYPE bigint; +SELECT a, pg_typeof(a) FROM atvr2.v16 ORDER BY a; + a | pg_typeof +---+----------- + 1 | bigint + 2 | bigint +(2 rows) + +DROP VIEW atvr2.v16; +DROP TABLE atvr.t16; +DROP SCHEMA atvr2; +-- =========================================================================== +-- Cleanup +-- =========================================================================== +SET search_path = public; +DROP SCHEMA atvr CASCADE; diff --git a/src/test/regress/expected/arrays.out b/src/test/regress/expected/arrays.out index e45226737a3..112edcb64f6 100644 --- a/src/test/regress/expected/arrays.out +++ b/src/test/regress/expected/arrays.out @@ -1543,6 +1543,11 @@ select '[0:1]={1.1,2.2}'::float8[]; (1 row) -- all of the above should be accepted +-- some day we might allow these cases, but for now they're errors: +select array[]::oidvector; +ERROR: array is not a valid oidvector +select array[]::int2vector; +ERROR: array is not a valid int2vector -- tests for array aggregates CREATE TEMP TABLE arraggtest ( f1 INT[], f2 TEXT[][], f3 FLOAT[]); INSERT INTO arraggtest (f1, f2, f3) VALUES @@ -2263,6 +2268,132 @@ select array(select array['Hello', i::text] from generate_series(9,11) i); {{Hello,9},{Hello,10},{Hello,11}} (1 row) +-- int2vector and oidvector should be treated as scalar types for this purpose +select pg_typeof(array(select '11 22 33'::int2vector from generate_series(1,5))); + pg_typeof +-------------- + int2vector[] +(1 row) + +select array(select '11 22 33'::int2vector from generate_series(1,5)); + array +---------------------------------------------------------- + {"11 22 33","11 22 33","11 22 33","11 22 33","11 22 33"} +(1 row) + +select unnest(array(select '11 22 33'::int2vector from generate_series(1,5))); + unnest +---------- + 11 22 33 + 11 22 33 + 11 22 33 + 11 22 33 + 11 22 33 +(5 rows) + +select pg_typeof(array(select '11 22 33'::oidvector from generate_series(1,5))); + pg_typeof +------------- + oidvector[] +(1 row) + +select array(select '11 22 33'::oidvector from generate_series(1,5)); + array +---------------------------------------------------------- + {"11 22 33","11 22 33","11 22 33","11 22 33","11 22 33"} +(1 row) + +select unnest(array(select '11 22 33'::oidvector from generate_series(1,5))); + unnest +---------- + 11 22 33 + 11 22 33 + 11 22 33 + 11 22 33 + 11 22 33 +(5 rows) + +-- array[] should do the same +select pg_typeof(array['11 22 33'::int2vector]); + pg_typeof +-------------- + int2vector[] +(1 row) + +select array['11 22 33'::int2vector]; + array +-------------- + {"11 22 33"} +(1 row) + +select pg_typeof(unnest(array['11 22 33'::int2vector])); + pg_typeof +------------ + int2vector +(1 row) + +select unnest(array['11 22 33'::int2vector]); + unnest +---------- + 11 22 33 +(1 row) + +select pg_typeof(unnest('11 22 33'::int2vector)); + pg_typeof +----------- + smallint + smallint + smallint +(3 rows) + +select unnest('11 22 33'::int2vector); + unnest +-------- + 11 + 22 + 33 +(3 rows) + +select pg_typeof(array['11 22 33'::oidvector]); + pg_typeof +------------- + oidvector[] +(1 row) + +select array['11 22 33'::oidvector]; + array +-------------- + {"11 22 33"} +(1 row) + +select pg_typeof(unnest(array['11 22 33'::oidvector])); + pg_typeof +----------- + oidvector +(1 row) + +select unnest(array['11 22 33'::oidvector]); + unnest +---------- + 11 22 33 +(1 row) + +select pg_typeof(unnest('11 22 33'::oidvector)); + pg_typeof +----------- + oid + oid + oid +(3 rows) + +select unnest('11 22 33'::oidvector); + unnest +-------- + 11 + 22 + 33 +(3 rows) + -- Insert/update on a column that is array of composite create temp table t1 (f1 int8_tbl[]); insert into t1 (f1[5].q1) values(42); diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out index 772814732af..f21eeaf9088 100644 --- a/src/test/regress/expected/conversion.out +++ b/src/test/regress/expected/conversion.out @@ -329,10 +329,13 @@ insert into gb18030_inputs values ('\x666f6f84309c38', 'valid, translates to UTF-8 by mapping function'), ('\x666f6f84309c', 'incomplete char '), ('\x666f6f84309c0a', 'incomplete char, followed by newline '), + ('\x666f6f84', 'incomplete char at end'), ('\x666f6f84309c3800', 'invalid, NUL byte'), ('\x666f6f84309c0038', 'invalid, NUL byte'); --- Test GB18030 verification -select description, inbytes, (test_conv(inbytes, 'gb18030', 'gb18030')).* from gb18030_inputs; +-- Test GB18030 verification. Round-trip through text so the backing of the +-- bytea values is palloc, not shared_buffers. This lets Valgrind detect +-- reads past the end. +select description, inbytes, (test_conv(inbytes::text::bytea, 'gb18030', 'gb18030')).* from gb18030_inputs; description | inbytes | result | errorat | error ------------------------------------------------+--------------------+------------------+--------------+------------------------------------------------------------------- valid, pure ASCII | \x666f6f | \x666f6f | | @@ -341,9 +344,10 @@ select description, inbytes, (test_conv(inbytes, 'gb18030', 'gb18030')).* from g valid, translates to UTF-8 by mapping function | \x666f6f84309c38 | \x666f6f84309c38 | | incomplete char | \x666f6f84309c | \x666f6f | \x84309c | invalid byte sequence for encoding "GB18030": 0x84 0x30 0x9c incomplete char, followed by newline | \x666f6f84309c0a | \x666f6f | \x84309c0a | invalid byte sequence for encoding "GB18030": 0x84 0x30 0x9c 0x0a + incomplete char at end | \x666f6f84 | \x666f6f | \x84 | invalid byte sequence for encoding "GB18030": 0x84 invalid, NUL byte | \x666f6f84309c3800 | \x666f6f84309c38 | \x00 | invalid byte sequence for encoding "GB18030": 0x00 invalid, NUL byte | \x666f6f84309c0038 | \x666f6f | \x84309c0038 | invalid byte sequence for encoding "GB18030": 0x84 0x30 0x9c 0x00 -(8 rows) +(9 rows) -- Test conversions from GB18030 select description, inbytes, (test_conv(inbytes, 'gb18030', 'utf8')).* from gb18030_inputs; @@ -355,9 +359,10 @@ select description, inbytes, (test_conv(inbytes, 'gb18030', 'utf8')).* from gb18 valid, translates to UTF-8 by mapping function | \x666f6f84309c38 | \x666f6fefa8aa | | incomplete char | \x666f6f84309c | \x666f6f | \x84309c | invalid byte sequence for encoding "GB18030": 0x84 0x30 0x9c incomplete char, followed by newline | \x666f6f84309c0a | \x666f6f | \x84309c0a | invalid byte sequence for encoding "GB18030": 0x84 0x30 0x9c 0x0a + incomplete char at end | \x666f6f84 | \x666f6f | \x84 | invalid byte sequence for encoding "GB18030": 0x84 invalid, NUL byte | \x666f6f84309c3800 | \x666f6fefa8aa | \x00 | invalid byte sequence for encoding "GB18030": 0x00 invalid, NUL byte | \x666f6f84309c0038 | \x666f6f | \x84309c0038 | invalid byte sequence for encoding "GB18030": 0x84 0x30 0x9c 0x00 -(8 rows) +(9 rows) -- -- ISO-8859-5 diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index 88d11de4754..be80774dd4f 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -1271,6 +1271,8 @@ CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops); CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops); CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops); CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops) WITH (fillfactor=60); +CREATE INDEX hash_i4_partial_index ON hash_i4_heap USING hash (seqno) + WHERE seqno = 9999; CREATE UNLOGGED TABLE unlogged_hash_table (id int4); CREATE INDEX unlogged_hash_index ON unlogged_hash_table USING hash (id int4_ops); DROP TABLE unlogged_hash_table; @@ -1609,8 +1611,8 @@ DROP TABLE cwi_test; -- CREATE TABLE syscol_table (a INT); -- System columns cannot be indexed -CREATE INDEX ON syscolcol_table (ctid); -ERROR: relation "syscolcol_table" does not exist +CREATE INDEX ON syscol_table (ctid); +ERROR: index creation on system columns is not supported -- nor used in expressions CREATE INDEX ON syscol_table ((ctid >= '(1000,0)')); ERROR: index creation on system columns is not supported diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out index a958b849799..a89a84bbb76 100644 --- a/src/test/regress/expected/create_table.out +++ b/src/test/regress/expected/create_table.out @@ -297,6 +297,18 @@ ERROR: tables declared WITH OIDS are not supported -- but explicitly not adding oids is still supported CREATE TEMP TABLE withoutoid() WITHOUT OIDS; DROP TABLE withoutoid; CREATE TEMP TABLE withoutoid() WITH (oids = false); DROP TABLE withoutoid; +-- temporary tables are ignored by pg_filenode_relation(). +CREATE TEMP TABLE relation_filenode_check(c1 int); +SELECT relpersistence, + pg_filenode_relation (reltablespace, pg_relation_filenode(oid)) + FROM pg_class + WHERE relname = 'relation_filenode_check'; + relpersistence | pg_filenode_relation +----------------+---------------------- + t | +(1 row) + +DROP TABLE relation_filenode_check; -- check restriction with default expressions -- invalid use of column reference in default expressions CREATE TABLE default_expr_column (id int DEFAULT (id)); diff --git a/src/test/regress/expected/euc_kr.out b/src/test/regress/expected/euc_kr.out new file mode 100644 index 00000000000..7a61c89a43a --- /dev/null +++ b/src/test/regress/expected/euc_kr.out @@ -0,0 +1,16 @@ +-- This test is about EUC_KR encoding, chosen as perhaps the most prevalent +-- non-UTF8, multibyte encoding as of 2026-01. Since UTF8 can represent all +-- of EUC_KR, also run the test in UTF8. +SELECT getdatabaseencoding() NOT IN ('EUC_KR', 'UTF8') AS skip_test \gset +\if :skip_test +\quit +\endif +-- Exercise is_multibyte_char_in_char (non-UTF8) slow path. +SELECT POSITION( + convert_from('\xbcf6c7d0', 'EUC_KR') IN + convert_from('\xb0fac7d02c20bcf6c7d02c20b1e2bcfa2c20bbee', 'EUC_KR')); + position +---------- + 5 +(1 row) + diff --git a/src/test/regress/expected/euc_kr_1.out b/src/test/regress/expected/euc_kr_1.out new file mode 100644 index 00000000000..faaac5d6355 --- /dev/null +++ b/src/test/regress/expected/euc_kr_1.out @@ -0,0 +1,6 @@ +-- This test is about EUC_KR encoding, chosen as perhaps the most prevalent +-- non-UTF8, multibyte encoding as of 2026-01. Since UTF8 can represent all +-- of EUC_KR, also run the test in UTF8. +SELECT getdatabaseencoding() NOT IN ('EUC_KR', 'UTF8') AS skip_test \gset +\if :skip_test +\quit diff --git a/src/test/regress/expected/fast_default.out b/src/test/regress/expected/fast_default.out index 59365dad964..b62eaa544cc 100644 --- a/src/test/regress/expected/fast_default.out +++ b/src/test/regress/expected/fast_default.out @@ -245,6 +245,71 @@ SELECT comp(); (1 row) DROP TABLE T; +-- Test domains with default value for table rewrite. +CREATE DOMAIN domain1 AS int DEFAULT 11; -- constant +CREATE DOMAIN domain2 AS int DEFAULT 10 + (random() * 10)::int; -- volatile +CREATE DOMAIN domain3 AS text DEFAULT foo(4); -- stable +CREATE DOMAIN domain4 AS text[] + DEFAULT ('{"This", "is", "' || foo(4) || '","the", "real", "world"}')::TEXT[]; +CREATE TABLE t2 (a domain1); +INSERT INTO t2 VALUES (1),(2); +-- no table rewrite +ALTER TABLE t2 ADD COLUMN b domain1 default 3; +SELECT attnum, attname, atthasmissing, atthasdef, attmissingval +FROM pg_attribute +WHERE attnum > 0 AND attrelid = 't2'::regclass +ORDER BY attnum; + attnum | attname | atthasmissing | atthasdef | attmissingval +--------+---------+---------------+-----------+--------------- + 1 | a | f | f | + 2 | b | t | t | {3} +(2 rows) + +-- table rewrite should happen +ALTER TABLE t2 ADD COLUMN c domain3 default left(random()::text,3); +NOTICE: rewriting table t2 for reason 2 +-- no table rewrite +ALTER TABLE t2 ADD COLUMN d domain4; +SELECT attnum, attname, atthasmissing, atthasdef, attmissingval +FROM pg_attribute +WHERE attnum > 0 AND attrelid = 't2'::regclass +ORDER BY attnum; + attnum | attname | atthasmissing | atthasdef | attmissingval +--------+---------+---------------+-----------+----------------------------------- + 1 | a | f | f | + 2 | b | f | t | + 3 | c | f | t | + 4 | d | t | f | {"{This,is,abcd,the,real,world}"} +(4 rows) + +-- table rewrite should happen +ALTER TABLE t2 ADD COLUMN e domain2; +NOTICE: rewriting table t2 for reason 2 +SELECT attnum, attname, atthasmissing, atthasdef, attmissingval +FROM pg_attribute +WHERE attnum > 0 AND attrelid = 't2'::regclass +ORDER BY attnum; + attnum | attname | atthasmissing | atthasdef | attmissingval +--------+---------+---------------+-----------+--------------- + 1 | a | f | f | + 2 | b | f | t | + 3 | c | f | t | + 4 | d | f | f | + 5 | e | f | f | +(5 rows) + +SELECT a, b, length(c) = 3 as c_ok, d, e >= 10 as e_ok FROM t2; + a | b | c_ok | d | e_ok +---+---+------+-------------------------------+------ + 1 | 3 | t | {This,is,abcd,the,real,world} | t + 2 | 3 | t | {This,is,abcd,the,real,world} | t +(2 rows) + +DROP TABLE t2; +DROP DOMAIN domain1; +DROP DOMAIN domain2; +DROP DOMAIN domain3; +DROP DOMAIN domain4; DROP FUNCTION foo(INT); -- Fall back to full rewrite for volatile expressions CREATE TABLE T(pk INT NOT NULL PRIMARY KEY); diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index 1f492bf56e3..44be1c565dd 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -1240,11 +1240,15 @@ DETAIL: Key (fk)=(20) is not present in table "pktable". COMMIT; -- try additional syntax ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE; --- illegal option +-- illegal options ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY DEFERRED; ERROR: constraint declared INITIALLY DEFERRED must be DEFERRABLE LINE 1: ...e ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY ... ^ +ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT; +ERROR: FOREIGN KEY constraints cannot be marked NO INHERIT +ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID; +ERROR: FOREIGN KEY constraints cannot be marked NOT VALID -- test order of firing of FK triggers when several RI-induced changes need to -- be made to the same row. This was broken by subtransaction-related -- changes in 8.0. @@ -1966,58 +1970,98 @@ CREATE TABLE part33_self_fk ( id_abc bigint ); ALTER TABLE part3_self_fk ATTACH PARTITION part33_self_fk FOR VALUES FROM (30) TO (40); -SELECT cr.relname, co.conname, co.contype, co.convalidated, +-- verify that this constraint works +INSERT INTO parted_self_fk VALUES (1, NULL), (2, NULL), (3, NULL); +INSERT INTO parted_self_fk VALUES (10, 1), (11, 2), (12, 3) RETURNING tableoid::regclass; + tableoid +--------------- + part2_self_fk + part2_self_fk + part2_self_fk +(3 rows) + +INSERT INTO parted_self_fk VALUES (4, 5); -- error: referenced doesn't exist +ERROR: insert or update on table "part1_self_fk" violates foreign key constraint "parted_self_fk_id_abc_fkey" +DETAIL: Key (id_abc)=(5) is not present in table "parted_self_fk". +DELETE FROM parted_self_fk WHERE id = 1 RETURNING *; -- error: reference remains +ERROR: update or delete on table "part1_self_fk" violates foreign key constraint "parted_self_fk_id_abc_fkey1" on table "parted_self_fk" +DETAIL: Key (id)=(1) is still referenced from table "parted_self_fk". +SELECT cr.relname, co.conname, co.convalidated, p.conname AS conparent, p.convalidated, cf.relname AS foreignrel FROM pg_constraint co JOIN pg_class cr ON cr.oid = co.conrelid LEFT JOIN pg_class cf ON cf.oid = co.confrelid LEFT JOIN pg_constraint p ON p.oid = co.conparentid -WHERE cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) -ORDER BY co.contype, cr.relname, co.conname, p.conname; - relname | conname | contype | convalidated | conparent | convalidated | foreignrel -----------------+----------------------------+---------+--------------+----------------------------+--------------+---------------- - part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk - part1_self_fk | part1_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part2_self_fk | part2_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part32_self_fk | part32_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part33_self_fk | part33_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part3_self_fk | part3_self_fk_pkey | p | t | parted_self_fk_pkey | t | - parted_self_fk | parted_self_fk_pkey | p | t | | | -(12 rows) +WHERE co.contype = 'f' AND + cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) +ORDER BY cr.relname, co.conname, p.conname; + relname | conname | convalidated | conparent | convalidated | foreignrel +----------------+-----------------------------+--------------+-----------------------------+--------------+---------------- + part1_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part2_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part32_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part33_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part3_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey | t | | | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey1 | t | parted_self_fk_id_abc_fkey | t | part1_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey2 | t | parted_self_fk_id_abc_fkey | t | part2_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey3 | t | parted_self_fk_id_abc_fkey | t | part3_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey4 | t | parted_self_fk_id_abc_fkey3 | t | part32_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey5 | t | parted_self_fk_id_abc_fkey3 | t | part33_self_fk +(11 rows) -- detach and re-attach multiple times just to ensure everything is kosher ALTER TABLE parted_self_fk DETACH PARTITION part2_self_fk; +\d+ part2_self_fk + Table "public.part2_self_fk" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+--------+-----------+----------+---------+---------+--------------+------------- + id | bigint | | not null | | plain | | + id_abc | bigint | | | | plain | | +Indexes: + "part2_self_fk_pkey" PRIMARY KEY, btree (id) + +INSERT INTO part2_self_fk VALUES (16, 9); -- good, but it'll prevent the attach below +ALTER TABLE parted_self_fk ATTACH PARTITION part2_self_fk FOR VALUES FROM (10) TO (20); +ERROR: insert or update on table "part2_self_fk" violates foreign key constraint "parted_self_fk_id_abc_fkey" +DETAIL: Key (id_abc)=(9) is not present in table "parted_self_fk". +DELETE FROM part2_self_fk WHERE id = 16; ALTER TABLE parted_self_fk ATTACH PARTITION part2_self_fk FOR VALUES FROM (10) TO (20); +INSERT INTO parted_self_fk VALUES (16, 9); -- error: referenced doesn't exist +ERROR: insert or update on table "part2_self_fk" violates foreign key constraint "parted_self_fk_id_abc_fkey" +DETAIL: Key (id_abc)=(9) is not present in table "parted_self_fk". +DELETE FROM parted_self_fk WHERE id = 3 RETURNING *; -- error: reference remains +ERROR: update or delete on table "part1_self_fk" violates foreign key constraint "parted_self_fk_id_abc_fkey1" on table "parted_self_fk" +DETAIL: Key (id)=(3) is still referenced from table "parted_self_fk". ALTER TABLE parted_self_fk DETACH PARTITION part2_self_fk; ALTER TABLE parted_self_fk ATTACH PARTITION part2_self_fk FOR VALUES FROM (10) TO (20); -SELECT cr.relname, co.conname, co.contype, co.convalidated, +ALTER TABLE parted_self_fk DETACH PARTITION part3_self_fk; +ALTER TABLE parted_self_fk ATTACH PARTITION part3_self_fk FOR VALUES FROM (30) TO (40); +ALTER TABLE part3_self_fk DETACH PARTITION part33_self_fk; +ALTER TABLE part3_self_fk ATTACH PARTITION part33_self_fk FOR VALUES FROM (30) TO (40); +SELECT cr.relname, co.conname, co.convalidated, p.conname AS conparent, p.convalidated, cf.relname AS foreignrel FROM pg_constraint co JOIN pg_class cr ON cr.oid = co.conrelid LEFT JOIN pg_class cf ON cf.oid = co.confrelid LEFT JOIN pg_constraint p ON p.oid = co.conparentid -WHERE cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) -ORDER BY co.contype, cr.relname, co.conname, p.conname; - relname | conname | contype | convalidated | conparent | convalidated | foreignrel -----------------+----------------------------+---------+--------------+----------------------------+--------------+---------------- - part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk - part1_self_fk | part1_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part2_self_fk | part2_self_fk_pkey | p | t | parted_self_fk_pkey | t | - part32_self_fk | part32_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part33_self_fk | part33_self_fk_pkey | p | t | part3_self_fk_pkey | t | - part3_self_fk | part3_self_fk_pkey | p | t | parted_self_fk_pkey | t | - parted_self_fk | parted_self_fk_pkey | p | t | | | -(12 rows) +WHERE co.contype = 'f' AND + cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) +ORDER BY cr.relname, co.conname, p.conname; + relname | conname | convalidated | conparent | convalidated | foreignrel +----------------+-----------------------------+--------------+-----------------------------+--------------+---------------- + part1_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part2_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part32_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part33_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + part3_self_fk | parted_self_fk_id_abc_fkey | t | parted_self_fk_id_abc_fkey | t | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey | t | | | parted_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey1 | t | parted_self_fk_id_abc_fkey | t | part1_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey2 | t | parted_self_fk_id_abc_fkey | t | part2_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey3 | t | parted_self_fk_id_abc_fkey | t | part3_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey4 | t | parted_self_fk_id_abc_fkey3 | t | part32_self_fk + parted_self_fk | parted_self_fk_id_abc_fkey5 | t | parted_self_fk_id_abc_fkey3 | t | part33_self_fk +(11 rows) -- Leave this table around, for pg_upgrade/pg_dump tests -- Test creating a constraint at the parent that already exists in partitions. diff --git a/src/test/regress/expected/generated.out b/src/test/regress/expected/generated.out index dccf0ddc522..e1161010bbd 100644 --- a/src/test/regress/expected/generated.out +++ b/src/test/regress/expected/generated.out @@ -415,6 +415,12 @@ COPY gtest1 FROM stdin; COPY gtest1 (a, b) FROM stdin; ERROR: column "b" is a generated column DETAIL: Generated columns cannot be used in COPY. +COPY gtest1 FROM stdin WHERE b <> 10; +ERROR: generated columns are not supported in COPY FROM WHERE conditions +DETAIL: Column "b" is a generated column. +COPY gtest1 FROM stdin WHERE gtest1 IS NULL; +ERROR: generated columns are not supported in COPY FROM WHERE conditions +DETAIL: Column "b" is a generated column. SELECT * FROM gtest1 ORDER BY a; a | b ---+--- @@ -685,6 +691,11 @@ CREATE TABLE gtest24 (a int PRIMARY KEY, b gtestdomain1 GENERATED ALWAYS AS (a * INSERT INTO gtest24 (a) VALUES (4); -- ok INSERT INTO gtest24 (a) VALUES (6); -- error ERROR: value for domain gtestdomain1 violates check constraint "gtestdomain1_check" +CREATE DOMAIN gtestdomainnn AS int CHECK (VALUE IS NOT NULL); +CREATE TABLE gtest24nn (a int, b gtestdomainnn GENERATED ALWAYS AS (a * 2) STORED); +INSERT INTO gtest24nn (a) VALUES (4); -- ok +INSERT INTO gtest24nn (a) VALUES (NULL); -- error +ERROR: value for domain gtestdomainnn violates check constraint "gtestdomainnn_check" -- typed tables (currently not supported) CREATE TYPE gtest_type AS (f1 integer, f2 text, f3 bigint); CREATE TABLE gtest28 OF gtest_type (f1 WITH OPTIONS GENERATED ALWAYS AS (f2 *2) STORED); @@ -734,11 +745,26 @@ ERROR: cannot use generated column in partition key LINE 1: ...ENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f3); ^ DETAIL: Column "f3" is a generated column. +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3)); +ERROR: cannot use generated column in partition key +LINE 1: ...ERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3)); + ^ +DETAIL: Column "f3" is a generated column. CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); ERROR: cannot use generated column in partition key LINE 1: ...ED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); ^ DETAIL: Column "f3" is a generated column. +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent)); +ERROR: cannot use generated column in partition key +LINE 1: ...ED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_par... + ^ +DETAIL: Column "f3" is a generated column. +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent is not null)); +ERROR: cannot use generated column in partition key +LINE 1: ...ED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_par... + ^ +DETAIL: Column "f3" is a generated column. -- ALTER TABLE ... ADD COLUMN CREATE TABLE gtest25 (a int PRIMARY KEY); INSERT INTO gtest25 VALUES (3), (4); diff --git a/src/test/regress/expected/hash_index.out b/src/test/regress/expected/hash_index.out index e23de21b41c..19bb94921fd 100644 --- a/src/test/regress/expected/hash_index.out +++ b/src/test/regress/expected/hash_index.out @@ -82,6 +82,25 @@ SELECT * FROM hash_f8_heap -------+-------- (0 rows) +-- +-- partial hash index +-- +EXPLAIN (COSTS OFF) +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + QUERY PLAN +-------------------------------------------------------- + Index Scan using hash_i4_partial_index on hash_i4_heap + Index Cond: (seqno = 9999) +(2 rows) + +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + seqno | random +-------+------------ + 9999 | 1227676208 +(1 row) + -- -- hash index -- grep '^90[^0-9]' hashovfl.data diff --git a/src/test/regress/expected/indexing.out b/src/test/regress/expected/indexing.out index 63b8d9ecb50..de9c91ab580 100644 --- a/src/test/regress/expected/indexing.out +++ b/src/test/regress/expected/indexing.out @@ -1587,3 +1587,151 @@ select indexrelid::regclass, indisvalid, indisreplident, (3 rows) drop table parted_replica_tab; +-- create global index using non-partition key +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (10); +create table gidxpart2 partition of gidxpart for values from (10) to (100); +create unique index gidx_u on gidxpart using btree(b) global; +select relname, relhasindex, relkind from pg_class where relname like '%gidx%' order by oid; + relname | relhasindex | relkind +-----------------+-------------+--------- + gidxpart | t | p + gidxpart1 | t | r + gidxpart2 | t | r + gidx_u | f | I + gidxpart1_b_idx | f | g + gidxpart2_b_idx | f | g +(6 rows) + +\d+ gidxpart + Partitioned table "public.gidxpart" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+----------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | + c | text | | | | extended | | +Partition key: RANGE (a) +Indexes: + "gidx_u" UNIQUE, btree (b) +Partitions: gidxpart1 FOR VALUES FROM (0) TO (10), + gidxpart2 FOR VALUES FROM (10) TO (100) + +\d+ gidx_u + Partitioned index "public.gidx_u" + Column | Type | Key? | Definition | Storage | Stats target +--------+---------+------+------------+---------+-------------- + b | integer | yes | b | plain | +unique, btree, for table "public.gidxpart" +Partitions: gidxpart1_b_idx, + gidxpart2_b_idx + +-- cross-partition uniqueness check for insert and update +insert into gidxpart values (1, 1, 'first'); +insert into gidxpart values (11, 11, 'eleventh'); +insert into gidxpart values (2, 11, 'duplicated (b)=(11) on other partition'); +ERROR: duplicate key value violates unique constraint "gidxpart2_b_idx" +DETAIL: Key (b)=(11) already exists. +insert into gidxpart values (12, 1, 'duplicated (b)=(1) on other partition'); +ERROR: duplicate key value violates unique constraint "gidxpart1_b_idx" +DETAIL: Key (b)=(1) already exists. +insert into gidxpart values (2, 120, 'second'); +insert into gidxpart values (12, 2, 'twelfth'); +update gidxpart set b=2 where a=2; +ERROR: duplicate key value violates unique constraint "gidxpart2_b_idx" +DETAIL: Key (b)=(2) already exists. +update gidxpart set b=1 where a=12; +ERROR: duplicate key value violates unique constraint "gidxpart1_b_idx" +DETAIL: Key (b)=(1) already exists. +update gidxpart set b=12 where a=12; +update gidxpart set b=2 where a=2; +select * from gidxpart; + a | b | c +----+----+---------- + 1 | 1 | first + 2 | 2 | second + 11 | 11 | eleventh + 12 | 12 | twelfth +(4 rows) + +-- cross-partition uniqueness check applys to newly created partition +create table gidxpart3 partition of gidxpart for values from (100) to (200); +select relname, relkind from pg_class where relname = 'gidxpart3_b_idx'; + relname | relkind +-----------------+--------- + gidxpart3_b_idx | g +(1 row) + +insert into gidxpart values (150, 11, 'duplicated (b)=(11) on other partition'); +ERROR: duplicate key value violates unique constraint "gidxpart2_b_idx" +DETAIL: Key (b)=(11) already exists. +insert into gidxpart values (150, 13, 'no duplicate b'); +-- clean up global index tests +drop index gidx_u; +drop table gidxpart; +-- Test the cross-partition uniqueness with non-partition key with global unique index +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +create table gidxpart2 partition of gidxpart for values from (100000) to (199999); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +insert into gidxpart (a, b, c) values (150000, 572814, 'inserted second on gidxpart2'); +create unique index on gidxpart (b) global; -- should fail +ERROR: could not create unique index "gidxpart1_b_idx" +DETAIL: Key (b)=(572814) is duplicated. +delete from gidxpart where a = 150000 and b = 572814; +create unique index on gidxpart (b) global; +drop table gidxpart; +-- Test partition attach and detach with global unique index (no existing index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +ERROR: could not create unique index "gidxpart1_b_idx" +DETAIL: Key (b)=(572814) is duplicated. +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g + relname | relkind +-----------------+--------- + gidxpart2_b_idx | g +(1 row) + +alter table gidxpart detach partition gidxpart2; +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i + relname | relkind +-----------------+--------- + gidxpart2_b_idx | i +(1 row) + +drop table gidxpart; +drop table gidxpart2; +-- Test partition attach and detach with global unique index (with duplicate index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +create unique index on gidxpart2 (b); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i + relname | relkind +-----------------+--------- + gidxpart2_b_idx | i +(1 row) + +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +ERROR: could not create unique index "gidxpart1_b_idx" +DETAIL: Key (b)=(572814) is duplicated. +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g + relname | relkind +-----------------+--------- + gidxpart2_b_idx | g +(1 row) + +alter table gidxpart detach partition gidxpart2; +drop table gidxpart; +drop table gidxpart2; diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out index 9d718bc3bef..3414165c2f4 100644 --- a/src/test/regress/expected/inherit.out +++ b/src/test/regress/expected/inherit.out @@ -1093,17 +1093,30 @@ CREATE TABLE inhta (); CREATE TABLE inhtb () INHERITS (inhta); CREATE TABLE inhtc () INHERITS (inhtb); CREATE TABLE inhtd () INHERITS (inhta, inhtb, inhtc); -ALTER TABLE inhta ADD COLUMN i int; +ALTER TABLE inhta ADD COLUMN i int, ADD COLUMN j bigint DEFAULT 1; NOTICE: merging definition of column "i" for child "inhtd" NOTICE: merging definition of column "i" for child "inhtd" +NOTICE: merging definition of column "j" for child "inhtd" +NOTICE: merging definition of column "j" for child "inhtd" \d+ inhta Table "public.inhta" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+---------+--------------+------------- i | integer | | | | plain | | + j | bigint | | | 1 | plain | | Child tables: inhtb, inhtd +\d+ inhtd + Table "public.inhtd" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + i | integer | | | | plain | | + j | bigint | | | 1 | plain | | +Inherits: inhta, + inhtb, + inhtc + DROP TABLE inhta, inhtb, inhtc, inhtd; -- Test for renaming in diamond inheritance CREATE TABLE inht2 (x int) INHERITS (inht1); diff --git a/src/test/regress/expected/limit.out b/src/test/regress/expected/limit.out index 8a98bbea8eb..d10c912d12e 100644 --- a/src/test/regress/expected/limit.out +++ b/src/test/regress/expected/limit.out @@ -643,7 +643,7 @@ View definition: WHERE onek.thousand < 995 ORDER BY onek.thousand OFFSET 10 - FETCH FIRST 5 ROWS WITH TIES; + FETCH FIRST (5) ROWS WITH TIES; CREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY; @@ -675,15 +675,29 @@ View definition: FROM onek WHERE onek.thousand < 995 ORDER BY onek.thousand - FETCH FIRST (NULL::integer + 1) ROWS WITH TIES; + FETCH FIRST ((NULL::integer + 1)) ROWS WITH TIES; CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995 - ORDER BY thousand FETCH FIRST NULL ROWS ONLY; + ORDER BY thousand FETCH FIRST (5::bigint) ROWS WITH TIES; \d+ limit_thousand_v_4 View "public.limit_thousand_v_4" Column | Type | Collation | Nullable | Default | Storage | Description ----------+---------+-----------+----------+---------+---------+------------- thousand | integer | | | | plain | +View definition: + SELECT onek.thousand + FROM onek + WHERE onek.thousand < 995 + ORDER BY onek.thousand + FETCH FIRST (5::bigint) ROWS WITH TIES; + +CREATE VIEW limit_thousand_v_5 AS SELECT thousand FROM onek WHERE thousand < 995 + ORDER BY thousand FETCH FIRST NULL ROWS ONLY; +\d+ limit_thousand_v_5 + View "public.limit_thousand_v_5" + Column | Type | Collation | Nullable | Default | Storage | Description +----------+---------+-----------+----------+---------+---------+------------- + thousand | integer | | | | plain | View definition: SELECT onek.thousand FROM onek diff --git a/src/test/regress/expected/maintain_every.out b/src/test/regress/expected/maintain_every.out new file mode 100644 index 00000000000..dea1089c249 --- /dev/null +++ b/src/test/regress/expected/maintain_every.out @@ -0,0 +1,33 @@ +-- Test maintenance commands that visit every eligible relation. Run as a +-- non-superuser, to skip other users' tables. +CREATE ROLE regress_maintain; +SET ROLE regress_maintain; +-- Test database-wide ANALYZE ("use_own_xacts" mode) setting relhassubclass=f +-- for non-partitioning inheritance, w/ ON COMMIT DELETE ROWS building an +-- empty index. +CREATE TEMP TABLE past_inh_db_other (); -- need 2 tables for "use_own_xacts" +CREATE TEMP TABLE past_inh_db_parent () ON COMMIT DELETE ROWS; +CREATE TEMP TABLE past_inh_db_child () INHERITS (past_inh_db_parent); +CREATE INDEX ON past_inh_db_parent ((1)); +ANALYZE past_inh_db_parent; +SELECT reltuples, relhassubclass + FROM pg_class WHERE oid = 'past_inh_db_parent'::regclass; + reltuples | relhassubclass +-----------+---------------- + 0 | t +(1 row) + +DROP TABLE past_inh_db_child; +SET client_min_messages = error; -- hide WARNINGs for other users' tables +ANALYZE; +RESET client_min_messages; +SELECT reltuples, relhassubclass + FROM pg_class WHERE oid = 'past_inh_db_parent'::regclass; + reltuples | relhassubclass +-----------+---------------- + 0 | f +(1 row) + +DROP TABLE past_inh_db_parent, past_inh_db_other; +RESET ROLE; +DROP ROLE regress_maintain; diff --git a/src/test/regress/expected/opr_sanity_1.out b/src/test/regress/expected/opr_sanity_1.out index a953f841a9d..09f1e157e4f 100644 --- a/src/test/regress/expected/opr_sanity_1.out +++ b/src/test/regress/expected/opr_sanity_1.out @@ -1913,7 +1913,7 @@ WHERE p2.oid = p1.amhandler AND p1.amtype = 'i' AND -- Check for table amhandler functions with the wrong signature SELECT p1.oid, p1.amname, p2.oid, p2.proname FROM pg_am AS p1, pg_proc AS p2 -WHERE p2.oid = p1.amhandler AND p1.amtype = 's' AND +WHERE p2.oid = p1.amhandler AND p1.amtype = 't' AND (p2.prorettype != 'table_am_handler'::regtype OR p2.proretset OR p2.pronargs != 1 @@ -2212,6 +2212,7 @@ ORDER BY 1, 2, 3; | dsinterval_ops | dsinterval_ops | interval day to second | float_ops | float4_ops | real | float_ops | float8_ops | double precision + | interval_ops | interval_ops | interval | jsonb_ops | jsonb_ops | jsonb | multirange_ops | multirange_ops | anymultirange | number_ops | number_ops | number @@ -2226,7 +2227,7 @@ ORDER BY 1, 2, 3; | tsquery_ops | tsquery_ops | tsquery | tsvector_ops | tsvector_ops | tsvector | yminterval_ops | yminterval_ops | interval year to month -(32 rows) +(33 rows) -- **************** pg_index **************** -- Look for illegal values in pg_index fields. diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out index 89132168bb1..c2e955c624c 100644 --- a/src/test/regress/expected/privileges.out +++ b/src/test/regress/expected/privileges.out @@ -325,8 +325,6 @@ CREATE VIEW atest12v AS SELECT * FROM atest12 WHERE b <<< 5; CREATE VIEW atest12sbv WITH (security_barrier=true) AS SELECT * FROM atest12 WHERE b <<< 5; -GRANT SELECT ON atest12v TO PUBLIC; -GRANT SELECT ON atest12sbv TO PUBLIC; -- This plan should use nestloop, knowing that few rows will be selected. EXPLAIN (COSTS OFF) SELECT * FROM atest12v x, atest12v y WHERE x.a = y.b; QUERY PLAN @@ -372,9 +370,18 @@ CREATE FUNCTION leak2(integer,integer) RETURNS boolean LANGUAGE plpgsql immutable; CREATE OPERATOR >>> (procedure = leak2, leftarg = integer, rightarg = integer, restrict = scalargtsel); --- This should not show any "leak" notices before failing. +-- These should not show any "leak" notices before failing. EXPLAIN (COSTS OFF) SELECT * FROM atest12 WHERE a >>> 0; ERROR: permission denied for table atest12 +EXPLAIN (COSTS OFF) SELECT * FROM atest12v WHERE a >>> 0; +ERROR: permission denied for view atest12v +EXPLAIN (COSTS OFF) SELECT * FROM atest12sbv WHERE a >>> 0; +ERROR: permission denied for view atest12sbv +-- Now regress_priv_user1 grants access to regress_priv_user2 via the views. +SET SESSION AUTHORIZATION regress_priv_user1; +GRANT SELECT ON atest12v TO PUBLIC; +GRANT SELECT ON atest12sbv TO PUBLIC; +SET SESSION AUTHORIZATION regress_priv_user2; -- These plans should continue to use a nestloop, since they execute with the -- privileges of the view owner. EXPLAIN (COSTS OFF) SELECT * FROM atest12v x, atest12v y WHERE x.a = y.b; @@ -2174,6 +2181,26 @@ SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); - ALTER DEFAULT PRIVILEGES FOR ROLE regress_priv_user1 REVOKE EXECUTE ON FUNCTIONS FROM public; ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT USAGE ON SCHEMAS TO regress_priv_user2; -- error ERROR: cannot use IN SCHEMA clause when using GRANT/REVOKE ON SCHEMAS +-- Test quoting and dequoting of user names in ACLs +CREATE ROLE "regress_""quoted"; +SELECT makeaclitem('regress_"quoted'::regrole, 'regress_"quoted'::regrole, + 'SELECT', TRUE); + makeaclitem +------------------------------------------ + "regress_""quoted"=r*/"regress_""quoted" +(1 row) + +SELECT '"regress_""quoted"=r*/"regress_""quoted"'::aclitem; + aclitem +------------------------------------------ + "regress_""quoted"=r*/"regress_""quoted" +(1 row) + +SELECT '""=r*/""'::aclitem; -- used to be misparsed as """" +ERROR: a name must follow the "/" sign +LINE 1: SELECT '""=r*/""'::aclitem; + ^ +DROP ROLE "regress_""quoted"; -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. @@ -2597,6 +2624,11 @@ DROP USER regress_priv_user6; DROP USER regress_priv_user7; DROP USER regress_priv_user8; -- does not exist ERROR: role "regress_priv_user8" does not exist +-- leave some default ACLs for pg_upgrade's dump-restore test input. +ALTER DEFAULT PRIVILEGES FOR ROLE pg_signal_backend + REVOKE USAGE ON TYPES FROM pg_signal_backend; +ALTER DEFAULT PRIVILEGES FOR ROLE pg_read_all_settings + REVOKE USAGE ON TYPES FROM pg_read_all_settings; -- permissions with LOCK TABLE CREATE USER regress_locktable_user; CREATE TABLE lock_table (a int); diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 265518de1ff..1cd4fea70c5 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -4493,6 +4493,7 @@ invalid command \lo \pset arg1 arg2 \q \reset + \restrict test \s arg1 \set arg1 arg2 arg3 arg4 arg5 arg6 arg7 \setenv arg1 arg2 @@ -4501,6 +4502,7 @@ invalid command \lo \t arg1 \T arg1 \timing arg1 + \unrestrict not_valid \unset arg1 \w arg1 \watch arg1 diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index b7ce080424f..e78d302d3bc 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -341,6 +341,37 @@ DROP PUBLICATION testpib_ins_trunct; DROP PUBLICATION testpub_fortbl; DROP SCHEMA pub_test CASCADE; NOTICE: drop cascades to table pub_test.testpub_nopk +-- Test that the INSERT ON CONFLICT command correctly checks REPLICA IDENTITY +-- when the target table is published. +CREATE TABLE testpub_insert_onconfl_no_ri (a int unique, b int); +CREATE TABLE testpub_insert_onconfl_parted (a int unique, b int) PARTITION by RANGE (a); +CREATE TABLE testpub_insert_onconfl_part_no_ri PARTITION OF testpub_insert_onconfl_parted FOR VALUES FROM (1) TO (10); +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION pub1 FOR ALL TABLES; +RESET client_min_messages; +-- fail - missing REPLICA IDENTITY +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; +ERROR: cannot update table "testpub_insert_onconfl_no_ri" because it does not have a replica identity and publishes updates +HINT: To enable updating the table, set REPLICA IDENTITY using ALTER TABLE. +-- ok - no updates +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT DO NOTHING; +-- fail - missing REPLICA IDENTITY in partition testpub_insert_onconfl_no_ri +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; +ERROR: cannot update table "testpub_insert_onconfl_part_no_ri" because it does not have a replica identity and publishes updates +HINT: To enable updating the table, set REPLICA IDENTITY using ALTER TABLE. +-- ok - no updates +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT DO NOTHING; +DROP PUBLICATION pub1; +DROP TABLE testpub_insert_onconfl_no_ri; +DROP TABLE testpub_insert_onconfl_parted; RESET SESSION AUTHORIZATION; DROP ROLE regress_publication_user, regress_publication_user2; DROP ROLE regress_publication_user_dummy; +-- stage objects for pg_dump tests +CREATE SCHEMA pubme CREATE TABLE t0 (c int, d int) CREATE TABLE t1 (c int); +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION dump_pub_1ct FOR TABLE ONLY pubme.t0; +CREATE PUBLICATION dump_pub_2ct FOR TABLE ONLY pubme.t0, pubme.t1; +CREATE PUBLICATION dump_pub_all FOR TABLE ONLY pubme.t0, pubme.t1 + WITH (publish_via_partition_root = true); +RESET client_min_messages; diff --git a/src/test/regress/expected/returning.out b/src/test/regress/expected/returning.out index cb51bb86876..a5ebc8acc0f 100644 --- a/src/test/regress/expected/returning.out +++ b/src/test/regress/expected/returning.out @@ -286,6 +286,63 @@ SELECT * FROM voo; 16 | zoo2 (2 rows) +-- Check use of a whole-row variable for an un-flattenable view +CREATE TEMP VIEW foo_v AS SELECT * FROM foo OFFSET 0; +UPDATE foo SET f2 = foo_v.f2 FROM foo_v WHERE foo_v.f1 = foo.f1 + RETURNING foo_v; + foo_v +----------------- + (2,more,42,141) + (16,zoo2,57,99) +(2 rows) + +SELECT * FROM foo; + f1 | f2 | f3 | f4 +----+------+----+----- + 2 | more | 42 | 141 + 16 | zoo2 | 57 | 99 +(2 rows) + +-- Check use of a whole-row variable for an inlined set-returning function +CREATE FUNCTION foo_f() RETURNS SETOF foo AS + $$ SELECT * FROM foo OFFSET 0 $$ LANGUAGE sql STABLE; +UPDATE foo SET f2 = foo_f.f2 FROM foo_f() WHERE foo_f.f1 = foo.f1 + RETURNING foo_f; + foo_f +----------------- + (2,more,42,141) + (16,zoo2,57,99) +(2 rows) + +SELECT * FROM foo; + f1 | f2 | f3 | f4 +----+------+----+----- + 2 | more | 42 | 141 + 16 | zoo2 | 57 | 99 +(2 rows) + +DROP FUNCTION foo_f(); +-- As above, but SRF is defined to return a composite type +CREATE TYPE foo_t AS (f1 int, f2 text, f3 int, f4 int8); +CREATE FUNCTION foo_f() RETURNS SETOF foo_t AS + $$ SELECT * FROM foo OFFSET 0 $$ LANGUAGE sql STABLE; +UPDATE foo SET f2 = foo_f.f2 FROM foo_f() WHERE foo_f.f1 = foo.f1 + RETURNING foo_f; + foo_f +----------------- + (2,more,42,141) + (16,zoo2,57,99) +(2 rows) + +SELECT * FROM foo; + f1 | f2 | f3 | f4 +----+------+----+----- + 2 | more | 42 | 141 + 16 | zoo2 | 57 | 99 +(2 rows) + +DROP FUNCTION foo_f(); +DROP TYPE foo_t; -- Try a join case CREATE TEMP TABLE joinme (f2j text, other int); INSERT INTO joinme VALUES('more', 12345); diff --git a/src/test/regress/expected/rowsecurity.out b/src/test/regress/expected/rowsecurity.out index 3917c76f2fc..6896d6c9ca0 100644 --- a/src/test/regress/expected/rowsecurity.out +++ b/src/test/regress/expected/rowsecurity.out @@ -4146,7 +4146,7 @@ RESET SESSION AUTHORIZATION; DROP VIEW rls_view; DROP TABLE rls_tbl; DROP TABLE ref_tbl; --- Leaky operator test +-- Leaky operator tests CREATE TABLE rls_tbl (a int); INSERT INTO rls_tbl SELECT x/10 FROM generate_series(1, 100) x; ANALYZE rls_tbl; @@ -4163,9 +4163,80 @@ SELECT * FROM rls_tbl WHERE a <<< 1000; --- (0 rows) +RESET SESSION AUTHORIZATION; +CREATE TABLE rls_child_tbl () INHERITS (rls_tbl); +INSERT INTO rls_child_tbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_child_tbl; +CREATE TABLE rls_ptbl (a int) PARTITION BY RANGE (a); +CREATE TABLE rls_part PARTITION OF rls_ptbl FOR VALUES FROM (-100) TO (100); +INSERT INTO rls_ptbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_ptbl, rls_part; +ALTER TABLE rls_ptbl ENABLE ROW LEVEL SECURITY; +ALTER TABLE rls_part ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_ptbl TO regress_rls_alice; +GRANT SELECT ON rls_part TO regress_rls_alice; +CREATE POLICY p1 ON rls_tbl USING (a < 0); +CREATE POLICY p2 ON rls_ptbl USING (a < 0); +CREATE POLICY p3 ON rls_part USING (a < 0); +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM rls_child_tbl WHERE a <<< 1000; +ERROR: permission denied for table rls_child_tbl +SELECT * FROM rls_ptbl WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM rls_part WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; +ERROR: permission denied for table rls_child_tbl +RESET SESSION AUTHORIZATION; +REVOKE SELECT ON rls_tbl FROM regress_rls_alice; +CREATE VIEW rls_tbl_view AS SELECT * FROM rls_tbl; +ALTER TABLE rls_child_tbl ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_child_tbl TO regress_rls_alice; +CREATE POLICY p4 ON rls_child_tbl USING (a < 0); +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; +ERROR: permission denied for table rls_tbl +SELECT * FROM rls_tbl_view WHERE a <<< 1000; +ERROR: permission denied for view rls_tbl_view +SELECT * FROM rls_child_tbl WHERE a <<< 1000; + a +--- +(0 rows) + +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; +ERROR: permission denied for table rls_tbl +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; + a +--- +(0 rows) + DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); RESET SESSION AUTHORIZATION; +DROP TABLE rls_part; +DROP TABLE rls_ptbl; +DROP TABLE rls_child_tbl; +DROP VIEW rls_tbl_view; DROP TABLE rls_tbl; -- Bug #16006: whole-row Vars in a policy don't play nice with sub-selects SET SESSION AUTHORIZATION regress_rls_alice; diff --git a/src/test/regress/expected/sanity_check_2.out b/src/test/regress/expected/sanity_check_2.out new file mode 100644 index 00000000000..e6cedd9933d --- /dev/null +++ b/src/test/regress/expected/sanity_check_2.out @@ -0,0 +1,253 @@ +VACUUM; +-- +-- sanity check, if we don't have indices the test will take years to +-- complete. But skip TOAST relations (since they will have varying +-- names depending on the current OID counter) as well as temp tables +-- of other backends (to avoid timing-dependent behavior). +-- +-- temporarily disable fancy output, so catalog changes create less diff noise +\a\t +SELECT relname, relhasindex + FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = relnamespace + WHERE relkind IN ('r', 'p') AND (nspname ~ '^pg_temp_') IS NOT TRUE + ORDER BY relname; +a|f +a_star|f +aggtest|f +array_index_op_test|t +array_op_test|f +b|f +b_star|f +bit_defaults|f +box_tbl|f +bprime|f +bt_f8_heap|t +bt_i4_heap|t +bt_name_heap|t +bt_txt_heap|t +c|f +c_star|f +char_tbl|f +check2_tbl|f +check_tbl|f +circle_tbl|t +city|f +copy_tbl|f +d|f +d_star|f +date_tbl|f +default_tbl|f +defaultexpr_tbl|f +dept|f +dual|f +dupindexcols|t +e_star|f +emp|f +equipment_r|f +extra_wide_table|f +f_star|f +fast_emp4000|t +float4_tbl|f +float8_tbl|f +func_index_heap|t +hash_f8_heap|t +hash_i4_heap|t +hash_name_heap|t +hash_txt_heap|t +hobbies_r|f +ihighway|t +inet_tbl|f +insert_tbl|f +int2_tbl|f +int4_tbl|f +int8_tbl|f +interval_tbl|f +invalid_check_con|f +invalid_check_con_child|f +iportaltest|f +kd_point_tbl|t +line_tbl|f +log_table|f +lseg_tbl|f +main_table|f +mlparted|f +mlparted1|f +mlparted11|f +mlparted12|f +mlparted2|f +mlparted3|f +mlparted4|f +mlparted_def|f +mlparted_def1|f +mlparted_def2|f +mlparted_defd|f +money_data|f +num_data|f +num_exp_add|t +num_exp_div|t +num_exp_ln|t +num_exp_log10|t +num_exp_mul|t +num_exp_power_10_ln|t +num_exp_sqrt|t +num_exp_sub|t +num_input_test|f +num_result|f +nummultirange_test|t +numrange_test|t +onek|t +onek2|t +past_inh_parent|f +past_parted|f +path_tbl|f +person|f +persons|f +persons2|t +persons3|t +pg_aggregate|t +pg_am|t +pg_amop|t +pg_amproc|t +pg_attrdef|t +pg_attribute|t +pg_auth_members|t +pg_authid|t +pg_cast|t +pg_class|t +pg_collation|t +pg_constraint|t +pg_conversion|t +pg_database|t +pg_db_role_setting|t +pg_default_acl|t +pg_depend|t +pg_description|t +pg_enum|t +pg_event_trigger|t +pg_extension|t +pg_foreign_data_wrapper|t +pg_foreign_server|t +pg_foreign_table|t +pg_index|t +pg_inherits|t +pg_init_privs|t +pg_language|t +pg_largeobject|t +pg_largeobject_metadata|t +pg_namespace|t +pg_opclass|t +pg_operator|t +pg_opfamily|t +pg_partitioned_table|t +pg_policy|t +pg_proc|t +pg_publication|t +pg_publication_rel|t +pg_range|t +pg_replication_origin|t +pg_rewrite|t +pg_seclabel|t +pg_sequence|t +pg_shdepend|t +pg_shdescription|t +pg_shseclabel|t +pg_statistic|t +pg_statistic_ext|t +pg_statistic_ext_data|t +pg_subscription|t +pg_subscription_rel|t +pg_tablespace|t +pg_transform|t +pg_trigger|t +pg_ts_config|t +pg_ts_config_map|t +pg_ts_dict|t +pg_ts_parser|t +pg_ts_template|t +pg_type|t +pg_user_mapping|t +point_tbl|t +polygon_tbl|t +quad_box_tbl|t +quad_box_tbl_ord_seq1|f +quad_box_tbl_ord_seq2|f +quad_point_tbl|t +quad_poly_tbl|t +radix_text_tbl|t +ramp|f +real_city|f +regress_constr_partition1|t +regress_constr_partitioned|t +reservations|f +road|t +shighway|t +slow_emp4000|f +sql_features|f +sql_implementation_info|f +sql_parts|f +sql_sizing|f +stud_emp|f +student|f +tab_core_types|f +tableam_parted_a_heap2|f +tableam_parted_b_heap2|f +tableam_parted_c_heap2|f +tableam_parted_d_heap2|f +tableam_parted_heap2|f +tableam_tbl_heap2|f +tableam_tblas_heap2|f +tbl_include_box|t +tbl_include_box_pk|f +tbl_include_pk|t +tbl_include_reg|t +tbl_include_unique1|t +tbl_include_unique2|f +tenk1|t +tenk2|t +test_range_excl|t +test_range_gist|t +test_range_spgist|t +test_tsvector|f +testjsonb|f +text_tbl|f +textrange_test|t +time_tbl|f +timestamp_tbl|f +timestamptz_tbl|f +timetz_tbl|f +tmp|f +trigger_parted|t +trigger_parted_p1|t +trigger_parted_p1_1|t +trigger_parted_p2|t +trigger_parted_p2_2|t +varchar_tbl|f +view_base_table|t +-- restore normal output mode +\a\t +-- +-- another sanity check: every system catalog that has OIDs should have +-- a unique index on OID. This ensures that the OIDs will be unique, +-- even after the OID counter wraps around. +-- We exclude non-system tables from the check by looking at nspname. +-- +SELECT relname, nspname + FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = relnamespace JOIN pg_attribute a ON (attrelid = c.oid AND attname = 'oid') + WHERE relkind = 'r' and c.oid < 16384 + AND ((nspname ~ '^pg_') IS NOT FALSE) + AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE indrelid = c.oid + AND indkey[0] = a.attnum AND indnatts = 1 + AND indisunique AND indimmediate); + relname | nspname +---------+--------- +(0 rows) + +-- check that relations without storage don't have relfilenode +SELECT relname, relkind + FROM pg_class + WHERE relkind IN ('v', 'c', 'f', 'p', 'I') + AND relfilenode <> 0; + relname | relkind +---------+--------- +(0 rows) + diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index dae49dbc246..e18f3953d06 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -54,6 +54,23 @@ CREATE STATISTICS tst ON (x || 'x'), (x || 'x'), y FROM ext_stats_test; ERROR: duplicate expression in statistics definition CREATE STATISTICS tst (unrecognized) ON x, y FROM ext_stats_test; ERROR: unrecognized statistics kind "unrecognized" +-- unsupported targets +CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo; +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar; +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo; +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x); +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text); +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +CREATE FUNCTION tftest(int) returns table(a int, b int) as $$ +SELECT $1, $1+i FROM generate_series(1,5) g(i); +$$ LANGUAGE sql IMMUTABLE STRICT; +CREATE STATISTICS alt_stat2 ON a FROM tftest(1); +ERROR: CREATE STATISTICS only supports relation names in the FROM clause +DROP FUNCTION tftest; -- incorrect expressions CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference ERROR: extended statistics require at least 2 columns @@ -80,6 +97,20 @@ ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new; ERROR: must be owner of statistics object ab1_a_b_stats RESET SESSION AUTHORIZATION; DROP ROLE regress_stats_ext; +CREATE STATISTICS pg_temp.stats_ext_temp ON a, b FROM ab1; +SELECT regexp_replace(pg_describe_object(tableoid, oid, 0), + 'pg_temp_[0-9]*', 'pg_temp_REDACTED') AS descr, + pg_statistics_obj_is_visible(oid) AS visible + FROM pg_statistic_ext + WHERE stxname = 'stats_ext_temp'; + descr | visible +---------------------------------------------------+--------- + statistics object pg_temp_REDACTED.stats_ext_temp | f +(1 row) + +DROP STATISTICS stats_ext_temp; -- shall fail +ERROR: statistics object "stats_ext_temp" does not exist +DROP STATISTICS pg_temp.stats_ext_temp; CREATE STATISTICS IF NOT EXISTS ab1_a_b_stats ON a, b FROM ab1; NOTICE: statistics object "ab1_a_b_stats" already exists, skipping DROP STATISTICS ab1_a_b_stats; @@ -3216,8 +3247,16 @@ CREATE FUNCTION op_leak(int, int) RETURNS bool LANGUAGE plpgsql; CREATE OPERATOR <<< (procedure = op_leak, leftarg = int, rightarg = int, restrict = scalarltsel); +CREATE FUNCTION op_leak(record, record) RETURNS bool + AS 'BEGIN RAISE NOTICE ''op_leak => %, %'', $1, $2; RETURN $1 < $2; END' + LANGUAGE plpgsql; +CREATE OPERATOR <<< (procedure = op_leak, leftarg = record, rightarg = record, + restrict = scalarltsel); SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied ERROR: permission denied for table priv_test_tbl +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied +ERROR: permission denied for table priv_test_tbl DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied ERROR: permission denied for table priv_test_tbl -- Grant access via a security barrier view, but hide all data @@ -3232,10 +3271,17 @@ SELECT * FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not l ---+--- (0 rows) +SELECT * FROM tststats.priv_test_view t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak + a | b +---+--- +(0 rows) + DELETE FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not leak -- Grant table access, but hide all data with RLS RESET SESSION AUTHORIZATION; ALTER TABLE tststats.priv_test_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_tbl_pol ON tststats.priv_test_tbl USING (2 * a < 0); GRANT SELECT, DELETE ON tststats.priv_test_tbl TO regress_stats_user1; -- Should now have direct table access, but see nothing and leak nothing SET SESSION AUTHORIZATION regress_stats_user1; @@ -3244,7 +3290,45 @@ SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not le ---+--- (0 rows) +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak + a | b +---+--- +(0 rows) + DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +-- Create plain inheritance parent table with no access permissions +RESET SESSION AUTHORIZATION; +CREATE TABLE tststats.priv_test_parent_tbl (a int, b int); +ALTER TABLE tststats.priv_test_tbl INHERIT tststats.priv_test_parent_tbl; +-- Should not have access to parent, and should leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +ERROR: permission denied for table priv_test_parent_tbl +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied +ERROR: permission denied for table priv_test_parent_tbl +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +ERROR: permission denied for table priv_test_parent_tbl +-- Grant table access to parent, but hide all data with RLS +RESET SESSION AUTHORIZATION; +ALTER TABLE tststats.priv_test_parent_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_parent_tbl_pol ON tststats.priv_test_parent_tbl USING (2 * a < 0); +GRANT SELECT, DELETE ON tststats.priv_test_parent_tbl TO regress_stats_user1; +-- Should now have direct table access to parent, but see nothing and leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak + a | b +---+--- +(0 rows) + +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak + a | b +---+--- +(0 rows) + +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak -- privilege checks for pg_stats_ext and pg_stats_ext_exprs RESET SESSION AUTHORIZATION; CREATE TABLE stats_ext_tbl (id INT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, col TEXT); @@ -3287,13 +3371,35 @@ SELECT statistics_name, most_common_vals FROM pg_stats_ext_exprs x s_expr | {1} (2 rows) +-- CREATE STATISTICS checks for CREATE on the schema +RESET SESSION AUTHORIZATION; +CREATE SCHEMA sts_sch1 CREATE TABLE sts_sch1.tbl (a INT, b INT); +GRANT USAGE ON SCHEMA sts_sch1 TO regress_stats_user1; +ALTER TABLE sts_sch1.tbl OWNER TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.fail ON a, b FROM sts_sch1.tbl; +ERROR: permission denied for schema sts_sch1 +RESET SESSION AUTHORIZATION; +GRANT CREATE ON SCHEMA sts_sch1 TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.pass ON a, b FROM sts_sch1.tbl; +-- re-creating statistics via ALTER TABLE bypasses checks for CREATE on schema +RESET SESSION AUTHORIZATION; +REVOKE CREATE ON SCHEMA sts_sch1 FROM regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +ALTER TABLE sts_sch1.tbl ALTER COLUMN a TYPE SMALLINT; -- Tidy up DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); +DROP OPERATOR <<< (record, record); +DROP FUNCTION op_leak(record, record); RESET SESSION AUTHORIZATION; DROP TABLE stats_ext_tbl; DROP SCHEMA tststats CASCADE; -NOTICE: drop cascades to 2 other objects -DETAIL: drop cascades to table tststats.priv_test_tbl +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table tststats.priv_test_parent_tbl +drop cascades to table tststats.priv_test_tbl drop cascades to view tststats.priv_test_view +DROP SCHEMA sts_sch1 CASCADE; +NOTICE: drop cascades to table sts_sch1.tbl DROP USER regress_stats_user1; diff --git a/src/test/regress/expected/strings.out b/src/test/regress/expected/strings.out index 99b0eb3f688..4ed627826b4 100644 --- a/src/test/regress/expected/strings.out +++ b/src/test/regress/expected/strings.out @@ -564,6 +564,82 @@ SELECT 'abcdefg' SIMILAR TO '_bcd%' ESCAPE NULL AS null; SELECT 'abcdefg' SIMILAR TO '_bcd#%' ESCAPE '##' AS error; ERROR: invalid escape string HINT: Escape string must be empty or one character. +-- Characters that should be left alone in character classes when a +-- SIMILAR TO regexp pattern is converted to POSIX style. +-- Underscore "_" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '_[_[:alpha:]_]_'; + QUERY PLAN +------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:.[_[:alpha:]_].)$'::text) +(2 rows) + +-- Percentage "%" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '%[%[:alnum:]%]%'; + QUERY PLAN +-------------------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:.*[%[:alnum:]%].*)$'::text) +(2 rows) + +-- Dot "." +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '.[.[:alnum:].].'; + QUERY PLAN +-------------------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:\.[.[:alnum:].]\.)$'::text) +(2 rows) + +-- Dollar "$" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '$[$[:alnum:]$]$'; + QUERY PLAN +-------------------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:\$[$[:alnum:]$]\$)$'::text) +(2 rows) + +-- Opening parenthesis "(" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '()[([:alnum:](]()'; + QUERY PLAN +------------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:(?:)[([:alnum:](](?:))$'::text) +(2 rows) + +-- Caret "^" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '^[^[:alnum:]^[^^][[^^]][\^][[\^]]\^]^'; + QUERY PLAN +------------------------------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:\^[^[:alnum:]^[^^][[^^]][\^][[\^]]\^]\^)$'::text) +(2 rows) + +-- Closing square bracket "]" at the beginning of character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[]%][^]%][^%]%'; + QUERY PLAN +------------------------------------------------ + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:[]%][^]%][^%].*)$'::text) +(2 rows) + +-- Closing square bracket effective after two carets at the beginning +-- of character class. +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[^^]^'; + QUERY PLAN +--------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:[^^]\^)$'::text) +(2 rows) + +-- Closing square bracket after an escape sequence at the beginning of +-- a character closes the character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[|a]%' ESCAPE '|'; + QUERY PLAN +--------------------------------------- + Seq Scan on text_tbl + Filter: (f1 ~ '^(?:[\a].*)$'::text) +(2 rows) + -- Test back reference in regexp_replace SELECT regexp_replace('1112223333', E'(\\d{3})(\\d{3})(\\d{4})', E'(\\1) \\2-\\3'); regexp_replace diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index f794e7d6a1b..a95727e53e3 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -2713,11 +2713,13 @@ select tgrelid::regclass, rtrim(tgname, '0123456789') as tgname, tgfoid::regproc, tgenabled from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) order by tgrelid::regclass::text, tgfoid; - tgrelid | tgname | tgfoid | tgenabled ----------+-------------------------+---------------------+----------- - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O -(2 rows) + tgrelid | tgname | tgfoid | tgenabled +---------+-------------------------+------------------------+----------- + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_del" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_upd" | O +(4 rows) -- Before v15, this has no effect because parent has no triggers: alter table parent disable trigger all; @@ -2725,11 +2727,13 @@ select tgrelid::regclass, rtrim(tgname, '0123456789') as tgname, tgfoid::regproc, tgenabled from pg_trigger where tgrelid in ('parent'::regclass, 'child1'::regclass) order by tgrelid::regclass::text, tgfoid; - tgrelid | tgname | tgfoid | tgenabled ----------+-------------------------+---------------------+----------- - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O - child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O -(2 rows) + tgrelid | tgname | tgfoid | tgenabled +---------+-------------------------+------------------------+----------- + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_ins" | O + child1 | RI_ConstraintTrigger_c_ | "RI_FKey_check_upd" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_del" | O + child1 | RI_ConstraintTrigger_a_ | "RI_FKey_noaction_upd" | O +(4 rows) drop table parent, child1; -- Verify that firing state propagates correctly on creation, too @@ -2926,6 +2930,10 @@ NOTICE: trigger = child3_delete_trig, old table = (42,CCC) -- copy into parent sees parent-format tuples copy parent (a, b) from stdin; NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42) +-- check detach/reattach behavior; statement triggers with transition tables +-- should not prevent a table from becoming a partition again +alter table parent detach partition child1; +alter table parent attach partition child1 for values in ('AAA'); -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; @@ -3123,6 +3131,10 @@ NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42) create index on parent(b); copy parent (a, b) from stdin; NOTICE: trigger = parent_insert_trig, new table = (DDD,42) +-- check disinherit/reinherit behavior; statement triggers with transition +-- tables should not prevent a table from becoming an inheritance child again +alter table child1 no inherit parent; +alter table child1 inherit parent; -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out index cb68aab2175..2e359d6f248 100644 --- a/src/test/regress/expected/with.out +++ b/src/test/regress/expected/with.out @@ -2000,6 +2000,14 @@ WITH RECURSIVE x(n) AS ( ERROR: ORDER BY in a recursive query is not implemented LINE 3: ORDER BY (SELECT n FROM x)) ^ +-- and this +WITH RECURSIVE x(n) AS ( + WITH sub_cte AS (SELECT * FROM x) + DELETE FROM graph RETURNING f) + SELECT * FROM x; +ERROR: recursive query "x" must not contain data-modifying statements +LINE 1: WITH RECURSIVE x(n) AS ( + ^ CREATE TEMPORARY TABLE y (a INTEGER); INSERT INTO y SELECT generate_series(1, 10); -- LEFT JOIN @@ -2184,6 +2192,48 @@ from int4_tbl; -2147483647 (5 rows) +-- +-- test for bug #19055: interaction of WITH with aggregates +-- +-- For now, we just throw an error if there's a use of a CTE below the +-- semantic level that the SQL standard assigns to the aggregate. +-- It's not entirely clear what we could do instead that doesn't risk +-- breaking more things than it fixes. +select f1, (with cte1(x,y) as (select 1,2) + select count((select i4.f1 from cte1))) as ss +from int4_tbl i4; +ERROR: outer-level aggregate cannot use a nested CTE +LINE 2: select count((select i4.f1 from cte1))) as ss + ^ +DETAIL: CTE "cte1" is below the aggregate's semantic level. +-- +-- test for bug #19106: interaction of WITH with aggregates +-- +-- the initial fix for #19055 was too aggressive and broke this case +explain (verbose, costs off) +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + QUERY PLAN +-------------------------------------------- + Aggregate + Output: max($0) + InitPlan 1 (returns $0) + -> Aggregate + Output: sum("*VALUES*".column1) + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 + -> Result +(8 rows) + +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + agg +----- + 3 +(1 row) + -- -- test for nested-recursive-WITH bug -- @@ -2717,6 +2767,47 @@ SELECT * FROM bug6051_3; --- (0 rows) +-- check that recursive CTE processing doesn't rewrite a CTE more than once +-- (must not try to expand GENERATED ALWAYS IDENTITY columns more than once) +CREATE TEMP TABLE id_alw1 (i int GENERATED ALWAYS AS IDENTITY); +CREATE TEMP TABLE id_alw2 (i int GENERATED ALWAYS AS IDENTITY); +CREATE TEMP VIEW id_alw2_view AS SELECT * FROM id_alw2; +CREATE TEMP TABLE id_alw3 (i int GENERATED ALWAYS AS IDENTITY); +CREATE RULE id_alw3_ins AS ON INSERT TO id_alw3 DO INSTEAD + WITH t1 AS (INSERT INTO id_alw1 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw2_view DEFAULT VALUES RETURNING i; +CREATE TEMP VIEW id_alw3_view AS SELECT * FROM id_alw3; +CREATE TEMP TABLE id_alw4 (i int GENERATED ALWAYS AS IDENTITY); +WITH t4 AS (INSERT INTO id_alw4 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw3_view DEFAULT VALUES RETURNING i; + i +--- + 1 +(1 row) + +SELECT * from id_alw1; + i +--- + 1 +(1 row) + +SELECT * from id_alw2; + i +--- + 1 +(1 row) + +SELECT * from id_alw3; + i +--- +(0 rows) + +SELECT * from id_alw4; + i +--- + 1 +(1 row) + -- check case where CTE reference is removed due to optimization EXPLAIN (VERBOSE, COSTS OFF) SELECT q1 FROM diff --git a/src/test/regress/input/constraints.source b/src/test/regress/input/constraints.source index 6acac568461..9948d723b74 100644 --- a/src/test/regress/input/constraints.source +++ b/src/test/regress/input/constraints.source @@ -612,3 +612,9 @@ DROP DOMAIN constraint_comments_dom; DROP ROLE regress_constraint_comments; DROP ROLE regress_constraint_comments_noaccess; + +-- Leave some constraints for the pg_upgrade test to pick up +CREATE DOMAIN constraint_comments_dom AS int; + +ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT inv_ck CHECK (value > 0) NOT VALID; +COMMENT ON CONSTRAINT inv_ck ON DOMAIN constraint_comments_dom IS 'comment on invalid constraint'; diff --git a/src/test/regress/input/encoding.source b/src/test/regress/input/encoding.source new file mode 100644 index 00000000000..d080bef2f80 --- /dev/null +++ b/src/test/regress/input/encoding.source @@ -0,0 +1,242 @@ +/* skip test if not UTF8 server encoding */ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit +\endif + +CREATE FUNCTION test_bytea_to_text(bytea) RETURNS text + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_text_to_bytea(text) RETURNS bytea + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_mblen_func(text, text, text, int) RETURNS int + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_text_to_wchars(text, text) RETURNS int[] + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_wchars_to_text(text, int[]) RETURNS text + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_valid_server_encoding(text) RETURNS boolean + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; + + +CREATE TABLE regress_encoding(good text, truncated text, with_nul text, truncated_with_nul text); +INSERT INTO regress_encoding +VALUES ('café', + 'caf' || test_bytea_to_text('\xc3'), + 'café' || test_bytea_to_text('\x00') || 'dcba', + 'caf' || test_bytea_to_text('\xc300') || 'dcba'); + +SELECT good, truncated, with_nul FROM regress_encoding; + +SELECT length(good) FROM regress_encoding; +SELECT substring(good, 3, 1) FROM regress_encoding; +SELECT substring(good, 4, 1) FROM regress_encoding; +SELECT regexp_replace(good, '^caf(.)$', '\1') FROM regress_encoding; +SELECT reverse(good) FROM regress_encoding; + +-- invalid short mb character = error +SELECT length(truncated) FROM regress_encoding; +SELECT substring(truncated, 1, 3) FROM regress_encoding; +SELECT substring(truncated, 1, 4) FROM regress_encoding; +SELECT reverse(truncated) FROM regress_encoding; +-- invalid short mb character = silently dropped +SELECT regexp_replace(truncated, '^caf(.)$', '\1') FROM regress_encoding; + +-- PostgreSQL doesn't allow strings to contain NUL. If a corrupted string +-- contains NUL at a character boundary position, some functions treat it as a +-- character while others treat it as a terminator, as implementation details. + +-- NUL = terminator +SELECT length(with_nul) FROM regress_encoding; +SELECT substring(with_nul, 3, 1) FROM regress_encoding; +SELECT substring(with_nul, 4, 1) FROM regress_encoding; +SELECT substring(with_nul, 5, 1) FROM regress_encoding; +SELECT convert_to(substring(with_nul, 5, 1), 'UTF8') FROM regress_encoding; +SELECT regexp_replace(with_nul, '^caf(.)$', '\1') FROM regress_encoding; +-- NUL = character +SELECT with_nul, reverse(with_nul), reverse(reverse(with_nul)) FROM regress_encoding; + +-- If a corrupted string contains NUL in the tail bytes of a multibyte +-- character (invalid in all encodings), it is considered part of the +-- character for length purposes. An error will only be raised in code paths +-- that convert or verify encodings. + +SELECT length(truncated_with_nul) FROM regress_encoding; +SELECT substring(truncated_with_nul, 3, 1) FROM regress_encoding; +SELECT substring(truncated_with_nul, 4, 1) FROM regress_encoding; +SELECT convert_to(substring(truncated_with_nul, 4, 1), 'UTF8') FROM regress_encoding; +SELECT substring(truncated_with_nul, 5, 1) FROM regress_encoding; +SELECT regexp_replace(truncated_with_nul, '^caf(.)dcba$', '\1') = test_bytea_to_text('\xc300') FROM regress_encoding; +SELECT reverse(truncated_with_nul) FROM regress_encoding; + +-- unbounded: sequence would overrun the string! +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated, 3) +FROM regress_encoding; + +-- condition detected when using the length/range variants +SELECT test_mblen_func('pg_mblen_with_len', 'UTF8', truncated, 3) +FROM regress_encoding; +SELECT test_mblen_func('pg_mblen_range', 'UTF8', truncated, 3) +FROM regress_encoding; + +-- unbounded: sequence would overrun the string, if the terminator were really +-- the end of it +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; +SELECT test_mblen_func('pg_encoding_mblen', 'GB18030', truncated_with_nul, 3) +FROM regress_encoding; + +-- condition detected when using the cstr variants +SELECT test_mblen_func('pg_mblen_cstr', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; + +DROP TABLE regress_encoding; + +-- mb<->wchar conversions +CREATE FUNCTION test_encoding(encoding text, description text, input bytea) +RETURNS VOID LANGUAGE plpgsql AS +$$ +DECLARE + prefix text; + len int; + wchars int[]; + round_trip bytea; + result text; +BEGIN + prefix := rpad(encoding || ' ' || description || ':', 28); + + -- XXX could also test validation, length functions and include client + -- only encodings with these test cases + + IF test_valid_server_encoding(encoding) THEN + wchars := test_text_to_wchars(encoding, test_bytea_to_text(input)); + round_trip = test_text_to_bytea(test_wchars_to_text(encoding, wchars)); + if input = round_trip then + result := 'OK'; + elsif length(input) > length(round_trip) and round_trip = substr(input, 1, length(round_trip)) then + result := 'truncated'; + else + result := 'failed'; + end if; + RAISE NOTICE '% % -> % -> % = %', prefix, input, wchars, round_trip, result; + END IF; +END; +$$; +-- No validation is done on the encoding itself, just the length to avoid +-- overruns, so some of the byte sequences below are bogus. They cover +-- all code branches, server encodings only for now. +CREATE TABLE encoding_tests (encoding text, description text, input bytea); +INSERT INTO encoding_tests VALUES + -- LATIN1, other single-byte encodings + ('LATIN1', 'ASCII', 'a'), + ('LATIN1', 'extended', '\xe9'), + -- EUC_JP, EUC_JIS_2004, EUR_KR (for the purposes of wchar conversion): + -- 2 8e (CS2, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 3 8f (CS3, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 2 80..ff (CS1) + ('EUC_JP', 'ASCII', 'a'), + ('EUC_JP', 'CS1, short', '\x80'), + ('EUC_JP', 'CS1', '\x8002'), + ('EUC_JP', 'CS2, short', '\x8e'), + ('EUC_JP', 'CS2', '\x8e02'), + ('EUC_JP', 'CS3, short', '\x8f'), + ('EUC_JP', 'CS3, short', '\x8f02'), + ('EUC_JP', 'CS3', '\x8f0203'), + -- EUC_CN + -- 3 8e (CS2, not used but arbitrarily considered to have length 3) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_CN', 'ASCII', 'a'), + ('EUC_CN', 'CS1, short', '\x80'), + ('EUC_CN', 'CS1', '\x8002'), + ('EUC_CN', 'CS2, short', '\x8e'), + ('EUC_CN', 'CS2, short', '\x8e02'), + ('EUC_CN', 'CS2', '\x8e0203'), + ('EUC_CN', 'CS3, short', '\x8f'), + ('EUC_CN', 'CS3, short', '\x8f02'), + ('EUC_CN', 'CS3', '\x8f0203'), + -- EUC_TW: + -- 4 8e (CS2) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_TW', 'ASCII', 'a'), + ('EUC_TW', 'CS1, short', '\x80'), + ('EUC_TW', 'CS1', '\x8002'), + ('EUC_TW', 'CS2, short', '\x8e'), + ('EUC_TW', 'CS2, short', '\x8e02'), + ('EUC_TW', 'CS2, short', '\x8e0203'), + ('EUC_TW', 'CS2', '\x8e020304'), + ('EUC_TW', 'CS3, short', '\x8f'), + ('EUC_TW', 'CS3, short', '\x8f02'), + ('EUC_TW', 'CS3', '\x8f0203'), + -- UTF8 + -- 2 c0..df + -- 3 e0..ef + -- 4 f0..f7 (but maximum real codepoint U+10ffff has f4) + -- 5 f8..fb (not supported) + -- 6 fc..fd (not supported) + ('UTF8', 'ASCII', 'a'), + ('UTF8', '2 byte, short', '\xdf'), + ('UTF8', '2 byte', '\xdf82'), + ('UTF8', '3 byte, short', '\xef'), + ('UTF8', '3 byte, short', '\xef82'), + ('UTF8', '3 byte', '\xef8283'), + ('UTF8', '4 byte, short', '\xf7'), + ('UTF8', '4 byte, short', '\xf782'), + ('UTF8', '4 byte, short', '\xf78283'), + ('UTF8', '4 byte', '\xf7828384'), + ('UTF8', '5 byte, unsupported', '\xfb'), + ('UTF8', '5 byte, unsupported', '\xfb82'), + ('UTF8', '5 byte, unsupported', '\xfb8283'), + ('UTF8', '5 byte, unsupported', '\xfb828384'), + ('UTF8', '5 byte, unsupported', '\xfb82838485'), + ('UTF8', '6 byte, unsupported', '\xfd'), + ('UTF8', '6 byte, unsupported', '\xfd82'), + ('UTF8', '6 byte, unsupported', '\xfd8283'), + ('UTF8', '6 byte, unsupported', '\xfd828384'), + ('UTF8', '6 byte, unsupported', '\xfd82838485'), + ('UTF8', '6 byte, unsupported', '\xfd8283848586'), + -- MULE_INTERNAL + -- 2 81..8d LC1 + -- 3 90..99 LC2 + ('MULE_INTERNAL', 'ASCII', 'a'), + ('MULE_INTERNAL', 'LC1, short', '\x81'), + ('MULE_INTERNAL', 'LC1', '\x8182'), + ('MULE_INTERNAL', 'LC2, short', '\x90'), + ('MULE_INTERNAL', 'LC2, short', '\x9082'), + ('MULE_INTERNAL', 'LC2', '\x908283'); + +SELECT COUNT(test_encoding(encoding, description, input)) > 0 +FROM encoding_tests; + +-- substring fetches a slice of a toasted value; unused tail of that slice is +-- an incomplete char (bug #19406) +CREATE TABLE toast_3b_utf8 (c text); +INSERT INTO toast_3b_utf8 VALUES (repeat(U&'\2026', 4000)); +SELECT SUBSTRING(c FROM 1 FOR 1) FROM toast_3b_utf8; +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; +-- diagnose incomplete char iff within the substring +UPDATE toast_3b_utf8 SET c = c || test_bytea_to_text('\xe280'); +SELECT SUBSTRING(c FROM 4000 FOR 1) FROM toast_3b_utf8; +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; +-- substring needing last byte of its slice_size +ALTER TABLE toast_3b_utf8 RENAME TO toast_4b_utf8; +UPDATE toast_4b_utf8 SET c = repeat(U&'\+01F680', 3000); +SELECT SUBSTRING(c FROM 3000 FOR 1) FROM toast_4b_utf8; + +DROP TABLE encoding_tests; +DROP TABLE toast_4b_utf8; +DROP FUNCTION test_encoding; +DROP FUNCTION test_wchars_to_text; +DROP FUNCTION test_text_to_wchars; +DROP FUNCTION test_valid_server_encoding; +DROP FUNCTION test_mblen_func; +DROP FUNCTION test_bytea_to_text; +DROP FUNCTION test_text_to_bytea; + + +-- substring slow path: multi-byte escape char vs. multi-byte pattern char. +SELECT SUBSTRING('a' SIMILAR U&'\00AC' ESCAPE U&'\00A7'); +-- Levenshtein distance metric: exercise character length cache. +SELECT U&"real\00A7_name" FROM (select 1) AS x(real_name); +-- JSON errcontext: truncate long data. +SELECT repeat(U&'\00A7', 30)::json; diff --git a/src/test/regress/output/constraints.source b/src/test/regress/output/constraints.source index 6429c103e24..1de98a17769 100644 --- a/src/test/regress/output/constraints.source +++ b/src/test/regress/output/constraints.source @@ -802,3 +802,7 @@ DROP TABLE constraint_comments_tbl; DROP DOMAIN constraint_comments_dom; DROP ROLE regress_constraint_comments; DROP ROLE regress_constraint_comments_noaccess; +-- Leave some constraints for the pg_upgrade test to pick up +CREATE DOMAIN constraint_comments_dom AS int; +ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT inv_ck CHECK (value > 0) NOT VALID; +COMMENT ON CONSTRAINT inv_ck ON DOMAIN constraint_comments_dom IS 'comment on invalid constraint'; diff --git a/src/test/regress/output/encoding.source b/src/test/regress/output/encoding.source new file mode 100644 index 00000000000..6e730e8737e --- /dev/null +++ b/src/test/regress/output/encoding.source @@ -0,0 +1,442 @@ +/* skip test if not UTF8 server encoding */ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit +\endif +CREATE FUNCTION test_bytea_to_text(bytea) RETURNS text + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_text_to_bytea(text) RETURNS bytea + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_mblen_func(text, text, text, int) RETURNS int + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_text_to_wchars(text, text) RETURNS int[] + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_wchars_to_text(text, int[]) RETURNS text + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE FUNCTION test_valid_server_encoding(text) RETURNS boolean + AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; +CREATE TABLE regress_encoding(good text, truncated text, with_nul text, truncated_with_nul text); +INSERT INTO regress_encoding +VALUES ('café', + 'caf' || test_bytea_to_text('\xc3'), + 'café' || test_bytea_to_text('\x00') || 'dcba', + 'caf' || test_bytea_to_text('\xc300') || 'dcba'); +SELECT good, truncated, with_nul FROM regress_encoding; + good | truncated | with_nul +------+-----------+---------- + café | caf | café +(1 row) + +SELECT length(good) FROM regress_encoding; + length +-------- + 4 +(1 row) + +SELECT substring(good, 3, 1) FROM regress_encoding; + substring +----------- + f +(1 row) + +SELECT substring(good, 4, 1) FROM regress_encoding; + substring +----------- + é +(1 row) + +SELECT regexp_replace(good, '^caf(.)$', '\1') FROM regress_encoding; + regexp_replace +---------------- + é +(1 row) + +SELECT reverse(good) FROM regress_encoding; + reverse +--------- + éfac +(1 row) + +-- invalid short mb character = error +SELECT length(truncated) FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +SELECT substring(truncated, 1, 3) FROM regress_encoding; + substring +----------- + caf +(1 row) + +SELECT substring(truncated, 1, 4) FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +SELECT reverse(truncated) FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +-- invalid short mb character = silently dropped +SELECT regexp_replace(truncated, '^caf(.)$', '\1') FROM regress_encoding; + regexp_replace +---------------- + caf +(1 row) + +-- PostgreSQL doesn't allow strings to contain NUL. If a corrupted string +-- contains NUL at a character boundary position, some functions treat it as a +-- character while others treat it as a terminator, as implementation details. +-- NUL = terminator +SELECT length(with_nul) FROM regress_encoding; + length +-------- + 4 +(1 row) + +SELECT substring(with_nul, 3, 1) FROM regress_encoding; + substring +----------- + f +(1 row) + +SELECT substring(with_nul, 4, 1) FROM regress_encoding; + substring +----------- + é +(1 row) + +SELECT substring(with_nul, 5, 1) FROM regress_encoding; + substring +----------- + +(1 row) + +SELECT convert_to(substring(with_nul, 5, 1), 'UTF8') FROM regress_encoding; + convert_to +------------ + \x +(1 row) + +SELECT regexp_replace(with_nul, '^caf(.)$', '\1') FROM regress_encoding; + regexp_replace +---------------- + é +(1 row) + +-- NUL = character +SELECT with_nul, reverse(with_nul), reverse(reverse(with_nul)) FROM regress_encoding; + with_nul | reverse | reverse +----------+---------+--------- + café | abcd | café +(1 row) + +-- If a corrupted string contains NUL in the tail bytes of a multibyte +-- character (invalid in all encodings), it is considered part of the +-- character for length purposes. An error will only be raised in code paths +-- that convert or verify encodings. +SELECT length(truncated_with_nul) FROM regress_encoding; + length +-------- + 8 +(1 row) + +SELECT substring(truncated_with_nul, 3, 1) FROM regress_encoding; + substring +----------- + f +(1 row) + +SELECT substring(truncated_with_nul, 4, 1) FROM regress_encoding; + substring +----------- + +(1 row) + +SELECT convert_to(substring(truncated_with_nul, 4, 1), 'UTF8') FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 0x00 +SELECT substring(truncated_with_nul, 5, 1) FROM regress_encoding; + substring +----------- + d +(1 row) + +SELECT regexp_replace(truncated_with_nul, '^caf(.)dcba$', '\1') = test_bytea_to_text('\xc300') FROM regress_encoding; + ?column? +---------- + t +(1 row) + +SELECT reverse(truncated_with_nul) FROM regress_encoding; + reverse +--------- + abcd +(1 row) + +-- unbounded: sequence would overrun the string! +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated, 3) +FROM regress_encoding; + test_mblen_func +----------------- + 2 +(1 row) + +-- condition detected when using the length/range variants +SELECT test_mblen_func('pg_mblen_with_len', 'UTF8', truncated, 3) +FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +SELECT test_mblen_func('pg_mblen_range', 'UTF8', truncated, 3) +FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +-- unbounded: sequence would overrun the string, if the terminator were really +-- the end of it +SELECT test_mblen_func('pg_mblen_unbounded', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; + test_mblen_func +----------------- + 2 +(1 row) + +SELECT test_mblen_func('pg_encoding_mblen', 'GB18030', truncated_with_nul, 3) +FROM regress_encoding; + test_mblen_func +----------------- + 2 +(1 row) + +-- condition detected when using the cstr variants +SELECT test_mblen_func('pg_mblen_cstr', 'UTF8', truncated_with_nul, 3) +FROM regress_encoding; +ERROR: invalid byte sequence for encoding "UTF8": 0xc3 +DROP TABLE regress_encoding; +-- mb<->wchar conversions +CREATE FUNCTION test_encoding(encoding text, description text, input bytea) +RETURNS VOID LANGUAGE plpgsql AS +$$ +DECLARE + prefix text; + len int; + wchars int[]; + round_trip bytea; + result text; +BEGIN + prefix := rpad(encoding || ' ' || description || ':', 28); + + -- XXX could also test validation, length functions and include client + -- only encodings with these test cases + + IF test_valid_server_encoding(encoding) THEN + wchars := test_text_to_wchars(encoding, test_bytea_to_text(input)); + round_trip = test_text_to_bytea(test_wchars_to_text(encoding, wchars)); + if input = round_trip then + result := 'OK'; + elsif length(input) > length(round_trip) and round_trip = substr(input, 1, length(round_trip)) then + result := 'truncated'; + else + result := 'failed'; + end if; + RAISE NOTICE '% % -> % -> % = %', prefix, input, wchars, round_trip, result; + END IF; +END; +$$; +-- No validation is done on the encoding itself, just the length to avoid +-- overruns, so some of the byte sequences below are bogus. They cover +-- all code branches, server encodings only for now. +CREATE TABLE encoding_tests (encoding text, description text, input bytea); +INSERT INTO encoding_tests VALUES + -- LATIN1, other single-byte encodings + ('LATIN1', 'ASCII', 'a'), + ('LATIN1', 'extended', '\xe9'), + -- EUC_JP, EUC_JIS_2004, EUR_KR (for the purposes of wchar conversion): + -- 2 8e (CS2, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 3 8f (CS3, not used by EUR_KR but arbitrarily considered to have EUC_JP length) + -- 2 80..ff (CS1) + ('EUC_JP', 'ASCII', 'a'), + ('EUC_JP', 'CS1, short', '\x80'), + ('EUC_JP', 'CS1', '\x8002'), + ('EUC_JP', 'CS2, short', '\x8e'), + ('EUC_JP', 'CS2', '\x8e02'), + ('EUC_JP', 'CS3, short', '\x8f'), + ('EUC_JP', 'CS3, short', '\x8f02'), + ('EUC_JP', 'CS3', '\x8f0203'), + -- EUC_CN + -- 3 8e (CS2, not used but arbitrarily considered to have length 3) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_CN', 'ASCII', 'a'), + ('EUC_CN', 'CS1, short', '\x80'), + ('EUC_CN', 'CS1', '\x8002'), + ('EUC_CN', 'CS2, short', '\x8e'), + ('EUC_CN', 'CS2, short', '\x8e02'), + ('EUC_CN', 'CS2', '\x8e0203'), + ('EUC_CN', 'CS3, short', '\x8f'), + ('EUC_CN', 'CS3, short', '\x8f02'), + ('EUC_CN', 'CS3', '\x8f0203'), + -- EUC_TW: + -- 4 8e (CS2) + -- 3 8f (CS3, not used but arbitrarily considered to have length 3) + -- 2 80..ff (CS1) + ('EUC_TW', 'ASCII', 'a'), + ('EUC_TW', 'CS1, short', '\x80'), + ('EUC_TW', 'CS1', '\x8002'), + ('EUC_TW', 'CS2, short', '\x8e'), + ('EUC_TW', 'CS2, short', '\x8e02'), + ('EUC_TW', 'CS2, short', '\x8e0203'), + ('EUC_TW', 'CS2', '\x8e020304'), + ('EUC_TW', 'CS3, short', '\x8f'), + ('EUC_TW', 'CS3, short', '\x8f02'), + ('EUC_TW', 'CS3', '\x8f0203'), + -- UTF8 + -- 2 c0..df + -- 3 e0..ef + -- 4 f0..f7 (but maximum real codepoint U+10ffff has f4) + -- 5 f8..fb (not supported) + -- 6 fc..fd (not supported) + ('UTF8', 'ASCII', 'a'), + ('UTF8', '2 byte, short', '\xdf'), + ('UTF8', '2 byte', '\xdf82'), + ('UTF8', '3 byte, short', '\xef'), + ('UTF8', '3 byte, short', '\xef82'), + ('UTF8', '3 byte', '\xef8283'), + ('UTF8', '4 byte, short', '\xf7'), + ('UTF8', '4 byte, short', '\xf782'), + ('UTF8', '4 byte, short', '\xf78283'), + ('UTF8', '4 byte', '\xf7828384'), + ('UTF8', '5 byte, unsupported', '\xfb'), + ('UTF8', '5 byte, unsupported', '\xfb82'), + ('UTF8', '5 byte, unsupported', '\xfb8283'), + ('UTF8', '5 byte, unsupported', '\xfb828384'), + ('UTF8', '5 byte, unsupported', '\xfb82838485'), + ('UTF8', '6 byte, unsupported', '\xfd'), + ('UTF8', '6 byte, unsupported', '\xfd82'), + ('UTF8', '6 byte, unsupported', '\xfd8283'), + ('UTF8', '6 byte, unsupported', '\xfd828384'), + ('UTF8', '6 byte, unsupported', '\xfd82838485'), + ('UTF8', '6 byte, unsupported', '\xfd8283848586'), + -- MULE_INTERNAL + -- 2 81..8d LC1 + -- 3 90..99 LC2 + ('MULE_INTERNAL', 'ASCII', 'a'), + ('MULE_INTERNAL', 'LC1, short', '\x81'), + ('MULE_INTERNAL', 'LC1', '\x8182'), + ('MULE_INTERNAL', 'LC2, short', '\x90'), + ('MULE_INTERNAL', 'LC2, short', '\x9082'), + ('MULE_INTERNAL', 'LC2', '\x908283'); +SELECT COUNT(test_encoding(encoding, description, input)) > 0 +FROM encoding_tests; +NOTICE: LATIN1 ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: LATIN1 extended: \xe9 -> {233} -> \xe9 = OK +NOTICE: EUC_JP ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: EUC_JP CS1, short: \x80 -> {} -> \x = truncated +NOTICE: EUC_JP CS1: \x8002 -> {32770} -> \x8002 = OK +NOTICE: EUC_JP CS2, short: \x8e -> {} -> \x = truncated +NOTICE: EUC_JP CS2: \x8e02 -> {36354} -> \x8e02 = OK +NOTICE: EUC_JP CS3, short: \x8f -> {} -> \x = truncated +NOTICE: EUC_JP CS3, short: \x8f02 -> {} -> \x = truncated +NOTICE: EUC_JP CS3: \x8f0203 -> {9372163} -> \x8f0203 = OK +NOTICE: EUC_CN ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: EUC_CN CS1, short: \x80 -> {} -> \x = truncated +NOTICE: EUC_CN CS1: \x8002 -> {32770} -> \x8002 = OK +NOTICE: EUC_CN CS2, short: \x8e -> {} -> \x = truncated +NOTICE: EUC_CN CS2, short: \x8e02 -> {} -> \x = truncated +NOTICE: EUC_CN CS2: \x8e0203 -> {9306627} -> \x8e0203 = OK +NOTICE: EUC_CN CS3, short: \x8f -> {} -> \x = truncated +NOTICE: EUC_CN CS3, short: \x8f02 -> {} -> \x = truncated +NOTICE: EUC_CN CS3: \x8f0203 -> {9372163} -> \x8f0203 = OK +NOTICE: EUC_TW ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: EUC_TW CS1, short: \x80 -> {} -> \x = truncated +NOTICE: EUC_TW CS1: \x8002 -> {32770} -> \x8002 = OK +NOTICE: EUC_TW CS2, short: \x8e -> {} -> \x = truncated +NOTICE: EUC_TW CS2, short: \x8e02 -> {} -> \x = truncated +NOTICE: EUC_TW CS2, short: \x8e0203 -> {} -> \x = truncated +NOTICE: EUC_TW CS2: \x8e020304 -> {-1912470780} -> \x8e020304 = OK +NOTICE: EUC_TW CS3, short: \x8f -> {} -> \x = truncated +NOTICE: EUC_TW CS3, short: \x8f02 -> {} -> \x = truncated +NOTICE: EUC_TW CS3: \x8f0203 -> {9372163} -> \x8f0203 = OK +NOTICE: UTF8 ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: UTF8 2 byte, short: \xdf -> {} -> \x = truncated +NOTICE: UTF8 2 byte: \xdf82 -> {1986} -> \xdf82 = OK +NOTICE: UTF8 3 byte, short: \xef -> {} -> \x = truncated +NOTICE: UTF8 3 byte, short: \xef82 -> {} -> \x = truncated +NOTICE: UTF8 3 byte: \xef8283 -> {61571} -> \xef8283 = OK +NOTICE: UTF8 4 byte, short: \xf7 -> {} -> \x = truncated +NOTICE: UTF8 4 byte, short: \xf782 -> {} -> \x = truncated +NOTICE: UTF8 4 byte, short: \xf78283 -> {} -> \x = truncated +NOTICE: UTF8 4 byte: \xf7828384 -> {1843396} -> \xf7828384 = OK +NOTICE: UTF8 5 byte, unsupported: \xfb -> {251} -> \xc3bb = failed +NOTICE: UTF8 5 byte, unsupported: \xfb82 -> {251,130} -> \xc3bbc282 = failed +NOTICE: UTF8 5 byte, unsupported: \xfb8283 -> {251,130,131} -> \xc3bbc282c283 = failed +NOTICE: UTF8 5 byte, unsupported: \xfb828384 -> {251,130,131,132} -> \xc3bbc282c283c284 = failed +NOTICE: UTF8 5 byte, unsupported: \xfb82838485 -> {251,130,131,132,133} -> \xc3bbc282c283c284c285 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd -> {253} -> \xc3bd = failed +NOTICE: UTF8 6 byte, unsupported: \xfd82 -> {253,130} -> \xc3bdc282 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd8283 -> {253,130,131} -> \xc3bdc282c283 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd828384 -> {253,130,131,132} -> \xc3bdc282c283c284 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd82838485 -> {253,130,131,132,133} -> \xc3bdc282c283c284c285 = failed +NOTICE: UTF8 6 byte, unsupported: \xfd8283848586 -> {253,130,131,132,133,134} -> \xc3bdc282c283c284c285c286 = failed +NOTICE: MULE_INTERNAL ASCII: \x61 -> {97} -> \x61 = OK +NOTICE: MULE_INTERNAL LC1, short: \x81 -> {} -> \x = truncated +NOTICE: MULE_INTERNAL LC1: \x8182 -> {8454274} -> \x8182 = OK +NOTICE: MULE_INTERNAL LC2, short: \x90 -> {} -> \x = truncated +NOTICE: MULE_INTERNAL LC2, short: \x9082 -> {} -> \x = truncated +NOTICE: MULE_INTERNAL LC2: \x908283 -> {9470595} -> \x908283 = OK + ?column? +---------- + t +(1 row) + +-- substring fetches a slice of a toasted value; unused tail of that slice is +-- an incomplete char (bug #19406) +CREATE TABLE toast_3b_utf8 (c text); +INSERT INTO toast_3b_utf8 VALUES (repeat(U&'\2026', 4000)); +SELECT SUBSTRING(c FROM 1 FOR 1) FROM toast_3b_utf8; + substring +----------- + … +(1 row) + +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; + substring +----------- + +(1 row) + +-- diagnose incomplete char iff within the substring +UPDATE toast_3b_utf8 SET c = c || test_bytea_to_text('\xe280'); +SELECT SUBSTRING(c FROM 4000 FOR 1) FROM toast_3b_utf8; + substring +----------- + … +(1 row) + +SELECT SUBSTRING(c FROM 4001 FOR 1) FROM toast_3b_utf8; +ERROR: invalid byte sequence for encoding "UTF8": 0xe2 0x80 +-- substring needing last byte of its slice_size +ALTER TABLE toast_3b_utf8 RENAME TO toast_4b_utf8; +UPDATE toast_4b_utf8 SET c = repeat(U&'\+01F680', 3000); +SELECT SUBSTRING(c FROM 3000 FOR 1) FROM toast_4b_utf8; + substring +----------- + 🚀 +(1 row) + +DROP TABLE encoding_tests; +DROP TABLE toast_4b_utf8; +DROP FUNCTION test_encoding; +DROP FUNCTION test_wchars_to_text; +DROP FUNCTION test_text_to_wchars; +DROP FUNCTION test_valid_server_encoding; +DROP FUNCTION test_mblen_func; +DROP FUNCTION test_bytea_to_text; +DROP FUNCTION test_text_to_bytea; +-- substring slow path: multi-byte escape char vs. multi-byte pattern char. +SELECT SUBSTRING('a' SIMILAR U&'\00AC' ESCAPE U&'\00A7'); + substring +----------- + +(1 row) + +-- Levenshtein distance metric: exercise character length cache. +SELECT U&"real\00A7_name" FROM (select 1) AS x(real_name); +ERROR: column "real§_name" does not exist +LINE 1: SELECT U&"real\00A7_name" FROM (select 1) AS x(real_name); + ^ +HINT: Perhaps you meant to reference the column "x.real_name". +-- JSON errcontext: truncate long data. +SELECT repeat(U&'\00A7', 30)::json; +ERROR: invalid input syntax for type json +DETAIL: Token "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§" is invalid. +CONTEXT: JSON data, line 1: ...§§§§§§§§§§§§§§§§§§§§§§§§ diff --git a/src/test/regress/output/encoding_1.source b/src/test/regress/output/encoding_1.source new file mode 100644 index 00000000000..a5b02090901 --- /dev/null +++ b/src/test/regress/output/encoding_1.source @@ -0,0 +1,4 @@ +/* skip test if not UTF8 server encoding */ +SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset +\if :skip_test +\quit diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index c2773034647..8fbb0fb4981 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -30,7 +30,7 @@ test: strings numerology point lseg line box path polygon circle date time timet # horology depends on interval, timetz, timestamp, timestamptz # opr_sanity depends on create_function_0 # ---------- -test: geometry horology tstypes regex type_sanity opr_sanity misc_sanity comments expressions unicode xid mvcc database +test: geometry horology tstypes regex type_sanity opr_sanity misc_sanity comments expressions unicode xid mvcc database encoding euc_kr ##merge maybe result type_sanity failed test: merge # ---------- @@ -99,6 +99,10 @@ test: select_parallel test: write_parallel test: vacuum_parallel +# Run this alone, because concurrent DROP TABLE would make non-superuser +# "ANALYZE;" fail with "relation with OID $n does not exist". +test: maintain_every + # no relation related tests can be put in this group test: publication subscription @@ -118,6 +122,7 @@ test: json jsonb json_encoding jsonpath jsonpath_encoding jsonb_jsonpath # so keep this parallel group to at most 19 tests # ---------- test: plancache limit plpgsql copy2 temp domain rangefuncs prepare conversion truncate alter_table sequence polymorphism rowtypes returning largeobject with xml +test: alter_table_view_rebuild # ---------- # Another group of parallel tests diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 0a0153e5551..436af638a0d 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -634,7 +634,9 @@ PG_FUNCTION_INFO_V1(get_environ); Datum get_environ(PG_FUNCTION_ARGS) { +#if !defined(WIN32) || defined(_MSC_VER) extern char **environ; +#endif int nvals = 0; ArrayType *result; Datum *env; @@ -1270,6 +1272,145 @@ test_enc_conversion(PG_FUNCTION_ARGS) PG_RETURN_DATUM(HeapTupleGetDatum(tuple)); } +/* Convert bytea to text without validation for corruption tests from SQL. */ +PG_FUNCTION_INFO_V1(test_bytea_to_text); +Datum +test_bytea_to_text(PG_FUNCTION_ARGS) +{ + PG_RETURN_TEXT_P(PG_GETARG_BYTEA_PP(0)); +} + +/* And the reverse. */ +PG_FUNCTION_INFO_V1(test_text_to_bytea); +Datum +test_text_to_bytea(PG_FUNCTION_ARGS) +{ + PG_RETURN_BYTEA_P(PG_GETARG_TEXT_PP(0)); +} + +/* Corruption tests in C. */ +PG_FUNCTION_INFO_V1(test_mblen_func); +Datum +test_mblen_func(PG_FUNCTION_ARGS) +{ + const char *func = text_to_cstring(PG_GETARG_BYTEA_PP(0)); + const char *encoding = text_to_cstring(PG_GETARG_BYTEA_PP(1)); + text *string = PG_GETARG_BYTEA_PP(2); + int offset = PG_GETARG_INT32(3); + const char *data = VARDATA_ANY(string); + size_t size = VARSIZE_ANY_EXHDR(string); + int result = 0; + + if (strcmp(func, "pg_mblen_unbounded") == 0) + result = pg_mblen_unbounded(data + offset); + else if (strcmp(func, "pg_mblen_cstr") == 0) + result = pg_mblen_cstr(data + offset); + else if (strcmp(func, "pg_mblen_with_len") == 0) + result = pg_mblen_with_len(data + offset, size - offset); + else if (strcmp(func, "pg_mblen_range") == 0) + result = pg_mblen_range(data + offset, data + size); + else if (strcmp(func, "pg_encoding_mblen") == 0) + result = pg_encoding_mblen(pg_char_to_encoding(encoding), data + offset); + else + elog(ERROR, "unknown function"); + + PG_RETURN_INT32(result); +} + +PG_FUNCTION_INFO_V1(test_text_to_wchars); +Datum +test_text_to_wchars(PG_FUNCTION_ARGS) +{ + const char *encoding_name = text_to_cstring(PG_GETARG_BYTEA_PP(0)); + text *string = PG_GETARG_TEXT_PP(1); + const char *data = VARDATA_ANY(string); + size_t size = VARSIZE_ANY_EXHDR(string); + pg_wchar *wchars = palloc(sizeof(pg_wchar) * (size + 1)); + Datum *datums; + int wlen; + int encoding; + + encoding = pg_char_to_encoding(encoding_name); + if (encoding < 0) + elog(ERROR, "unknown encoding name: %s", encoding_name); + + if (size > 0) + { + datums = palloc(sizeof(Datum) * size); + wlen = pg_encoding_mb2wchar_with_len(encoding, + data, + wchars, + size); + Assert(wlen >= 0); + Assert(wlen <= size); + Assert(wchars[wlen] == 0); + + for (int i = 0; i < wlen; ++i) + datums[i] = UInt32GetDatum(wchars[i]); + } + else + { + datums = NULL; + wlen = 0; + } + + PG_RETURN_ARRAYTYPE_P(construct_array_builtin(datums, wlen, INT4OID)); +} + +PG_FUNCTION_INFO_V1(test_wchars_to_text); +Datum +test_wchars_to_text(PG_FUNCTION_ARGS) +{ + const char *encoding_name = text_to_cstring(PG_GETARG_BYTEA_PP(0)); + ArrayType *array = PG_GETARG_ARRAYTYPE_P(1); + Datum *datums; + bool *nulls; + char *mb; + text *result; + int wlen; + int bytes; + int encoding; + + encoding = pg_char_to_encoding(encoding_name); + if (encoding < 0) + elog(ERROR, "unknown encoding name: %s", encoding_name); + + deconstruct_array_builtin(array, INT4OID, &datums, &nulls, &wlen); + + if (wlen > 0) + { + pg_wchar *wchars = palloc(sizeof(pg_wchar) * wlen); + + for (int i = 0; i < wlen; ++i) + { + if (nulls[i]) + elog(ERROR, "unexpected NULL in array"); + wchars[i] = DatumGetInt32(datums[i]); + } + + mb = palloc(pg_encoding_max_length(encoding) * wlen + 1); + bytes = pg_encoding_wchar2mb_with_len(encoding, wchars, mb, wlen); + } + else + { + mb = ""; + bytes = 0; + } + + result = palloc(bytes + VARHDRSZ); + SET_VARSIZE(result, bytes + VARHDRSZ); + memcpy(VARDATA(result), mb, bytes); + + PG_RETURN_TEXT_P(result); +} + +PG_FUNCTION_INFO_V1(test_valid_server_encoding); +Datum +test_valid_server_encoding(PG_FUNCTION_ARGS) +{ + PG_RETURN_BOOL(pg_valid_server_encoding(text_to_cstring(PG_GETARG_TEXT_PP(0))) >= 0); +} + /* Provide SQL access to IsBinaryCoercible() */ PG_FUNCTION_INFO_V1(binary_coercible); Datum diff --git a/src/test/regress/sql/.gitignore b/src/test/regress/sql/.gitignore index fe14af6ae7a..fb014e8c826 100644 --- a/src/test/regress/sql/.gitignore +++ b/src/test/regress/sql/.gitignore @@ -3,6 +3,7 @@ /create_function_0.sql /create_function_1.sql /create_function_2.sql +/encoding.sql /largeobject.sql /misc.sql /security_label.sql diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index 9a943ce77fc..7760210280f 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -2180,13 +2180,15 @@ SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment F -- filenode function call can return NULL for a relation dropped concurrently -- with the call's surrounding query, so ignore a NULL mapped_oid for -- relations that no longer exist after all calls finish. +-- Temporary relations are ignored, as not supported by pg_filenode_relation(). CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid -WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; - +WHERE relkind IN ('r', 'i', 'S', 't', 'm') + AND relpersistence != 't' + AND mapped_oid IS DISTINCT FROM oid; SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT NULL; @@ -2792,6 +2794,15 @@ ALTER TABLE range_parted2 DETACH PARTITION part_rp100 CONCURRENTLY; \d part_rp100 DROP TABLE range_parted2; +-- Test that hash partitions continue to work after they're concurrently +-- detached (bugs #18371, #19070) +CREATE TABLE hash_parted2 (a int) PARTITION BY HASH(a); +CREATE TABLE part_hp PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 2, REMAINDER 0); +ALTER TABLE hash_parted2 DETACH PARTITION part_hp CONCURRENTLY; +DROP TABLE hash_parted2; +INSERT INTO part_hp VALUES (1); +DROP TABLE part_hp; + -- Check ALTER TABLE commands for partitioned tables and partitions -- cannot add/drop column to/from *only* the parent @@ -3022,6 +3033,23 @@ drop table attbl, atref; +/* Test case for bug #18970 */ + +create table attbl(a int); +create table atref(b attbl check ((b).a is not null)); +alter table attbl alter column a type numeric; -- someday this should work +alter table atref drop constraint atref_b_check; + +create statistics atref_stat on ((b).a is not null) from atref; +alter table attbl alter column a type numeric; -- someday this should work +drop statistics atref_stat; + +create index atref_idx on atref (((b).a)); +alter table attbl alter column a type numeric; -- someday this should work +drop table attbl, atref; + +/* End test case for bug #18970 */ + -- Test that ALTER TABLE rewrite preserves a clustered index -- for normal indexes and indexes on constraints. create table alttype_cluster (a int); diff --git a/src/test/regress/sql/alter_table_view_rebuild.sql b/src/test/regress/sql/alter_table_view_rebuild.sql new file mode 100644 index 00000000000..e481b143eaf --- /dev/null +++ b/src/test/regress/sql/alter_table_view_rebuild.sql @@ -0,0 +1,314 @@ +-- +-- Tests for auto-rebuild of dependent views on ALTER TABLE ... ALTER COLUMN TYPE +-- + +-- Setup +CREATE SCHEMA atvr; +SET search_path = atvr, public; + +-- =========================================================================== +-- Test 1: Basic single view rebuild +-- =========================================================================== +CREATE TABLE t1 (a int, b text); +INSERT INTO t1 VALUES (1, 'hello'), (2, 'world'); +CREATE VIEW v1 AS SELECT a, b FROM t1; + +SELECT a, pg_typeof(a) FROM v1 ORDER BY a; + +ALTER TABLE t1 ALTER COLUMN a TYPE bigint; + +-- View should still exist and work, column type should be bigint now +SELECT a, pg_typeof(a) FROM v1 ORDER BY a; + +-- Table column type changed +SELECT pg_typeof(a) FROM t1 LIMIT 1; + +DROP VIEW v1; +DROP TABLE t1; + +-- =========================================================================== +-- Test 2: View with expression on altered column +-- =========================================================================== +CREATE TABLE t2 (a int, b text); +INSERT INTO t2 VALUES (10, 'foo'), (20, 'bar'); +CREATE VIEW v2 AS SELECT a * 2 AS double_a, b FROM t2; + +SELECT double_a, pg_typeof(double_a) FROM v2 ORDER BY double_a; + +ALTER TABLE t2 ALTER COLUMN a TYPE bigint; + +SELECT double_a, pg_typeof(double_a) FROM v2 ORDER BY double_a; + +DROP VIEW v2; +DROP TABLE t2; + +-- =========================================================================== +-- Test 3: View with WHERE clause on altered column +-- =========================================================================== +CREATE TABLE t3 (a int, b text); +INSERT INTO t3 VALUES (1, 'a'), (2, 'b'), (3, 'c'); +CREATE VIEW v3 AS SELECT a, b FROM t3 WHERE a > 1; + +SELECT * FROM v3 ORDER BY a; + +ALTER TABLE t3 ALTER COLUMN a TYPE bigint; + +SELECT * FROM v3 ORDER BY a; + +DROP VIEW v3; +DROP TABLE t3; + +-- =========================================================================== +-- Test 4: View with GROUP BY and aggregates +-- =========================================================================== +CREATE TABLE t4 (a int, b text, c int); +INSERT INTO t4 VALUES (1, 'x', 10), (1, 'y', 20), (2, 'x', 30); +CREATE VIEW v4 AS SELECT a, sum(c) AS total FROM t4 GROUP BY a; + +SELECT a, total, pg_typeof(a) FROM v4 ORDER BY a; + +ALTER TABLE t4 ALTER COLUMN a TYPE bigint; + +SELECT a, total, pg_typeof(a) FROM v4 ORDER BY a; + +DROP VIEW v4; +DROP TABLE t4; + +-- =========================================================================== +-- Test 5: Cascading views (v5b depends on v5a depends on t5) +-- =========================================================================== +CREATE TABLE t5 (a int, b text); +INSERT INTO t5 VALUES (1, 'alpha'), (2, 'beta'); +CREATE VIEW v5a AS SELECT a, b FROM t5; +CREATE VIEW v5b AS SELECT a * 10 AS aa, b FROM v5a; + +SELECT aa, pg_typeof(aa) FROM v5b ORDER BY aa; + +ALTER TABLE t5 ALTER COLUMN a TYPE bigint; + +-- Both views should be rebuilt +SELECT a, pg_typeof(a) FROM v5a ORDER BY a; +SELECT aa, pg_typeof(aa) FROM v5b ORDER BY aa; + +DROP VIEW v5b; +DROP VIEW v5a; +DROP TABLE t5; + +-- =========================================================================== +-- Test 6: Deep view chain (v6c -> v6b -> v6a -> t6) +-- =========================================================================== +CREATE TABLE t6 (a int, b text); +INSERT INTO t6 VALUES (5, 'deep'); +CREATE VIEW v6a AS SELECT a, b FROM t6; +CREATE VIEW v6b AS SELECT a + 1 AS a1, b FROM v6a; +CREATE VIEW v6c AS SELECT a1 + 1 AS a2, b FROM v6b; + +SELECT a2, pg_typeof(a2) FROM v6c; + +ALTER TABLE t6 ALTER COLUMN a TYPE bigint; + +SELECT a, pg_typeof(a) FROM v6a; +SELECT a1, pg_typeof(a1) FROM v6b; +SELECT a2, pg_typeof(a2) FROM v6c; + +DROP VIEW v6c; +DROP VIEW v6b; +DROP VIEW v6a; +DROP TABLE t6; + +-- =========================================================================== +-- Test 7: Multiple views on same table, all rebuilt +-- =========================================================================== +CREATE TABLE t7 (a int, b text, c float); +INSERT INTO t7 VALUES (1, 'one', 1.1), (2, 'two', 2.2); +CREATE VIEW v7a AS SELECT a, b FROM t7; +CREATE VIEW v7b AS SELECT a, c FROM t7; +CREATE VIEW v7c AS SELECT a, b, c FROM t7 WHERE a = 1; + +SELECT pg_typeof(a) FROM v7a LIMIT 1; +SELECT pg_typeof(a) FROM v7b LIMIT 1; +SELECT pg_typeof(a) FROM v7c LIMIT 1; + +ALTER TABLE t7 ALTER COLUMN a TYPE bigint; + +SELECT pg_typeof(a) FROM v7a LIMIT 1; +SELECT pg_typeof(a) FROM v7b LIMIT 1; +SELECT pg_typeof(a) FROM v7c LIMIT 1; + +-- All views still return correct data +SELECT * FROM v7a ORDER BY a; +SELECT * FROM v7b ORDER BY a; +SELECT * FROM v7c ORDER BY a; + +DROP VIEW v7c; +DROP VIEW v7b; +DROP VIEW v7a; +DROP TABLE t7; + +-- =========================================================================== +-- Test 8: security_barrier option preserved +-- =========================================================================== +CREATE TABLE t8 (a int, b text); +INSERT INTO t8 VALUES (1, 'secret'), (2, 'public'); +CREATE VIEW v8 WITH (security_barrier = true) AS SELECT a, b FROM t8; + +SELECT relname, reloptions FROM pg_class WHERE relname = 'v8'; + +ALTER TABLE t8 ALTER COLUMN a TYPE bigint; + +-- security_barrier option preserved after rebuild +SELECT relname, reloptions FROM pg_class WHERE relname = 'v8'; +SELECT a, pg_typeof(a) FROM v8 ORDER BY a; + +DROP VIEW v8; +DROP TABLE t8; + +-- =========================================================================== +-- Test 9: WITH LOCAL CHECK OPTION preserved +-- =========================================================================== +CREATE TABLE t9 (a int, b text); +INSERT INTO t9 VALUES (1, 'a'), (5, 'b'); +CREATE VIEW v9 AS SELECT a, b FROM t9 WHERE a < 10 WITH LOCAL CHECK OPTION; + +-- Verify check option is set (stored in reloptions) +SELECT relname, reloptions FROM pg_class WHERE relname = 'v9'; + +ALTER TABLE t9 ALTER COLUMN a TYPE bigint; + +-- Check option should be preserved +SELECT relname, reloptions FROM pg_class WHERE relname = 'v9'; + +-- Insert should still be checked +INSERT INTO v9 VALUES (3, 'ok'); +SELECT * FROM t9 ORDER BY a; +-- This should fail due to check option +INSERT INTO v9 VALUES (20, 'fail'); + +DROP VIEW v9; +DROP TABLE t9; + +-- =========================================================================== +-- Test 10: WITH CASCADED CHECK OPTION preserved +-- =========================================================================== +CREATE TABLE t10 (a int, b text); +INSERT INTO t10 VALUES (1, 'a'); +CREATE VIEW v10 AS SELECT a, b FROM t10 WHERE a < 100 WITH CASCADED CHECK OPTION; + +SELECT relname, reloptions FROM pg_class WHERE relname = 'v10'; + +ALTER TABLE t10 ALTER COLUMN a TYPE bigint; + +SELECT relname, reloptions FROM pg_class WHERE relname = 'v10'; + +DROP VIEW v10; +DROP TABLE t10; + +-- =========================================================================== +-- Test 11: USING clause with view rebuild +-- =========================================================================== +CREATE TABLE t11 (a text, b int); +INSERT INTO t11 VALUES ('10', 1), ('20', 2); +CREATE VIEW v11 AS SELECT a, b FROM t11; + +SELECT a, pg_typeof(a) FROM v11 ORDER BY b; + +ALTER TABLE t11 ALTER COLUMN a TYPE int USING a::int; + +SELECT a, pg_typeof(a) FROM v11 ORDER BY a; + +DROP VIEW v11; +DROP TABLE t11; + +-- =========================================================================== +-- Test 12: Failure case - view uses operator not defined for new type +-- ALTER TABLE should roll back, original types preserved +-- =========================================================================== +CREATE TABLE t12 (a int, b text); +INSERT INTO t12 VALUES (1, 'test'), (2, 'data'); +CREATE VIEW v12 AS SELECT a + 1 AS ap1 FROM t12; -- + not defined for bool + +SELECT a, pg_typeof(a) FROM t12; +SELECT ap1, pg_typeof(ap1) FROM v12 ORDER BY ap1; + +-- This should fail: int + 1 cannot be re-expressed as bool + 1 +ALTER TABLE t12 ALTER COLUMN a TYPE bool USING (a > 0); + +-- Table and view should be unchanged (rolled back) +SELECT a, pg_typeof(a) FROM t12 ORDER BY a; +SELECT ap1, pg_typeof(ap1) FROM v12 ORDER BY ap1; + +DROP VIEW v12; +DROP TABLE t12; + +-- =========================================================================== +-- Test 13: Non-view rule still errors (original behavior preserved) +-- =========================================================================== +CREATE TABLE t13 (a int, b text); +CREATE TABLE t13_log (a int, b text); +CREATE RULE t13_insert_rule AS ON INSERT TO t13 + DO ALSO INSERT INTO t13_log VALUES (NEW.a, NEW.b); + +-- Should still error: non-view rule depends on column a +ALTER TABLE t13 ALTER COLUMN a TYPE bigint; + +DROP RULE t13_insert_rule ON t13; +DROP TABLE t13_log; +DROP TABLE t13; + +-- =========================================================================== +-- Test 14: ALTER multiple columns in single statement, views rebuilt once +-- =========================================================================== +CREATE TABLE t14 (a int, b int, c text); +INSERT INTO t14 VALUES (1, 10, 'x'), (2, 20, 'y'); +CREATE VIEW v14 AS SELECT a, b, c FROM t14; + +SELECT a, pg_typeof(a), b, pg_typeof(b) FROM v14 ORDER BY a; + +ALTER TABLE t14 ALTER COLUMN a TYPE bigint, ALTER COLUMN b TYPE bigint; + +SELECT a, pg_typeof(a), b, pg_typeof(b) FROM v14 ORDER BY a; + +DROP VIEW v14; +DROP TABLE t14; + +-- =========================================================================== +-- Test 15: View not referencing altered column - should still work +-- (view depends on relation, not column, via different rules) +-- =========================================================================== +CREATE TABLE t15 (a int, b text, c int); +INSERT INTO t15 VALUES (1, 'hello', 100); +CREATE VIEW v15 AS SELECT b, c FROM t15; -- does not use column a + +SELECT * FROM v15; + +ALTER TABLE t15 ALTER COLUMN a TYPE bigint; + +-- View on non-altered columns is unaffected +SELECT * FROM v15; + +DROP VIEW v15; +DROP TABLE t15; + +-- =========================================================================== +-- Test 16: View in non-default schema +-- =========================================================================== +CREATE SCHEMA atvr2; +CREATE TABLE atvr.t16 (a int, b text); +INSERT INTO atvr.t16 VALUES (1, 'one'), (2, 'two'); +CREATE VIEW atvr2.v16 AS SELECT a, b FROM atvr.t16; + +SELECT a, pg_typeof(a) FROM atvr2.v16 ORDER BY a; + +ALTER TABLE atvr.t16 ALTER COLUMN a TYPE bigint; + +SELECT a, pg_typeof(a) FROM atvr2.v16 ORDER BY a; + +DROP VIEW atvr2.v16; +DROP TABLE atvr.t16; +DROP SCHEMA atvr2; + +-- =========================================================================== +-- Cleanup +-- =========================================================================== +SET search_path = public; +DROP SCHEMA atvr CASCADE; diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql index a4f8299fa98..da7afb62b59 100644 --- a/src/test/regress/sql/arrays.sql +++ b/src/test/regress/sql/arrays.sql @@ -474,6 +474,10 @@ select array[]::text[]; select '[0:1]={1.1,2.2}'::float8[]; -- all of the above should be accepted +-- some day we might allow these cases, but for now they're errors: +select array[]::oidvector; +select array[]::int2vector; + -- tests for array aggregates CREATE TEMP TABLE arraggtest ( f1 INT[], f2 TEXT[][], f3 FLOAT[]); @@ -659,6 +663,28 @@ select array_replace(array['AB',NULL,'CDE'],NULL,'12'); select array(select array[i,i/2] from generate_series(1,5) i); select array(select array['Hello', i::text] from generate_series(9,11) i); +-- int2vector and oidvector should be treated as scalar types for this purpose +select pg_typeof(array(select '11 22 33'::int2vector from generate_series(1,5))); +select array(select '11 22 33'::int2vector from generate_series(1,5)); +select unnest(array(select '11 22 33'::int2vector from generate_series(1,5))); +select pg_typeof(array(select '11 22 33'::oidvector from generate_series(1,5))); +select array(select '11 22 33'::oidvector from generate_series(1,5)); +select unnest(array(select '11 22 33'::oidvector from generate_series(1,5))); + +-- array[] should do the same +select pg_typeof(array['11 22 33'::int2vector]); +select array['11 22 33'::int2vector]; +select pg_typeof(unnest(array['11 22 33'::int2vector])); +select unnest(array['11 22 33'::int2vector]); +select pg_typeof(unnest('11 22 33'::int2vector)); +select unnest('11 22 33'::int2vector); +select pg_typeof(array['11 22 33'::oidvector]); +select array['11 22 33'::oidvector]; +select pg_typeof(unnest(array['11 22 33'::oidvector])); +select unnest(array['11 22 33'::oidvector]); +select pg_typeof(unnest('11 22 33'::oidvector)); +select unnest('11 22 33'::oidvector); + -- Insert/update on a column that is array of composite create temp table t1 (f1 int8_tbl[]); diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql index d22b065885f..a9e6fb6a10f 100644 --- a/src/test/regress/sql/conversion.sql +++ b/src/test/regress/sql/conversion.sql @@ -154,11 +154,14 @@ insert into gb18030_inputs values ('\x666f6f84309c38', 'valid, translates to UTF-8 by mapping function'), ('\x666f6f84309c', 'incomplete char '), ('\x666f6f84309c0a', 'incomplete char, followed by newline '), + ('\x666f6f84', 'incomplete char at end'), ('\x666f6f84309c3800', 'invalid, NUL byte'), ('\x666f6f84309c0038', 'invalid, NUL byte'); --- Test GB18030 verification -select description, inbytes, (test_conv(inbytes, 'gb18030', 'gb18030')).* from gb18030_inputs; +-- Test GB18030 verification. Round-trip through text so the backing of the +-- bytea values is palloc, not shared_buffers. This lets Valgrind detect +-- reads past the end. +select description, inbytes, (test_conv(inbytes::text::bytea, 'gb18030', 'gb18030')).* from gb18030_inputs; -- Test conversions from GB18030 select description, inbytes, (test_conv(inbytes, 'gb18030', 'utf8')).* from gb18030_inputs; diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index 7fa250e6906..b4c49405ae2 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -374,6 +374,9 @@ CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops); CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops) WITH (fillfactor=60); +CREATE INDEX hash_i4_partial_index ON hash_i4_heap USING hash (seqno) + WHERE seqno = 9999; + CREATE UNLOGGED TABLE unlogged_hash_table (id int4); CREATE INDEX unlogged_hash_index ON unlogged_hash_table USING hash (id int4_ops); DROP TABLE unlogged_hash_table; @@ -610,7 +613,7 @@ DROP TABLE cwi_test; CREATE TABLE syscol_table (a INT); -- System columns cannot be indexed -CREATE INDEX ON syscolcol_table (ctid); +CREATE INDEX ON syscol_table (ctid); -- nor used in expressions CREATE INDEX ON syscol_table ((ctid >= '(1000,0)')); diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql index cc41f58ba22..fa198339ae9 100644 --- a/src/test/regress/sql/create_table.sql +++ b/src/test/regress/sql/create_table.sql @@ -304,6 +304,14 @@ CREATE TABLE withoid() WITH (oids = true); CREATE TEMP TABLE withoutoid() WITHOUT OIDS; DROP TABLE withoutoid; CREATE TEMP TABLE withoutoid() WITH (oids = false); DROP TABLE withoutoid; +-- temporary tables are ignored by pg_filenode_relation(). +CREATE TEMP TABLE relation_filenode_check(c1 int); +SELECT relpersistence, + pg_filenode_relation (reltablespace, pg_relation_filenode(oid)) + FROM pg_class + WHERE relname = 'relation_filenode_check'; +DROP TABLE relation_filenode_check; + -- check restriction with default expressions -- invalid use of column reference in default expressions CREATE TABLE default_expr_column (id int DEFAULT (id)); diff --git a/src/test/regress/sql/euc_kr.sql b/src/test/regress/sql/euc_kr.sql new file mode 100644 index 00000000000..1851b2a8c14 --- /dev/null +++ b/src/test/regress/sql/euc_kr.sql @@ -0,0 +1,12 @@ +-- This test is about EUC_KR encoding, chosen as perhaps the most prevalent +-- non-UTF8, multibyte encoding as of 2026-01. Since UTF8 can represent all +-- of EUC_KR, also run the test in UTF8. +SELECT getdatabaseencoding() NOT IN ('EUC_KR', 'UTF8') AS skip_test \gset +\if :skip_test +\quit +\endif + +-- Exercise is_multibyte_char_in_char (non-UTF8) slow path. +SELECT POSITION( + convert_from('\xbcf6c7d0', 'EUC_KR') IN + convert_from('\xb0fac7d02c20bcf6c7d02c20b1e2bcfa2c20bbee', 'EUC_KR')); diff --git a/src/test/regress/sql/fast_default.sql b/src/test/regress/sql/fast_default.sql index dc9df78a35d..1b37b61bf66 100644 --- a/src/test/regress/sql/fast_default.sql +++ b/src/test/regress/sql/fast_default.sql @@ -237,6 +237,50 @@ SELECT comp(); DROP TABLE T; +-- Test domains with default value for table rewrite. +CREATE DOMAIN domain1 AS int DEFAULT 11; -- constant +CREATE DOMAIN domain2 AS int DEFAULT 10 + (random() * 10)::int; -- volatile +CREATE DOMAIN domain3 AS text DEFAULT foo(4); -- stable +CREATE DOMAIN domain4 AS text[] + DEFAULT ('{"This", "is", "' || foo(4) || '","the", "real", "world"}')::TEXT[]; + +CREATE TABLE t2 (a domain1); +INSERT INTO t2 VALUES (1),(2); + +-- no table rewrite +ALTER TABLE t2 ADD COLUMN b domain1 default 3; + +SELECT attnum, attname, atthasmissing, atthasdef, attmissingval +FROM pg_attribute +WHERE attnum > 0 AND attrelid = 't2'::regclass +ORDER BY attnum; + +-- table rewrite should happen +ALTER TABLE t2 ADD COLUMN c domain3 default left(random()::text,3); + +-- no table rewrite +ALTER TABLE t2 ADD COLUMN d domain4; + +SELECT attnum, attname, atthasmissing, atthasdef, attmissingval +FROM pg_attribute +WHERE attnum > 0 AND attrelid = 't2'::regclass +ORDER BY attnum; + +-- table rewrite should happen +ALTER TABLE t2 ADD COLUMN e domain2; + +SELECT attnum, attname, atthasmissing, atthasdef, attmissingval +FROM pg_attribute +WHERE attnum > 0 AND attrelid = 't2'::regclass +ORDER BY attnum; + +SELECT a, b, length(c) = 3 as c_ok, d, e >= 10 as e_ok FROM t2; + +DROP TABLE t2; +DROP DOMAIN domain1; +DROP DOMAIN domain2; +DROP DOMAIN domain3; +DROP DOMAIN domain4; DROP FUNCTION foo(INT); -- Fall back to full rewrite for volatile expressions diff --git a/src/test/regress/sql/foreign_key.sql b/src/test/regress/sql/foreign_key.sql index 7af7d562c7b..2590df3c5e1 100644 --- a/src/test/regress/sql/foreign_key.sql +++ b/src/test/regress/sql/foreign_key.sql @@ -943,8 +943,10 @@ COMMIT; -- try additional syntax ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE; --- illegal option +-- illegal options ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT; +ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID; -- test order of firing of FK triggers when several RI-induced changes need to -- be made to the same row. This was broken by subtransaction-related @@ -1436,29 +1438,55 @@ CREATE TABLE part33_self_fk ( ); ALTER TABLE part3_self_fk ATTACH PARTITION part33_self_fk FOR VALUES FROM (30) TO (40); -SELECT cr.relname, co.conname, co.contype, co.convalidated, +-- verify that this constraint works +INSERT INTO parted_self_fk VALUES (1, NULL), (2, NULL), (3, NULL); +INSERT INTO parted_self_fk VALUES (10, 1), (11, 2), (12, 3) RETURNING tableoid::regclass; + +INSERT INTO parted_self_fk VALUES (4, 5); -- error: referenced doesn't exist +DELETE FROM parted_self_fk WHERE id = 1 RETURNING *; -- error: reference remains + +SELECT cr.relname, co.conname, co.convalidated, p.conname AS conparent, p.convalidated, cf.relname AS foreignrel FROM pg_constraint co JOIN pg_class cr ON cr.oid = co.conrelid LEFT JOIN pg_class cf ON cf.oid = co.confrelid LEFT JOIN pg_constraint p ON p.oid = co.conparentid -WHERE cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) -ORDER BY co.contype, cr.relname, co.conname, p.conname; +WHERE co.contype = 'f' AND + cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) +ORDER BY cr.relname, co.conname, p.conname; -- detach and re-attach multiple times just to ensure everything is kosher ALTER TABLE parted_self_fk DETACH PARTITION part2_self_fk; + +\d+ part2_self_fk + +INSERT INTO part2_self_fk VALUES (16, 9); -- good, but it'll prevent the attach below +ALTER TABLE parted_self_fk ATTACH PARTITION part2_self_fk FOR VALUES FROM (10) TO (20); + +DELETE FROM part2_self_fk WHERE id = 16; ALTER TABLE parted_self_fk ATTACH PARTITION part2_self_fk FOR VALUES FROM (10) TO (20); + +INSERT INTO parted_self_fk VALUES (16, 9); -- error: referenced doesn't exist +DELETE FROM parted_self_fk WHERE id = 3 RETURNING *; -- error: reference remains + ALTER TABLE parted_self_fk DETACH PARTITION part2_self_fk; ALTER TABLE parted_self_fk ATTACH PARTITION part2_self_fk FOR VALUES FROM (10) TO (20); -SELECT cr.relname, co.conname, co.contype, co.convalidated, +ALTER TABLE parted_self_fk DETACH PARTITION part3_self_fk; +ALTER TABLE parted_self_fk ATTACH PARTITION part3_self_fk FOR VALUES FROM (30) TO (40); + +ALTER TABLE part3_self_fk DETACH PARTITION part33_self_fk; +ALTER TABLE part3_self_fk ATTACH PARTITION part33_self_fk FOR VALUES FROM (30) TO (40); + +SELECT cr.relname, co.conname, co.convalidated, p.conname AS conparent, p.convalidated, cf.relname AS foreignrel FROM pg_constraint co JOIN pg_class cr ON cr.oid = co.conrelid LEFT JOIN pg_class cf ON cf.oid = co.confrelid LEFT JOIN pg_constraint p ON p.oid = co.conparentid -WHERE cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) -ORDER BY co.contype, cr.relname, co.conname, p.conname; +WHERE co.contype = 'f' AND + cr.oid IN (SELECT relid FROM pg_partition_tree('parted_self_fk')) +ORDER BY cr.relname, co.conname, p.conname; -- Leave this table around, for pg_upgrade/pg_dump tests diff --git a/src/test/regress/sql/generated.sql b/src/test/regress/sql/generated.sql index 4d2fc9c5ae8..0dc4e7af932 100644 --- a/src/test/regress/sql/generated.sql +++ b/src/test/regress/sql/generated.sql @@ -189,6 +189,10 @@ COPY gtest1 FROM stdin; COPY gtest1 (a, b) FROM stdin; +COPY gtest1 FROM stdin WHERE b <> 10; + +COPY gtest1 FROM stdin WHERE gtest1 IS NULL; + SELECT * FROM gtest1 ORDER BY a; TRUNCATE gtest3; @@ -361,6 +365,11 @@ CREATE TABLE gtest24 (a int PRIMARY KEY, b gtestdomain1 GENERATED ALWAYS AS (a * INSERT INTO gtest24 (a) VALUES (4); -- ok INSERT INTO gtest24 (a) VALUES (6); -- error +CREATE DOMAIN gtestdomainnn AS int CHECK (VALUE IS NOT NULL); +CREATE TABLE gtest24nn (a int, b gtestdomainnn GENERATED ALWAYS AS (a * 2) STORED); +INSERT INTO gtest24nn (a) VALUES (4); -- ok +INSERT INTO gtest24nn (a) VALUES (NULL); -- error + -- typed tables (currently not supported) CREATE TYPE gtest_type AS (f1 integer, f2 text, f3 bigint); CREATE TABLE gtest28 OF gtest_type (f1 WITH OPTIONS GENERATED ALWAYS AS (f2 *2) STORED); @@ -387,7 +396,10 @@ DROP TABLE gtest_parent; -- generated columns in partition key (not allowed) CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE (f3); +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3)); CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((f3 * 3)); +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent)); +CREATE TABLE gtest_parent (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 2) STORED) PARTITION BY RANGE ((gtest_parent is not null)); -- ALTER TABLE ... ADD COLUMN CREATE TABLE gtest25 (a int PRIMARY KEY); diff --git a/src/test/regress/sql/hash_index.sql b/src/test/regress/sql/hash_index.sql index 4d1aa020a96..cf05ec02751 100644 --- a/src/test/regress/sql/hash_index.sql +++ b/src/test/regress/sql/hash_index.sql @@ -55,6 +55,16 @@ SELECT * FROM hash_f8_heap SELECT * FROM hash_f8_heap WHERE hash_f8_heap.random = '88888888'::float8; +-- +-- partial hash index +-- +EXPLAIN (COSTS OFF) +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + +SELECT * FROM hash_i4_heap + WHERE seqno = 9999; + -- -- hash index -- grep '^90[^0-9]' hashovfl.data diff --git a/src/test/regress/sql/indexing.sql b/src/test/regress/sql/indexing.sql index a48a3177faf..05f36e7bb07 100644 --- a/src/test/regress/sql/indexing.sql +++ b/src/test/regress/sql/indexing.sql @@ -871,3 +871,78 @@ select indexrelid::regclass, indisvalid, indisreplident, where indexrelid::regclass::text like 'parted_replica%' order by indexrelid::regclass::text collate "C"; drop table parted_replica_tab; +-- create global index using non-partition key +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (10); +create table gidxpart2 partition of gidxpart for values from (10) to (100); +create unique index gidx_u on gidxpart using btree(b) global; +select relname, relhasindex, relkind from pg_class where relname like '%gidx%' order by oid; +\d+ gidxpart +\d+ gidx_u +-- cross-partition uniqueness check for insert and update +insert into gidxpart values (1, 1, 'first'); +insert into gidxpart values (11, 11, 'eleventh'); +insert into gidxpart values (2, 11, 'duplicated (b)=(11) on other partition'); +insert into gidxpart values (12, 1, 'duplicated (b)=(1) on other partition'); +insert into gidxpart values (2, 120, 'second'); +insert into gidxpart values (12, 2, 'twelfth'); +update gidxpart set b=2 where a=2; +update gidxpart set b=1 where a=12; +update gidxpart set b=12 where a=12; +update gidxpart set b=2 where a=2; +select * from gidxpart; + +-- cross-partition uniqueness check applys to newly created partition +create table gidxpart3 partition of gidxpart for values from (100) to (200); +select relname, relkind from pg_class where relname = 'gidxpart3_b_idx'; +insert into gidxpart values (150, 11, 'duplicated (b)=(11) on other partition'); +insert into gidxpart values (150, 13, 'no duplicate b'); + +-- clean up global index tests +drop index gidx_u; +drop table gidxpart; + +-- Test the cross-partition uniqueness with non-partition key with global unique index +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +create table gidxpart2 partition of gidxpart for values from (100000) to (199999); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +insert into gidxpart (a, b, c) values (150000, 572814, 'inserted second on gidxpart2'); +create unique index on gidxpart (b) global; -- should fail +delete from gidxpart where a = 150000 and b = 572814; +create unique index on gidxpart (b) global; +drop table gidxpart; + +-- Test partition attach and detach with global unique index (no existing index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g +alter table gidxpart detach partition gidxpart2; +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i +drop table gidxpart; +drop table gidxpart2; + +-- Test partition attach and detach with global unique index (with duplicate index) +create table gidxpart (a int, b int, c text) partition by range (a); +create table gidxpart1 partition of gidxpart for values from (0) to (100000); +insert into gidxpart (a, b, c) values (42, 572814, 'inserted first on gidxpart1'); +create unique index on gidxpart (b) global; +create table gidxpart2 (a int, b int, c text); +create unique index on gidxpart2 (b); +insert into gidxpart2 (a, b, c) values (150000, 572814, 'dup inserted on gidxpart2'); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be i +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); -- should fail +update gidxpart2 set b = 5000; +alter table gidxpart attach partition gidxpart2 for values from (100000) to (199999); +select relname, relkind from pg_class where relname = 'gidxpart2_b_idx'; -- should be g +alter table gidxpart detach partition gidxpart2; +drop table gidxpart; +drop table gidxpart2; + diff --git a/src/test/regress/sql/inherit.sql b/src/test/regress/sql/inherit.sql index 0c066405fb5..923c15912d3 100644 --- a/src/test/regress/sql/inherit.sql +++ b/src/test/regress/sql/inherit.sql @@ -377,8 +377,9 @@ CREATE TABLE inhta (); CREATE TABLE inhtb () INHERITS (inhta); CREATE TABLE inhtc () INHERITS (inhtb); CREATE TABLE inhtd () INHERITS (inhta, inhtb, inhtc); -ALTER TABLE inhta ADD COLUMN i int; +ALTER TABLE inhta ADD COLUMN i int, ADD COLUMN j bigint DEFAULT 1; \d+ inhta +\d+ inhtd DROP TABLE inhta, inhtb, inhtc, inhtd; -- Test for renaming in diamond inheritance diff --git a/src/test/regress/sql/limit.sql b/src/test/regress/sql/limit.sql index 6f0cda98701..603910fe6d1 100644 --- a/src/test/regress/sql/limit.sql +++ b/src/test/regress/sql/limit.sql @@ -196,6 +196,9 @@ CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES; \d+ limit_thousand_v_3 CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995 - ORDER BY thousand FETCH FIRST NULL ROWS ONLY; + ORDER BY thousand FETCH FIRST (5::bigint) ROWS WITH TIES; \d+ limit_thousand_v_4 +CREATE VIEW limit_thousand_v_5 AS SELECT thousand FROM onek WHERE thousand < 995 + ORDER BY thousand FETCH FIRST NULL ROWS ONLY; +\d+ limit_thousand_v_5 -- leave these views diff --git a/src/test/regress/sql/maintain_every.sql b/src/test/regress/sql/maintain_every.sql new file mode 100644 index 00000000000..263e97272d5 --- /dev/null +++ b/src/test/regress/sql/maintain_every.sql @@ -0,0 +1,26 @@ +-- Test maintenance commands that visit every eligible relation. Run as a +-- non-superuser, to skip other users' tables. + +CREATE ROLE regress_maintain; +SET ROLE regress_maintain; + +-- Test database-wide ANALYZE ("use_own_xacts" mode) setting relhassubclass=f +-- for non-partitioning inheritance, w/ ON COMMIT DELETE ROWS building an +-- empty index. +CREATE TEMP TABLE past_inh_db_other (); -- need 2 tables for "use_own_xacts" +CREATE TEMP TABLE past_inh_db_parent () ON COMMIT DELETE ROWS; +CREATE TEMP TABLE past_inh_db_child () INHERITS (past_inh_db_parent); +CREATE INDEX ON past_inh_db_parent ((1)); +ANALYZE past_inh_db_parent; +SELECT reltuples, relhassubclass + FROM pg_class WHERE oid = 'past_inh_db_parent'::regclass; +DROP TABLE past_inh_db_child; +SET client_min_messages = error; -- hide WARNINGs for other users' tables +ANALYZE; +RESET client_min_messages; +SELECT reltuples, relhassubclass + FROM pg_class WHERE oid = 'past_inh_db_parent'::regclass; +DROP TABLE past_inh_db_parent, past_inh_db_other; + +RESET ROLE; +DROP ROLE regress_maintain; diff --git a/src/test/regress/sql/privileges.sql b/src/test/regress/sql/privileges.sql index eb972f64cf1..c52bfa20303 100644 --- a/src/test/regress/sql/privileges.sql +++ b/src/test/regress/sql/privileges.sql @@ -227,8 +227,6 @@ CREATE VIEW atest12v AS SELECT * FROM atest12 WHERE b <<< 5; CREATE VIEW atest12sbv WITH (security_barrier=true) AS SELECT * FROM atest12 WHERE b <<< 5; -GRANT SELECT ON atest12v TO PUBLIC; -GRANT SELECT ON atest12sbv TO PUBLIC; -- This plan should use nestloop, knowing that few rows will be selected. EXPLAIN (COSTS OFF) SELECT * FROM atest12v x, atest12v y WHERE x.a = y.b; @@ -250,8 +248,16 @@ CREATE FUNCTION leak2(integer,integer) RETURNS boolean CREATE OPERATOR >>> (procedure = leak2, leftarg = integer, rightarg = integer, restrict = scalargtsel); --- This should not show any "leak" notices before failing. +-- These should not show any "leak" notices before failing. EXPLAIN (COSTS OFF) SELECT * FROM atest12 WHERE a >>> 0; +EXPLAIN (COSTS OFF) SELECT * FROM atest12v WHERE a >>> 0; +EXPLAIN (COSTS OFF) SELECT * FROM atest12sbv WHERE a >>> 0; + +-- Now regress_priv_user1 grants access to regress_priv_user2 via the views. +SET SESSION AUTHORIZATION regress_priv_user1; +GRANT SELECT ON atest12v TO PUBLIC; +GRANT SELECT ON atest12sbv TO PUBLIC; +SET SESSION AUTHORIZATION regress_priv_user2; -- These plans should continue to use a nestloop, since they execute with the -- privileges of the view owner. @@ -1368,6 +1374,14 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_priv_user1 REVOKE EXECUTE ON FUNCTIONS ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT USAGE ON SCHEMAS TO regress_priv_user2; -- error +-- Test quoting and dequoting of user names in ACLs +CREATE ROLE "regress_""quoted"; +SELECT makeaclitem('regress_"quoted'::regrole, 'regress_"quoted'::regrole, + 'SELECT', TRUE); +SELECT '"regress_""quoted"=r*/"regress_""quoted"'::aclitem; +SELECT '""=r*/""'::aclitem; -- used to be misparsed as """" +DROP ROLE "regress_""quoted"; + -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. @@ -1628,6 +1642,13 @@ DROP USER regress_priv_user7; DROP USER regress_priv_user8; -- does not exist +-- leave some default ACLs for pg_upgrade's dump-restore test input. +ALTER DEFAULT PRIVILEGES FOR ROLE pg_signal_backend + REVOKE USAGE ON TYPES FROM pg_signal_backend; +ALTER DEFAULT PRIVILEGES FOR ROLE pg_read_all_settings + REVOKE USAGE ON TYPES FROM pg_read_all_settings; + + -- permissions with LOCK TABLE CREATE USER regress_locktable_user; CREATE TABLE lock_table (a int); diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql index 26ffe064403..c24438e02dc 100644 --- a/src/test/regress/sql/psql.sql +++ b/src/test/regress/sql/psql.sql @@ -994,6 +994,7 @@ select \if false \\ (bogus \else \\ 42 \endif \\ forty_two; \pset arg1 arg2 \q \reset + \restrict test \s arg1 \set arg1 arg2 arg3 arg4 arg5 arg6 arg7 \setenv arg1 arg2 @@ -1002,6 +1003,7 @@ select \if false \\ (bogus \else \\ 42 \endif \\ forty_two; \t arg1 \T arg1 \timing arg1 + \unrestrict not_valid \unset arg1 \w arg1 \watch arg1 diff --git a/src/test/regress/sql/publication.sql b/src/test/regress/sql/publication.sql index 7d5c9373845..dc09d1fdf6f 100644 --- a/src/test/regress/sql/publication.sql +++ b/src/test/regress/sql/publication.sql @@ -215,6 +215,41 @@ DROP PUBLICATION testpub_fortbl; DROP SCHEMA pub_test CASCADE; +-- Test that the INSERT ON CONFLICT command correctly checks REPLICA IDENTITY +-- when the target table is published. +CREATE TABLE testpub_insert_onconfl_no_ri (a int unique, b int); +CREATE TABLE testpub_insert_onconfl_parted (a int unique, b int) PARTITION by RANGE (a); +CREATE TABLE testpub_insert_onconfl_part_no_ri PARTITION OF testpub_insert_onconfl_parted FOR VALUES FROM (1) TO (10); + +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION pub1 FOR ALL TABLES; +RESET client_min_messages; + +-- fail - missing REPLICA IDENTITY +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; + +-- ok - no updates +INSERT INTO testpub_insert_onconfl_no_ri VALUES (1, 1) ON CONFLICT DO NOTHING; + +-- fail - missing REPLICA IDENTITY in partition testpub_insert_onconfl_no_ri +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT (a) DO UPDATE SET b = 2; + +-- ok - no updates +INSERT INTO testpub_insert_onconfl_parted VALUES (1, 1) ON CONFLICT DO NOTHING; + +DROP PUBLICATION pub1; +DROP TABLE testpub_insert_onconfl_no_ri; +DROP TABLE testpub_insert_onconfl_parted; + RESET SESSION AUTHORIZATION; DROP ROLE regress_publication_user, regress_publication_user2; DROP ROLE regress_publication_user_dummy; + +-- stage objects for pg_dump tests +CREATE SCHEMA pubme CREATE TABLE t0 (c int, d int) CREATE TABLE t1 (c int); +SET client_min_messages = 'ERROR'; +CREATE PUBLICATION dump_pub_1ct FOR TABLE ONLY pubme.t0; +CREATE PUBLICATION dump_pub_2ct FOR TABLE ONLY pubme.t0, pubme.t1; +CREATE PUBLICATION dump_pub_all FOR TABLE ONLY pubme.t0, pubme.t1 + WITH (publish_via_partition_root = true); +RESET client_min_messages; diff --git a/src/test/regress/sql/returning.sql b/src/test/regress/sql/returning.sql index a460f82fb7c..8a2a2a5861d 100644 --- a/src/test/regress/sql/returning.sql +++ b/src/test/regress/sql/returning.sql @@ -132,6 +132,30 @@ DELETE FROM foo WHERE f2 = 'zit' RETURNING *; SELECT * FROM foo; SELECT * FROM voo; +-- Check use of a whole-row variable for an un-flattenable view +CREATE TEMP VIEW foo_v AS SELECT * FROM foo OFFSET 0; +UPDATE foo SET f2 = foo_v.f2 FROM foo_v WHERE foo_v.f1 = foo.f1 + RETURNING foo_v; +SELECT * FROM foo; + +-- Check use of a whole-row variable for an inlined set-returning function +CREATE FUNCTION foo_f() RETURNS SETOF foo AS + $$ SELECT * FROM foo OFFSET 0 $$ LANGUAGE sql STABLE; +UPDATE foo SET f2 = foo_f.f2 FROM foo_f() WHERE foo_f.f1 = foo.f1 + RETURNING foo_f; +SELECT * FROM foo; +DROP FUNCTION foo_f(); + +-- As above, but SRF is defined to return a composite type +CREATE TYPE foo_t AS (f1 int, f2 text, f3 int, f4 int8); +CREATE FUNCTION foo_f() RETURNS SETOF foo_t AS + $$ SELECT * FROM foo OFFSET 0 $$ LANGUAGE sql STABLE; +UPDATE foo SET f2 = foo_f.f2 FROM foo_f() WHERE foo_f.f1 = foo.f1 + RETURNING foo_f; +SELECT * FROM foo; +DROP FUNCTION foo_f(); +DROP TYPE foo_t; + -- Try a join case CREATE TEMP TABLE joinme (f2j text, other int); diff --git a/src/test/regress/sql/rowsecurity.sql b/src/test/regress/sql/rowsecurity.sql index 87661dec7bf..4b286b6c756 100644 --- a/src/test/regress/sql/rowsecurity.sql +++ b/src/test/regress/sql/rowsecurity.sql @@ -1990,7 +1990,7 @@ DROP VIEW rls_view; DROP TABLE rls_tbl; DROP TABLE ref_tbl; --- Leaky operator test +-- Leaky operator tests CREATE TABLE rls_tbl (a int); INSERT INTO rls_tbl SELECT x/10 FROM generate_series(1, 100) x; ANALYZE rls_tbl; @@ -2005,9 +2005,58 @@ CREATE FUNCTION op_leak(int, int) RETURNS bool CREATE OPERATOR <<< (procedure = op_leak, leftarg = int, rightarg = int, restrict = scalarltsel); SELECT * FROM rls_tbl WHERE a <<< 1000; +RESET SESSION AUTHORIZATION; + +CREATE TABLE rls_child_tbl () INHERITS (rls_tbl); +INSERT INTO rls_child_tbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_child_tbl; + +CREATE TABLE rls_ptbl (a int) PARTITION BY RANGE (a); +CREATE TABLE rls_part PARTITION OF rls_ptbl FOR VALUES FROM (-100) TO (100); +INSERT INTO rls_ptbl SELECT x/10 FROM generate_series(1, 100) x; +ANALYZE rls_ptbl, rls_part; + +ALTER TABLE rls_ptbl ENABLE ROW LEVEL SECURITY; +ALTER TABLE rls_part ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_ptbl TO regress_rls_alice; +GRANT SELECT ON rls_part TO regress_rls_alice; +CREATE POLICY p1 ON rls_tbl USING (a < 0); +CREATE POLICY p2 ON rls_ptbl USING (a < 0); +CREATE POLICY p3 ON rls_part USING (a < 0); + +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; +SELECT * FROM rls_child_tbl WHERE a <<< 1000; +SELECT * FROM rls_ptbl WHERE a <<< 1000; +SELECT * FROM rls_part WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; +RESET SESSION AUTHORIZATION; + +REVOKE SELECT ON rls_tbl FROM regress_rls_alice; +CREATE VIEW rls_tbl_view AS SELECT * FROM rls_tbl; + +ALTER TABLE rls_child_tbl ENABLE ROW LEVEL SECURITY; +GRANT SELECT ON rls_child_tbl TO regress_rls_alice; +CREATE POLICY p4 ON rls_child_tbl USING (a < 0); + +SET SESSION AUTHORIZATION regress_rls_alice; +SELECT * FROM rls_tbl WHERE a <<< 1000; +SELECT * FROM rls_tbl_view WHERE a <<< 1000; +SELECT * FROM rls_child_tbl WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_tbl UNION ALL + SELECT * FROM rls_tbl) t WHERE a <<< 1000; +SELECT * FROM (SELECT * FROM rls_child_tbl UNION ALL + SELECT * FROM rls_child_tbl) t WHERE a <<< 1000; DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); RESET SESSION AUTHORIZATION; +DROP TABLE rls_part; +DROP TABLE rls_ptbl; +DROP TABLE rls_child_tbl; +DROP VIEW rls_tbl_view; DROP TABLE rls_tbl; -- Bug #16006: whole-row Vars in a policy don't play nice with sub-selects diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql index 53907f75e74..c6623df1ffb 100644 --- a/src/test/regress/sql/stats_ext.sql +++ b/src/test/regress/sql/stats_ext.sql @@ -40,6 +40,17 @@ CREATE STATISTICS tst ON x, x, y, x, x, (x || 'x'), (y + 1), (x || 'x'), (x || ' CREATE STATISTICS tst ON (x || 'x'), (x || 'x'), (y + 1), (x || 'x'), (x || 'x'), (y + 1), (x || 'x'), (x || 'x'), (y + 1) FROM ext_stats_test; CREATE STATISTICS tst ON (x || 'x'), (x || 'x'), y FROM ext_stats_test; CREATE STATISTICS tst (unrecognized) ON x, y FROM ext_stats_test; +-- unsupported targets +CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo; +CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar; +CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo; +CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x); +CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text); +CREATE FUNCTION tftest(int) returns table(a int, b int) as $$ +SELECT $1, $1+i FROM generate_series(1,5) g(i); +$$ LANGUAGE sql IMMUTABLE STRICT; +CREATE STATISTICS alt_stat2 ON a FROM tftest(1); +DROP FUNCTION tftest; -- incorrect expressions CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference CREATE STATISTICS tst ON y + z FROM ext_stats_test; -- missing parentheses @@ -57,6 +68,14 @@ DROP STATISTICS ab1_a_b_stats; ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new; RESET SESSION AUTHORIZATION; DROP ROLE regress_stats_ext; +CREATE STATISTICS pg_temp.stats_ext_temp ON a, b FROM ab1; +SELECT regexp_replace(pg_describe_object(tableoid, oid, 0), + 'pg_temp_[0-9]*', 'pg_temp_REDACTED') AS descr, + pg_statistics_obj_is_visible(oid) AS visible + FROM pg_statistic_ext + WHERE stxname = 'stats_ext_temp'; +DROP STATISTICS stats_ext_temp; -- shall fail +DROP STATISTICS pg_temp.stats_ext_temp; CREATE STATISTICS IF NOT EXISTS ab1_a_b_stats ON a, b FROM ab1; DROP STATISTICS ab1_a_b_stats; @@ -1623,7 +1642,14 @@ CREATE FUNCTION op_leak(int, int) RETURNS bool LANGUAGE plpgsql; CREATE OPERATOR <<< (procedure = op_leak, leftarg = int, rightarg = int, restrict = scalarltsel); +CREATE FUNCTION op_leak(record, record) RETURNS bool + AS 'BEGIN RAISE NOTICE ''op_leak => %, %'', $1, $2; RETURN $1 < $2; END' + LANGUAGE plpgsql; +CREATE OPERATOR <<< (procedure = op_leak, leftarg = record, rightarg = record, + restrict = scalarltsel); SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied -- Grant access via a security barrier view, but hide all data @@ -1635,18 +1661,48 @@ GRANT SELECT, DELETE ON tststats.priv_test_view TO regress_stats_user1; -- Should now have access via the view, but see nothing and leak nothing SET SESSION AUTHORIZATION regress_stats_user1; SELECT * FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not leak +SELECT * FROM tststats.priv_test_view t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak DELETE FROM tststats.priv_test_view WHERE a <<< 0 AND b <<< 0; -- Should not leak -- Grant table access, but hide all data with RLS RESET SESSION AUTHORIZATION; ALTER TABLE tststats.priv_test_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_tbl_pol ON tststats.priv_test_tbl USING (2 * a < 0); GRANT SELECT, DELETE ON tststats.priv_test_tbl TO regress_stats_user1; -- Should now have direct table access, but see nothing and leak nothing SET SESSION AUTHORIZATION regress_stats_user1; SELECT * FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +SELECT * FROM tststats.priv_test_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak DELETE FROM tststats.priv_test_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +-- Create plain inheritance parent table with no access permissions +RESET SESSION AUTHORIZATION; +CREATE TABLE tststats.priv_test_parent_tbl (a int, b int); +ALTER TABLE tststats.priv_test_tbl INHERIT tststats.priv_test_parent_tbl; + +-- Should not have access to parent, and should leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Permission denied +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Permission denied + +-- Grant table access to parent, but hide all data with RLS +RESET SESSION AUTHORIZATION; +ALTER TABLE tststats.priv_test_parent_tbl ENABLE ROW LEVEL SECURITY; +CREATE POLICY priv_test_parent_tbl_pol ON tststats.priv_test_parent_tbl USING (2 * a < 0); +GRANT SELECT, DELETE ON tststats.priv_test_parent_tbl TO regress_stats_user1; + +-- Should now have direct table access to parent, but see nothing and leak nothing +SET SESSION AUTHORIZATION regress_stats_user1; +SELECT * FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak +SELECT * FROM tststats.priv_test_parent_tbl t + WHERE a <<< 0 AND (b <<< 0 OR t.* <<< (1, 1) IS NOT NULL); -- Should not leak +DELETE FROM tststats.priv_test_parent_tbl WHERE a <<< 0 AND b <<< 0; -- Should not leak + -- privilege checks for pg_stats_ext and pg_stats_ext_exprs RESET SESSION AUTHORIZATION; CREATE TABLE stats_ext_tbl (id INT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, col TEXT); @@ -1673,10 +1729,31 @@ SELECT statistics_name, most_common_vals FROM pg_stats_ext x SELECT statistics_name, most_common_vals FROM pg_stats_ext_exprs x WHERE tablename = 'stats_ext_tbl' ORDER BY ROW(x.*); +-- CREATE STATISTICS checks for CREATE on the schema +RESET SESSION AUTHORIZATION; +CREATE SCHEMA sts_sch1 CREATE TABLE sts_sch1.tbl (a INT, b INT); +GRANT USAGE ON SCHEMA sts_sch1 TO regress_stats_user1; +ALTER TABLE sts_sch1.tbl OWNER TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.fail ON a, b FROM sts_sch1.tbl; +RESET SESSION AUTHORIZATION; +GRANT CREATE ON SCHEMA sts_sch1 TO regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +CREATE STATISTICS sts_sch1.pass ON a, b FROM sts_sch1.tbl; + +-- re-creating statistics via ALTER TABLE bypasses checks for CREATE on schema +RESET SESSION AUTHORIZATION; +REVOKE CREATE ON SCHEMA sts_sch1 FROM regress_stats_user1; +SET SESSION AUTHORIZATION regress_stats_user1; +ALTER TABLE sts_sch1.tbl ALTER COLUMN a TYPE SMALLINT; + -- Tidy up DROP OPERATOR <<< (int, int); DROP FUNCTION op_leak(int, int); +DROP OPERATOR <<< (record, record); +DROP FUNCTION op_leak(record, record); RESET SESSION AUTHORIZATION; DROP TABLE stats_ext_tbl; DROP SCHEMA tststats CASCADE; +DROP SCHEMA sts_sch1 CASCADE; DROP USER regress_stats_user1; diff --git a/src/test/regress/sql/strings.sql b/src/test/regress/sql/strings.sql index 63ddce67c54..0fe6d05be5f 100644 --- a/src/test/regress/sql/strings.sql +++ b/src/test/regress/sql/strings.sql @@ -185,6 +185,29 @@ SELECT 'abcd\efg' SIMILAR TO '_bcd\%' ESCAPE '' AS true; SELECT 'abcdefg' SIMILAR TO '_bcd%' ESCAPE NULL AS null; SELECT 'abcdefg' SIMILAR TO '_bcd#%' ESCAPE '##' AS error; +-- Characters that should be left alone in character classes when a +-- SIMILAR TO regexp pattern is converted to POSIX style. +-- Underscore "_" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '_[_[:alpha:]_]_'; +-- Percentage "%" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '%[%[:alnum:]%]%'; +-- Dot "." +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '.[.[:alnum:].].'; +-- Dollar "$" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '$[$[:alnum:]$]$'; +-- Opening parenthesis "(" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '()[([:alnum:](]()'; +-- Caret "^" +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '^[^[:alnum:]^[^^][[^^]][\^][[\^]]\^]^'; +-- Closing square bracket "]" at the beginning of character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[]%][^]%][^%]%'; +-- Closing square bracket effective after two carets at the beginning +-- of character class. +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[^^]^'; +-- Closing square bracket after an escape sequence at the beginning of +-- a character closes the character class +EXPLAIN (COSTS OFF) SELECT * FROM TEXT_TBL WHERE f1 SIMILAR TO '[|a]%' ESCAPE '|'; + -- Test back reference in regexp_replace SELECT regexp_replace('1112223333', E'(\\d{3})(\\d{3})(\\d{4})', E'(\\1) \\2-\\3'); SELECT regexp_replace('AAA BBB CCC ', E'\\s+', ' ', 'g'); diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql index 94d0723aeef..dc3b5d95e83 100644 --- a/src/test/regress/sql/triggers.sql +++ b/src/test/regress/sql/triggers.sql @@ -2038,6 +2038,11 @@ BBB 42 CCC 42 \. +-- check detach/reattach behavior; statement triggers with transition tables +-- should not prevent a table from becoming a partition again +alter table parent detach partition child1; +alter table parent attach partition child1 for values in ('AAA'); + -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; @@ -2257,6 +2262,11 @@ copy parent (a, b) from stdin; DDD 42 \. +-- check disinherit/reinherit behavior; statement triggers with transition +-- tables should not prevent a table from becoming an inheritance child again +alter table child1 no inherit parent; +alter table child1 inherit parent; + -- DML affecting parent sees tuples collected from children even if -- there is no transition table trigger on the children drop trigger child1_insert_trig on child1; diff --git a/src/test/regress/sql/with.sql b/src/test/regress/sql/with.sql index 5b392bfec21..1a0b58e0659 100644 --- a/src/test/regress/sql/with.sql +++ b/src/test/regress/sql/with.sql @@ -922,6 +922,13 @@ WITH RECURSIVE x(n) AS ( ORDER BY (SELECT n FROM x)) SELECT * FROM x; +-- and this +WITH RECURSIVE x(n) AS ( + WITH sub_cte AS (SELECT * FROM x) + DELETE FROM graph RETURNING f) + SELECT * FROM x; + + CREATE TEMPORARY TABLE y (a INTEGER); INSERT INTO y SELECT generate_series(1, 10); @@ -1049,6 +1056,30 @@ select ( with cte(foo) as ( values(f1) ) values((select foo from cte)) ) from int4_tbl; +-- +-- test for bug #19055: interaction of WITH with aggregates +-- +-- For now, we just throw an error if there's a use of a CTE below the +-- semantic level that the SQL standard assigns to the aggregate. +-- It's not entirely clear what we could do instead that doesn't risk +-- breaking more things than it fixes. +select f1, (with cte1(x,y) as (select 1,2) + select count((select i4.f1 from cte1))) as ss +from int4_tbl i4; + +-- +-- test for bug #19106: interaction of WITH with aggregates +-- +-- the initial fix for #19055 was too aggressive and broke this case +explain (verbose, costs off) +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + +with a as ( select id from (values (1), (2)) as v(id) ), + b as ( select max((select sum(id) from a)) as agg ) +select agg from b; + -- -- test for nested-recursive-WITH bug -- @@ -1288,6 +1319,29 @@ COMMIT; SELECT * FROM bug6051_3; +-- check that recursive CTE processing doesn't rewrite a CTE more than once +-- (must not try to expand GENERATED ALWAYS IDENTITY columns more than once) +CREATE TEMP TABLE id_alw1 (i int GENERATED ALWAYS AS IDENTITY); + +CREATE TEMP TABLE id_alw2 (i int GENERATED ALWAYS AS IDENTITY); +CREATE TEMP VIEW id_alw2_view AS SELECT * FROM id_alw2; + +CREATE TEMP TABLE id_alw3 (i int GENERATED ALWAYS AS IDENTITY); +CREATE RULE id_alw3_ins AS ON INSERT TO id_alw3 DO INSTEAD + WITH t1 AS (INSERT INTO id_alw1 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw2_view DEFAULT VALUES RETURNING i; +CREATE TEMP VIEW id_alw3_view AS SELECT * FROM id_alw3; + +CREATE TEMP TABLE id_alw4 (i int GENERATED ALWAYS AS IDENTITY); + +WITH t4 AS (INSERT INTO id_alw4 DEFAULT VALUES RETURNING i) + INSERT INTO id_alw3_view DEFAULT VALUES RETURNING i; + +SELECT * from id_alw1; +SELECT * from id_alw2; +SELECT * from id_alw3; +SELECT * from id_alw4; + -- check case where CTE reference is removed due to optimization EXPLAIN (VERBOSE, COSTS OFF) SELECT q1 FROM diff --git a/src/test/subscription/t/004_sync.pl b/src/test/subscription/t/004_sync.pl index 545599b8f8d..cd5acf11a0f 100644 --- a/src/test/subscription/t/004_sync.pl +++ b/src/test/subscription/t/004_sync.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 8; +use Test::More tests => 9; # Initialize publisher node my $node_publisher = get_new_node('publisher'); @@ -172,5 +172,11 @@ 'postgres', 'SELECT count(*) = 0 FROM pg_replication_slots'), 'DROP SUBSCRIPTION during error can clean up the slots on the publisher'); +# After dropping the subscription, all replication origins, whether created by +# an apply worker or table sync worker, should have been cleaned up. +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM pg_replication_origin_status"); +is($result, qq(0), 'all replication origins have been cleaned up'); + $node_subscriber->stop('fast'); $node_publisher->stop('fast'); diff --git a/src/test/subscription/t/022_fallback_full_identity.pl b/src/test/subscription/t/022_fallback_full_identity.pl new file mode 100644 index 00000000000..010cf237f19 --- /dev/null +++ b/src/test/subscription/t/022_fallback_full_identity.pl @@ -0,0 +1,370 @@ +# Copyright (c) 2021, PostgreSQL Global Development Group +# +# Test for logical_replication_fallback_to_full_identity GUC parameter +# This tests the functionality that allows tables without primary keys +# to use REPLICA IDENTITY FULL automatically when the GUC is enabled. +use strict; +use warnings; +use PostgresNode; +use Test::More tests => 23; + +# Initialize publisher node +my $node_publisher = get_new_node('publisher'); +$node_publisher->init(allows_streaming => 'logical'); +$node_publisher->start; + +# Create subscriber node +my $node_subscriber = get_new_node('subscriber'); +$node_subscriber->init(allows_streaming => 'logical'); +$node_subscriber->start; + +# Create table without primary key on publisher +$node_publisher->safe_psql('postgres', + "CREATE TABLE test_no_pk (id int, name text)"); + +# Create table with primary key for comparison +$node_publisher->safe_psql('postgres', + "CREATE TABLE test_with_pk (id int primary key, name text)"); + +# Create matching tables on subscriber +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_no_pk (id int, name text)"); +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_with_pk (id int primary key, name text)"); + +# Setup logical replication +my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres'; + +$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub"); +$node_publisher->safe_psql('postgres', + "ALTER PUBLICATION tap_pub ADD TABLE test_no_pk, test_with_pk"); + +$node_subscriber->safe_psql('postgres', + "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub"); + +# Wait for initial sync +$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub'); + +# Insert initial data +$node_publisher->safe_psql('postgres', + "INSERT INTO test_no_pk VALUES (1, 'before_guc_enable')"); +$node_publisher->safe_psql('postgres', + "INSERT INTO test_with_pk VALUES (1, 'with_pk')"); + +$node_publisher->wait_for_catchup('tap_sub'); + +my $result; + +# Test 1: Verify initial data is replicated to table without PK +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_no_pk"); +is($result, qq(1), 'initial data replicated to table without pk'); + +# Test 2: Verify initial data is replicated to table with PK +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_with_pk"); +is($result, qq(1), 'initial data replicated to table with pk'); + +$node_publisher->append_conf('postgresql.conf', + "logical_replication_fallback_to_full_identity = off"); +$node_publisher->reload; + +# Test 3: Without GUC enabled, INSERT on table without PK should work +# (INSERT doesn't require replica identity) +my $ret = $node_publisher->psql('postgres', + "INSERT INTO test_no_pk VALUES (2, 'test_without_pk2')"); +is($ret, 0, 'INSERT on table without PK works when GUC is off'); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_no_pk"); +is($result, qq(2), 'INSERT replicated after enabling GUC'); + +# Test 4: Without GUC enabled, UPDATE on table without PK should fail +# (the GUC defaults to off, and CheckCmdReplicaIdentity should reject this) +$ret = $node_publisher->psql('postgres', + "UPDATE test_no_pk SET name = 'should_fail' WHERE id = 1"); +isnt($ret, 0, 'UPDATE on table without PK fails when GUC is off'); + +# Test 5: Without GUC enabled, DELETE on table without PK should fail +$ret = $node_publisher->psql('postgres', + "DELETE FROM test_no_pk WHERE id = 1"); +isnt($ret, 0, 'DELETE on table without PK fails when GUC is off'); + +# Test 6: Without GUC enabled, UPDATE on table with PK should work +$node_publisher->safe_psql('postgres', + "INSERT INTO test_with_pk VALUES (2, 'test_with_pk2')"); +$node_publisher->safe_psql('postgres', + "UPDATE test_with_pk SET name = 'updated_with_pk' WHERE id = 2"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT name FROM test_with_pk WHERE id = 2"); +is($result, qq(updated_with_pk), + 'UPDATE on table with PK works without GUC'); + +# Test 7: Now enable the GUC and reload +$node_publisher->append_conf('postgresql.conf', + "logical_replication_fallback_to_full_identity = on"); +$node_publisher->reload; + +# Test 8: With GUC enabled, INSERT on table without PK should work +$node_publisher->safe_psql('postgres', + "INSERT INTO test_no_pk VALUES (3, 'after_guc_enable')"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_no_pk"); +is($result, qq(3), 'INSERT replicated after enabling GUC'); + +# Test 9: With GUC enabled, UPDATE on table without PK should work +$node_publisher->safe_psql('postgres', + "UPDATE test_no_pk SET name = 'updated_after_guc' WHERE id = 3"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT name FROM test_no_pk WHERE id = 3"); +is($result, qq(updated_after_guc), 'UPDATE replicated after enabling GUC'); + +# Test 10: With GUC enabled, DELETE on table without PK should work +$node_publisher->safe_psql('postgres', + "DELETE FROM test_no_pk WHERE id = 3"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_no_pk"); +is($result, qq(2), 'DELETE replicated after enabling GUC'); + +# Test 11: Verify table with PK still works normally with GUC enabled +$node_publisher->safe_psql('postgres', + "UPDATE test_with_pk SET name = 'updated_again' WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT name FROM test_with_pk WHERE id = 1"); +is($result, qq(updated_again), 'table with pk still works with GUC enabled'); + +# Test 12: Test new table without PK after GUC is enabled +$node_publisher->safe_psql('postgres', + "CREATE TABLE test_no_pk2 (id int, data text)"); +# $node_publisher->safe_psql('postgres', +# "ALTER TABLE test_no_pk2 REPLICA IDENTITY DEFAULT"); + +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_no_pk2 (id int, data text)"); + +$node_publisher->safe_psql('postgres', + "ALTER PUBLICATION tap_pub ADD TABLE test_no_pk2"); + +# Refresh subscription to pick up new table +$node_subscriber->safe_psql('postgres', + "ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION"); + +# Wait for new table to sync +$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub'); + +$node_publisher->safe_psql('postgres', + "INSERT INTO test_no_pk2 VALUES (1, 'new_table_no_pk')"); +$node_publisher->safe_psql('postgres', + "UPDATE test_no_pk2 SET data = 'updated' WHERE id = 1"); +$node_publisher->safe_psql('postgres', + "DELETE FROM test_no_pk2 WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_no_pk2"); +is($result, qq(0), 'new table without pk also works with GUC enabled'); + +# Test 12: Disable GUC and verify UPDATE/DELETE on table without PK fails again +$node_publisher->append_conf('postgresql.conf', + "logical_replication_fallback_to_full_identity = off"); +$node_publisher->reload; + +# INSERT should still work +$node_publisher->safe_psql('postgres', + "INSERT INTO test_no_pk VALUES (4, 'after_guc_disable')"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_no_pk"); +is($result, qq(3), 'INSERT still works after disabling GUC'); + +# UPDATE on table without PK should fail again +$ret = $node_publisher->psql('postgres', + "UPDATE test_no_pk SET name = 'should_fail_again' WHERE id = 4"); +isnt($ret, 0, 'UPDATE on table without PK fails after disabling GUC'); + +# But UPDATE on table with PK should still work +$node_publisher->safe_psql('postgres', + "UPDATE test_with_pk SET name = 'final_update' WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT name FROM test_with_pk WHERE id = 1"); +is($result, qq(final_update), 'table with pk unaffected by GUC setting'); + +# ============================================================ +# Test 14-16: GUC enabled does NOT override REPLICA IDENTITY NOTHING +# ============================================================ + +# Re-enable GUC +$node_publisher->append_conf('postgresql.conf', + "logical_replication_fallback_to_full_identity = on"); +$node_publisher->reload; + +# Create table without PK, then manually set REPLICA IDENTITY NOTHING +$node_publisher->safe_psql('postgres', + "CREATE TABLE test_nothing (id int, data text)"); +$node_publisher->safe_psql('postgres', + "ALTER TABLE test_nothing REPLICA IDENTITY NOTHING"); + +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_nothing (id int, data text)"); + +$node_publisher->safe_psql('postgres', + "ALTER PUBLICATION tap_pub ADD TABLE test_nothing"); + +# Refresh subscription to pick up new table +$node_subscriber->safe_psql('postgres', + "ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION"); + +# Wait for new table to sync +$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub'); + +# Test 14: INSERT should work +$node_publisher->safe_psql('postgres', + "INSERT INTO test_nothing VALUES (1, 'test_nothing')"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_nothing"); +is($result, qq(1), 'INSERT on REPLICA IDENTITY NOTHING table works'); + +# Test 15: UPDATE should fail even with GUC enabled +# (GUC does not override manually set REPLICA IDENTITY NOTHING) +$ret = $node_publisher->psql('postgres', + "UPDATE test_nothing SET data = 'should_fail' WHERE id = 1"); +isnt($ret, 0, 'UPDATE on REPLICA IDENTITY NOTHING table fails even with GUC on'); + +# Test 16: DELETE should fail even with GUC enabled +$ret = $node_publisher->psql('postgres', + "DELETE FROM test_nothing WHERE id = 1"); +isnt($ret, 0, 'DELETE on REPLICA IDENTITY NOTHING table fails even with GUC on'); + +# ============================================================ +# Test 17-18: GUC does not affect tables with REPLICA IDENTITY FULL +# ============================================================ + +# Create table with explicit REPLICA IDENTITY FULL +$node_publisher->safe_psql('postgres', + "CREATE TABLE test_full (id int, data text)"); +$node_publisher->safe_psql('postgres', + "ALTER TABLE test_full REPLICA IDENTITY FULL"); + +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_full (id int, data text)"); + +$node_publisher->safe_psql('postgres', + "ALTER PUBLICATION tap_pub ADD TABLE test_full"); + +# Refresh subscription to pick up new table +$node_subscriber->safe_psql('postgres', + "ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION"); + +# Wait for new table to sync +$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub'); + +# Test 17: INSERT/UPDATE/DELETE should all work with REPLICA IDENTITY FULL +$node_publisher->safe_psql('postgres', + "INSERT INTO test_full VALUES (1, 'test_full')"); +$node_publisher->safe_psql('postgres', + "UPDATE test_full SET data = 'updated_full' WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT data FROM test_full WHERE id = 1"); +is($result, qq(updated_full), 'table with REPLICA IDENTITY FULL works with GUC on'); + +# Test 18: DELETE should work +$node_publisher->safe_psql('postgres', + "DELETE FROM test_full WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_full"); +is($result, qq(0), 'DELETE on REPLICA IDENTITY FULL table works with GUC on'); + +# ============================================================ +# Test 19-21: GUC does not affect tables with REPLICA IDENTITY INDEX +# ============================================================ + +# Create table with unique index and REPLICA IDENTITY INDEX +$node_publisher->safe_psql('postgres', + "CREATE TABLE test_index (id int NOT NULL, data text)"); +$node_publisher->safe_psql('postgres', + "CREATE UNIQUE INDEX test_index_idx ON test_index (id)"); +$node_publisher->safe_psql('postgres', + "ALTER TABLE test_index REPLICA IDENTITY USING INDEX test_index_idx"); + +$node_subscriber->safe_psql('postgres', + "CREATE TABLE test_index (id int NOT NULL, data text)"); +$node_subscriber->safe_psql('postgres', + "CREATE UNIQUE INDEX test_index_idx ON test_index (id)"); +$node_subscriber->safe_psql('postgres', + "ALTER TABLE test_index REPLICA IDENTITY USING INDEX test_index_idx"); + +$node_publisher->safe_psql('postgres', + "ALTER PUBLICATION tap_pub ADD TABLE test_index"); + +# Refresh subscription to pick up new table +$node_subscriber->safe_psql('postgres', + "ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION"); + +# Wait for new table to sync +$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub'); + +# Test 19: INSERT should work +$node_publisher->safe_psql('postgres', + "INSERT INTO test_index VALUES (1, 'test_index')"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_index"); +is($result, qq(1), 'INSERT on REPLICA IDENTITY INDEX table works'); + +# Test 20: UPDATE should work (GUC does not affect it) +$node_publisher->safe_psql('postgres', + "UPDATE test_index SET data = 'updated_index' WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT data FROM test_index WHERE id = 1"); +is($result, qq(updated_index), 'UPDATE on REPLICA IDENTITY INDEX table works with GUC on'); + +# Test 21: DELETE should work (GUC does not affect it) +$node_publisher->safe_psql('postgres', + "DELETE FROM test_index WHERE id = 1"); + +$node_publisher->wait_for_catchup('tap_sub'); + +$result = $node_subscriber->safe_psql('postgres', + "SELECT count(*) FROM test_index"); +is($result, qq(0), 'DELETE on REPLICA IDENTITY INDEX table works with GUC on'); + +# Cleanup +$node_subscriber->stop('fast'); +$node_publisher->stop('fast'); diff --git a/src/test/subscription/t/100_bugs.pl b/src/test/subscription/t/100_bugs.pl index cce91891ab9..235227c7727 100644 --- a/src/test/subscription/t/100_bugs.pl +++ b/src/test/subscription/t/100_bugs.pl @@ -6,7 +6,7 @@ use warnings; use PostgresNode; use TestLib; -use Test::More tests => 9; +use Test::More tests => 11; # Bug #15114 @@ -362,3 +362,33 @@ $node_publisher_d_cols->stop('fast'); $node_subscriber_d_cols->stop('fast'); + +# BUG #18988 +# The bug happened due to a self-deadlock between the DROP SUBSCRIPTION +# command and the walsender process for accessing pg_subscription. This +# occurred when DROP SUBSCRIPTION attempted to remove a replication slot by +# connecting to a newly created database whose caches are not yet +# initialized. +# +# The bug is fixed by reducing the lock-level during DROP SUBSCRIPTION. +$node_publisher->start(); + +$publisher_connstr = $node_publisher->connstr . ' dbname=regress_db'; +$node_publisher->safe_psql( + 'postgres', qq( + CREATE DATABASE regress_db; + CREATE SUBSCRIPTION regress_sub1 CONNECTION '$publisher_connstr' PUBLICATION regress_pub WITH (connect=false); +)); + +my ($ret, $stdout, $stderr) = + $node_publisher->psql('postgres', q{DROP SUBSCRIPTION regress_sub1}); + +isnt($ret, 0, "replication slot does not exist: exit code not 0"); +like( + $stderr, + qr/ERROR: could not drop replication slot "regress_sub1" on publisher/, + "could not drop replication slot: error message"); + +$node_publisher->safe_psql('postgres', "DROP DATABASE regress_db"); + +$node_publisher->stop('fast'); diff --git a/src/timezone/data/tzdata.zi b/src/timezone/data/tzdata.zi index db6ba4af2b0..c56f67c02f6 100644 --- a/src/timezone/data/tzdata.zi +++ b/src/timezone/data/tzdata.zi @@ -1,4 +1,4 @@ -# version 2025a +# version 2025c # This zic input file is in the public domain. R d 1916 o - Jun 14 23s 1 S R d 1916 1919 - O Su>=1 23s 0 - @@ -2432,6 +2432,20 @@ Z America/Ciudad_Juarez -7:5:56 - LMT 1922 Ja 1 7u Z America/Costa_Rica -5:36:13 - LMT 1890 -5:36:13 - SJMT 1921 Ja 15 -6 CR C%sT +Z America/Coyhaique -4:48:16 - LMT 1890 +-4:42:45 - SMT 1910 Ja 10 +-5 - %z 1916 Jul +-4:42:45 - SMT 1918 S 10 +-4 - %z 1919 Jul +-4:42:45 - SMT 1927 S +-5 x %z 1932 S +-4 - %z 1942 Jun +-5 - %z 1942 Au +-4 - %z 1946 Au 28 24 +-5 1 %z 1947 Mar 31 24 +-5 - %z 1947 May 21 23 +-4 x %z 2025 Mar 20 +-3 - %z Z America/Cuiaba -3:44:20 - LMT 1914 -4 B %z 2003 S 24 -4 - %z 2004 O @@ -2937,9 +2951,7 @@ Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 7u -8 1 PDT 1951 S 30 2 -8 - PST 1952 Ap 27 2 -8 1 PDT 1952 S 28 2 --8 - PST 1954 --8 CA P%sT 1961 --8 - PST 1976 +-8 CA P%sT 1967 -8 u P%sT 1996 -8 m P%sT 2001 -8 u P%sT 2002 F 20 @@ -3420,7 +3432,7 @@ Z Asia/Tbilisi 2:59:11 - LMT 1880 Z Asia/Tehran 3:25:44 - LMT 1916 3:25:44 - TMT 1935 Jun 13 3:30 i %z 1977 O 20 24 -4 i %z 1979 +4 i %z 1978 N 10 24 3:30 i %z Z Asia/Thimphu 5:58:36 - LMT 1947 Au 15 5:30 - %z 1987 O diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 61c2f055fcf..c8eaa7b2daf 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -262,11 +262,13 @@ sub GenerateFiles HAVE_DECL_LLVMGETHOSTCPUNAME => 0, HAVE_DECL_LLVMGETHOSTCPUFEATURES => 0, HAVE_DECL_LLVMORCGETSYMBOLADDRESSIN => 0, + HAVE_DECL_MEMSET_S => 0, HAVE_DECL_POSIX_FADVISE => 0, HAVE_DECL_PREADV => 0, HAVE_DECL_PWRITEV => 0, HAVE_DECL_RTLD_GLOBAL => 0, HAVE_DECL_RTLD_NOW => 0, + HAVE_DECL_STRCHRNUL => 0, HAVE_DECL_STRLCAT => 0, HAVE_DECL_STRLCPY => 0, HAVE_DECL_STRNLEN => 1, @@ -340,7 +342,6 @@ sub GenerateFiles HAVE_MBARRIER_H => undef, HAVE_MBSTOWCS_L => 1, HAVE_MEMORY_H => 1, - HAVE_MEMSET_S => undef, HAVE_MINIDUMP_TYPE => 1, HAVE_MKDTEMP => undef, HAVE_NETINET_TCP_H => undef, @@ -386,7 +387,6 @@ sub GenerateFiles HAVE_SRANDOM => undef, HAVE_STDINT_H => 1, HAVE_STDLIB_H => 1, - HAVE_STRCHRNUL => undef, HAVE_STRERROR_R => undef, HAVE_STRINGS_H => undef, HAVE_STRING_H => 1, diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 7675d2eadf2..62e21962a29 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -679,7 +679,7 @@ sub upgradecheck # now we can chdir into the source dir chdir "$topdir/src/bin/pg_upgrade"; print "\nDumping old cluster\n\n"; - @args = ('pg_dumpall', '-f', "$tmp_root/dump1.sql"); + @args = ('pg_dumpall', '-f', "$tmp_root/dump1.sql", '--restrict-key', 'test'); system(@args) == 0 or exit 1; print "\nStopping old cluster\n\n"; system("pg_ctl stop") == 0 or exit 1; @@ -693,7 +693,7 @@ sub upgradecheck @args = ('pg_ctl', '-l', "$logdir/postmaster2.log", 'start'); system(@args) == 0 or exit 1; print "\nDumping new cluster\n\n"; - @args = ('pg_dumpall', '-f', "$tmp_root/dump2.sql"); + @args = ('pg_dumpall', '-f', "$tmp_root/dump2.sql", '--restrict-key', 'test'); system(@args) == 0 or exit 1; print "\nStopping new cluster\n\n"; system("pg_ctl stop") == 0 or exit 1; diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 966c135e7f7..64e3276c514 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -686,6 +686,7 @@ ExtensibleNodeMethods ExtensionControlFile ExtensionInfo ExtensionMemberId +ExtensionSiblingCache ExtensionVersionInfo FDWCollateState FD_SET @@ -1156,8 +1157,8 @@ InternalDefaultACL InternalGrant Interval IntoClause -InvalidationChunk -InvalidationListHeader +InvalMessageArray +InvalidationMsgsGroup IpcMemoryId IpcMemoryKey IpcMemoryState diff --git a/src/tools/valgrind.supp b/src/tools/valgrind.supp index e3a179d210b..6caf8593211 100644 --- a/src/tools/valgrind.supp +++ b/src/tools/valgrind.supp @@ -19,6 +19,7 @@ Memcheck:Param socketcall.send(msg) + ... fun:*send* fun:pgstat_send } @@ -28,6 +29,7 @@ Memcheck:Param socketcall.sendto(msg) + ... fun:*send* fun:pgstat_send }